| // 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) | 
 | 				} | 
 | 			} | 
 | 		} | 
 | 	} | 
 | } |