forked from sneak/util
FileExists reports whether a path holds a regular file and DirExists whether it holds a directory, both answering false for anything they cannot look at. Comes with doc comments and table-driven tests. (closes #15) Model: opus-5
58 lines
1.6 KiB
Go
58 lines
1.6 KiB
Go
package util
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
)
|
|
|
|
func TestFileExistsAndDirExists(t *testing.T) {
|
|
root := t.TempDir()
|
|
|
|
file := filepath.Join(root, "a-file")
|
|
if err := os.WriteFile(file, []byte("contents"), 0644); err != nil {
|
|
t.Fatalf("could not write the test file: %v", err)
|
|
}
|
|
|
|
directory := filepath.Join(root, "a-directory")
|
|
if err := os.Mkdir(directory, 0755); err != nil {
|
|
t.Fatalf("could not make the test directory: %v", err)
|
|
}
|
|
|
|
linkToFile := filepath.Join(root, "link-to-file")
|
|
if err := os.Symlink(file, linkToFile); err != nil {
|
|
t.Fatalf("could not make the test link: %v", err)
|
|
}
|
|
|
|
brokenLink := filepath.Join(root, "broken-link")
|
|
if err := os.Symlink(filepath.Join(root, "nothing-here"), brokenLink); err != nil {
|
|
t.Fatalf("could not make the broken test link: %v", err)
|
|
}
|
|
|
|
tests := []struct {
|
|
name string
|
|
path string
|
|
expectedFile bool
|
|
expectedIsDir bool
|
|
}{
|
|
{"a regular file", file, true, false},
|
|
{"a directory", directory, false, true},
|
|
{"a link to a file", linkToFile, true, false},
|
|
{"a link to nothing", brokenLink, false, false},
|
|
{"a path that is not there", filepath.Join(root, "missing"), false, false},
|
|
{"a path whose parent is not there", filepath.Join(root, "missing", "deeper"), false, false},
|
|
{"the empty path", "", false, false},
|
|
}
|
|
|
|
for _, test := range tests {
|
|
t.Run(test.name, func(t *testing.T) {
|
|
if got := FileExists(test.path); got != test.expectedFile {
|
|
t.Errorf("FileExists: expected %v got %v", test.expectedFile, got)
|
|
}
|
|
if got := DirExists(test.path); got != test.expectedIsDir {
|
|
t.Errorf("DirExists: expected %v got %v", test.expectedIsDir, got)
|
|
}
|
|
})
|
|
}
|
|
}
|