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  }