8 "golang.org/x/tools/go/analysis/analysistest"
15 shouldBeUnused = false
18 func (exp expectation) String() string {
29 func check(t *testing.T, res *analysistest.Result) {
34 want := map[key]expectation{}
35 files := map[string]struct{}{}
38 for _, f := range res.Pass.Files {
39 filename := res.Pass.Fset.Position(f.Pos()).Filename
40 if strings.HasSuffix(filename, "_test.go") {
45 for _, f := range res.Pass.Files {
46 filename := res.Pass.Fset.Position(f.Pos()).Filename
47 if !strings.HasSuffix(filename, ".go") {
50 files[filename] = struct{}{}
51 for _, cgroup := range f.Comments {
53 for _, c := range cgroup.List {
54 text := strings.TrimPrefix(c.Text, "//")
56 continue // not a //-comment
59 fields := strings.Fields(text)
60 posn := res.Pass.Fset.Position(c.Pos())
61 for _, field := range fields {
63 case "used", "unused", "used_test", "unused_test":
68 for _, field := range fields {
72 want[key{posn.Filename, posn.Line}] = shouldBeUsed
76 want[key{posn.Filename, posn.Line}] = shouldBeUnused
80 want[key{posn.Filename, posn.Line}] = shouldBeUsed
84 want[key{posn.Filename, posn.Line}] = shouldBeUnused
92 checkObjs := func(objs []types.Object, state expectation) {
93 for _, obj := range objs {
94 posn := res.Pass.Fset.Position(obj.Pos())
95 if _, ok := files[posn.Filename]; !ok {
99 k := key{posn.Filename, posn.Line}
102 t.Errorf("unexpected %s object at %s", state, posn)
107 t.Errorf("object at %s should be %s but is %s", posn, exp, state)
111 ures := res.Result.(Result)
112 checkObjs(ures.Used, shouldBeUsed)
113 checkObjs(ures.Unused, shouldBeUnused)
115 for key, b := range want {
122 t.Errorf("did not see expected %s object %s:%d", exp, key.file, key.line)
126 func TestAll(t *testing.T) {
142 "exported_fields_main",
143 "exported_method_test",
157 "pointer-type-embedding",
172 results := analysistest.Run(t, analysistest.TestData(), Analyzer, dirs...)
173 for _, res := range results {