code-intelligence.com/cifuzz@v0.40.0/internal/cmd/coverage/summary/lcov_test.go (about) 1 package summary 2 3 import ( 4 "strings" 5 "testing" 6 7 "github.com/stretchr/testify/assert" 8 ) 9 10 func TestParseLcov(t *testing.T) { 11 report := `SF:bar.cpp 12 FNH:2 13 FNF:21 14 BRH:1 15 BRF:23 16 LH:100 17 LF:200 18 end_of_record 19 SF:foo.cpp 20 FNH:1 21 FNF:1 22 BRH:9 23 BRF:10 24 LH:50 25 LF:50 26 end_of_record 27 ` 28 summary := ParseLcov(strings.NewReader(report)) 29 30 assert.Len(t, summary.Files, 2) 31 assert.Equal(t, 3, summary.Total.FunctionsHit) 32 assert.Equal(t, 22, summary.Total.FunctionsFound) 33 assert.Equal(t, 10, summary.Total.BranchesHit) 34 assert.Equal(t, 33, summary.Total.BranchesFound) 35 assert.Equal(t, 150, summary.Total.LinesHit) 36 assert.Equal(t, 250, summary.Total.LinesFound) 37 38 assert.Equal(t, 2, summary.Files[0].Coverage.FunctionsHit) 39 assert.Equal(t, 21, summary.Files[0].Coverage.FunctionsFound) 40 assert.Equal(t, 1, summary.Files[0].Coverage.BranchesHit) 41 assert.Equal(t, 23, summary.Files[0].Coverage.BranchesFound) 42 assert.Equal(t, 100, summary.Files[0].Coverage.LinesHit) 43 assert.Equal(t, 200, summary.Files[0].Coverage.LinesFound) 44 45 assert.Equal(t, 1, summary.Files[1].Coverage.FunctionsHit) 46 assert.Equal(t, 1, summary.Files[1].Coverage.FunctionsFound) 47 assert.Equal(t, 9, summary.Files[1].Coverage.BranchesHit) 48 assert.Equal(t, 10, summary.Files[1].Coverage.BranchesFound) 49 assert.Equal(t, 50, summary.Files[1].Coverage.LinesHit) 50 assert.Equal(t, 50, summary.Files[1].Coverage.LinesFound) 51 } 52 53 func TestParseLcov_MissingSectionEnd(t *testing.T) { 54 report := `SF:bar.cpp 55 FNH:2 56 FNF:21 57 SF:foo.cpp 58 FNH:1 59 FNF:1 60 ` 61 summary := ParseLcov(strings.NewReader(report)) 62 63 assert.Len(t, summary.Files, 2) 64 assert.Equal(t, 3, summary.Total.FunctionsHit) 65 assert.Equal(t, 22, summary.Total.FunctionsFound) 66 assert.Equal(t, 2, summary.Files[0].Coverage.FunctionsHit) 67 assert.Equal(t, 21, summary.Files[0].Coverage.FunctionsFound) 68 assert.Equal(t, 1, summary.Files[1].Coverage.FunctionsHit) 69 assert.Equal(t, 1, summary.Files[1].Coverage.FunctionsFound) 70 } 71 72 func TestParseLcov_IgnoredKey(t *testing.T) { 73 report := `TN:test 74 SF:bar.cpp 75 FN:1,hello 76 FNH:2 77 FNF:21 78 end_of_record 79 ` 80 81 summary := ParseLcov(strings.NewReader(report)) 82 assert.Equal(t, 2, summary.Files[0].Coverage.FunctionsHit) 83 assert.Equal(t, 21, summary.Files[0].Coverage.FunctionsFound) 84 } 85 86 func TestParseLcov_InvalidKey(t *testing.T) { 87 report := `SF:bar.cpp 88 123 89 FNH:2 90 FNF:21 91 FOO::: 92 end_of_record 93 ` 94 95 summary := ParseLcov(strings.NewReader(report)) 96 assert.Equal(t, 2, summary.Files[0].Coverage.FunctionsHit) 97 assert.Equal(t, 21, summary.Files[0].Coverage.FunctionsFound) 98 } 99 100 func TestParseLcov_InvalidValue(t *testing.T) { 101 report := `SF:foo.cpp 102 FNH:foo 103 end_of_record 104 ` 105 106 summary := ParseLcov(strings.NewReader(report)) 107 assert.Equal(t, 0, summary.Files[0].Coverage.FunctionsHit) 108 } 109 110 func TestParseLcov_DifferentFilePaths(t *testing.T) { 111 testCases := []struct { 112 report string 113 expectedFilename string 114 }{ 115 {report: "SF:foo.cpp", expectedFilename: "foo.cpp"}, 116 {report: "SF:/path/to/foo.cpp", expectedFilename: "/path/to/foo.cpp"}, 117 {report: "SF:C:\\path\\to\\foo.cpp", expectedFilename: "C:\\path\\to\\foo.cpp"}, 118 } 119 120 for _, testCase := range testCases { 121 summary := ParseLcov(strings.NewReader(testCase.report)) 122 assert.Equal(t, testCase.expectedFilename, summary.Files[0].Filename) 123 } 124 } 125 126 func TestParseLcov_Empty(t *testing.T) { 127 report := "" 128 summary := ParseLcov(strings.NewReader(report)) 129 assert.Len(t, summary.Files, 0) 130 assert.Empty(t, summary.Total.BranchesFound) 131 assert.Empty(t, summary.Total.LinesFound) 132 assert.Empty(t, summary.Total.FunctionsFound) 133 }