|
1
|
|
|
package scan |
|
2
|
|
|
|
|
3
|
|
|
import ( |
|
4
|
|
|
"github.com/vvval/go-metadata-scanner/util" |
|
5
|
|
|
"github.com/vvval/go-metadata-scanner/vars" |
|
6
|
|
|
"path/filepath" |
|
7
|
|
|
"testing" |
|
8
|
|
|
) |
|
9
|
|
|
|
|
10
|
|
|
func TestCandidates(t *testing.T) { |
|
11
|
|
|
type check struct { |
|
12
|
|
|
file string |
|
13
|
|
|
files vars.Chunk |
|
14
|
|
|
ext []string |
|
15
|
|
|
exp string |
|
16
|
|
|
} |
|
17
|
|
|
|
|
18
|
|
|
set := []check{ |
|
19
|
|
|
// Adding extension |
|
20
|
|
|
{"1", vars.Chunk{"folder/1.png", "folder/2.png"}, []string{"png"}, "folder/1.png"}, |
|
21
|
|
|
// Adding extension even if file has it |
|
22
|
|
|
{"1.png", vars.Chunk{"folder/1.png.ext", "folder/2.png"}, []string{"png", "ext"}, "folder/1.png.ext"}, |
|
23
|
|
|
// Adding prefixes ([a-z]?_0?) |
|
24
|
|
|
{"1.png", vars.Chunk{"folder/01.png"}, []string{"png"}, "folder/01.png"}, |
|
25
|
|
|
{"1.png", vars.Chunk{"folder/img_01.png"}, []string{"png"}, "folder/img_01.png"}, |
|
26
|
|
|
// If prefix has letters, it should end with "underscore" char |
|
27
|
|
|
{"1.png", vars.Chunk{"folder/img01.png"}, []string{"png"}, ""}, |
|
28
|
|
|
// Prefix can't have prefix made of non-zero digits |
|
29
|
|
|
{"1.png", vars.Chunk{"folder/21.png"}, []string{"png"}, ""}, |
|
30
|
|
|
// If more than 1 candidate - ignore file |
|
31
|
|
|
{"1.png", vars.Chunk{"folder/01.png", "folder/001.png"}, []string{"png", "ext"}, ""}, |
|
32
|
|
|
// But if has full match - it's fine |
|
33
|
|
|
{"folder2/1", vars.Chunk{"folder2/1.png", "folder/01.png", "folder/001.png"}, []string{"png", "ext"}, "folder2/1.png"}, |
|
34
|
|
|
// This is not a full match, folder prefix is missing |
|
35
|
|
|
{"1", vars.Chunk{"folder2/1.png", "folder/01.png", "folder/001.png"}, []string{"png", "ext"}, ""}, |
|
36
|
|
|
} |
|
37
|
|
|
|
|
38
|
|
|
for i, v := range set { |
|
39
|
|
|
c, _ := Candidates(v.file, &v.files, v.ext) |
|
40
|
|
|
if c != v.exp { |
|
41
|
|
|
t.Errorf("candidates incorrect for file `%s` (line `%d`) and ext `%+v`:\ngot `%+v`\nexpected `%+v`", v.file, i, v.ext, c, v.exp) |
|
42
|
|
|
} |
|
43
|
|
|
} |
|
44
|
|
|
} |
|
45
|
|
|
|
|
46
|
|
|
func TestScanDir(t *testing.T) { |
|
47
|
|
|
type check struct { |
|
48
|
|
|
dir string |
|
49
|
|
|
ext []string |
|
50
|
|
|
exp vars.Chunk |
|
51
|
|
|
should bool |
|
52
|
|
|
} |
|
53
|
|
|
|
|
54
|
|
|
set := []check{ |
|
55
|
|
|
{"./fixtures", []string{"ext", "ext3"}, vars.Chunk{ |
|
56
|
|
|
filepath.Join("fixtures", "subFolder1", "file1.ext"), |
|
57
|
|
|
filepath.Join("fixtures", "SubFolder2", "file3.ext3"), |
|
58
|
|
|
filepath.Join("fixtures", "file2.ext"), |
|
59
|
|
|
filepath.Join("fixtures", "file4.ext3"), |
|
60
|
|
|
}, true}, |
|
61
|
|
|
{"./fixtures/SubFolder2", []string{"ext2"}, vars.Chunk{}, true}, |
|
62
|
|
|
{"./fixtures/SubFolder2", []string{"ext3"}, vars.Chunk{ |
|
63
|
|
|
filepath.Join("fixtures", "SubFolder2", "file3.ext3"), |
|
64
|
|
|
}, true}, |
|
65
|
|
|
{"./fixtures/SubFolder2", []string{"ext3"}, vars.Chunk{ |
|
66
|
|
|
filepath.Join("fixtures", "SubFolder2", "file3.ext3"), |
|
67
|
|
|
}, true}, |
|
68
|
|
|
{"./fixtures/SubFolder2", []string{}, vars.Chunk{ |
|
69
|
|
|
filepath.Join("fixtures", "SubFolder2", "file3.ext3"), |
|
70
|
|
|
}, true}, |
|
71
|
|
|
{"./fixtures", []string{"ext2"}, vars.Chunk{ |
|
72
|
|
|
filepath.Join("fixtures", "subFolder1", "subfolder3", "file5.ext2"), |
|
73
|
|
|
}, true}, |
|
74
|
|
|
{"./fixtures/SubFolder2", []string{}, vars.Chunk{ |
|
75
|
|
|
filepath.Join("fixtures", "subFolder2", "file3.ext3"), |
|
76
|
|
|
}, false}, |
|
77
|
|
|
{"./fixtures", []string{"ext2"}, vars.Chunk{ |
|
78
|
|
|
filepath.Join("fixtures", "subfolder1", "subfolder3", "file5.ext2"), |
|
79
|
|
|
}, false}, |
|
80
|
|
|
} |
|
81
|
|
|
|
|
82
|
|
|
for i, v := range set { |
|
83
|
|
|
res := MustDir(v.dir, v.ext) |
|
84
|
|
|
exp := v.exp |
|
85
|
|
|
var eq = util.Equal(res, exp) |
|
86
|
|
|
if eq && !v.should { |
|
87
|
|
|
t.Errorf("scan dir failed for dir `%s` (line `%d`) and ext `%+v` (wrong inequality):\ngot `%+v` (`%t`)\nexp `%+v` (`%t`)", v.dir, i, v.ext, res, eq, exp, v.should) |
|
88
|
|
|
} else if !eq && v.should { |
|
89
|
|
|
t.Errorf("scan dir failed for dir `%s` (line `%d`) and ext `%+v` (wrong equality):\ngot `%+v` (`%t`)\nexp `%+v` (`%t`)", v.dir, i, v.ext, res, eq, exp, v.should) |
|
90
|
|
|
} |
|
91
|
|
|
} |
|
92
|
|
|
} |
|
93
|
|
|
|