/* Any copyright is dedicated to the Public Domain. http://creativecommons.org/publicdomain/zero/1.0/ */ "use strict"; Components.utils.import("resource://gre/modules/MatchPattern.jsm"); Components.utils.import("resource://gre/modules/Services.jsm"); function test(url, pattern) { let uri = Services.io.newURI(url, null, null); let m = new MatchPattern(pattern); return m.matches(uri); } function pass({url, pattern}) { do_check_true(test(url, pattern), `Expected match: ${JSON.stringify(pattern)}, ${url}`); } function fail({url, pattern}) { do_check_false(test(url, pattern), `Expected no match: ${JSON.stringify(pattern)}, ${url}`); } function run_test() { // Invalid pattern. fail({url: "http://mozilla.org", pattern: ""}); // Pattern must include trailing slash. fail({url: "http://mozilla.org", pattern: "http://mozilla.org"}); // Protocol not allowed. fail({url: "http://mozilla.org", pattern: "gopher://wuarchive.wustl.edu/"}); pass({url: "http://mozilla.org", pattern: "http://mozilla.org/"}); pass({url: "http://mozilla.org/", pattern: "http://mozilla.org/"}); pass({url: "http://mozilla.org/", pattern: "*://mozilla.org/"}); pass({url: "https://mozilla.org/", pattern: "*://mozilla.org/"}); fail({url: "file://mozilla.org/", pattern: "*://mozilla.org/"}); fail({url: "ftp://mozilla.org/", pattern: "*://mozilla.org/"}); fail({url: "http://mozilla.com", pattern: "http://*mozilla.com*/"}); fail({url: "http://mozilla.com", pattern: "http://mozilla.*/"}); fail({url: "http://mozilla.com", pattern: "http:/mozilla.com/"}); pass({url: "http://google.com", pattern: "http://*.google.com/"}); pass({url: "http://docs.google.com", pattern: "http://*.google.com/"}); pass({url: "http://mozilla.org:8080", pattern: "http://mozilla.org/"}); pass({url: "http://mozilla.org:8080", pattern: "*://mozilla.org/"}); fail({url: "http://mozilla.org:8080", pattern: "http://mozilla.org:8080/"}); // Now try with * in the path. pass({url: "http://mozilla.org", pattern: "http://mozilla.org/*"}); pass({url: "http://mozilla.org/", pattern: "http://mozilla.org/*"}); pass({url: "http://mozilla.org/", pattern: "*://mozilla.org/*"}); pass({url: "https://mozilla.org/", pattern: "*://mozilla.org/*"}); fail({url: "file://mozilla.org/", pattern: "*://mozilla.org/*"}); fail({url: "http://mozilla.com", pattern: "http://mozilla.*/*"}); pass({url: "http://google.com", pattern: "http://*.google.com/*"}); pass({url: "http://docs.google.com", pattern: "http://*.google.com/*"}); // Check path stuff. fail({url: "http://mozilla.com/abc/def", pattern: "http://mozilla.com/"}); pass({url: "http://mozilla.com/abc/def", pattern: "http://mozilla.com/*"}); pass({url: "http://mozilla.com/abc/def", pattern: "http://mozilla.com/a*f"}); pass({url: "http://mozilla.com/abc/def", pattern: "http://mozilla.com/a*"}); pass({url: "http://mozilla.com/abc/def", pattern: "http://mozilla.com/*f"}); fail({url: "http://mozilla.com/abc/def", pattern: "http://mozilla.com/*e"}); fail({url: "http://mozilla.com/abc/def", pattern: "http://mozilla.com/*c"}); fail({url: "http:///a.html", pattern: "http:///a.html"}); pass({url: "file:///foo", pattern: "file:///foo*"}); pass({url: "file:///foo/bar.html", pattern: "file:///foo*"}); pass({url: "http://mozilla.org/a", pattern: ""}); pass({url: "https://mozilla.org/a", pattern: ""}); pass({url: "ftp://mozilla.org/a", pattern: ""}); pass({url: "file:///a", pattern: ""}); fail({url: "gopher://wuarchive.wustl.edu/a", pattern: ""}); // Multiple patterns. pass({url: "http://mozilla.org", pattern: ["http://mozilla.org/"]}); pass({url: "http://mozilla.org", pattern: ["http://mozilla.org/", "http://mozilla.com/"]}); pass({url: "http://mozilla.com", pattern: ["http://mozilla.org/", "http://mozilla.com/"]}); fail({url: "http://mozilla.biz", pattern: ["http://mozilla.org/", "http://mozilla.com/"]}); // Match url with fragments. pass({url: "http://mozilla.org/base#some-fragment", pattern: "http://mozilla.org/base"}); }