Skip to content

Commit 741ab7e

Browse files
Bryan C. Millsgopherbot
Bryan C. Mills
authored andcommitted
cmd/go: avoid passing testing.T to isCaseSensitive and goVersion
The previous implementation of isCaseSensitive called t.Fatalf in the wrong place, causing tests after the first to proceed past an error determining case-sensitivity. That could lead to confusing errors. (Moreover, I would like to try to disentangle the script engine from testing.T so that I can also use it to generate serving contents in the replacement for vcs-test.golang.org.) The implementation of goVersion called ts.fatalf, which is probably fine but prevents the script environment from being computed outside of a test, as we might want to do for debugging and other scripting. For #27494. Change-Id: Ibfee0704523fdcd6174b544ff84267216435025b Reviewed-on: https://go-review.googlesource.com/c/go/+/419874 Run-TryBot: Bryan Mills <bcmills@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Russ Cox <rsc@golang.org> Auto-Submit: Bryan Mills <bcmills@google.com>
1 parent e64c871 commit 741ab7e

File tree

1 file changed

+21
-11
lines changed

1 file changed

+21
-11
lines changed

src/cmd/go/script_test.go

+21-11
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ func TestScript(t *testing.T) {
101101

102102
// A testScript holds execution state for a single test script.
103103
type testScript struct {
104-
t *testing.T
104+
t testing.TB
105105
ctx context.Context
106106
cancel context.CancelFunc
107107
gracePeriod time.Duration
@@ -161,6 +161,10 @@ func (ts *testScript) setup() {
161161
ts.check(os.MkdirAll(filepath.Join(ts.workdir, "tmp"), 0777))
162162
ts.check(os.MkdirAll(filepath.Join(ts.workdir, "gopath/src"), 0777))
163163
ts.cd = filepath.Join(ts.workdir, "gopath/src")
164+
version, err := goVersion()
165+
if err != nil {
166+
ts.t.Fatal(err)
167+
}
164168
ts.env = []string{
165169
"WORK=" + ts.workdir, // must be first for ts.abbrev
166170
pathEnvName() + "=" + testBin + string(filepath.ListSeparator) + os.Getenv(pathEnvName()),
@@ -188,7 +192,7 @@ func (ts *testScript) setup() {
188192
"PWD=" + ts.cd,
189193
tempEnvName() + "=" + filepath.Join(ts.workdir, "tmp"),
190194
"devnull=" + os.DevNull,
191-
"goversion=" + goVersion(ts),
195+
"goversion=" + version,
192196
"CMDGO_TEST_RUN_MAIN=true",
193197
}
194198
if testenv.Builder() != "" || os.Getenv("GIT_TRACE_CURL") == "1" {
@@ -231,13 +235,13 @@ func (ts *testScript) setup() {
231235
}
232236

233237
// goVersion returns the current Go version.
234-
func goVersion(ts *testScript) string {
238+
func goVersion() (string, error) {
235239
tags := build.Default.ReleaseTags
236240
version := tags[len(tags)-1]
237241
if !regexp.MustCompile(`^go([1-9][0-9]*)\.(0|[1-9][0-9]*)$`).MatchString(version) {
238-
ts.fatalf("invalid go version %q", version)
242+
return "", fmt.Errorf("invalid go version %q", version)
239243
}
240-
return version[2:]
244+
return version[2:], nil
241245
}
242246

243247
var execCache par.Cache
@@ -393,7 +397,10 @@ Script:
393397
case "symlink":
394398
ok = testenv.HasSymlink()
395399
case "case-sensitive":
396-
ok = isCaseSensitive(ts.t)
400+
ok, err = isCaseSensitive()
401+
if err != nil {
402+
ts.fatalf("%v", err)
403+
}
397404
case "trimpath":
398405
if info, _ := debug.ReadBuildInfo(); info == nil {
399406
ts.fatalf("missing build info")
@@ -476,19 +483,22 @@ Script:
476483
var (
477484
onceCaseSensitive sync.Once
478485
caseSensitive bool
486+
caseSensitiveErr error
479487
)
480488

481-
func isCaseSensitive(t *testing.T) bool {
489+
func isCaseSensitive() (bool, error) {
482490
onceCaseSensitive.Do(func() {
483491
tmpdir, err := os.MkdirTemp("", "case-sensitive")
484492
if err != nil {
485-
t.Fatal("failed to create directory to determine case-sensitivity:", err)
493+
caseSensitiveErr = fmt.Errorf("failed to create directory to determine case-sensitivity: %w", err)
494+
return
486495
}
487496
defer os.RemoveAll(tmpdir)
488497

489498
fcap := filepath.Join(tmpdir, "FILE")
490499
if err := os.WriteFile(fcap, []byte{}, 0644); err != nil {
491-
t.Fatal("error writing file to determine case-sensitivity:", err)
500+
caseSensitiveErr = fmt.Errorf("error writing file to determine case-sensitivity: %w", err)
501+
return
492502
}
493503

494504
flow := filepath.Join(tmpdir, "file")
@@ -501,11 +511,11 @@ func isCaseSensitive(t *testing.T) bool {
501511
caseSensitive = true
502512
return
503513
default:
504-
t.Fatal("unexpected error reading file when determining case-sensitivity:", err)
514+
caseSensitiveErr = fmt.Errorf("unexpected error reading file when determining case-sensitivity: %w", err)
505515
}
506516
})
507517

508-
return caseSensitive
518+
return caseSensitive, caseSensitiveErr
509519
}
510520

511521
// scriptCmds are the script command implementations.

0 commit comments

Comments
 (0)