github.com/covergates/covergates@v0.2.2-0.20201009050117-42ef8a19fb95/service/lcov/report_test.go (about) 1 package lcov 2 3 import ( 4 "context" 5 "math" 6 "os" 7 "path/filepath" 8 "testing" 9 10 "github.com/covergates/covergates/core" 11 "github.com/google/go-cmp/cmp" 12 ) 13 14 type expectation struct { 15 Name string 16 Lines int 17 Coverage float64 18 } 19 20 func (e *expectation) RoundCoverage() float64 { 21 return math.Floor(e.Coverage*100) / 100 22 } 23 24 func testExpectation(t *testing.T, expect, result *expectation) { 25 expect.Coverage = expect.RoundCoverage() 26 result.Coverage = result.RoundCoverage() 27 if diff := cmp.Diff(expect, result); diff != "" { 28 t.Fatal(diff) 29 } 30 } 31 32 func toExpectation(file *core.File) *expectation { 33 return &expectation{ 34 Name: file.Name, 35 Lines: len(file.StatementHits), 36 Coverage: file.StatementCoverage, 37 } 38 } 39 40 func mapping(files []*core.File) map[string]*core.File { 41 m := make(map[string]*core.File) 42 for _, file := range files { 43 m[file.Name] = file 44 } 45 return m 46 } 47 48 func TestJestReport(t *testing.T) { 49 s := &CoverageService{} 50 file, err := os.Open(filepath.Join("testdata", "lcov.info")) 51 if err != nil { 52 t.Fatal(err) 53 } 54 report, err := s.Report(context.Background(), file) 55 if err != nil { 56 t.Fatal(err) 57 } 58 59 expects := []*expectation{ 60 { 61 Name: "/home/blueworrybear/projects/covergates/web/src/server.ts", 62 Coverage: 25.0 / 47.0, 63 Lines: 47, 64 }, 65 { 66 Name: "/home/blueworrybear/projects/covergates/web/src/components/RepoListItem.vue", 67 Coverage: 38.0 / 39.0, 68 Lines: 39, 69 }, 70 { 71 Name: "/home/blueworrybear/projects/covergates/web/src/store/modules/repository/mutations.ts", 72 Coverage: 0, 73 Lines: 10, 74 }, 75 } 76 m := mapping(report.Files) 77 for _, expect := range expects { 78 result, ok := m[expect.Name] 79 if !ok { 80 result = &core.File{} 81 } 82 testExpectation(t, expect, toExpectation(result)) 83 } 84 } 85 86 func TestCppReport(t *testing.T) { 87 s := &CoverageService{} 88 file, err := os.Open(filepath.Join("testdata", "main_coverage.info")) 89 if err != nil { 90 t.Fatal(err) 91 } 92 report, err := s.Report(context.Background(), file) 93 if err != nil { 94 t.Fatal(err) 95 } 96 expects := []*expectation{ 97 { 98 Name: "/home/blueworrybear/projects/test/googletest/mytest/main.cpp", 99 Coverage: 1, 100 Lines: 6, 101 }, 102 } 103 m := mapping(report.Files) 104 for _, expect := range expects { 105 result, ok := m[expect.Name] 106 if !ok { 107 result = &core.File{} 108 } 109 testExpectation(t, expect, toExpectation(result)) 110 } 111 } 112 113 func TestFind(t *testing.T) { 114 s := &CoverageService{} 115 p, err := s.Find(context.Background(), "testdata") 116 if err != nil { 117 t.Fatal(err) 118 } 119 if diff := cmp.Diff(p, "testdata/lcov.info"); diff != "" { 120 t.Fatal(diff) 121 } 122 p, err = s.Find(context.Background(), "testdata/main_coverage.info") 123 if err != nil { 124 t.Fatal(err) 125 } 126 if diff := cmp.Diff(p, "testdata/main_coverage.info"); diff != "" { 127 t.Fatal(diff) 128 } 129 }