| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227 | var globToRegexp = require("./index.js");var assert = require("assert");function assertMatch(glob, str, opts) {  //console.log(glob, globToRegexp(glob, opts));  assert.ok(globToRegexp(glob, opts).test(str));}function assertNotMatch(glob, str, opts) {  //console.log(glob, globToRegexp(glob, opts));  assert.equal(false, globToRegexp(glob, opts).test(str));}function test(globstar) {  // Match everything  assertMatch("*", "foo");  assertMatch("*", "foo", { flags: 'g' });  // Match the end  assertMatch("f*", "foo");  assertMatch("f*", "foo", { flags: 'g' });  // Match the start  assertMatch("*o", "foo");  assertMatch("*o", "foo", { flags: 'g' });  // Match the middle  assertMatch("f*uck", "firetruck");  assertMatch("f*uck", "firetruck", { flags: 'g' });  // Don't match without Regexp 'g'  assertNotMatch("uc", "firetruck");  // Match anywhere with RegExp 'g'  assertMatch("uc", "firetruck", { flags: 'g' });  // Match zero characters  assertMatch("f*uck", "fuck");  assertMatch("f*uck", "fuck", { flags: 'g' });  // More complex matches  assertMatch("*.min.js", "http://example.com/jquery.min.js", {globstar: false});  assertMatch("*.min.*", "http://example.com/jquery.min.js", {globstar: false});  assertMatch("*/js/*.js", "http://example.com/js/jquery.min.js", {globstar: false});  // More complex matches with RegExp 'g' flag (complex regression)  assertMatch("*.min.*", "http://example.com/jquery.min.js", { flags: 'g' });  assertMatch("*.min.js", "http://example.com/jquery.min.js", { flags: 'g' });  assertMatch("*/js/*.js", "http://example.com/js/jquery.min.js", { flags: 'g' });  var testStr = "\\/$^+?.()=!|{},[].*"  assertMatch(testStr, testStr);  assertMatch(testStr, testStr, { flags: 'g' });  // Equivalent matches without/with using RegExp 'g'  assertNotMatch(".min.", "http://example.com/jquery.min.js");  assertMatch("*.min.*", "http://example.com/jquery.min.js");  assertMatch(".min.", "http://example.com/jquery.min.js", { flags: 'g' });  assertNotMatch("http:", "http://example.com/jquery.min.js");  assertMatch("http:*", "http://example.com/jquery.min.js");  assertMatch("http:", "http://example.com/jquery.min.js", { flags: 'g' });  assertNotMatch("min.js", "http://example.com/jquery.min.js");  assertMatch("*.min.js", "http://example.com/jquery.min.js");  assertMatch("min.js", "http://example.com/jquery.min.js", { flags: 'g' });  // Match anywhere (globally) using RegExp 'g'  assertMatch("min", "http://example.com/jquery.min.js", { flags: 'g' });  assertMatch("/js/", "http://example.com/js/jquery.min.js", { flags: 'g' });  assertNotMatch("/js*jq*.js", "http://example.com/js/jquery.min.js");  assertMatch("/js*jq*.js", "http://example.com/js/jquery.min.js", { flags: 'g' });  // Extended mode  // ?: Match one character, no more and no less  assertMatch("f?o", "foo", { extended: true });  assertNotMatch("f?o", "fooo", { extended: true });  assertNotMatch("f?oo", "foo", { extended: true });  // ?: Match one character with RegExp 'g'  assertMatch("f?o", "foo", { extended: true,  globstar: globstar, flags: 'g' });  assertMatch("f?o", "fooo", { extended: true,  globstar: globstar, flags: 'g' });  assertMatch("f?o?", "fooo", { extended: true,  globstar: globstar, flags: 'g' });  assertNotMatch("?fo", "fooo", { extended: true,  globstar: globstar, flags: 'g' });  assertNotMatch("f?oo", "foo", { extended: true,  globstar: globstar, flags: 'g' });  assertNotMatch("foo?", "foo", { extended: true,  globstar: globstar, flags: 'g' });  // []: Match a character range  assertMatch("fo[oz]", "foo", { extended: true });  assertMatch("fo[oz]", "foz", { extended: true });  assertNotMatch("fo[oz]", "fog", { extended: true });  // []: Match a character range and RegExp 'g' (regresion)  assertMatch("fo[oz]", "foo", { extended: true,  globstar: globstar, flags: 'g' });  assertMatch("fo[oz]", "foz", { extended: true,  globstar: globstar, flags: 'g' });  assertNotMatch("fo[oz]", "fog", { extended: true,  globstar: globstar, flags: 'g' });  // {}: Match a choice of different substrings  assertMatch("foo{bar,baaz}", "foobaaz", { extended: true });  assertMatch("foo{bar,baaz}", "foobar", { extended: true });  assertNotMatch("foo{bar,baaz}", "foobuzz", { extended: true });  assertMatch("foo{bar,b*z}", "foobuzz", { extended: true });  // {}: Match a choice of different substrings and RegExp 'g' (regression)  assertMatch("foo{bar,baaz}", "foobaaz", { extended: true,  globstar: globstar, flags: 'g' });  assertMatch("foo{bar,baaz}", "foobar", { extended: true,  globstar: globstar, flags: 'g' });  assertNotMatch("foo{bar,baaz}", "foobuzz", { extended: true,  globstar: globstar, flags: 'g' });  assertMatch("foo{bar,b*z}", "foobuzz", { extended: true,  globstar: globstar, flags: 'g' });  // More complex extended matches  assertMatch("http://?o[oz].b*z.com/{*.js,*.html}",              "http://foo.baaz.com/jquery.min.js",              { extended: true });  assertMatch("http://?o[oz].b*z.com/{*.js,*.html}",              "http://moz.buzz.com/index.html",              { extended: true });  assertNotMatch("http://?o[oz].b*z.com/{*.js,*.html}",                 "http://moz.buzz.com/index.htm",                 { extended: true });  assertNotMatch("http://?o[oz].b*z.com/{*.js,*.html}",                 "http://moz.bar.com/index.html",                 { extended: true });  assertNotMatch("http://?o[oz].b*z.com/{*.js,*.html}",                 "http://flozz.buzz.com/index.html",                 { extended: true });  // More complex extended matches and RegExp 'g' (regresion)  assertMatch("http://?o[oz].b*z.com/{*.js,*.html}",              "http://foo.baaz.com/jquery.min.js",              { extended: true,  globstar: globstar, flags: 'g' });  assertMatch("http://?o[oz].b*z.com/{*.js,*.html}",              "http://moz.buzz.com/index.html",              { extended: true,  globstar: globstar, flags: 'g' });  assertNotMatch("http://?o[oz].b*z.com/{*.js,*.html}",                 "http://moz.buzz.com/index.htm",                 { extended: true,  globstar: globstar, flags: 'g' });  assertNotMatch("http://?o[oz].b*z.com/{*.js,*.html}",                 "http://moz.bar.com/index.html",                 { extended: true,  globstar: globstar, flags: 'g' });  assertNotMatch("http://?o[oz].b*z.com/{*.js,*.html}",                 "http://flozz.buzz.com/index.html",                 { extended: true,  globstar: globstar, flags: 'g' });  // globstar  assertMatch("http://foo.com/**/{*.js,*.html}",              "http://foo.com/bar/jquery.min.js",              { extended: true,  globstar: globstar, flags: 'g' });  assertMatch("http://foo.com/**/{*.js,*.html}",              "http://foo.com/bar/baz/jquery.min.js",              { extended: true,  globstar: globstar, flags: 'g' });  assertMatch("http://foo.com/**",              "http://foo.com/bar/baz/jquery.min.js",              { extended: true,  globstar: globstar, flags: 'g' });  // Remaining special chars should still match themselves  var testExtStr = "\\/$^+.()=!|,.*"  assertMatch(testExtStr, testExtStr, { extended: true });  assertMatch(testExtStr, testExtStr, { extended: true,  globstar: globstar, flags: 'g' });}// regression// globstar falsetest(false)// globstar truetest(true);// globstar specific testsassertMatch("/foo/*", "/foo/bar.txt", {globstar: true });assertMatch("/foo/**", "/foo/baz.txt", {globstar: true });assertMatch("/foo/**", "/foo/bar/baz.txt", {globstar: true });assertMatch("/foo/*/*.txt", "/foo/bar/baz.txt", {globstar: true });assertMatch("/foo/**/*.txt", "/foo/bar/baz.txt", {globstar: true });assertMatch("/foo/**/*.txt", "/foo/bar/baz/qux.txt", {globstar: true });assertMatch("/foo/**/bar.txt", "/foo/bar.txt", {globstar: true });assertMatch("/foo/**/**/bar.txt", "/foo/bar.txt", {globstar: true });assertMatch("/foo/**/*/baz.txt", "/foo/bar/baz.txt", {globstar: true });assertMatch("/foo/**/*.txt", "/foo/bar.txt", {globstar: true });assertMatch("/foo/**/**/*.txt", "/foo/bar.txt", {globstar: true });assertMatch("/foo/**/*/*.txt", "/foo/bar/baz.txt", {globstar: true });assertMatch("**/*.txt", "/foo/bar/baz/qux.txt", {globstar: true });assertMatch("**/foo.txt", "foo.txt", {globstar: true });assertMatch("**/*.txt", "foo.txt", {globstar: true });assertNotMatch("/foo/*", "/foo/bar/baz.txt", {globstar: true });assertNotMatch("/foo/*.txt", "/foo/bar/baz.txt", {globstar: true });assertNotMatch("/foo/*/*.txt", "/foo/bar/baz/qux.txt", {globstar: true });assertNotMatch("/foo/*/bar.txt", "/foo/bar.txt", {globstar: true });assertNotMatch("/foo/*/*/baz.txt", "/foo/bar/baz.txt", {globstar: true });assertNotMatch("/foo/**.txt", "/foo/bar/baz/qux.txt", {globstar: true });assertNotMatch("/foo/bar**/*.txt", "/foo/bar/baz/qux.txt", {globstar: true });assertNotMatch("/foo/bar**", "/foo/bar/baz.txt", {globstar: true });assertNotMatch("**/.txt", "/foo/bar/baz/qux.txt", {globstar: true });assertNotMatch("*/*.txt", "/foo/bar/baz/qux.txt", {globstar: true });assertNotMatch("*/*.txt", "foo.txt", {globstar: true });assertNotMatch("http://foo.com/*",               "http://foo.com/bar/baz/jquery.min.js",               { extended: true,  globstar: true });assertNotMatch("http://foo.com/*",               "http://foo.com/bar/baz/jquery.min.js",               { globstar: true });assertMatch("http://foo.com/*",            "http://foo.com/bar/baz/jquery.min.js",            { globstar: false });assertMatch("http://foo.com/**",            "http://foo.com/bar/baz/jquery.min.js",            { globstar: true });assertMatch("http://foo.com/*/*/jquery.min.js",            "http://foo.com/bar/baz/jquery.min.js",            { globstar: true });assertMatch("http://foo.com/**/jquery.min.js",            "http://foo.com/bar/baz/jquery.min.js",            { globstar: true });assertMatch("http://foo.com/*/*/jquery.min.js",            "http://foo.com/bar/baz/jquery.min.js",            { globstar: false });assertMatch("http://foo.com/*/jquery.min.js",            "http://foo.com/bar/baz/jquery.min.js",            { globstar: false });assertNotMatch("http://foo.com/*/jquery.min.js",               "http://foo.com/bar/baz/jquery.min.js",               { globstar: true });console.log("Ok!");
 |