memfs - directory_test.go
1 package memfs
2
3 import (
4 "errors"
5 "io"
6 "io/fs"
7 "reflect"
8 "testing"
9 )
10
11 var _ dNode = &directory{}
12
13 func testReadAll(d *directory) ([]fs.DirEntry, error) {
14 return d.ReadDir(-1)
15 }
16
17 func testReadOnes(d *directory) ([]fs.DirEntry, error) {
18 var read []fs.DirEntry
19
20 for {
21 des, err := d.ReadDir(1)
22 if errors.Is(err, io.EOF) {
23 return read, nil
24 } else if err != nil {
25 return nil, err
26 }
27
28 read = append(read, des...)
29 }
30 }
31
32 func testReadTwos(d *directory) ([]fs.DirEntry, error) {
33 var read []fs.DirEntry
34
35 for {
36 des, err := d.ReadDir(2)
37 if errors.Is(err, io.EOF) {
38 return read, nil
39 } else if err != nil {
40 return nil, err
41 }
42
43 read = append(read, des...)
44 }
45 }
46
47 func makeDirectory(dirs []*dirEnt) *directory {
48 return &directory{
49 dnode: &dnode{
50 entries: dirs,
51 mode: fs.ModeDir | fs.ModePerm,
52 },
53 }
54 }
55
56 func asDirEntries(dirs []*dirEnt) []fs.DirEntry {
57 de := make([]fs.DirEntry, len(dirs))
58
59 for n, d := range dirs {
60 de[n] = d
61 }
62
63 return de
64 }
65
66 func TestReadDir(t *testing.T) {
67 for n, test := range [...][]*dirEnt{
68 {
69 {
70 name: "1",
71 },
72 },
73 {
74 {
75 name: "1",
76 },
77 {
78 name: "2",
79 },
80 },
81 {
82 {
83 name: "1",
84 },
85 {
86 name: "3",
87 },
88 {
89 name: "3",
90 },
91 },
92 {
93 {
94 name: "1",
95 },
96 {
97 name: "2",
98 },
99 {
100 name: "3",
101 },
102 {
103 name: "4",
104 },
105 },
106 } {
107 if all, err := testReadAll(makeDirectory(test)); err != nil {
108 t.Errorf("test %d.1: received unexpected error: %s", n+1, err)
109 } else if !reflect.DeepEqual(asDirEntries(test), all) {
110 t.Errorf("test %d.1: 'all' does not equal", n+1)
111 }
112
113 if ones, err := testReadOnes(makeDirectory(test)); err != nil {
114 t.Errorf("test %d.2: received unexpected error: %s", n+1, err)
115 } else if !reflect.DeepEqual(asDirEntries(test), ones) {
116 t.Errorf("test %d.2: 'ones' does not equal", n+1)
117 }
118
119 if twos, err := testReadTwos(makeDirectory(test)); err != nil {
120 t.Errorf("test %d.3: received unexpected error: %s", n+1, err)
121 } else if !reflect.DeepEqual(asDirEntries(test), twos) {
122 t.Errorf("test %d.3: 'twos' does not equal", n+1)
123 }
124 }
125 }
126