diff --git a/src/cmd/go/go_test.go b/src/cmd/go/go_test.go index 9da94360f9ffb9..57c0c6580c7838 100644 --- a/src/cmd/go/go_test.go +++ b/src/cmd/go/go_test.go @@ -1639,51 +1639,6 @@ func TestSymlinkWarning(t *testing.T) { tg.grepStderr("ignoring symlink", "list should have reported symlink") } -func TestShadowingLogic(t *testing.T) { - skipIfGccgo(t, "gccgo has no standard packages") - tg := testgo(t) - defer tg.cleanup() - pwd := tg.pwd() - sep := string(filepath.ListSeparator) - tg.setenv("GOPATH", filepath.Join(pwd, "testdata", "shadow", "root1")+sep+filepath.Join(pwd, "testdata", "shadow", "root2")) - - // The math in root1 is not "math" because the standard math is. - tg.run("list", "-f", "({{.ImportPath}}) ({{.ConflictDir}})", "./testdata/shadow/root1/src/math") - pwdForwardSlash := strings.ReplaceAll(pwd, string(os.PathSeparator), "/") - if !strings.HasPrefix(pwdForwardSlash, "/") { - pwdForwardSlash = "/" + pwdForwardSlash - } - // The output will have makeImportValid applies, but we only - // bother to deal with characters we might reasonably see. - for _, r := range " :" { - pwdForwardSlash = strings.ReplaceAll(pwdForwardSlash, string(r), "_") - } - want := "(_" + pwdForwardSlash + "/testdata/shadow/root1/src/math) (" + filepath.Join(runtime.GOROOT(), "src", "math") + ")" - if strings.TrimSpace(tg.getStdout()) != want { - t.Error("shadowed math is not shadowed; looking for", want) - } - - // The foo in root1 is "foo". - tg.run("list", "-f", "({{.ImportPath}}) ({{.ConflictDir}})", "./testdata/shadow/root1/src/foo") - if strings.TrimSpace(tg.getStdout()) != "(foo) ()" { - t.Error("unshadowed foo is shadowed") - } - - // The foo in root2 is not "foo" because the foo in root1 got there first. - tg.run("list", "-f", "({{.ImportPath}}) ({{.ConflictDir}})", "./testdata/shadow/root2/src/foo") - want = "(_" + pwdForwardSlash + "/testdata/shadow/root2/src/foo) (" + filepath.Join(pwd, "testdata", "shadow", "root1", "src", "foo") + ")" - if strings.TrimSpace(tg.getStdout()) != want { - t.Error("shadowed foo is not shadowed; looking for", want) - } - - // The error for go install should mention the conflicting directory. - tg.runFail("install", "./testdata/shadow/root2/src/foo") - want = "go install: no install location for " + filepath.Join(pwd, "testdata", "shadow", "root2", "src", "foo") + ": hidden by " + filepath.Join(pwd, "testdata", "shadow", "root1", "src", "foo") - if strings.TrimSpace(tg.getStderr()) != want { - t.Error("wrong shadowed install error; looking for", want) - } -} - func TestCgoDependsOnSyscall(t *testing.T) { if testing.Short() { t.Skip("skipping test that removes $GOROOT/pkg/*_race in short mode") diff --git a/src/cmd/go/testdata/script/list_shadow.txt b/src/cmd/go/testdata/script/list_shadow.txt new file mode 100644 index 00000000000000..7b24d9367aede1 --- /dev/null +++ b/src/cmd/go/testdata/script/list_shadow.txt @@ -0,0 +1,25 @@ +env GO111MODULE=off +env GOPATH=$WORK/gopath/src/shadow/root1${:}$WORK/gopath/src/shadow/root2 + +# The math in root1 is not "math" because the standard math is. +go list -f '({{.ImportPath}}) ({{.ConflictDir}})' ./shadow/root1/src/math +stdout '^\(.*(\\|/)src(\\|/)shadow(\\|/)root1(\\|/)src(\\|/)math\) \('$GOROOT'(\\|/)?src(\\|/)math\)$' + +# The foo in root1 is "foo". +go list -f '({{.ImportPath}}) ({{.ConflictDir}})' ./shadow/root1/src/foo +stdout '^\(foo\) \(\)$' + +# The foo in root2 is not "foo" because the foo in root1 got there first. +go list -f '({{.ImportPath}}) ({{.ConflictDir}})' ./shadow/root2/src/foo +stdout '^\(.*gopath(\\|/)src(\\|/)shadow(\\|/)root2(\\|/)src(\\|/)foo\) \('$WORK'(\\|/)?gopath(\\|/)src(\\|/)shadow(\\|/)root1(\\|/)src(\\|/)foo\)$' + +# The error for go install should mention the conflicting directory. +! go install -n ./shadow/root2/src/foo +stderr 'go install: no install location for '$WORK'(\\|/)?gopath(\\|/)src(\\|/)shadow(\\|/)root2(\\|/)src(\\|/)foo: hidden by '$WORK'(\\|/)?gopath(\\|/)src(\\|/)shadow(\\|/)root1(\\|/)src(\\|/)foo' + +-- shadow/root1/src/foo/foo.go -- +package foo +-- shadow/root1/src/math/math.go -- +package math +-- shadow/root2/src/foo/foo.go -- +package foo \ No newline at end of file diff --git a/src/cmd/go/testdata/shadow/root1/src/foo/foo.go b/src/cmd/go/testdata/shadow/root1/src/foo/foo.go deleted file mode 100644 index f52652b1ba78cf..00000000000000 --- a/src/cmd/go/testdata/shadow/root1/src/foo/foo.go +++ /dev/null @@ -1 +0,0 @@ -package foo diff --git a/src/cmd/go/testdata/shadow/root1/src/math/math.go b/src/cmd/go/testdata/shadow/root1/src/math/math.go deleted file mode 100644 index c91c24e967cccd..00000000000000 --- a/src/cmd/go/testdata/shadow/root1/src/math/math.go +++ /dev/null @@ -1 +0,0 @@ -package math diff --git a/src/cmd/go/testdata/shadow/root2/src/foo/foo.go b/src/cmd/go/testdata/shadow/root2/src/foo/foo.go deleted file mode 100644 index f52652b1ba78cf..00000000000000 --- a/src/cmd/go/testdata/shadow/root2/src/foo/foo.go +++ /dev/null @@ -1 +0,0 @@ -package foo