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  }