.gitignore added
[dotfiles/.git] / .config / coc / extensions / coc-go-data / tools / pkg / mod / golang.org / x / tools@v0.1.0 / go / types / typeutil / imports_test.go
diff --git a/.config/coc/extensions/coc-go-data/tools/pkg/mod/golang.org/x/tools@v0.1.0/go/types/typeutil/imports_test.go b/.config/coc/extensions/coc-go-data/tools/pkg/mod/golang.org/x/tools@v0.1.0/go/types/typeutil/imports_test.go
new file mode 100644 (file)
index 0000000..c8ef6d6
--- /dev/null
@@ -0,0 +1,80 @@
+// Copyright 2014 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 typeutil_test
+
+import (
+       "fmt"
+       "go/ast"
+       "go/parser"
+       "go/token"
+       "go/types"
+       "testing"
+
+       "golang.org/x/tools/go/types/typeutil"
+)
+
+type closure map[string]*types.Package
+
+func (c closure) Import(path string) (*types.Package, error) { return c[path], nil }
+
+func TestDependencies(t *testing.T) {
+       packages := make(map[string]*types.Package)
+       conf := types.Config{
+               Importer: closure(packages),
+       }
+       fset := token.NewFileSet()
+
+       // All edges go to the right.
+       //  /--D--B--A
+       // F    \_C_/
+       //  \__E_/
+       for i, content := range []string{
+               `package a`,
+               `package c; import (_ "a")`,
+               `package b; import (_ "a")`,
+               `package e; import (_ "c")`,
+               `package d; import (_ "b"; _ "c")`,
+               `package f; import (_ "d"; _ "e")`,
+       } {
+               f, err := parser.ParseFile(fset, fmt.Sprintf("%d.go", i), content, 0)
+               if err != nil {
+                       t.Fatal(err)
+               }
+               pkg, err := conf.Check(f.Name.Name, fset, []*ast.File{f}, nil)
+               if err != nil {
+                       t.Fatal(err)
+               }
+               packages[pkg.Path()] = pkg
+       }
+
+       for _, test := range []struct {
+               roots, want string
+       }{
+               {"a", "a"},
+               {"b", "ab"},
+               {"c", "ac"},
+               {"d", "abcd"},
+               {"e", "ace"},
+               {"f", "abcdef"},
+
+               {"be", "abce"},
+               {"eb", "aceb"},
+               {"de", "abcde"},
+               {"ed", "acebd"},
+               {"ef", "acebdf"},
+       } {
+               var pkgs []*types.Package
+               for _, r := range test.roots {
+                       pkgs = append(pkgs, packages[string(r)])
+               }
+               var got string
+               for _, p := range typeutil.Dependencies(pkgs...) {
+                       got += p.Path()
+               }
+               if got != test.want {
+                       t.Errorf("Dependencies(%q) = %q, want %q", test.roots, got, test.want)
+               }
+       }
+}