github.com/git-lfs/git-lfs@v2.5.2+incompatible/filepathfilter/filepathfilter_test.go (about) 1 package filepathfilter 2 3 import ( 4 "testing" 5 6 "github.com/stretchr/testify/assert" 7 ) 8 9 func TestPatternMatch(t *testing.T) { 10 for _, wildcard := range []string{`*`, `.`, `./`, `.\`} { 11 assertPatternMatch(t, wildcard, 12 "a", 13 "a/", 14 "a.a", 15 "a/b", 16 "a/b/", 17 "a/b.b", 18 "a/b/c", 19 "a/b/c/", 20 "a/b/c.c", 21 ) 22 } 23 24 assertPatternMatch(t, "filename.txt", "filename.txt") 25 assertPatternMatch(t, "*.txt", "filename.txt") 26 refutePatternMatch(t, "*.tx", "filename.txt") 27 assertPatternMatch(t, "f*.txt", "filename.txt") 28 refutePatternMatch(t, "g*.txt", "filename.txt") 29 assertPatternMatch(t, "file*", "filename.txt") 30 refutePatternMatch(t, "file", "filename.txt") 31 32 // With no path separators, should match in subfolders 33 assertPatternMatch(t, "*.txt", "sub/filename.txt") 34 refutePatternMatch(t, "*.tx", "sub/filename.txt") 35 assertPatternMatch(t, "f*.txt", "sub/filename.txt") 36 refutePatternMatch(t, "g*.txt", "sub/filename.txt") 37 assertPatternMatch(t, "file*", "sub/filename.txt") 38 refutePatternMatch(t, "file", "sub/filename.txt") 39 40 // matches only in subdir 41 assertPatternMatch(t, "sub/*.txt", "sub/filename.txt") 42 refutePatternMatch(t, "sub/*.txt", 43 "top/sub/filename.txt", 44 "sub/filename.dat", 45 "other/filename.txt", 46 ) 47 48 // Needs wildcard for exact filename 49 assertPatternMatch(t, "**/filename.txt", "sub/sub/sub/filename.txt") 50 51 // Should not match dots to subparts 52 refutePatternMatch(t, "*.ign", "sub/shouldignoreme.txt") 53 54 // Path specific 55 assertPatternMatch(t, "sub", 56 "sub/", 57 "sub", 58 "sub/filename.txt", 59 "top/sub/", 60 "top/sub", 61 "top/sub/filename.txt", 62 ) 63 64 assertPatternMatch(t, "sub/", "sub/filename.txt", "top/sub/filename.txt") 65 assertPatternMatch(t, "/sub", "sub/", "sub", "sub/filename.txt") 66 assertPatternMatch(t, "/sub/", "sub/filename.txt") 67 refutePatternMatch(t, "/sub", "subfilename.txt", "top/sub/", "top/sub", "top/sub/filename.txt") 68 refutePatternMatch(t, "sub", "subfilename.txt") 69 refutePatternMatch(t, "sub/", "subfilename.txt") 70 refutePatternMatch(t, "/sub/", "subfilename.txt", "top/sub/filename.txt") 71 72 // nested path 73 assertPatternMatch(t, "top/sub", 74 "top/sub/filename.txt", 75 "top/sub/", 76 "top/sub", 77 "root/top/sub/filename.txt", 78 "root/top/sub/", 79 "root/top/sub", 80 ) 81 assertPatternMatch(t, "top/sub/", "top/sub/filename.txt") 82 assertPatternMatch(t, "top/sub/", "root/top/sub/filename.txt") 83 84 assertPatternMatch(t, "/top/sub", "top/sub/", "top/sub", "top/sub/filename.txt") 85 assertPatternMatch(t, "/top/sub/", "top/sub/filename.txt") 86 87 refutePatternMatch(t, "top/sub", "top/subfilename.txt") 88 refutePatternMatch(t, "top/sub/", "top/subfilename.txt") 89 refutePatternMatch(t, "/top/sub", 90 "top/subfilename.txt", 91 "root/top/sub/filename.txt", 92 "root/top/sub/", 93 "root/top/sub", 94 ) 95 96 refutePatternMatch(t, "/top/sub/", 97 "root/top/sub/filename.txt", 98 "top/subfilename.txt", 99 ) 100 101 // Absolute 102 assertPatternMatch(t, "*.dat", "/path/to/sub/.git/test.dat") 103 assertPatternMatch(t, "**/.git", "/path/to/sub/.git") 104 105 // Match anything 106 assertPatternMatch(t, ".", "path.txt") 107 assertPatternMatch(t, "./", "path.txt") 108 assertPatternMatch(t, ".\\", "path.txt") 109 } 110 111 func assertPatternMatch(t *testing.T, pattern string, filenames ...string) { 112 p := NewPattern(pattern) 113 for _, filename := range filenames { 114 assert.True(t, p.Match(filename), "%q should match pattern %q", filename, pattern) 115 } 116 } 117 118 func refutePatternMatch(t *testing.T, pattern string, filenames ...string) { 119 p := NewPattern(pattern) 120 for _, filename := range filenames { 121 assert.False(t, p.Match(filename), "%q should not match pattern %q", filename, pattern) 122 } 123 } 124 125 type filterTest struct { 126 expectedResult bool 127 expectedPattern string 128 includes []string 129 excludes []string 130 } 131 132 func TestFilterReportsIncludePatterns(t *testing.T) { 133 filter := New([]string{"*.foo", "*.bar"}, nil) 134 135 assert.Equal(t, []string{"*.foo", "*.bar"}, filter.Include()) 136 } 137 138 func TestFilterReportsExcludePatterns(t *testing.T) { 139 filter := New(nil, []string{"*.baz", "*.quux"}) 140 141 assert.Equal(t, []string{"*.baz", "*.quux"}, filter.Exclude()) 142 }