xref: /aosp_15_r20/external/bazelbuild-rules_go/go/tools/builders/cover_test.go (revision 9bb1b549b6a84214c53be0924760be030e66b93a)
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