aboutsummaryrefslogtreecommitdiff
path: root/src/os/os_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/os/os_test.go')
-rw-r--r--src/os/os_test.go135
1 files changed, 117 insertions, 18 deletions
diff --git a/src/os/os_test.go b/src/os/os_test.go
index 2bb57d866f..378ddf58dd 100644
--- a/src/os/os_test.go
+++ b/src/os/os_test.go
@@ -23,6 +23,7 @@ import (
"sync"
"syscall"
"testing"
+ "testing/fstest"
"time"
)
@@ -309,20 +310,21 @@ func testReaddirnames(dir string, contents []string, t *testing.T) {
defer file.Close()
s, err2 := file.Readdirnames(-1)
if err2 != nil {
- t.Fatalf("readdirnames %q failed: %v", dir, err2)
+ t.Fatalf("Readdirnames %q failed: %v", dir, err2)
}
for _, m := range contents {
found := false
for _, n := range s {
if n == "." || n == ".." {
- t.Errorf("got %s in directory", n)
+ t.Errorf("got %q in directory", n)
}
- if equal(m, n) {
- if found {
- t.Error("present twice:", m)
- }
- found = true
+ if !equal(m, n) {
+ continue
}
+ if found {
+ t.Error("present twice:", m)
+ }
+ found = true
}
if !found {
t.Error("could not find", m)
@@ -338,16 +340,68 @@ func testReaddir(dir string, contents []string, t *testing.T) {
defer file.Close()
s, err2 := file.Readdir(-1)
if err2 != nil {
- t.Fatalf("readdir %q failed: %v", dir, err2)
+ t.Fatalf("Readdir %q failed: %v", dir, err2)
}
for _, m := range contents {
found := false
for _, n := range s {
- if equal(m, n.Name()) {
- if found {
- t.Error("present twice:", m)
- }
- found = true
+ if n.Name() == "." || n.Name() == ".." {
+ t.Errorf("got %q in directory", n.Name())
+ }
+ if !equal(m, n.Name()) {
+ continue
+ }
+ if found {
+ t.Error("present twice:", m)
+ }
+ found = true
+ }
+ if !found {
+ t.Error("could not find", m)
+ }
+ }
+}
+
+func testReadDir(dir string, contents []string, t *testing.T) {
+ file, err := Open(dir)
+ if err != nil {
+ t.Fatalf("open %q failed: %v", dir, err)
+ }
+ defer file.Close()
+ s, err2 := file.ReadDir(-1)
+ if err2 != nil {
+ t.Fatalf("ReadDir %q failed: %v", dir, err2)
+ }
+ for _, m := range contents {
+ found := false
+ for _, n := range s {
+ if n.Name() == "." || n.Name() == ".." {
+ t.Errorf("got %q in directory", n)
+ }
+ if !equal(m, n.Name()) {
+ continue
+ }
+ if found {
+ t.Error("present twice:", m)
+ }
+ found = true
+ lstat, err := Lstat(dir + "/" + m)
+ if err != nil {
+ t.Fatal(err)
+ }
+ if n.IsDir() != lstat.IsDir() {
+ t.Errorf("%s: IsDir=%v, want %v", m, n.IsDir(), lstat.IsDir())
+ }
+ if n.Type() != lstat.Mode().Type() {
+ t.Errorf("%s: IsDir=%v, want %v", m, n.Type(), lstat.Mode().Type())
+ }
+ info, err := n.Info()
+ if err != nil {
+ t.Errorf("%s: Info: %v", m, err)
+ continue
+ }
+ if !SameFile(info, lstat) {
+ t.Errorf("%s: Info: SameFile(info, lstat) = false", m)
}
}
if !found {
@@ -366,6 +420,11 @@ func TestReaddir(t *testing.T) {
testReaddir(sysdir.name, sysdir.files, t)
}
+func TestReadDir(t *testing.T) {
+ testReadDir(".", dot, t)
+ testReadDir(sysdir.name, sysdir.files, t)
+}
+
func benchmarkReaddirname(path string, b *testing.B) {
var nentries int
for i := 0; i < b.N; i++ {
@@ -400,6 +459,23 @@ func benchmarkReaddir(path string, b *testing.B) {
b.Logf("benchmarkReaddir %q: %d entries", path, nentries)
}
+func benchmarkReadDir(path string, b *testing.B) {
+ var nentries int
+ for i := 0; i < b.N; i++ {
+ f, err := Open(path)
+ if err != nil {
+ b.Fatalf("open %q failed: %v", path, err)
+ }
+ fs, err := f.ReadDir(-1)
+ f.Close()
+ if err != nil {
+ b.Fatalf("readdir %q failed: %v", path, err)
+ }
+ nentries = len(fs)
+ }
+ b.Logf("benchmarkReadDir %q: %d entries", path, nentries)
+}
+
func BenchmarkReaddirname(b *testing.B) {
benchmarkReaddirname(".", b)
}
@@ -408,6 +484,10 @@ func BenchmarkReaddir(b *testing.B) {
benchmarkReaddir(".", b)
}
+func BenchmarkReadDir(b *testing.B) {
+ benchmarkReadDir(".", b)
+}
+
func benchmarkStat(b *testing.B, path string) {
b.ResetTimer()
for i := 0; i < b.N; i++ {
@@ -547,7 +627,8 @@ func TestReaddirNValues(t *testing.T) {
}
}
- readDirExpect := func(n, want int, wantErr error) {
+ readdirExpect := func(n, want int, wantErr error) {
+ t.Helper()
fi, err := d.Readdir(n)
if err != wantErr {
t.Fatalf("Readdir of %d got error %v, want %v", n, err, wantErr)
@@ -557,7 +638,19 @@ func TestReaddirNValues(t *testing.T) {
}
}
- readDirNamesExpect := func(n, want int, wantErr error) {
+ readDirExpect := func(n, want int, wantErr error) {
+ t.Helper()
+ de, err := d.ReadDir(n)
+ if err != wantErr {
+ t.Fatalf("ReadDir of %d got error %v, want %v", n, err, wantErr)
+ }
+ if g, e := len(de), want; g != e {
+ t.Errorf("ReadDir of %d got %d files, want %d", n, g, e)
+ }
+ }
+
+ readdirnamesExpect := func(n, want int, wantErr error) {
+ t.Helper()
fi, err := d.Readdirnames(n)
if err != wantErr {
t.Fatalf("Readdirnames of %d got error %v, want %v", n, err, wantErr)
@@ -567,7 +660,7 @@ func TestReaddirNValues(t *testing.T) {
}
}
- for _, fn := range []func(int, int, error){readDirExpect, readDirNamesExpect} {
+ for _, fn := range []func(int, int, error){readdirExpect, readdirnamesExpect, readDirExpect} {
// Test the slurp case
openDir()
fn(0, 105, nil)
@@ -1573,8 +1666,8 @@ func TestOpenError(t *testing.T) {
func TestOpenNoName(t *testing.T) {
f, err := Open("")
if err == nil {
- t.Fatal(`Open("") succeeded`)
f.Close()
+ t.Fatal(`Open("") succeeded`)
}
}
@@ -2434,7 +2527,7 @@ func testDoubleCloseError(t *testing.T, path string) {
if err := file.Close(); err == nil {
t.Error("second Close did not fail")
} else if pe, ok := err.(*PathError); !ok {
- t.Errorf("second Close returned unexpected error type %T; expected os.PathError", pe)
+ t.Errorf("second Close returned unexpected error type %T; expected fs.PathError", pe)
} else if pe.Err != ErrClosed {
t.Errorf("second Close returned %q, wanted %q", err, ErrClosed)
} else {
@@ -2579,3 +2672,9 @@ func TestOpenFileKeepsPermissions(t *testing.T) {
t.Errorf("Stat after OpenFile is %v, should be writable", fi.Mode())
}
}
+
+func TestDirFS(t *testing.T) {
+ if err := fstest.TestFS(DirFS("./signal"), "signal.go", "internal/pty/pty.go"); err != nil {
+ t.Fatal(err)
+ }
+}