1 package gitignore
2
3 import (
4 "strings"
5 "testing"
6 )
7
8 type assert struct {
9 patterns []string
10 file file
11 expect bool
12 }
13
14 type file struct {
15 path string
16 isDir bool
17 }
18
19 func TestMatch(t *testing.T) {
20 asserts := []assert{
21 assert{[]string{"a.txt"}, file{"a.txt", false}, true},
22 assert{[]string{"*.txt"}, file{"a.txt", false}, true},
23 assert{[]string{"dir/a.txt"}, file{"dir/a.txt", false}, true},
24 assert{[]string{"dir/*.txt"}, file{"dir/a.txt", false}, true},
25 assert{[]string{"dir2/a.txt"}, file{"dir1/dir2/a.txt", false}, true},
26 assert{[]string{"dir3/a.txt"}, file{"dir1/dir2/dir3/a.txt", false}, true},
27 assert{[]string{"a.txt"}, file{"dir/a.txt", false}, true},
28 assert{[]string{"*.txt"}, file{"dir/a.txt", false}, true},
29 assert{[]string{"a.txt"}, file{"dir1/dir2/a.txt", false}, true},
30 assert{[]string{"dir2/a.txt"}, file{"dir1/dir2/a.txt", false}, true},
31 assert{[]string{"dir"}, file{"dir", true}, true},
32 assert{[]string{"dir/"}, file{"dir", true}, true},
33 assert{[]string{"dir/"}, file{"dir", false}, false},
34 assert{[]string{"dir1/dir2/"}, file{"dir1/dir2", true}, true},
35 assert{[]string{"/a.txt"}, file{"a.txt", false}, true},
36 assert{[]string{"/dir/a.txt"}, file{"dir/a.txt", false}, true},
37 assert{[]string{"/dir1/a.txt"}, file{"dir/dir1/a.txt", false}, false},
38 assert{[]string{"/a.txt"}, file{"dir/a.txt", false}, false},
39 assert{[]string{"a.txt", "b.txt"}, file{"dir/b.txt", false}, true},
40 assert{[]string{"*.txt", "!b.txt"}, file{"dir/b.txt", false}, false},
41 assert{[]string{"dir/*.txt", "!dir/b.txt"}, file{"dir/b.txt", false}, false},
42 assert{[]string{"dir/*.txt", "!/b.txt"}, file{"dir/b.txt", false}, true},
43 assert{[]string{`\#a.txt`}, file{"#a.txt", false}, true},
44 }
45
46 for _, assert := range asserts {
47 gi := NewGitIgnoreFromReader(".", strings.NewReader(strings.Join(assert.patterns, "\n")))
48 result := gi.Match(assert.file.path, assert.file.isDir)
49 if result != assert.expect {
50 t.Errorf("Match should return %t, got %t on %v", assert.expect, result, assert)
51 }
52 }
53 }
54
View as plain text