Skip to content

Commit 197eb5a

Browse files
committed
Add some tests of ReferenceFilters and IncludeExcludeFilter
1 parent 55a860f commit 197eb5a

File tree

1 file changed

+101
-0
lines changed

1 file changed

+101
-0
lines changed

git/ref_filter_test.go

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
package git_test
2+
3+
import (
4+
"fmt"
5+
"testing"
6+
7+
"github.com/stretchr/testify/assert"
8+
"github.com/stretchr/testify/require"
9+
10+
"github.com/github/git-sizer/git"
11+
)
12+
13+
func TestPrefixFilter(t *testing.T) {
14+
t.Parallel()
15+
16+
for _, p := range []struct {
17+
prefix string
18+
refname string
19+
expected bool
20+
}{
21+
{"refs/heads", "refs/heads/master", true},
22+
{"refs/heads", "refs/tags/master", false},
23+
{"refs/heads", "refs/he", false},
24+
{"refs/heads", "refs/headstrong", false},
25+
{"refs/heads", "refs/tags/refs/heads", false},
26+
{"refs/stash", "refs/stash", true},
27+
{"refs/stash", "refs/stashy", false},
28+
{"refs/remotes", "refs/remotes/origin/master", true},
29+
} {
30+
t.Run(
31+
fmt.Sprintf("prefix '%s', refname '%s'", p.prefix, p.refname),
32+
func(t *testing.T) {
33+
assert.Equal(t, p.expected, git.PrefixFilter(p.prefix)(p.refname))
34+
},
35+
)
36+
}
37+
}
38+
39+
func regexpFilter(t *testing.T, pattern string) git.ReferenceFilter {
40+
t.Helper()
41+
42+
f, err := git.RegexpFilter(pattern)
43+
require.NoError(t, err)
44+
return f
45+
}
46+
47+
func TestRegexpFilter(t *testing.T) {
48+
t.Parallel()
49+
50+
for _, p := range []struct {
51+
pattern string
52+
refname string
53+
expected bool
54+
}{
55+
{`refs/heads/master`, "refs/heads/master", true},
56+
{`refs/heads/.*`, "refs/heads/master", true},
57+
{`.*/heads/.*`, "refs/heads/master", true},
58+
{`.*/heads/`, "refs/heads/master", false},
59+
{`.*/heads`, "refs/heads/master", false},
60+
{`/heads/.*`, "refs/heads/master", false},
61+
{`heads/.*`, "refs/heads/master", false},
62+
{`refs/tags/release-\d+\.\d+\.\d+`, "refs/tags/release-1.22.333", true},
63+
{`refs/tags/release-\d+\.\d+\.\d+`, "refs/tags/release-1.2.3rc1", false},
64+
} {
65+
t.Run(
66+
fmt.Sprintf("pattern '%s', refname '%s'", p.pattern, p.refname),
67+
func(t *testing.T) {
68+
assert.Equal(t, p.expected, regexpFilter(t, p.pattern)(p.refname))
69+
},
70+
)
71+
}
72+
}
73+
74+
func TestIncludeExcludeFilter(t *testing.T) {
75+
t.Parallel()
76+
77+
var filter git.IncludeExcludeFilter
78+
filter.Include(git.PrefixFilter("refs/heads"))
79+
filter.Exclude(regexpFilter(t, "refs/heads/.*foo.*"))
80+
filter.Include(git.PrefixFilter("refs/remotes"))
81+
filter.Exclude(git.PrefixFilter("refs/remotes/foo"))
82+
83+
for _, p := range []struct {
84+
refname string
85+
expected bool
86+
}{
87+
{"refs/heads/master", true},
88+
{"refs/heads/buffoon", false},
89+
{"refs/remotes/origin/master", true},
90+
{"refs/remotes/foo/master", false},
91+
{"refs/not-mentioned", false},
92+
} {
93+
t.Run(
94+
fmt.Sprintf("include-exclude '%s'", p.refname),
95+
func(t *testing.T) {
96+
assert.Equal(t, p.expected, filter.Filter(p.refname))
97+
},
98+
)
99+
}
100+
101+
}

0 commit comments

Comments
 (0)