-
Notifications
You must be signed in to change notification settings - Fork 947
/
Copy pathstat_test.go
96 lines (84 loc) · 2.3 KB
/
stat_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
// Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package os_test
import (
"io/fs"
"os"
"path/filepath"
"testing"
)
// testStatAndLstat verifies that all os.Stat, os.Lstat os.File.Stat and os.Readdir work.
func testStatAndLstat(t *testing.T, path string, isLink bool, statCheck, lstatCheck func(*testing.T, string, fs.FileInfo)) {
// TODO: revert to upstream test once fstat and readdir are implemented
// test os.Stat
sfi, err := os.Stat(path)
if err != nil {
t.Error(err)
return
}
statCheck(t, path, sfi)
// test os.Lstat
lsfi, err := os.Lstat(path)
if err != nil {
t.Error(err)
return
}
lstatCheck(t, path, lsfi)
if isLink {
if os.SameFile(sfi, lsfi) {
t.Errorf("stat and lstat of %q should not be the same", path)
}
} else {
if !os.SameFile(sfi, lsfi) {
t.Errorf("stat and lstat of %q should be the same", path)
}
}
}
// testIsDir verifies that fi refers to directory.
func testIsDir(t *testing.T, path string, fi fs.FileInfo) {
t.Helper()
if !fi.IsDir() {
t.Errorf("%q should be a directory", path)
}
if fi.Mode()&fs.ModeSymlink != 0 {
t.Errorf("%q should not be a symlink", path)
}
}
// testIsFile verifies that fi refers to file.
func testIsFile(t *testing.T, path string, fi fs.FileInfo) {
t.Helper()
if fi.IsDir() {
t.Errorf("%q should not be a directory", path)
}
if fi.Mode()&fs.ModeSymlink != 0 {
t.Errorf("%q should not be a symlink", path)
}
}
func testDirStats(t *testing.T, path string) {
testStatAndLstat(t, path, false, testIsDir, testIsDir)
}
func testFileStats(t *testing.T, path string) {
testStatAndLstat(t, path, false, testIsFile, testIsFile)
}
func TestDirAndSymlinkStats(t *testing.T) {
// TODO: revert to upstream test once symlinks and t.TempDir are implemented
tmpdir := os.TempDir()
dir := filepath.Join(tmpdir, "dir")
os.Remove(dir)
if err := os.Mkdir(dir, 0777); err != nil {
t.Fatal(err)
return
}
testDirStats(t, dir)
}
func TestFileAndSymlinkStats(t *testing.T) {
// TODO: revert to upstream test once symlinks and t.TempDir are implemented
tmpdir := os.TempDir()
file := filepath.Join(tmpdir, "file")
if err := os.WriteFile(file, []byte("abcdefg"), 0644); err != nil {
t.Fatal(err)
return
}
testFileStats(t, file)
}