...
1
2
3
4
5 package fstest
6
7 import (
8 "internal/testenv"
9 "io/fs"
10 "os"
11 "path/filepath"
12 "sort"
13 "testing"
14 )
15
16 func TestSymlink(t *testing.T) {
17 testenv.MustHaveSymlink(t)
18
19 tmp := t.TempDir()
20 tmpfs := os.DirFS(tmp)
21
22 if err := os.WriteFile(filepath.Join(tmp, "hello"), []byte("hello, world\n"), 0644); err != nil {
23 t.Fatal(err)
24 }
25
26 if err := os.Symlink(filepath.Join(tmp, "hello"), filepath.Join(tmp, "hello.link")); err != nil {
27 t.Fatal(err)
28 }
29
30 if err := TestFS(tmpfs, "hello", "hello.link"); err != nil {
31 t.Fatal(err)
32 }
33 }
34
35 func TestDash(t *testing.T) {
36 m := MapFS{
37 "a-b/a": {Data: []byte("a-b/a")},
38 }
39 if err := TestFS(m, "a-b/a"); err != nil {
40 t.Error(err)
41 }
42 }
43
44 type shuffledFS MapFS
45
46 func (fsys shuffledFS) Open(name string) (fs.File, error) {
47 f, err := MapFS(fsys).Open(name)
48 if err != nil {
49 return nil, err
50 }
51 return &shuffledFile{File: f}, nil
52 }
53
54 type shuffledFile struct{ fs.File }
55
56 func (f *shuffledFile) ReadDir(n int) ([]fs.DirEntry, error) {
57 dirents, err := f.File.(fs.ReadDirFile).ReadDir(n)
58
59
60
61
62
63 sort.Slice(dirents, func(i, j int) bool {
64 return dirents[i].Name() > dirents[j].Name()
65 })
66 return dirents, err
67 }
68
69 func TestShuffledFS(t *testing.T) {
70 fsys := shuffledFS{
71 "tmp/one": {Data: []byte("1")},
72 "tmp/two": {Data: []byte("2")},
73 "tmp/three": {Data: []byte("3")},
74 }
75 if err := TestFS(fsys, "tmp/one", "tmp/two", "tmp/three"); err != nil {
76 t.Error(err)
77 }
78 }
79
View as plain text