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
|
// Copyright 2021 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 fstest
import (
"internal/testenv"
"io/fs"
"os"
"path/filepath"
"sort"
"testing"
)
func TestSymlink(t *testing.T) {
testenv.MustHaveSymlink(t)
tmp := t.TempDir()
tmpfs := os.DirFS(tmp)
if err := os.WriteFile(filepath.Join(tmp, "hello"), []byte("hello, world\n"), 0644); err != nil {
t.Fatal(err)
}
if err := os.Symlink(filepath.Join(tmp, "hello"), filepath.Join(tmp, "hello.link")); err != nil {
t.Fatal(err)
}
if err := TestFS(tmpfs, "hello", "hello.link"); err != nil {
t.Fatal(err)
}
}
func TestDash(t *testing.T) {
m := MapFS{
"a-b/a": {Data: []byte("a-b/a")},
}
if err := TestFS(m, "a-b/a"); err != nil {
t.Error(err)
}
}
type shuffledFS MapFS
func (fsys shuffledFS) Open(name string) (fs.File, error) {
f, err := MapFS(fsys).Open(name)
if err != nil {
return nil, err
}
return &shuffledFile{File: f}, nil
}
type shuffledFile struct{ fs.File }
func (f *shuffledFile) ReadDir(n int) ([]fs.DirEntry, error) {
dirents, err := f.File.(fs.ReadDirFile).ReadDir(n)
// Shuffle in a deterministic way, all we care about is making sure that the
// list of directory entries is not is the lexicographic order.
//
// We do this to make sure that the TestFS test suite is not affected by the
// order of directory entries.
sort.Slice(dirents, func(i, j int) bool {
return dirents[i].Name() > dirents[j].Name()
})
return dirents, err
}
func TestShuffledFS(t *testing.T) {
fsys := shuffledFS{
"tmp/one": {Data: []byte("1")},
"tmp/two": {Data: []byte("2")},
"tmp/three": {Data: []byte("3")},
}
if err := TestFS(fsys, "tmp/one", "tmp/two", "tmp/three"); err != nil {
t.Error(err)
}
}
|