1package main 2 3import ( 4 "io/ioutil" 5 "os" 6 "path/filepath" 7 "testing" 8) 9 10type test struct { 11 name string 12 in string 13 out string 14} 15 16var tests = []test{ 17 { 18 name: "no imports", 19 in: `package main 20`, 21 out: `package main; import "github.com/bazelbuild/rules_go/go/tools/coverdata" 22 23func init() { 24 coverdata.RegisterFile("srcName", 25 varName.Count[:], 26 varName.Pos[:], 27 varName.NumStmt[:]) 28} 29`, 30 }, 31 { 32 name: "other imports", 33 in: `package main 34 35import ( 36 "os" 37) 38`, 39 out: `package main; import "github.com/bazelbuild/rules_go/go/tools/coverdata" 40 41import ( 42 "os" 43) 44 45func init() { 46 coverdata.RegisterFile("srcName", 47 varName.Count[:], 48 varName.Pos[:], 49 varName.NumStmt[:]) 50} 51`, 52 }, 53 { 54 name: "existing import", 55 in: `package main 56 57import "github.com/bazelbuild/rules_go/go/tools/coverdata" 58`, 59 out: `package main 60 61import "github.com/bazelbuild/rules_go/go/tools/coverdata" 62 63func init() { 64 coverdata.RegisterFile("srcName", 65 varName.Count[:], 66 varName.Pos[:], 67 varName.NumStmt[:]) 68} 69`, 70 }, 71 { 72 name: "existing _ import", 73 in: `package main 74 75import _ "github.com/bazelbuild/rules_go/go/tools/coverdata" 76`, 77 out: `package main 78 79import coverdata "github.com/bazelbuild/rules_go/go/tools/coverdata" 80 81func init() { 82 coverdata.RegisterFile("srcName", 83 varName.Count[:], 84 varName.Pos[:], 85 varName.NumStmt[:]) 86} 87`, 88 }, 89 { 90 name: "existing renamed import", 91 in: `package main 92 93import cover0 "github.com/bazelbuild/rules_go/go/tools/coverdata" 94`, 95 out: `package main 96 97import cover0 "github.com/bazelbuild/rules_go/go/tools/coverdata" 98 99func init() { 100 cover0.RegisterFile("srcName", 101 varName.Count[:], 102 varName.Pos[:], 103 varName.NumStmt[:]) 104} 105`, 106 }, 107} 108 109func TestRegisterCoverage(t *testing.T) { 110 var filename = filepath.Join(t.TempDir(), "test_input.go") 111 for _, test := range tests { 112 if err := ioutil.WriteFile(filename, []byte(test.in), 0666); err != nil { 113 t.Errorf("writing input file: %v", err) 114 return 115 } 116 err := registerCoverage(filename, "varName", "srcName") 117 if err != nil { 118 t.Errorf("%q: %+v", test.name, err) 119 continue 120 } 121 coverSrc, err := os.ReadFile(filename) 122 if err != nil { 123 t.Errorf("%q: %+v", test.name, err) 124 continue 125 } 126 if got, want := string(coverSrc), test.out; got != want { 127 t.Errorf("%q: got %v, want %v", test.name, got, want) 128 } 129 } 130} 131