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.