aboutsummaryrefslogtreecommitdiff
path: root/go/packages/packages_test.go
diff options
context:
space:
mode:
authorMichael Matloob <matloob@golang.org>2019-12-05 14:37:23 -0500
committerMichael Matloob <matloob@golang.org>2019-12-11 18:27:46 +0000
commit0d087302095d5a67b68da7330cad27b122905472 (patch)
treebcf01109aef405880e049590f26377ef5e5615ff /go/packages/packages_test.go
parent912f50adde0ebdacca1c0cd288f88b18b645f731 (diff)
downloadgolang-x-tools-0d087302095d5a67b68da7330cad27b122905472.tar.gz
go/packages: add import stack to error messages when there's an import cycle
This amends the error message to add the import stack for import cycle error messages. The information in structured in the go list error, but there's no good place to put the information in the go/packages error. One alternative is to add the import stack field to go/packages's error type, but we can always do that later if necessary. Change-Id: I5ea25e4cafd23d69d5589dd2430f39ece70173f7 Reviewed-on: https://go-review.googlesource.com/c/tools/+/210079 Run-TryBot: Michael Matloob <matloob@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Rebecca Stambler <rstambler@golang.org>
Diffstat (limited to 'go/packages/packages_test.go')
-rw-r--r--go/packages/packages_test.go30
1 files changed, 30 insertions, 0 deletions
diff --git a/go/packages/packages_test.go b/go/packages/packages_test.go
index 43f20c85c..5d286e900 100644
--- a/go/packages/packages_test.go
+++ b/go/packages/packages_test.go
@@ -2556,6 +2556,36 @@ func TestLoadModeStrings(t *testing.T) {
}
}
+func TestCycleImportStack(t *testing.T) {
+ packagestest.TestAll(t, testCycleImportStack)
+}
+func testCycleImportStack(t *testing.T, exporter packagestest.Exporter) {
+ exported := packagestest.Export(t, exporter, []packagestest.Module{{
+ Name: "golang.org/fake",
+ Files: map[string]interface{}{
+ "a/a.go": `package a; import _ "golang.org/fake/b"`,
+ "b/b.go": `package b; import _ "golang.org/fake/a"`,
+ }}})
+ defer exported.Cleanup()
+
+ exported.Config.Mode = packages.NeedName | packages.NeedImports
+ pkgs, err := packages.Load(exported.Config, "golang.org/fake/a")
+ if err != nil {
+ t.Fatal(err)
+ }
+ if len(pkgs) != 1 {
+ t.Fatalf("Expected 1 package, got %v", pkgs)
+ }
+ pkg := pkgs[0]
+ if len(pkg.Errors) != 1 {
+ t.Fatalf("Expected one error in package, got %v", pkg.Errors)
+ }
+ expected := "import cycle not allowed: import stack: [golang.org/fake/a golang.org/fake/b golang.org/fake/a]"
+ if pkg.Errors[0].Msg != expected {
+ t.Fatalf("Expected error %q, got %q", expected, pkg.Errors[0].Msg)
+ }
+}
+
func errorMessages(errors []packages.Error) []string {
var msgs []string
for _, err := range errors {