From 952f7de3b403d2ffb45708ea5f69168bbdbfe1f0 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Andrei=20Tudor=20C=C4=83lin?= Date: Thu, 23 Apr 2020 04:04:33 +0300 Subject: [PATCH] testing: make TempDir work for subtests ioutil.TempDir doesn't like path separators in its pattern. Modify (*common).TempDir to replace path separators with underscores before using the test name as a pattern for ioutil.TempDir. Fixes #38465. Change-Id: I9e8ae48b99648b2bf9f561762e845165aff01972 Reviewed-on: https://go-review.googlesource.com/c/go/+/229399 Reviewed-by: Brad Fitzpatrick Run-TryBot: Brad Fitzpatrick TryBot-Result: Gobot Gobot --- src/testing/testing.go | 7 ++++++- src/testing/testing_test.go | 5 +++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/testing/testing.go b/src/testing/testing.go index d546f56478..44bccd384e 100644 --- a/src/testing/testing.go +++ b/src/testing/testing.go @@ -806,7 +806,12 @@ func (c *common) Cleanup(f func()) { func (c *common) TempDir() string { c.tempDirOnce.Do(func() { c.Helper() - c.tempDir, c.tempDirErr = ioutil.TempDir("", c.Name()) + + // ioutil.TempDir doesn't like path separators in its pattern, + // so mangle the name to accommodate subtests. + pattern := strings.ReplaceAll(c.Name(), "/", "_") + + c.tempDir, c.tempDirErr = ioutil.TempDir("", pattern) if c.tempDirErr == nil { c.Cleanup(func() { if err := os.RemoveAll(c.tempDir); err != nil { diff --git a/src/testing/testing_test.go b/src/testing/testing_test.go index afb35a96d4..07757a8482 100644 --- a/src/testing/testing_test.go +++ b/src/testing/testing_test.go @@ -19,6 +19,11 @@ func TestMain(m *testing.M) { } func TestTempDir(t *testing.T) { + testTempDir(t) + t.Run("InSubtest", testTempDir) +} + +func testTempDir(t *testing.T) { dirCh := make(chan string, 1) t.Cleanup(func() { // Verify directory has been removed. -- 2.50.0