GoPLS Viewer

Home|gopls/go/types/typeutil/imports_test.go
1// Copyright 2014 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5package typeutil_test
6
7import (
8    "fmt"
9    "go/ast"
10    "go/parser"
11    "go/token"
12    "go/types"
13    "testing"
14
15    "golang.org/x/tools/go/types/typeutil"
16)
17
18type closure map[string]*types.Package
19
20func (c closureImport(path string) (*types.Packageerror) { return c[path], nil }
21
22func TestDependencies(t *testing.T) {
23    packages := make(map[string]*types.Package)
24    conf := types.Config{
25        Importerclosure(packages),
26    }
27    fset := token.NewFileSet()
28
29    // All edges go to the right.
30    //  /--D--B--A
31    // F    \_C_/
32    //  \__E_/
33    for icontent := range []string{
34        `package a`,
35        `package c; import (_ "a")`,
36        `package b; import (_ "a")`,
37        `package e; import (_ "c")`,
38        `package d; import (_ "b"; _ "c")`,
39        `package f; import (_ "d"; _ "e")`,
40    } {
41        ferr := parser.ParseFile(fsetfmt.Sprintf("%d.go"i), content0)
42        if err != nil {
43            t.Fatal(err)
44        }
45        pkgerr := conf.Check(f.Name.Namefset, []*ast.File{f}, nil)
46        if err != nil {
47            t.Fatal(err)
48        }
49        packages[pkg.Path()] = pkg
50    }
51
52    for _test := range []struct {
53        rootswant string
54    }{
55        {"a""a"},
56        {"b""ab"},
57        {"c""ac"},
58        {"d""abcd"},
59        {"e""ace"},
60        {"f""abcdef"},
61
62        {"be""abce"},
63        {"eb""aceb"},
64        {"de""abcde"},
65        {"ed""acebd"},
66        {"ef""acebdf"},
67    } {
68        var pkgs []*types.Package
69        for _r := range test.roots {
70            pkgs = append(pkgspackages[string(r)])
71        }
72        var got string
73        for _p := range typeutil.Dependencies(pkgs...) {
74            got += p.Path()
75        }
76        if got != test.want {
77            t.Errorf("Dependencies(%q) = %q, want %q"test.rootsgottest.want)
78        }
79    }
80}
81
MembersX
TestDependencies.packages
TestDependencies.RangeStmt_672.BlockStmt.err
closure.Import
TestDependencies.t
TestDependencies.fset
TestDependencies.RangeStmt_672.BlockStmt.f
TestDependencies.RangeStmt_672.BlockStmt.pkg
TestDependencies.RangeStmt_1142.BlockStmt.pkgs
closure
closure.Import.c
closure.Import.path
TestDependencies.RangeStmt_672.content
TestDependencies.RangeStmt_1142.BlockStmt.got
TestDependencies.RangeStmt_1142.BlockStmt.RangeStmt_1523.p
TestDependencies
TestDependencies.conf
TestDependencies.RangeStmt_672.i
TestDependencies.RangeStmt_1142.test
TestDependencies.RangeStmt_1142.BlockStmt.RangeStmt_1425.r
Members
X