369 lines
8 KiB
JavaScript
369 lines
8 KiB
JavaScript
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
|
* You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
const { parseURLPattern } = ChromeUtils.importESModule(
|
|
"chrome://remote/content/shared/webdriver/URLPattern.sys.mjs"
|
|
);
|
|
|
|
add_task(async function test_parseURLPattern_stringPatterns() {
|
|
const STRING_PATTERN_TESTS = [
|
|
{
|
|
input: "http://example.com",
|
|
protocol: "http",
|
|
hostname: "example.com",
|
|
port: "",
|
|
pathname: "/",
|
|
search: "",
|
|
},
|
|
{
|
|
input: "http://example.com/",
|
|
protocol: "http",
|
|
hostname: "example.com",
|
|
port: "",
|
|
pathname: "/",
|
|
search: "",
|
|
},
|
|
{
|
|
input: "http://EXAMPLE.com",
|
|
protocol: "http",
|
|
hostname: "example.com",
|
|
port: "",
|
|
pathname: "/",
|
|
search: "",
|
|
},
|
|
{
|
|
input: "http://example%2Ecom",
|
|
protocol: "http",
|
|
hostname: "example.com",
|
|
port: "",
|
|
pathname: "/",
|
|
search: "",
|
|
},
|
|
|
|
{
|
|
input: "http://example.com:80",
|
|
protocol: "http",
|
|
hostname: "example.com",
|
|
port: "",
|
|
pathname: "/",
|
|
search: "",
|
|
},
|
|
{
|
|
input: "http://example.com:8888",
|
|
protocol: "http",
|
|
hostname: "example.com",
|
|
port: "8888",
|
|
pathname: "/",
|
|
search: "",
|
|
},
|
|
{
|
|
input: "http://example.com/a////b",
|
|
protocol: "http",
|
|
hostname: "example.com",
|
|
port: "",
|
|
pathname: "/a////b",
|
|
search: "",
|
|
},
|
|
{
|
|
input: "http://example.com/?",
|
|
protocol: "http",
|
|
hostname: "example.com",
|
|
port: "",
|
|
pathname: "/",
|
|
search: "",
|
|
},
|
|
{
|
|
input: "http://example.com/??",
|
|
protocol: "http",
|
|
hostname: "example.com",
|
|
port: "",
|
|
pathname: "/",
|
|
search: "?",
|
|
},
|
|
{
|
|
input: "http://example.com/?/",
|
|
protocol: "http",
|
|
hostname: "example.com",
|
|
port: "",
|
|
pathname: "/",
|
|
search: "/",
|
|
},
|
|
{
|
|
input: "file:///testfolder/test.zip",
|
|
protocol: "file",
|
|
hostname: "",
|
|
port: null,
|
|
pathname: "/testfolder/test.zip",
|
|
search: "",
|
|
},
|
|
{
|
|
input: "http://example\\{.com/",
|
|
protocol: "http",
|
|
hostname: "example{.com",
|
|
port: "",
|
|
pathname: "/",
|
|
search: "",
|
|
},
|
|
{
|
|
input: "http://[2001:db8::1]/",
|
|
protocol: "http",
|
|
hostname: "[2001:db8::1]",
|
|
port: "",
|
|
pathname: "/",
|
|
search: "",
|
|
},
|
|
{
|
|
input: "http://127.0.0.1/",
|
|
protocol: "http",
|
|
hostname: "127.0.0.1",
|
|
port: "",
|
|
pathname: "/",
|
|
search: "",
|
|
},
|
|
];
|
|
|
|
for (const test of STRING_PATTERN_TESTS) {
|
|
const pattern = parseURLPattern({
|
|
type: "string",
|
|
pattern: test.input,
|
|
});
|
|
|
|
equal(pattern.protocol, "protocol" in test ? test.protocol : null);
|
|
equal(pattern.hostname, "hostname" in test ? test.hostname : null);
|
|
equal(pattern.port, "port" in test ? test.port : null);
|
|
equal(pattern.pathname, "pathname" in test ? test.pathname : null);
|
|
equal(pattern.search, "search" in test ? test.search : null);
|
|
}
|
|
});
|
|
|
|
add_task(async function test_parseURLPattern_patternPatterns() {
|
|
const PATTERN_PATTERN_TESTS = [
|
|
{
|
|
pattern: {
|
|
protocol: "http",
|
|
},
|
|
protocol: "http",
|
|
hostname: null,
|
|
port: null,
|
|
pathname: null,
|
|
search: null,
|
|
},
|
|
{
|
|
pattern: {
|
|
protocol: "HTTP",
|
|
},
|
|
protocol: "http",
|
|
hostname: null,
|
|
port: null,
|
|
pathname: null,
|
|
search: null,
|
|
},
|
|
{
|
|
pattern: {
|
|
hostname: "example.com",
|
|
},
|
|
protocol: null,
|
|
hostname: "example.com",
|
|
port: null,
|
|
pathname: null,
|
|
search: null,
|
|
},
|
|
{
|
|
pattern: {
|
|
hostname: "EXAMPLE.com",
|
|
},
|
|
protocol: null,
|
|
hostname: "example.com",
|
|
port: null,
|
|
pathname: null,
|
|
search: null,
|
|
},
|
|
{
|
|
pattern: {
|
|
hostname: "127.0.0.1",
|
|
},
|
|
protocol: null,
|
|
hostname: "127.0.0.1",
|
|
port: null,
|
|
pathname: null,
|
|
search: null,
|
|
},
|
|
{
|
|
pattern: {
|
|
hostname: "[2001:db8::1]",
|
|
},
|
|
protocol: null,
|
|
hostname: "[2001:db8::1]",
|
|
port: null,
|
|
pathname: null,
|
|
search: null,
|
|
},
|
|
{
|
|
pattern: {
|
|
port: "80",
|
|
},
|
|
protocol: null,
|
|
hostname: null,
|
|
port: "",
|
|
pathname: null,
|
|
search: null,
|
|
},
|
|
{
|
|
pattern: {
|
|
port: "1234",
|
|
},
|
|
protocol: null,
|
|
hostname: null,
|
|
port: "1234",
|
|
pathname: null,
|
|
search: null,
|
|
},
|
|
{
|
|
pattern: {
|
|
pathname: "path/to",
|
|
},
|
|
protocol: null,
|
|
hostname: null,
|
|
port: null,
|
|
pathname: "/path/to",
|
|
search: null,
|
|
},
|
|
{
|
|
pattern: {
|
|
pathname: "/path/to",
|
|
},
|
|
protocol: null,
|
|
hostname: null,
|
|
port: null,
|
|
pathname: "/path/to",
|
|
search: null,
|
|
},
|
|
{
|
|
pattern: {
|
|
pathname: "/path/to/",
|
|
},
|
|
protocol: null,
|
|
hostname: null,
|
|
port: null,
|
|
pathname: "/path/to/",
|
|
search: null,
|
|
},
|
|
{
|
|
pattern: {
|
|
search: "?search",
|
|
},
|
|
protocol: null,
|
|
hostname: null,
|
|
port: null,
|
|
pathname: null,
|
|
search: "search",
|
|
},
|
|
{
|
|
pattern: {
|
|
search: "search",
|
|
},
|
|
protocol: null,
|
|
hostname: null,
|
|
port: null,
|
|
pathname: null,
|
|
search: "search",
|
|
},
|
|
{
|
|
pattern: {
|
|
search: "?search=something",
|
|
},
|
|
protocol: null,
|
|
hostname: null,
|
|
port: null,
|
|
pathname: null,
|
|
search: "search=something",
|
|
},
|
|
{
|
|
pattern: {
|
|
search: "search=something",
|
|
},
|
|
protocol: null,
|
|
hostname: null,
|
|
port: null,
|
|
pathname: null,
|
|
search: "search=something",
|
|
},
|
|
];
|
|
|
|
for (const test of PATTERN_PATTERN_TESTS) {
|
|
const pattern = parseURLPattern({
|
|
type: "pattern",
|
|
...test.pattern,
|
|
});
|
|
|
|
equal(pattern.protocol, "protocol" in test ? test.protocol : null);
|
|
equal(pattern.hostname, "hostname" in test ? test.hostname : null);
|
|
equal(pattern.port, "port" in test ? test.port : null);
|
|
equal(pattern.pathname, "pathname" in test ? test.pathname : null);
|
|
equal(pattern.search, "search" in test ? test.search : null);
|
|
}
|
|
});
|
|
|
|
add_task(async function test_parseURLPattern_invalid_type() {
|
|
const values = [null, undefined, 1, [], "string"];
|
|
for (const value of values) {
|
|
Assert.throws(() => parseURLPattern(value), /InvalidArgumentError/);
|
|
}
|
|
});
|
|
|
|
add_task(async function test_parseURLPattern_invalid_type_type() {
|
|
const values = [null, undefined, 1, {}, []];
|
|
for (const type of values) {
|
|
Assert.throws(() => parseURLPattern({ type }), /InvalidArgumentError/);
|
|
}
|
|
});
|
|
|
|
add_task(async function test_parseURLPattern_invalid_type_value() {
|
|
const values = ["", "unknownType"];
|
|
for (const type of values) {
|
|
Assert.throws(() => parseURLPattern({ type }), /InvalidArgumentError/);
|
|
}
|
|
});
|
|
|
|
add_task(async function test_parseURLPattern_invalid_stringPatternType() {
|
|
const values = [null, undefined, 1, {}, []];
|
|
for (const pattern of values) {
|
|
Assert.throws(
|
|
() => parseURLPattern({ type: "string", pattern }),
|
|
/InvalidArgumentError/
|
|
);
|
|
}
|
|
});
|
|
|
|
add_task(async function test_parseURLPattern_invalid_stringPattern() {
|
|
const values = [
|
|
"foo",
|
|
"*",
|
|
"(",
|
|
")",
|
|
"{",
|
|
"}",
|
|
"http\\{s\\}://example.com",
|
|
"https://example.com:port/",
|
|
];
|
|
for (const pattern of values) {
|
|
Assert.throws(
|
|
() => parseURLPattern({ type: "string", pattern }),
|
|
/InvalidArgumentError/
|
|
);
|
|
}
|
|
});
|
|
|
|
add_task(async function test_parseURLPattern_invalid_patternPattern_type() {
|
|
const properties = ["protocol", "hostname", "port", "pathname", "search"];
|
|
const values = [false, 42, [], {}];
|
|
for (const property of properties) {
|
|
for (const value of values) {
|
|
Assert.throws(
|
|
() => parseURLPattern({ type: "pattern", [property]: value }),
|
|
/InvalidArgumentError/
|
|
);
|
|
}
|
|
}
|
|
});
|