oss.indeed.com/go/go-opine@v1.3.0/internal/coverage/coverage_test.go (about) 1 package coverage 2 3 import ( 4 "bufio" 5 "errors" 6 "io/ioutil" 7 "os" 8 "path/filepath" 9 "strings" 10 "testing" 11 12 "github.com/stretchr/testify/require" 13 14 "golang.org/x/tools/cover" 15 ) 16 17 func Test_Load(t *testing.T) { 18 inPath := filepath.Join("testdata", "cover.out") 19 result, err := Load(inPath) 20 require.NoError(t, err) 21 22 // Check that the generated file was removed and the non-generated 23 // file was not. 24 files := make([]string, len(result.profiles)) 25 for i, profile := range result.profiles { 26 files[i] = profile.FileName 27 } 28 require.Contains(t, files, "oss.indeed.com/go/go-opine/internal/coverage/testdata/not_generated.go") 29 require.NotContains(t, files, "oss.indeed.com/go/go-opine/internal/coverage/testdata/generated.go") 30 31 // Check that the modPaths is populated and correct. 32 expectedModPath, err := filepath.Abs("./testdata") 33 require.NoError(t, err) 34 require.Equal( 35 t, 36 map[string]string{"oss.indeed.com/go/go-opine/internal/coverage/testdata": expectedModPath}, 37 result.modPaths, 38 ) 39 } 40 41 func Test_CoverProfile(t *testing.T) { 42 inPath := filepath.Join("testdata", "cover.out") 43 profiles, err := cover.ParseProfiles(inPath) 44 require.NoError(t, err) 45 46 outDir, err := ioutil.TempDir("", "go-opine-coverage-test.") 47 require.NoError(t, err) 48 defer os.RemoveAll(outDir) 49 outPath := filepath.Join(outDir, "cover.out") 50 51 cov := &Coverage{profiles: profiles} 52 err = cov.CoverProfile(outPath) 53 require.NoError(t, err) 54 55 inBytes, err := os.ReadFile(inPath) 56 require.NoError(t, err) 57 outBytes, err := os.ReadFile(outPath) 58 require.NoError(t, err) 59 require.Equal(t, string(inBytes), string(outBytes)) 60 } 61 62 func Test_XML(t *testing.T) { 63 inPath := filepath.Join("testdata", "cover.out") 64 profiles, err := cover.ParseProfiles(inPath) 65 require.NoError(t, err) 66 67 outDir, err := ioutil.TempDir("", "go-opine-coverage-test.") 68 require.NoError(t, err) 69 defer os.RemoveAll(outDir) 70 outPath := filepath.Join(outDir, "lang-go-cobertura.xml") 71 72 testdata, err := filepath.Abs("./testdata") 73 require.NoError(t, err) 74 cov := &Coverage{ 75 profiles: profiles, 76 modPaths: map[string]string{"oss.indeed.com/go/go-opine/internal/coverage/testdata": testdata}, 77 } 78 err = cov.XML(outPath) 79 require.NoError(t, err) 80 outBytes, err := os.ReadFile(outPath) 81 require.NoError(t, err) 82 out := string(outBytes) 83 require.Contains(t, out, "\"testdata/not_generated.go\"") 84 require.Contains(t, out, "\"testdata/generated.go\"") // included because we did not use Load 85 } 86 87 func Test_Ratio_50percent(t *testing.T) { 88 inPath := filepath.Join("testdata", "cover.out") 89 profiles, err := cover.ParseProfiles(inPath) // 50% because generated.go is not excluded 90 require.NoError(t, err) 91 cov := &Coverage{profiles: profiles} 92 ratio := cov.Ratio() 93 require.Equal(t, 0.5, ratio) 94 } 95 96 func Test_Ratio_100percent(t *testing.T) { 97 inPath := filepath.Join("testdata", "cover.out") 98 cov, err := Load(inPath) // 100% because generated.go is excluded 99 require.NoError(t, err) 100 ratio := cov.Ratio() 101 require.Equal(t, 1.0, ratio) 102 } 103 func Test_isGeneratedReader_veryLongLine(t *testing.T) { 104 veryLongLine := "package foo\n\n" + 105 "// " + strings.Repeat("a", bufio.MaxScanTokenSize+1) + 106 "\n\n// Code generated ... DO NOT EDIT.\n" 107 res, err := isGeneratedReader(strings.NewReader(veryLongLine)) 108 require.NoError(t, err) 109 require.True(t, res) 110 } 111 112 func Test_isGeneratedReader_runeReaderErr(t *testing.T) { 113 _, err := isGeneratedReader(notEOFErrRuneReader{}) 114 require.Error(t, err) 115 } 116 117 type notEOFErrRuneReader struct{} 118 119 func (notEOFErrRuneReader) ReadRune() (rune, int, error) { 120 return 0, 0, errors.New("not EOF") 121 }