-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpath_test.go
102 lines (84 loc) · 3.13 KB
/
path_test.go
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
package goblin
import (
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestSplitPath(t *testing.T) {
t.Run("split root identifier", func(t *testing.T) {
tokens, err := splitPath(filesystemRootPath)
require.NoError(t, err)
assert.Equal(t, []string{filesystemRootPath}, tokens)
})
t.Run("split file in root", func(t *testing.T) {
tokens, err := splitPath("file.txt")
require.NoError(t, err)
assert.Equal(t, []string{"file.txt"}, tokens)
})
t.Run("split file in subdir", func(t *testing.T) {
tokens, err := splitPath("dir1/file.txt")
require.NoError(t, err)
assert.Equal(t, []string{"dir1", "file.txt"}, tokens)
})
t.Run("split file in deep subdir", func(t *testing.T) {
tokens, err := splitPath("dir1/dir2/dir3/file.txt")
require.NoError(t, err)
assert.Equal(t, []string{"dir1", "dir2", "dir3", "file.txt"}, tokens)
})
t.Run("split root dir", func(t *testing.T) {
tokens, err := splitPath("dir1")
require.NoError(t, err)
assert.Equal(t, []string{"dir1"}, tokens)
})
t.Run("split deep dir", func(t *testing.T) {
tokens, err := splitPath("dir1/dir2/dir3/dir4")
require.NoError(t, err)
assert.Equal(t, []string{"dir1", "dir2", "dir3", "dir4"}, tokens)
})
}
func TestValidatePath(t *testing.T) {
t.Run("allow '.' as the path", func(t *testing.T) {
err := validatePath([]string{filesystemRootPath})
assert.NoError(t, err)
})
t.Run("disallow . in path root", func(t *testing.T) {
err := validatePath([]string{".", "dir2", "dir3", "dir4"})
assert.EqualError(t, err, ". is not allowed in paths")
})
t.Run("disallow . in path", func(t *testing.T) {
err := validatePath([]string{"dir1", "dir2", ".", "dir4"})
assert.EqualError(t, err, ". is not allowed in paths")
})
t.Run("disallow . at end of path", func(t *testing.T) {
err := validatePath([]string{"dir1", "dir2", "dir3", "."})
assert.EqualError(t, err, ". is not allowed in paths")
})
t.Run("disallow .. in path root", func(t *testing.T) {
err := validatePath([]string{"..", "dir2", "dir3", "dir4"})
assert.EqualError(t, err, ".. is not allowed in paths")
})
t.Run("disallow .. in path", func(t *testing.T) {
err := validatePath([]string{"dir1", "dir2", "..", "dir4"})
assert.EqualError(t, err, ".. is not allowed in paths")
})
t.Run("disallow .. at end of path", func(t *testing.T) {
err := validatePath([]string{"dir1", "dir2", "dir3", ".."})
assert.EqualError(t, err, ".. is not allowed in paths")
})
t.Run("disallow path starting with separator", func(t *testing.T) {
err := validatePath([]string{pathSeparator, "dir1", "dir2", "dir3", "dir4"})
assert.EqualError(t, err, "path cannot be an absolute path")
})
t.Run("disallow empty path segments", func(t *testing.T) {
err := validatePath([]string{"dir1", "", "dir3", "dir4"})
assert.EqualError(t, err, "path cannot contain empty segments: dir1//dir3/dir4")
})
t.Run("disallow empty path", func(t *testing.T) {
err := validatePath([]string{})
assert.EqualError(t, err, "path cannot be empty")
})
t.Run("disallow nil path", func(t *testing.T) {
err := validatePath(nil)
assert.EqualError(t, err, "path cannot be empty")
})
}