Source file
src/io/fs/readlink_test.go
1
2
3
4
5 package fs_test
6
7 import (
8 . "io/fs"
9 "testing"
10 "testing/fstest"
11 )
12
13 func TestReadLink(t *testing.T) {
14 testFS := fstest.MapFS{
15 "foo": {
16 Data: []byte("bar"),
17 Mode: ModeSymlink | 0o777,
18 },
19 "bar": {
20 Data: []byte("Hello, World!\n"),
21 Mode: 0o644,
22 },
23
24 "dir/parentlink": {
25 Data: []byte("../bar"),
26 Mode: ModeSymlink | 0o777,
27 },
28 "dir/link": {
29 Data: []byte("file"),
30 Mode: ModeSymlink | 0o777,
31 },
32 "dir/file": {
33 Data: []byte("Hello, World!\n"),
34 Mode: 0o644,
35 },
36 }
37
38 check := func(fsys FS, name string, want string) {
39 t.Helper()
40 got, err := ReadLink(fsys, name)
41 if got != want || err != nil {
42 t.Errorf("ReadLink(%q) = %q, %v; want %q, <nil>", name, got, err, want)
43 }
44 }
45
46 check(testFS, "foo", "bar")
47 check(testFS, "dir/parentlink", "../bar")
48 check(testFS, "dir/link", "file")
49
50
51 sub, err := Sub(testFS, "dir")
52 if err != nil {
53 t.Fatal(err)
54 }
55
56 check(sub, "link", "file")
57 check(sub, "parentlink", "../bar")
58 }
59
60 func TestLstat(t *testing.T) {
61 testFS := fstest.MapFS{
62 "foo": {
63 Data: []byte("bar"),
64 Mode: ModeSymlink | 0o777,
65 },
66 "bar": {
67 Data: []byte("Hello, World!\n"),
68 Mode: 0o644,
69 },
70
71 "dir/parentlink": {
72 Data: []byte("../bar"),
73 Mode: ModeSymlink | 0o777,
74 },
75 "dir/link": {
76 Data: []byte("file"),
77 Mode: ModeSymlink | 0o777,
78 },
79 "dir/file": {
80 Data: []byte("Hello, World!\n"),
81 Mode: 0o644,
82 },
83 }
84
85 check := func(fsys FS, name string, want FileMode) {
86 t.Helper()
87 info, err := Lstat(fsys, name)
88 var got FileMode
89 if err == nil {
90 got = info.Mode()
91 }
92 if got != want || err != nil {
93 t.Errorf("Lstat(%q) = %v, %v; want %v, <nil>", name, got, err, want)
94 }
95 }
96
97 check(testFS, "foo", ModeSymlink|0o777)
98 check(testFS, "bar", 0o644)
99
100
101 sub, err := Sub(testFS, "dir")
102 if err != nil {
103 t.Fatal(err)
104 }
105 check(sub, "link", ModeSymlink|0o777)
106 }
107
View as plain text