Commit 643c6b3c authored by Hiroshi Ioka's avatar Hiroshi Ioka Committed by Alex Brainman

path/filepath: make TestToNorm robust

The old code leaves garbages in a temporary directory because it
cannot remove the current working directory on windows.
The new code changes the directory before calling os.Remove.

Furthermore, the old code assumes that ioutil.TempDir (os.TempDir)
doesn't return a relative path nor an UNC path.
If it isn't the case, the new code calls t.Fatal earlier for preventing
ambiguous errors.

Finally, the old code reassigns the variable which is used by the defer
function. It could cause unexpected results, so avoid that.

Change-Id: I5fc3902059ecaf18dc1341ecc4979d1206034cd7
Reviewed-on: https://go-review.googlesource.com/31790
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: 's avatarAlex Brainman <alex.brainman@gmail.com>
parent 02c1d8a1
...@@ -352,38 +352,47 @@ func TestToNorm(t *testing.T) { ...@@ -352,38 +352,47 @@ func TestToNorm(t *testing.T) {
{`{{tmp}}\test`, `FOO\BAR`, `foo\bar`}, {`{{tmp}}\test`, `FOO\BAR`, `foo\bar`},
} }
cwd, err := os.Getwd() tmp, err := ioutil.TempDir("", "testToNorm")
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
defer func() { defer func() {
err := os.Chdir(cwd) err := os.RemoveAll(tmp)
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
}() }()
tmp, err := ioutil.TempDir("", "testToNorm") // ioutil.TempDir might return "non-canonical" name.
ctmp, err := filepath.EvalSymlinks(tmp)
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
defer os.RemoveAll(tmp)
// ioutil.TempDir might return "non-canonical" name. err = os.MkdirAll(strings.Replace(testPath, "{{tmp}}", ctmp, -1), 0777)
tmp, err = filepath.EvalSymlinks(tmp)
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
err = os.MkdirAll(strings.Replace(testPath, "{{tmp}}", tmp, -1), 0777) cwd, err := os.Getwd()
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
defer func() {
err := os.Chdir(cwd)
if err != nil {
t.Fatal(err)
}
}()
tmpVol := filepath.VolumeName(ctmp)
if len(tmpVol) != 2 {
t.Fatalf("unexpected temp volume name %q", tmpVol)
}
tmpVol := filepath.VolumeName(tmp) tmpNoVol := ctmp[len(tmpVol):]
tmpNoVol := tmp[len(tmpVol):]
replacer := strings.NewReplacer("{{tmp}}", tmp, "{{tmpvol}}", tmpVol, "{{tmpnovol}}", tmpNoVol) replacer := strings.NewReplacer("{{tmp}}", ctmp, "{{tmpvol}}", tmpVol, "{{tmpnovol}}", tmpNoVol)
for _, test := range testsDir { for _, test := range testsDir {
wd := replacer.Replace(test.wd) wd := replacer.Replace(test.wd)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment