forked from cespare/reflex
-
Notifications
You must be signed in to change notification settings - Fork 0
/
match_test.go
109 lines (100 loc) · 2.51 KB
/
match_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
103
104
105
106
107
108
109
package main
import (
"regexp"
"testing"
)
func TestMatchers(t *testing.T) {
var (
glob = &globMatcher{glob: "foo*"}
globInv = &globMatcher{glob: "foo*", inverse: true}
regex = newRegexMatcher(regexp.MustCompile("foo.*"), false)
regexInv = newRegexMatcher(regexp.MustCompile("foo.*"), true)
multi = multiMatcher{
newRegexMatcher(regexp.MustCompile("foo"), false),
newRegexMatcher(regexp.MustCompile(`\.go$`), false),
newRegexMatcher(regexp.MustCompile("foobar"), true),
}
)
for _, tt := range []struct {
m Matcher
s string
want bool
}{
{glob, "foo", true},
{glob, "foobar", true},
{glob, "bar", false},
{globInv, "foo", false},
{globInv, "foobar", false},
{globInv, "bar", true},
{regex, "foo", true},
{regex, "foobar", true},
{regex, "bar", false},
{regexInv, "foo", false},
{regexInv, "foobar", false},
{regexInv, "bar", true},
{multi, "foo.go", true},
{multi, "foo/bar.go", true},
{multi, "foobar/blah.go", false},
} {
if got := tt.m.Match(tt.s); got != tt.want {
t.Errorf("(%v).Match(%q): got %t; want %t",
tt.m, tt.s, got, tt.want)
}
}
}
func TestExcludePrefix(t *testing.T) {
m := newRegexMatcher(regexp.MustCompile("foo"), false)
if m.ExcludePrefix("bar") {
t.Error("m.ExcludePrefix gave true for a non-inverted matcher")
}
for _, tt := range []struct {
re string
prefix string
want bool
}{
{"foo", "foo", true},
{"((foo{3,4})|abc*)+|foo", "foo", true},
{"foo$", "foo", false},
{`foo\b`, "foo", false},
{`(foo\b)|(baz$)`, "foo", false},
} {
m := newRegexMatcher(regexp.MustCompile(tt.re), true)
if got := m.ExcludePrefix(tt.prefix); got != tt.want {
t.Errorf("(%v).ExcludePrefix(%q): got %t; want %t",
m, tt.prefix, got, tt.want)
}
}
}
func TestDefaultExcludes(t *testing.T) {
for _, tt := range []struct {
name string
want bool
}{
{".git/HEAD", false},
{"foo.git", true},
{"foo/bar.git", true},
{"foo/bar/.git/HEAD", false},
{"foo~", false},
{"foo/bar~", false},
{"~foo", true},
{"foo~bar", true},
{"foo.swp", false},
{"foo.swp.bar", true},
{"foo/bar.swp", false},
{"foo.#123", false},
{"foo#123", true},
{"foo/bar.#123", false},
{"#foo#", false},
{"foo/#bar#", false},
{".DS_Store", false},
{"foo/.DS_Store", false},
} {
if got := defaultExcludeMatcher.Match(tt.name); got != tt.want {
if got {
t.Errorf("%q was excluded by the default excludes matcher", tt.name)
} else {
t.Errorf("%q was not excluded by the default excludes matcher", tt.name)
}
}
}
}