| // Copyright 2018 The Go Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style | |
| // license that can be found in the LICENSE file. | |
| package ctrlflow_test | |
| import ( | |
| "go/ast" | |
| "testing" | |
| "golang.org/x/tools/go/analysis/analysistest" | |
| "golang.org/x/tools/go/analysis/passes/ctrlflow" | |
| "golang.org/x/tools/internal/typeparams" | |
| ) | |
| func Test(t *testing.T) { | |
| testdata := analysistest.TestData() | |
| // load testdata/src/a/a.go | |
| tests := []string{"a"} | |
| if typeparams.Enabled { | |
| // and testdata/src/typeparams/typeparams.go when possible | |
| tests = append(tests, "typeparams") | |
| } | |
| results := analysistest.Run(t, testdata, ctrlflow.Analyzer, tests...) | |
| // Perform a minimal smoke test on | |
| // the result (CFG) computed by ctrlflow. | |
| for _, result := range results { | |
| cfgs := result.Result.(*ctrlflow.CFGs) | |
| for _, decl := range result.Pass.Files[0].Decls { | |
| if decl, ok := decl.(*ast.FuncDecl); ok && decl.Body != nil { | |
| if cfgs.FuncDecl(decl) == nil { | |
| t.Errorf("%s: no CFG for func %s", | |
| result.Pass.Fset.Position(decl.Pos()), decl.Name.Name) | |
| } | |
| } | |
| } | |
| } | |
| } |