
File.Stat is left as a stub for now. Tests are a bit stubbed down because os.ReadDir, os.Symlink, and t.TempDir are not yet (fully) implemented. TODO: reimport tests from upstream as those materialize.
96 строки
2,3 КиБ
Go
96 строки
2,3 КиБ
Go
// 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)
|
|
}
|