diff --git a/src/cmd/go/go_test.go b/src/cmd/go/go_test.go index 9d9d898ae3..56c8a74748 100644 --- a/src/cmd/go/go_test.go +++ b/src/cmd/go/go_test.go @@ -388,24 +388,6 @@ func (tg *testgoData) pwd() string { return wd } -// cd changes the current directory to the named directory. Note that -// using this means that the test must not be run in parallel with any -// other tests. -func (tg *testgoData) cd(dir string) { - tg.t.Helper() - if tg.inParallel { - tg.t.Fatal("internal testsuite error: changing directory when running in parallel") - } - if tg.wd == "" { - tg.wd = tg.pwd() - } - abs, err := filepath.Abs(dir) - tg.must(os.Chdir(dir)) - if err == nil { - tg.setenv("PWD", abs) - } -} - // sleep sleeps for one tick, where a tick is a conservative estimate // of how long it takes for a file modification to get a different // mtime. @@ -2872,40 +2854,6 @@ func TestLinkerTmpDirIsDeleted(t *testing.T) { } } -func testCDAndGOPATHAreDifferent(tg *testgoData, cd, gopath string) { - skipIfGccgo(tg.t, "gccgo does not support -ldflags -X") - tg.setenv("GOPATH", gopath) - - tg.tempDir("dir") - exe := tg.path("dir/a.exe") - - tg.cd(cd) - - tg.run("build", "-o", exe, "-ldflags", "-X=my.pkg.Text=linkXworked") - out, err := exec.Command(exe).CombinedOutput() - if err != nil { - tg.t.Fatal(err) - } - if string(out) != "linkXworked\n" { - tg.t.Errorf(`incorrect output with GOPATH=%q and CD=%q: expected "linkXworked\n", but have %q`, gopath, cd, string(out)) - } -} - -func TestCDAndGOPATHAreDifferent(t *testing.T) { - tg := testgo(t) - defer tg.cleanup() - - gopath := filepath.Join(tg.pwd(), "testdata") - cd := filepath.Join(gopath, "src/my.pkg/main") - - testCDAndGOPATHAreDifferent(tg, cd, gopath) - if runtime.GOOS == "windows" { - testCDAndGOPATHAreDifferent(tg, cd, strings.ReplaceAll(gopath, `\`, `/`)) - testCDAndGOPATHAreDifferent(tg, cd, strings.ToUpper(gopath)) - testCDAndGOPATHAreDifferent(tg, cd, strings.ToLower(gopath)) - } -} - // Issue 25093. func TestCoverpkgTestOnly(t *testing.T) { skipIfGccgo(t, "gccgo has no cover tool") diff --git a/src/cmd/go/testdata/script/build_cd_gopath_different.txt b/src/cmd/go/testdata/script/build_cd_gopath_different.txt new file mode 100644 index 0000000000..698b3d70f4 --- /dev/null +++ b/src/cmd/go/testdata/script/build_cd_gopath_different.txt @@ -0,0 +1,72 @@ +[gccgo] skip 'gccgo does not support -ldflags -X' +go build run_go.go + +# Apply identity function to GOPATH +exec ./run_go$GOEXE $GOPATH/src/my.pkg/main $GOPATH IDENTITY build -o $WORK/tmp/a.exe -ldflags -X=my.pkg.Text=linkXworked +exec $WORK/tmp/a.exe +stderr 'linkXworked' +rm $WORK/tmp/a.exe + +[!windows] stop 'rest of the tests only apply to Windows' + +# Replace '\' with '/' in GOPATH +exec ./run_go$GOEXE $GOPATH/src/my.pkg/main $GOPATH REPLACE_SLASH build -o $WORK/tmp/a.exe -ldflags -X=my.pkg.Text=linkXworked +exec $WORK/tmp/a.exe +stderr 'linkXworked' +rm $WORK/tmp/a.exe + +# Apply identity function to GOPATH +exec ./run_go$GOEXE $GOPATH/src/my.pkg/main $GOPATH UPPER build -o $WORK/tmp/a.exe -ldflags -X=my.pkg.Text=linkXworked +exec $WORK/tmp/a.exe +stderr 'linkXworked' +rm $WORK/tmp/a.exe + +# Apply identity function to GOPATH +exec ./run_go$GOEXE $GOPATH/src/my.pkg/main $GOPATH LOWER build -o $WORK/tmp/a.exe -ldflags -X=my.pkg.Text=linkXworked +exec $WORK/tmp/a.exe +stderr 'linkXworked' +rm $WORK/tmp/a.exe + +-- run_go.go -- +package main + +import ( + "fmt" + "os" + "os/exec" + "strings" +) + +func main() { + dir := os.Args[1] + gopath := os.Args[2] + switch os.Args[3] { + case "IDENTITY": + case "REPLACE_SLASH": gopath = strings.ReplaceAll(gopath, `\`, `/`) + case "UPPER": gopath = strings.ToUpper(gopath) + case "LOWER": gopath = strings.ToLower(gopath) + default: fmt.Fprintln(os.Stderr, "bad op"); os.Exit(1) + } + cmd := exec.Command("go", os.Args[4:]...) + cmd.Dir = dir + cmd.Env = append(os.Environ(), "GOPATH="+gopath) + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr + if err := cmd.Run(); err != nil { + fmt.Fprintln(os.Stderr, err) + os.Exit(1) + } +} + +-- my.pkg/main/main.go -- +package main + +import "my.pkg" + +func main() { + println(pkg.Text) +} +-- my.pkg/pkg.go -- +package pkg + +var Text = "unset"