blob: b87921601fc614dd248d0a36d574c5a153c12b27 [file] [log] [blame]
package importers
import (
"go/parser"
"go/token"
"reflect"
"testing"
)
func TestAnalyzer(t *testing.T) {
file := `package ast_test
import "Prefix/some/pkg/Name"
import "Prefix/some/pkg/Name2"
const c = Name.Constant
type T struct {
Name.Type
hidden Name.Type2
}
func f() {
Name2.Func().Func().Func()
}
`
fset := token.NewFileSet()
f, err := parser.ParseFile(fset, "ast_test.go", file, parser.AllErrors)
if err != nil {
t.Fatal(err)
}
refs, err := AnalyzeFile(f, "Prefix/")
if err != nil {
t.Fatal(err)
}
exps := []PkgRef{
{Pkg: "some/pkg/Name", Name: "Constant"},
{Pkg: "some/pkg/Name", Name: "Type"},
{Pkg: "some/pkg/Name2", Name: "Func"},
}
if len(refs.Refs) != len(exps) {
t.Fatalf("expected %d references; got %d", len(exps), len(refs.Refs))
}
for i, exp := range exps {
if got := refs.Refs[i]; exp != got {
t.Errorf("expected ref %v; got %v", exp, got)
}
}
if _, exists := refs.Names["Constant"]; !exists {
t.Errorf("expected \"Constant\" in the names set")
}
if len(refs.Embedders) != 1 {
t.Fatalf("expected 1 struct; got %d", len(refs.Embedders))
}
s := refs.Embedders[0]
exp := Struct{
Name: "T",
Pkg: "ast_test",
Refs: []PkgRef{{Pkg: "some/pkg/Name", Name: "Type"}},
}
if !reflect.DeepEqual(exp, s) {
t.Errorf("expected struct %v; got %v", exp, s)
}
}