// 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 findcall_test import ( "testing" "golang.org/x/tools/go/analysis/analysistest" "golang.org/x/tools/go/analysis/passes/findcall" ) func init() { findcall.Analyzer.Flags.Set("name", "println") } // TestFromStringLiterals demonstrates how to test an analysis using // a table of string literals for each test case. // // Such tests are typically quite compact. func TestFromStringLiterals(t *testing.T) { for _, test := range [...]struct { desc string pkgpath string files map[string]string }{ { desc: "SimpleTest", pkgpath: "main", files: map[string]string{"main/main.go": `package main // want package:"found" func main() { println("hello") // want "call of println" print("goodbye") // not a call of println } func println(s string) {} // want println:"found"`, }, }, } { t.Run(test.desc, func(t *testing.T) { dir, cleanup, err := analysistest.WriteFiles(test.files) if err != nil { t.Fatal(err) } defer cleanup() analysistest.Run(t, dir, findcall.Analyzer, test.pkgpath) }) } } // TestFromFileSystem demonstrates how to test an analysis using input // files stored in the file system. // // These tests have the advantages that test data can be edited // directly, and that files named in error messages can be opened. // However, they tend to spread a small number of lines of text across a // rather deep directory hierarchy, and obscure similarities among // related tests, especially when tests involve multiple packages, or // multiple variants of a single scenario. func TestFromFileSystem(t *testing.T) { testdata := analysistest.TestData() analysistest.RunWithSuggestedFixes(t, testdata, findcall.Analyzer, "a") // loads testdata/src/a/a.go. }