1 var globToRegexp = require("./index.js");
2 var assert = require("assert");
4 function assertMatch(glob, str, opts) {
5 //console.log(glob, globToRegexp(glob, opts));
6 assert.ok(globToRegexp(glob, opts).test(str));
9 function assertNotMatch(glob, str, opts) {
10 //console.log(glob, globToRegexp(glob, opts));
11 assert.equal(false, globToRegexp(glob, opts).test(str));
14 function test(globstar) {
16 assertMatch("*", "foo");
17 assertMatch("*", "foo", { flags: 'g' });
20 assertMatch("f*", "foo");
21 assertMatch("f*", "foo", { flags: 'g' });
24 assertMatch("*o", "foo");
25 assertMatch("*o", "foo", { flags: 'g' });
28 assertMatch("f*uck", "firetruck");
29 assertMatch("f*uck", "firetruck", { flags: 'g' });
31 // Don't match without Regexp 'g'
32 assertNotMatch("uc", "firetruck");
33 // Match anywhere with RegExp 'g'
34 assertMatch("uc", "firetruck", { flags: 'g' });
36 // Match zero characters
37 assertMatch("f*uck", "fuck");
38 assertMatch("f*uck", "fuck", { flags: 'g' });
40 // More complex matches
41 assertMatch("*.min.js", "http://example.com/jquery.min.js", {globstar: false});
42 assertMatch("*.min.*", "http://example.com/jquery.min.js", {globstar: false});
43 assertMatch("*/js/*.js", "http://example.com/js/jquery.min.js", {globstar: false});
45 // More complex matches with RegExp 'g' flag (complex regression)
46 assertMatch("*.min.*", "http://example.com/jquery.min.js", { flags: 'g' });
47 assertMatch("*.min.js", "http://example.com/jquery.min.js", { flags: 'g' });
48 assertMatch("*/js/*.js", "http://example.com/js/jquery.min.js", { flags: 'g' });
50 var testStr = "\\/$^+?.()=!|{},[].*"
51 assertMatch(testStr, testStr);
52 assertMatch(testStr, testStr, { flags: 'g' });
54 // Equivalent matches without/with using RegExp 'g'
55 assertNotMatch(".min.", "http://example.com/jquery.min.js");
56 assertMatch("*.min.*", "http://example.com/jquery.min.js");
57 assertMatch(".min.", "http://example.com/jquery.min.js", { flags: 'g' });
59 assertNotMatch("http:", "http://example.com/jquery.min.js");
60 assertMatch("http:*", "http://example.com/jquery.min.js");
61 assertMatch("http:", "http://example.com/jquery.min.js", { flags: 'g' });
63 assertNotMatch("min.js", "http://example.com/jquery.min.js");
64 assertMatch("*.min.js", "http://example.com/jquery.min.js");
65 assertMatch("min.js", "http://example.com/jquery.min.js", { flags: 'g' });
67 // Match anywhere (globally) using RegExp 'g'
68 assertMatch("min", "http://example.com/jquery.min.js", { flags: 'g' });
69 assertMatch("/js/", "http://example.com/js/jquery.min.js", { flags: 'g' });
71 assertNotMatch("/js*jq*.js", "http://example.com/js/jquery.min.js");
72 assertMatch("/js*jq*.js", "http://example.com/js/jquery.min.js", { flags: 'g' });
76 // ?: Match one character, no more and no less
77 assertMatch("f?o", "foo", { extended: true });
78 assertNotMatch("f?o", "fooo", { extended: true });
79 assertNotMatch("f?oo", "foo", { extended: true });
81 // ?: Match one character with RegExp 'g'
82 assertMatch("f?o", "foo", { extended: true, globstar: globstar, flags: 'g' });
83 assertMatch("f?o", "fooo", { extended: true, globstar: globstar, flags: 'g' });
84 assertMatch("f?o?", "fooo", { extended: true, globstar: globstar, flags: 'g' });
85 assertNotMatch("?fo", "fooo", { extended: true, globstar: globstar, flags: 'g' });
86 assertNotMatch("f?oo", "foo", { extended: true, globstar: globstar, flags: 'g' });
87 assertNotMatch("foo?", "foo", { extended: true, globstar: globstar, flags: 'g' });
89 // []: Match a character range
90 assertMatch("fo[oz]", "foo", { extended: true });
91 assertMatch("fo[oz]", "foz", { extended: true });
92 assertNotMatch("fo[oz]", "fog", { extended: true });
94 // []: Match a character range and RegExp 'g' (regresion)
95 assertMatch("fo[oz]", "foo", { extended: true, globstar: globstar, flags: 'g' });
96 assertMatch("fo[oz]", "foz", { extended: true, globstar: globstar, flags: 'g' });
97 assertNotMatch("fo[oz]", "fog", { extended: true, globstar: globstar, flags: 'g' });
99 // {}: Match a choice of different substrings
100 assertMatch("foo{bar,baaz}", "foobaaz", { extended: true });
101 assertMatch("foo{bar,baaz}", "foobar", { extended: true });
102 assertNotMatch("foo{bar,baaz}", "foobuzz", { extended: true });
103 assertMatch("foo{bar,b*z}", "foobuzz", { extended: true });
105 // {}: Match a choice of different substrings and RegExp 'g' (regression)
106 assertMatch("foo{bar,baaz}", "foobaaz", { extended: true, globstar: globstar, flags: 'g' });
107 assertMatch("foo{bar,baaz}", "foobar", { extended: true, globstar: globstar, flags: 'g' });
108 assertNotMatch("foo{bar,baaz}", "foobuzz", { extended: true, globstar: globstar, flags: 'g' });
109 assertMatch("foo{bar,b*z}", "foobuzz", { extended: true, globstar: globstar, flags: 'g' });
111 // More complex extended matches
112 assertMatch("http://?o[oz].b*z.com/{*.js,*.html}",
113 "http://foo.baaz.com/jquery.min.js",
115 assertMatch("http://?o[oz].b*z.com/{*.js,*.html}",
116 "http://moz.buzz.com/index.html",
118 assertNotMatch("http://?o[oz].b*z.com/{*.js,*.html}",
119 "http://moz.buzz.com/index.htm",
121 assertNotMatch("http://?o[oz].b*z.com/{*.js,*.html}",
122 "http://moz.bar.com/index.html",
124 assertNotMatch("http://?o[oz].b*z.com/{*.js,*.html}",
125 "http://flozz.buzz.com/index.html",
128 // More complex extended matches and RegExp 'g' (regresion)
129 assertMatch("http://?o[oz].b*z.com/{*.js,*.html}",
130 "http://foo.baaz.com/jquery.min.js",
131 { extended: true, globstar: globstar, flags: 'g' });
132 assertMatch("http://?o[oz].b*z.com/{*.js,*.html}",
133 "http://moz.buzz.com/index.html",
134 { extended: true, globstar: globstar, flags: 'g' });
135 assertNotMatch("http://?o[oz].b*z.com/{*.js,*.html}",
136 "http://moz.buzz.com/index.htm",
137 { extended: true, globstar: globstar, flags: 'g' });
138 assertNotMatch("http://?o[oz].b*z.com/{*.js,*.html}",
139 "http://moz.bar.com/index.html",
140 { extended: true, globstar: globstar, flags: 'g' });
141 assertNotMatch("http://?o[oz].b*z.com/{*.js,*.html}",
142 "http://flozz.buzz.com/index.html",
143 { extended: true, globstar: globstar, flags: 'g' });
146 assertMatch("http://foo.com/**/{*.js,*.html}",
147 "http://foo.com/bar/jquery.min.js",
148 { extended: true, globstar: globstar, flags: 'g' });
149 assertMatch("http://foo.com/**/{*.js,*.html}",
150 "http://foo.com/bar/baz/jquery.min.js",
151 { extended: true, globstar: globstar, flags: 'g' });
152 assertMatch("http://foo.com/**",
153 "http://foo.com/bar/baz/jquery.min.js",
154 { extended: true, globstar: globstar, flags: 'g' });
156 // Remaining special chars should still match themselves
157 var testExtStr = "\\/$^+.()=!|,.*"
158 assertMatch(testExtStr, testExtStr, { extended: true });
159 assertMatch(testExtStr, testExtStr, { extended: true, globstar: globstar, flags: 'g' });
168 // globstar specific tests
169 assertMatch("/foo/*", "/foo/bar.txt", {globstar: true });
170 assertMatch("/foo/**", "/foo/baz.txt", {globstar: true });
171 assertMatch("/foo/**", "/foo/bar/baz.txt", {globstar: true });
172 assertMatch("/foo/*/*.txt", "/foo/bar/baz.txt", {globstar: true });
173 assertMatch("/foo/**/*.txt", "/foo/bar/baz.txt", {globstar: true });
174 assertMatch("/foo/**/*.txt", "/foo/bar/baz/qux.txt", {globstar: true });
175 assertMatch("/foo/**/bar.txt", "/foo/bar.txt", {globstar: true });
176 assertMatch("/foo/**/**/bar.txt", "/foo/bar.txt", {globstar: true });
177 assertMatch("/foo/**/*/baz.txt", "/foo/bar/baz.txt", {globstar: true });
178 assertMatch("/foo/**/*.txt", "/foo/bar.txt", {globstar: true });
179 assertMatch("/foo/**/**/*.txt", "/foo/bar.txt", {globstar: true });
180 assertMatch("/foo/**/*/*.txt", "/foo/bar/baz.txt", {globstar: true });
181 assertMatch("**/*.txt", "/foo/bar/baz/qux.txt", {globstar: true });
182 assertMatch("**/foo.txt", "foo.txt", {globstar: true });
183 assertMatch("**/*.txt", "foo.txt", {globstar: true });
185 assertNotMatch("/foo/*", "/foo/bar/baz.txt", {globstar: true });
186 assertNotMatch("/foo/*.txt", "/foo/bar/baz.txt", {globstar: true });
187 assertNotMatch("/foo/*/*.txt", "/foo/bar/baz/qux.txt", {globstar: true });
188 assertNotMatch("/foo/*/bar.txt", "/foo/bar.txt", {globstar: true });
189 assertNotMatch("/foo/*/*/baz.txt", "/foo/bar/baz.txt", {globstar: true });
190 assertNotMatch("/foo/**.txt", "/foo/bar/baz/qux.txt", {globstar: true });
191 assertNotMatch("/foo/bar**/*.txt", "/foo/bar/baz/qux.txt", {globstar: true });
192 assertNotMatch("/foo/bar**", "/foo/bar/baz.txt", {globstar: true });
193 assertNotMatch("**/.txt", "/foo/bar/baz/qux.txt", {globstar: true });
194 assertNotMatch("*/*.txt", "/foo/bar/baz/qux.txt", {globstar: true });
195 assertNotMatch("*/*.txt", "foo.txt", {globstar: true });
197 assertNotMatch("http://foo.com/*",
198 "http://foo.com/bar/baz/jquery.min.js",
199 { extended: true, globstar: true });
200 assertNotMatch("http://foo.com/*",
201 "http://foo.com/bar/baz/jquery.min.js",
204 assertMatch("http://foo.com/*",
205 "http://foo.com/bar/baz/jquery.min.js",
206 { globstar: false });
207 assertMatch("http://foo.com/**",
208 "http://foo.com/bar/baz/jquery.min.js",
211 assertMatch("http://foo.com/*/*/jquery.min.js",
212 "http://foo.com/bar/baz/jquery.min.js",
214 assertMatch("http://foo.com/**/jquery.min.js",
215 "http://foo.com/bar/baz/jquery.min.js",
217 assertMatch("http://foo.com/*/*/jquery.min.js",
218 "http://foo.com/bar/baz/jquery.min.js",
219 { globstar: false });
220 assertMatch("http://foo.com/*/jquery.min.js",
221 "http://foo.com/bar/baz/jquery.min.js",
222 { globstar: false });
223 assertNotMatch("http://foo.com/*/jquery.min.js",
224 "http://foo.com/bar/baz/jquery.min.js",