1package testutil
2
3import (
4	"testing"
5
6	"golang.org/x/tools/go/analysis"
7	"golang.org/x/tools/go/analysis/analysistest"
8)
9
10type Test struct {
11	Dir            string
12	Version        string
13	SuggestedFixes bool
14}
15
16func Run(t *testing.T, analyzers map[string]*analysis.Analyzer, tests map[string][]Test) {
17	for _, a := range analyzers {
18		a := a
19		t.Run(a.Name, func(t *testing.T) {
20			t.Parallel()
21			tt, ok := tests[a.Name]
22			if !ok {
23				t.Fatalf("no tests for analyzer %s", a.Name)
24			}
25			for _, test := range tt {
26				if test.Version != "" {
27					if err := a.Flags.Lookup("go").Value.Set(test.Version); err != nil {
28						t.Fatal(err)
29					}
30				}
31				if test.SuggestedFixes {
32					analysistest.RunWithSuggestedFixes(t, analysistest.TestData(), a, test.Dir)
33				} else {
34					analysistest.Run(t, analysistest.TestData(), a, test.Dir)
35				}
36			}
37		})
38	}
39}
40