| 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 false | 
| test(false) | 
| // globstar true | 
| test(true); | 
|   | 
| // globstar specific tests | 
| assertMatch("/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!"); |