OLD | NEW |
1 package os_test | 1 package os_test |
2 | 2 |
3 import ( | 3 import ( |
4 "io/ioutil" | 4 "io/ioutil" |
5 "os" | 5 "os" |
6 "path/filepath" | 6 "path/filepath" |
7 "syscall" | 7 "syscall" |
| 8 "testing" |
8 ) | 9 ) |
9 | 10 |
10 func init() { | 11 func init() { |
11 tmpdir, err := ioutil.TempDir("", "symtest") | 12 tmpdir, err := ioutil.TempDir("", "symtest") |
12 if err != nil { | 13 if err != nil { |
13 panic("failed to create temp directory: " + err.Error()) | 14 panic("failed to create temp directory: " + err.Error()) |
14 } | 15 } |
15 defer os.RemoveAll(tmpdir) | 16 defer os.RemoveAll(tmpdir) |
16 | 17 |
17 err = os.Symlink("target", filepath.Join(tmpdir, "symlink")) | 18 err = os.Symlink("target", filepath.Join(tmpdir, "symlink")) |
18 if err == nil { | 19 if err == nil { |
19 return | 20 return |
20 } | 21 } |
21 | 22 |
22 err = err.(*os.LinkError).Err | 23 err = err.(*os.LinkError).Err |
23 switch err { | 24 switch err { |
24 case syscall.EWINDOWS, syscall.ERROR_PRIVILEGE_NOT_HELD: | 25 case syscall.EWINDOWS, syscall.ERROR_PRIVILEGE_NOT_HELD: |
25 supportsSymlinks = false | 26 supportsSymlinks = false |
26 } | 27 } |
27 } | 28 } |
| 29 |
| 30 func TestSameWindowsFile(t *testing.T) { |
| 31 temp, err := ioutil.TempDir("", "TestSameWindowsFile") |
| 32 if err != nil { |
| 33 t.Fatal(err) |
| 34 } |
| 35 defer os.RemoveAll(temp) |
| 36 |
| 37 wd, err := os.Getwd() |
| 38 if err != nil { |
| 39 t.Fatal(err) |
| 40 } |
| 41 err = os.Chdir(temp) |
| 42 if err != nil { |
| 43 t.Fatal(err) |
| 44 } |
| 45 defer os.Chdir(wd) |
| 46 |
| 47 f, err := os.Create("a") |
| 48 if err != nil { |
| 49 t.Fatal(err) |
| 50 } |
| 51 f.Close() |
| 52 |
| 53 ia1, err := os.Stat("a") |
| 54 if err != nil { |
| 55 t.Fatal(err) |
| 56 } |
| 57 |
| 58 path, err := filepath.Abs("a") |
| 59 if err != nil { |
| 60 t.Fatal(err) |
| 61 } |
| 62 ia2, err := os.Stat(path) |
| 63 if err != nil { |
| 64 t.Fatal(err) |
| 65 } |
| 66 if !os.SameFile(ia1, ia2) { |
| 67 t.Errorf("files should be same") |
| 68 } |
| 69 |
| 70 p := filepath.VolumeName(path) + filepath.Base(path) |
| 71 if err != nil { |
| 72 t.Fatal(err) |
| 73 } |
| 74 ia3, err := os.Stat(p) |
| 75 if err != nil { |
| 76 t.Fatal(err) |
| 77 } |
| 78 if !os.SameFile(ia1, ia3) { |
| 79 t.Errorf("files should be same") |
| 80 } |
| 81 } |
OLD | NEW |