package os_test | |
import ( | |
"io/ioutil" | |
"os" | |
"path/filepath" | |
"syscall" | |
"testing" | |
) | |
func init() { | |
tmpdir, err := ioutil.TempDir("", "symtest") | |
if err != nil { | |
panic("failed to create temp directory: " + err.Error()) | |
} | |
defer os.RemoveAll(tmpdir) | |
err = os.Symlink("target", filepath.Join(tmpdir, "symlink")) | |
if err == nil { | |
return | |
} | |
err = err.(*os.LinkError).Err | |
switch err { | |
case syscall.EWINDOWS, syscall.ERROR_PRIVILEGE_NOT_HELD: | |
supportsSymlinks = false | |
} | |
} | |
func TestSameWindowsFile(t *testing.T) { | |
temp, err := ioutil.TempDir("", "TestSameWindowsFile") | |
if err != nil { | |
t.Fatal(err) | |
} | |
defer os.RemoveAll(temp) | |
wd, err := os.Getwd() | |
if err != nil { | |
t.Fatal(err) | |
} | |
err = os.Chdir(temp) | |
if err != nil { | |
t.Fatal(err) | |
} | |
defer os.Chdir(wd) | |
f, err := os.Create("a") | |
if err != nil { | |
t.Fatal(err) | |
} | |
f.Close() | |
ia1, err := os.Stat("a") | |
if err != nil { | |
t.Fatal(err) | |
} | |
path, err := filepath.Abs("a") | |
if err != nil { | |
t.Fatal(err) | |
} | |
ia2, err := os.Stat(path) | |
if err != nil { | |
t.Fatal(err) | |
} | |
if !os.SameFile(ia1, ia2) { | |
t.Errorf("files should be same") | |
} | |
p := filepath.VolumeName(path) + filepath.Base(path) | |
if err != nil { | |
t.Fatal(err) | |
} | |
ia3, err := os.Stat(p) | |
if err != nil { | |
t.Fatal(err) | |
} | |
if !os.SameFile(ia1, ia3) { | |
t.Errorf("files should be same") | |
} | |
} |