70 lines
1.5 KiB
Go
70 lines
1.5 KiB
Go
|
// Copyright 2016 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 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
|
||
|
unexported 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"},
|
||
|
{Pkg: "some/pkg/Name", Name: "Type2"},
|
||
|
}
|
||
|
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)
|
||
|
}
|
||
|
}
|