mirror of
https://github.com/golang/go
synced 2024-11-17 14:24:50 -07:00
cmd/go: convert testCDAndGOPATHAreDifferent to the script framework
This is a bit complex. There's a driver program to run go with modifications to the GOPATH used to test Windows. Also remove the cd method on testgoData, because this was the last function that used it. Part of converting all tests to script framework to improve test parallelism. Updates #36320 Updates #17751 Change-Id: I3e8e27f37fd3701bd36b6365b128dd73b69181c0 Reviewed-on: https://go-review.googlesource.com/c/go/+/214578 Reviewed-by: Jay Conrod <jayconrod@google.com>
This commit is contained in:
parent
e674972e8c
commit
6ef25c2ad3
@ -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")
|
||||
|
72
src/cmd/go/testdata/script/build_cd_gopath_different.txt
vendored
Normal file
72
src/cmd/go/testdata/script/build_cd_gopath_different.txt
vendored
Normal file
@ -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"
|
Loading…
Reference in New Issue
Block a user