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