From 41e925bbcce2f0ca624f74ae4c5574dc76cb4140 Mon Sep 17 00:00:00 2001 From: Tobias Klauser Date: Fri, 24 Apr 2020 12:17:01 +0200 Subject: [PATCH] testing: replace all GOOS-specific path separators in TempDir For GOOS=windows the path separator characters '\' and ':' also need be replaced. Updates #38465 Change-Id: If7c8cf93058c87d7df6cda140e82fd76578fe699 Reviewed-on: https://go-review.googlesource.com/c/go/+/229837 Run-TryBot: Tobias Klauser TryBot-Result: Gobot Gobot Reviewed-by: Ian Lance Taylor Reviewed-by: Brad Fitzpatrick --- src/testing/testing.go | 10 +++++++++- src/testing/testing_test.go | 5 +++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/testing/testing.go b/src/testing/testing.go index 44bccd384e..8dfb61bcc3 100644 --- a/src/testing/testing.go +++ b/src/testing/testing.go @@ -797,6 +797,11 @@ func (c *common) Cleanup(f func()) { } } +var ( + rOnce sync.Once + r *strings.Replacer +) + // TempDir returns a temporary directory for the test to use. // It is lazily created on first access, and calls t.Fatal if the directory // creation fails. @@ -809,7 +814,10 @@ func (c *common) TempDir() string { // ioutil.TempDir doesn't like path separators in its pattern, // so mangle the name to accommodate subtests. - pattern := strings.ReplaceAll(c.Name(), "/", "_") + rOnce.Do(func() { + r = strings.NewReplacer("/", "_", "\\", "_", ":", "_") + }) + pattern := r.Replace(c.Name()) c.tempDir, c.tempDirErr = ioutil.TempDir("", pattern) if c.tempDirErr == nil { diff --git a/src/testing/testing_test.go b/src/testing/testing_test.go index 07757a8482..1340dae5c4 100644 --- a/src/testing/testing_test.go +++ b/src/testing/testing_test.go @@ -21,6 +21,11 @@ func TestMain(m *testing.M) { func TestTempDir(t *testing.T) { testTempDir(t) t.Run("InSubtest", testTempDir) + t.Run("test/subtest", testTempDir) + t.Run("test\\subtest", testTempDir) + t.Run("test:subtest", testTempDir) + t.Run("test/..", testTempDir) + t.Run("../test", testTempDir) } func testTempDir(t *testing.T) { -- 2.50.0