github.com/10XDev/rclone@v1.52.3-0.20200626220027-16af9ab76b2a/fs/dirtree/dirtree_test.go (about) 1 package dirtree 2 3 import ( 4 "testing" 5 6 "github.com/rclone/rclone/fstest/mockdir" 7 "github.com/rclone/rclone/fstest/mockobject" 8 "github.com/stretchr/testify/assert" 9 "github.com/stretchr/testify/require" 10 ) 11 12 func TestNew(t *testing.T) { 13 dt := New() 14 assert.Equal(t, "", dt.String()) 15 } 16 17 func TestParentDir(t *testing.T) { 18 assert.Equal(t, "root/parent", parentDir("root/parent/file")) 19 assert.Equal(t, "parent", parentDir("parent/file")) 20 assert.Equal(t, "", parentDir("parent")) 21 assert.Equal(t, "", parentDir("")) 22 } 23 24 func TestDirTreeAdd(t *testing.T) { 25 dt := New() 26 o := mockobject.New("potato") 27 dt.Add(o) 28 assert.Equal(t, `/ 29 potato 30 `, dt.String()) 31 o = mockobject.New("dir/subdir/sausage") 32 dt.Add(o) 33 assert.Equal(t, `/ 34 potato 35 dir/subdir/ 36 sausage 37 `, dt.String()) 38 } 39 40 func TestDirTreeAddDir(t *testing.T) { 41 dt := New() 42 d := mockdir.New("potato") 43 dt.Add(d) 44 assert.Equal(t, `/ 45 potato/ 46 `, dt.String()) 47 d = mockdir.New("dir/subdir/sausage") 48 dt.AddDir(d) 49 assert.Equal(t, `/ 50 potato/ 51 dir/subdir/ 52 sausage/ 53 dir/subdir/sausage/ 54 `, dt.String()) 55 } 56 57 func TestDirTreeAddEntry(t *testing.T) { 58 dt := New() 59 60 d := mockdir.New("dir/subdir/sausagedir") 61 dt.AddEntry(d) 62 o := mockobject.New("dir/subdir2/sausage2") 63 dt.AddEntry(o) 64 65 assert.Equal(t, `/ 66 dir/ 67 dir/ 68 subdir/ 69 subdir2/ 70 dir/subdir/ 71 sausagedir/ 72 dir/subdir/sausagedir/ 73 dir/subdir2/ 74 sausage2 75 `, dt.String()) 76 } 77 78 func TestDirTreeFind(t *testing.T) { 79 dt := New() 80 81 parent, foundObj := dt.Find("dir/subdir/sausage") 82 assert.Equal(t, "dir/subdir", parent) 83 assert.Nil(t, foundObj) 84 85 o := mockobject.New("dir/subdir/sausage") 86 dt.Add(o) 87 88 parent, foundObj = dt.Find("dir/subdir/sausage") 89 assert.Equal(t, "dir/subdir", parent) 90 assert.Equal(t, o, foundObj) 91 } 92 93 func TestDirTreeCheckParent(t *testing.T) { 94 dt := New() 95 96 o := mockobject.New("dir/subdir/sausage") 97 dt.Add(o) 98 99 assert.Equal(t, `dir/subdir/ 100 sausage 101 `, dt.String()) 102 103 dt.CheckParent("", "dir/subdir") 104 105 assert.Equal(t, `/ 106 dir/ 107 dir/ 108 subdir/ 109 dir/subdir/ 110 sausage 111 `, dt.String()) 112 113 } 114 115 func TestDirTreeCheckParents(t *testing.T) { 116 dt := New() 117 118 dt.Add(mockobject.New("dir/subdir/sausage")) 119 dt.Add(mockobject.New("dir/subdir2/sausage2")) 120 121 dt.CheckParents("") 122 dt.Sort() // sort since the exact order of adding parents is not defined 123 124 assert.Equal(t, `/ 125 dir/ 126 dir/ 127 subdir/ 128 subdir2/ 129 dir/subdir/ 130 sausage 131 dir/subdir2/ 132 sausage2 133 `, dt.String()) 134 } 135 136 func TestDirTreeSort(t *testing.T) { 137 dt := New() 138 139 dt.Add(mockobject.New("dir/subdir/B")) 140 dt.Add(mockobject.New("dir/subdir/A")) 141 142 assert.Equal(t, `dir/subdir/ 143 B 144 A 145 `, dt.String()) 146 147 dt.Sort() 148 149 assert.Equal(t, `dir/subdir/ 150 A 151 B 152 `, dt.String()) 153 } 154 155 func TestDirTreeDirs(t *testing.T) { 156 dt := New() 157 158 dt.Add(mockobject.New("dir/subdir/sausage")) 159 dt.Add(mockobject.New("dir/subdir2/sausage2")) 160 161 dt.CheckParents("") 162 163 assert.Equal(t, []string{ 164 "", 165 "dir", 166 "dir/subdir", 167 "dir/subdir2", 168 }, dt.Dirs()) 169 } 170 171 func TestDirTreePrune(t *testing.T) { 172 dt := New() 173 174 dt.Add(mockobject.New("file")) 175 dt.Add(mockobject.New("dir/subdir/sausage")) 176 dt.Add(mockobject.New("dir/subdir2/sausage2")) 177 dt.Add(mockobject.New("dir/file")) 178 dt.Add(mockobject.New("dir2/file")) 179 180 dt.CheckParents("") 181 182 err := dt.Prune(map[string]bool{ 183 "dir": true, 184 }) 185 require.NoError(t, err) 186 187 assert.Equal(t, `/ 188 file 189 dir2/ 190 dir2/ 191 file 192 `, dt.String()) 193 194 }