summaryrefslogtreecommitdiffstats
path: root/third_party/rust/url/tests
diff options
context:
space:
mode:
authorwolfbeast <mcwerewolf@gmail.com>2018-03-13 13:38:57 +0100
committerwolfbeast <mcwerewolf@gmail.com>2018-03-13 13:38:57 +0100
commit38d185280e2cad4ed6673bb38f707f54dad4ded7 (patch)
treebbbb7df9a9f18c5fd3caf406d7f5bc9e13168d1f /third_party/rust/url/tests
parent7c68c5a22cfe8f83322836a1a6a76a8ae0415ec1 (diff)
downloadUXP-38d185280e2cad4ed6673bb38f707f54dad4ded7.tar
UXP-38d185280e2cad4ed6673bb38f707f54dad4ded7.tar.gz
UXP-38d185280e2cad4ed6673bb38f707f54dad4ded7.tar.lz
UXP-38d185280e2cad4ed6673bb38f707f54dad4ded7.tar.xz
UXP-38d185280e2cad4ed6673bb38f707f54dad4ded7.zip
Remove Rust from the tree.
Part 4 for #58
Diffstat (limited to 'third_party/rust/url/tests')
-rw-r--r--third_party/rust/url/tests/data.rs193
-rw-r--r--third_party/rust/url/tests/setters_tests.json1148
-rw-r--r--third_party/rust/url/tests/unit.rs303
-rw-r--r--third_party/rust/url/tests/urltestdata.json4277
4 files changed, 0 insertions, 5921 deletions
diff --git a/third_party/rust/url/tests/data.rs b/third_party/rust/url/tests/data.rs
deleted file mode 100644
index b8945aa48..000000000
--- a/third_party/rust/url/tests/data.rs
+++ /dev/null
@@ -1,193 +0,0 @@
-// Copyright 2013-2014 The rust-url developers.
-//
-// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
-// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
-// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
-// option. This file may not be copied, modified, or distributed
-// except according to those terms.
-
-//! Data-driven tests
-
-extern crate rustc_serialize;
-extern crate test;
-extern crate url;
-
-use rustc_serialize::json::{self, Json};
-use url::{Url, quirks};
-
-
-fn run_parsing(input: String, base: String, expected: Result<ExpectedAttributes, ()>) {
- let base = match Url::parse(&base) {
- Ok(base) => base,
- Err(message) => panic!("Error parsing base {:?}: {}", base, message)
- };
- let (url, expected) = match (base.join(&input), expected) {
- (Ok(url), Ok(expected)) => (url, expected),
- (Err(_), Err(())) => return,
- (Err(message), Ok(_)) => panic!("Error parsing URL {:?}: {}", input, message),
- (Ok(_), Err(())) => panic!("Expected a parse error for URL {:?}", input),
- };
-
- url.assert_invariants();
-
- macro_rules! assert_eq {
- ($expected: expr, $got: expr) => {
- {
- let expected = $expected;
- let got = $got;
- assert!(expected == got, "{:?} != {} {:?} for URL {:?}",
- got, stringify!($expected), expected, url);
- }
- }
- }
-
- macro_rules! assert_attributes {
- ($($attr: ident)+) => {
- {
- $(
- assert_eq!(expected.$attr, quirks::$attr(&url));
- )+;
- }
- }
- }
-
- assert_attributes!(href protocol username password host hostname port pathname search hash);
-
- if let Some(expected_origin) = expected.origin {
- assert_eq!(expected_origin, quirks::origin(&url));
- }
-}
-
-struct ExpectedAttributes {
- href: String,
- origin: Option<String>,
- protocol: String,
- username: String,
- password: String,
- host: String,
- hostname: String,
- port: String,
- pathname: String,
- search: String,
- hash: String,
-}
-
-trait JsonExt {
- fn take(&mut self, key: &str) -> Option<Json>;
- fn object(self) -> json::Object;
- fn string(self) -> String;
- fn take_string(&mut self, key: &str) -> String;
-}
-
-impl JsonExt for Json {
- fn take(&mut self, key: &str) -> Option<Json> {
- self.as_object_mut().unwrap().remove(key)
- }
-
- fn object(self) -> json::Object {
- if let Json::Object(o) = self { o } else { panic!("Not a Json::Object") }
- }
-
- fn string(self) -> String {
- if let Json::String(s) = self { s } else { panic!("Not a Json::String") }
- }
-
- fn take_string(&mut self, key: &str) -> String {
- self.take(key).unwrap().string()
- }
-}
-
-fn collect_parsing<F: FnMut(String, test::TestFn)>(add_test: &mut F) {
- // Copied form https://github.com/w3c/web-platform-tests/blob/master/url/
- let mut json = Json::from_str(include_str!("urltestdata.json"))
- .expect("JSON parse error in urltestdata.json");
- for entry in json.as_array_mut().unwrap() {
- if entry.is_string() {
- continue // ignore comments
- }
- let base = entry.take_string("base");
- let input = entry.take_string("input");
- let expected = if entry.find("failure").is_some() {
- Err(())
- } else {
- Ok(ExpectedAttributes {
- href: entry.take_string("href"),
- origin: entry.take("origin").map(Json::string),
- protocol: entry.take_string("protocol"),
- username: entry.take_string("username"),
- password: entry.take_string("password"),
- host: entry.take_string("host"),
- hostname: entry.take_string("hostname"),
- port: entry.take_string("port"),
- pathname: entry.take_string("pathname"),
- search: entry.take_string("search"),
- hash: entry.take_string("hash"),
- })
- };
- add_test(format!("{:?} @ base {:?}", input, base),
- test::TestFn::dyn_test_fn(move || run_parsing(input, base, expected)));
- }
-}
-
-fn collect_setters<F>(add_test: &mut F) where F: FnMut(String, test::TestFn) {
- let mut json = Json::from_str(include_str!("setters_tests.json"))
- .expect("JSON parse error in setters_tests.json");
-
- macro_rules! setter {
- ($attr: expr, $setter: ident) => {{
- let mut tests = json.take($attr).unwrap();
- for mut test in tests.as_array_mut().unwrap().drain(..) {
- let comment = test.take("comment").map(Json::string).unwrap_or(String::new());
- let href = test.take_string("href");
- let new_value = test.take_string("new_value");
- let name = format!("{:?}.{} = {:?} {}", href, $attr, new_value, comment);
- let mut expected = test.take("expected").unwrap();
- add_test(name, test::TestFn::dyn_test_fn(move || {
- let mut url = Url::parse(&href).unwrap();
- url.assert_invariants();
- let _ = quirks::$setter(&mut url, &new_value);
- assert_attributes!(url, expected,
- href protocol username password host hostname port pathname search hash);
- url.assert_invariants();
- }))
- }
- }}
- }
- macro_rules! assert_attributes {
- ($url: expr, $expected: expr, $($attr: ident)+) => {
- $(
- if let Some(value) = $expected.take(stringify!($attr)) {
- assert_eq!(quirks::$attr(&$url), value.string())
- }
- )+
- }
- }
- setter!("protocol", set_protocol);
- setter!("username", set_username);
- setter!("password", set_password);
- setter!("hostname", set_hostname);
- setter!("host", set_host);
- setter!("port", set_port);
- setter!("pathname", set_pathname);
- setter!("search", set_search);
- setter!("hash", set_hash);
-}
-
-fn main() {
- let mut tests = Vec::new();
- {
- let mut add_one = |name: String, run: test::TestFn| {
- tests.push(test::TestDescAndFn {
- desc: test::TestDesc {
- name: test::DynTestName(name),
- ignore: false,
- should_panic: test::ShouldPanic::No,
- },
- testfn: run,
- })
- };
- collect_parsing(&mut add_one);
- collect_setters(&mut add_one);
- }
- test::test_main(&std::env::args().collect::<Vec<_>>(), tests)
-}
diff --git a/third_party/rust/url/tests/setters_tests.json b/third_party/rust/url/tests/setters_tests.json
deleted file mode 100644
index 669cc084a..000000000
--- a/third_party/rust/url/tests/setters_tests.json
+++ /dev/null
@@ -1,1148 +0,0 @@
-{
- "comment": [
- "## Tests for setters of https://url.spec.whatwg.org/#urlutils-members",
- "",
- "This file contains a JSON object.",
- "Other than 'comment', each key is an attribute of the `URL` interface",
- "defined in WHATWG’s URL Standard.",
- "The values are arrays of test case objects for that attribute.",
- "",
- "To run a test case for the attribute `attr`:",
- "",
- "* Create a new `URL` object with the value for the 'href' key",
- " the constructor single parameter. (Without a base URL.)",
- " This must not throw.",
- "* Set the attribute `attr` to (invoke its setter with)",
- " with the value of for 'new_value' key.",
- "* The value for the 'expected' key is another object.",
- " For each `key` / `value` pair of that object,",
- " get the attribute `key` (invoke its getter).",
- " The returned string must be equal to `value`.",
- "",
- "Note: the 'href' setter is already covered by urltestdata.json."
- ],
- "protocol": [
- {
- "comment": "The empty string is not a valid scheme. Setter leaves the URL unchanged.",
- "href": "a://example.net",
- "new_value": "",
- "expected": {
- "href": "a://example.net/",
- "protocol": "a:"
- }
- },
- {
- "href": "a://example.net",
- "new_value": "b",
- "expected": {
- "href": "b://example.net/",
- "protocol": "b:"
- }
- },
- {
- "comment": "Upper-case ASCII is lower-cased",
- "href": "a://example.net",
- "new_value": "B",
- "expected": {
- "href": "b://example.net/",
- "protocol": "b:"
- }
- },
- {
- "comment": "Non-ASCII is rejected",
- "href": "a://example.net",
- "new_value": "é",
- "expected": {
- "href": "a://example.net/",
- "protocol": "a:"
- }
- },
- {
- "comment": "No leading digit",
- "href": "a://example.net",
- "new_value": "0b",
- "expected": {
- "href": "a://example.net/",
- "protocol": "a:"
- }
- },
- {
- "comment": "No leading punctuation",
- "href": "a://example.net",
- "new_value": "+b",
- "expected": {
- "href": "a://example.net/",
- "protocol": "a:"
- }
- },
- {
- "href": "a://example.net",
- "new_value": "bC0+-.",
- "expected": {
- "href": "bc0+-.://example.net/",
- "protocol": "bc0+-.:"
- }
- },
- {
- "comment": "Only some punctuation is acceptable",
- "href": "a://example.net",
- "new_value": "b,c",
- "expected": {
- "href": "a://example.net/",
- "protocol": "a:"
- }
- },
- {
- "comment": "Non-ASCII is rejected",
- "href": "a://example.net",
- "new_value": "bé",
- "expected": {
- "href": "a://example.net/",
- "protocol": "a:"
- }
- },
- {
- "comment": "Spec deviation: from special scheme to not is not problematic. https://github.com/whatwg/url/issues/104",
- "href": "http://example.net",
- "new_value": "b",
- "expected": {
- "href": "b://example.net/",
- "protocol": "b:"
- }
- },
- {
- "comment": "Cannot-be-a-base URL doesn’t have a host, but URL in a special scheme must.",
- "href": "mailto:me@example.net",
- "new_value": "http",
- "expected": {
- "href": "mailto:me@example.net",
- "protocol": "mailto:"
- }
- },
- {
- "comment": "Spec deviation: from non-special scheme with a host to special is not problematic. https://github.com/whatwg/url/issues/104",
- "href": "ssh://me@example.net",
- "new_value": "http",
- "expected": {
- "href": "http://me@example.net/",
- "protocol": "http:"
- }
- },
- {
- "comment": "Stuff after the first ':' is ignored",
- "href": "http://example.net",
- "new_value": "https:foo : bar",
- "expected": {
- "href": "https://example.net/",
- "protocol": "https:"
- }
- },
- {
- "comment": "Stuff after the first ':' is ignored",
- "href": "data:text/html,<p>Test",
- "new_value": "view-source+data:foo : bar",
- "expected": {
- "href": "view-source+data:text/html,<p>Test",
- "protocol": "view-source+data:"
- }
- }
- ],
- "username": [
- {
- "comment": "No host means no username",
- "href": "file:///home/you/index.html",
- "new_value": "me",
- "expected": {
- "href": "file:///home/you/index.html",
- "username": ""
- }
- },
- {
- "comment": "No host means no username",
- "href": "unix:/run/foo.socket",
- "new_value": "me",
- "expected": {
- "href": "unix:/run/foo.socket",
- "username": ""
- }
- },
- {
- "comment": "Cannot-be-a-base means no username",
- "href": "mailto:you@example.net",
- "new_value": "me",
- "expected": {
- "href": "mailto:you@example.net",
- "username": ""
- }
- },
- {
- "href": "http://example.net",
- "new_value": "me",
- "expected": {
- "href": "http://me@example.net/",
- "username": "me"
- }
- },
- {
- "href": "http://:secret@example.net",
- "new_value": "me",
- "expected": {
- "href": "http://me:secret@example.net/",
- "username": "me"
- }
- },
- {
- "href": "http://me@example.net",
- "new_value": "",
- "expected": {
- "href": "http://example.net/",
- "username": ""
- }
- },
- {
- "href": "http://me:secret@example.net",
- "new_value": "",
- "expected": {
- "href": "http://:secret@example.net/",
- "username": ""
- }
- },
- {
- "comment": "UTF-8 percent encoding with the userinfo encode set.",
- "href": "http://example.net",
- "new_value": "\u0000\u0001\t\n\r\u001f !\"#$%&'()*+,-./09:;<=>?@AZ[\\]^_`az{|}~\u007f\u0080\u0081Éé",
- "expected": {
- "href": "http://%00%01%09%0A%0D%1F%20!%22%23$%&'()*+,-.%2F09%3A%3B%3C%3D%3E%3F%40AZ%5B%5C%5D%5E_%60az%7B%7C%7D~%7F%C2%80%C2%81%C3%89%C3%A9@example.net/",
- "username": "%00%01%09%0A%0D%1F%20!%22%23$%&'()*+,-.%2F09%3A%3B%3C%3D%3E%3F%40AZ%5B%5C%5D%5E_%60az%7B%7C%7D~%7F%C2%80%C2%81%C3%89%C3%A9"
- }
- },
- {
- "comment": "Bytes already percent-encoded are left as-is.",
- "href": "http://example.net",
- "new_value": "%c3%89té",
- "expected": {
- "href": "http://%c3%89t%C3%A9@example.net/",
- "username": "%c3%89t%C3%A9"
- }
- }
- ],
- "password": [
- {
- "comment": "No host means no password",
- "href": "file:///home/me/index.html",
- "new_value": "secret",
- "expected": {
- "href": "file:///home/me/index.html",
- "password": ""
- }
- },
- {
- "comment": "No host means no password",
- "href": "unix:/run/foo.socket",
- "new_value": "secret",
- "expected": {
- "href": "unix:/run/foo.socket",
- "password": ""
- }
- },
- {
- "comment": "Cannot-be-a-base means no password",
- "href": "mailto:me@example.net",
- "new_value": "secret",
- "expected": {
- "href": "mailto:me@example.net",
- "password": ""
- }
- },
- {
- "href": "http://example.net",
- "new_value": "secret",
- "expected": {
- "href": "http://:secret@example.net/",
- "password": "secret"
- }
- },
- {
- "href": "http://me@example.net",
- "new_value": "secret",
- "expected": {
- "href": "http://me:secret@example.net/",
- "password": "secret"
- }
- },
- {
- "href": "http://:secret@example.net",
- "new_value": "",
- "expected": {
- "href": "http://example.net/",
- "password": ""
- }
- },
- {
- "href": "http://me:secret@example.net",
- "new_value": "",
- "expected": {
- "href": "http://me@example.net/",
- "password": ""
- }
- },
- {
- "comment": "UTF-8 percent encoding with the userinfo encode set.",
- "href": "http://example.net",
- "new_value": "\u0000\u0001\t\n\r\u001f !\"#$%&'()*+,-./09:;<=>?@AZ[\\]^_`az{|}~\u007f\u0080\u0081Éé",
- "expected": {
- "href": "http://:%00%01%09%0A%0D%1F%20!%22%23$%&'()*+,-.%2F09%3A%3B%3C%3D%3E%3F%40AZ%5B%5C%5D%5E_%60az%7B%7C%7D~%7F%C2%80%C2%81%C3%89%C3%A9@example.net/",
- "password": "%00%01%09%0A%0D%1F%20!%22%23$%&'()*+,-.%2F09%3A%3B%3C%3D%3E%3F%40AZ%5B%5C%5D%5E_%60az%7B%7C%7D~%7F%C2%80%C2%81%C3%89%C3%A9"
- }
- },
- {
- "comment": "Bytes already percent-encoded are left as-is.",
- "href": "http://example.net",
- "new_value": "%c3%89té",
- "expected": {
- "href": "http://:%c3%89t%C3%A9@example.net/",
- "password": "%c3%89t%C3%A9"
- }
- }
- ],
- "host": [
- {
- "comment": "Cannot-be-a-base means no host",
- "href": "mailto:me@example.net",
- "new_value": "example.com",
- "expected": {
- "href": "mailto:me@example.net",
- "host": ""
- }
- },
- {
- "comment": "Cannot-be-a-base means no password",
- "href": "data:text/plain,Stuff",
- "new_value": "example.net",
- "expected": {
- "href": "data:text/plain,Stuff",
- "host": ""
- }
- },
- {
- "href": "http://example.net",
- "new_value": "example.com:8080",
- "expected": {
- "href": "http://example.com:8080/",
- "host": "example.com:8080",
- "hostname": "example.com",
- "port": "8080"
- }
- },
- {
- "comment": "Port number is unchanged if not specified in the new value",
- "href": "http://example.net:8080",
- "new_value": "example.com",
- "expected": {
- "href": "http://example.com:8080/",
- "host": "example.com:8080",
- "hostname": "example.com",
- "port": "8080"
- }
- },
- {
- "comment": "Port number is removed if empty in the new value: https://github.com/whatwg/url/pull/113",
- "href": "http://example.net:8080",
- "new_value": "example.com:",
- "expected": {
- "href": "http://example.com/",
- "host": "example.com",
- "hostname": "example.com",
- "port": ""
- }
- },
- {
- "comment": "The empty host is not valid for special schemes",
- "href": "http://example.net",
- "new_value": "",
- "expected": {
- "href": "http://example.net/",
- "host": "example.net"
- }
- },
- {
- "comment": "The empty host is OK for non-special schemes",
- "href": "view-source+http://example.net/foo",
- "new_value": "",
- "expected": {
- "href": "view-source+http:///foo",
- "host": ""
- }
- },
- {
- "comment": "Path-only URLs can gain a host",
- "href": "a:/foo",
- "new_value": "example.net",
- "expected": {
- "href": "a://example.net/foo",
- "host": "example.net"
- }
- },
- {
- "comment": "Path-only URLs can gain a host",
- "href": "a:/foo",
- "new_value": "example.net",
- "expected": {
- "href": "a://example.net/foo",
- "host": "example.net"
- }
- },
- {
- "comment": "IPv4 address syntax is normalized",
- "href": "http://example.net",
- "new_value": "0x7F000001:8080",
- "expected": {
- "href": "http://127.0.0.1:8080/",
- "host": "127.0.0.1:8080",
- "hostname": "127.0.0.1",
- "port": "8080"
- }
- },
- {
- "comment": "IPv6 address syntax is normalized",
- "href": "http://example.net",
- "new_value": "[::0:01]:2",
- "expected": {
- "href": "http://[::1]:2/",
- "host": "[::1]:2",
- "hostname": "[::1]",
- "port": "2"
- }
- },
- {
- "comment": "Default port number is removed",
- "href": "http://example.net",
- "new_value": "example.com:80",
- "expected": {
- "href": "http://example.com/",
- "host": "example.com",
- "hostname": "example.com",
- "port": ""
- }
- },
- {
- "comment": "Default port number is removed",
- "href": "https://example.net",
- "new_value": "example.com:443",
- "expected": {
- "href": "https://example.com/",
- "host": "example.com",
- "hostname": "example.com",
- "port": ""
- }
- },
- {
- "comment": "Default port number is only removed for the relevant scheme",
- "href": "https://example.net",
- "new_value": "example.com:80",
- "expected": {
- "href": "https://example.com:80/",
- "host": "example.com:80",
- "hostname": "example.com",
- "port": "80"
- }
- },
- {
- "comment": "Stuff after a / delimiter is ignored",
- "href": "http://example.net/path",
- "new_value": "example.com/stuff",
- "expected": {
- "href": "http://example.com/path",
- "host": "example.com",
- "hostname": "example.com",
- "port": ""
- }
- },
- {
- "comment": "Stuff after a / delimiter is ignored",
- "href": "http://example.net/path",
- "new_value": "example.com:8080/stuff",
- "expected": {
- "href": "http://example.com:8080/path",
- "host": "example.com:8080",
- "hostname": "example.com",
- "port": "8080"
- }
- },
- {
- "comment": "Stuff after a ? delimiter is ignored",
- "href": "http://example.net/path",
- "new_value": "example.com?stuff",
- "expected": {
- "href": "http://example.com/path",
- "host": "example.com",
- "hostname": "example.com",
- "port": ""
- }
- },
- {
- "comment": "Stuff after a ? delimiter is ignored",
- "href": "http://example.net/path",
- "new_value": "example.com:8080?stuff",
- "expected": {
- "href": "http://example.com:8080/path",
- "host": "example.com:8080",
- "hostname": "example.com",
- "port": "8080"
- }
- },
- {
- "comment": "Stuff after a # delimiter is ignored",
- "href": "http://example.net/path",
- "new_value": "example.com#stuff",
- "expected": {
- "href": "http://example.com/path",
- "host": "example.com",
- "hostname": "example.com",
- "port": ""
- }
- },
- {
- "comment": "Stuff after a # delimiter is ignored",
- "href": "http://example.net/path",
- "new_value": "example.com:8080#stuff",
- "expected": {
- "href": "http://example.com:8080/path",
- "host": "example.com:8080",
- "hostname": "example.com",
- "port": "8080"
- }
- },
- {
- "comment": "Stuff after a \\ delimiter is ignored for special schemes",
- "href": "http://example.net/path",
- "new_value": "example.com\\stuff",
- "expected": {
- "href": "http://example.com/path",
- "host": "example.com",
- "hostname": "example.com",
- "port": ""
- }
- },
- {
- "comment": "Stuff after a \\ delimiter is ignored for special schemes",
- "href": "http://example.net/path",
- "new_value": "example.com:8080\\stuff",
- "expected": {
- "href": "http://example.com:8080/path",
- "host": "example.com:8080",
- "hostname": "example.com",
- "port": "8080"
- }
- },
- {
- "comment": "\\ is not a delimiter for non-special schemes, and it’s invalid in a domain",
- "href": "view-source+http://example.net/path",
- "new_value": "example.com\\stuff",
- "expected": {
- "href": "view-source+http://example.net/path",
- "host": "example.net",
- "hostname": "example.net",
- "port": ""
- }
- },
- {
- "comment": "Anything other than ASCII digit stops the port parser in a setter but is not an error",
- "href": "view-source+http://example.net/path",
- "new_value": "example.com:8080stuff2",
- "expected": {
- "href": "view-source+http://example.com:8080/path",
- "host": "example.com:8080",
- "hostname": "example.com",
- "port": "8080"
- }
- },
- {
- "comment": "Anything other than ASCII digit stops the port parser in a setter but is not an error",
- "href": "http://example.net/path",
- "new_value": "example.com:8080stuff2",
- "expected": {
- "href": "http://example.com:8080/path",
- "host": "example.com:8080",
- "hostname": "example.com",
- "port": "8080"
- }
- },
- {
- "comment": "Anything other than ASCII digit stops the port parser in a setter but is not an error",
- "href": "http://example.net/path",
- "new_value": "example.com:8080+2",
- "expected": {
- "href": "http://example.com:8080/path",
- "host": "example.com:8080",
- "hostname": "example.com",
- "port": "8080"
- }
- },
- {
- "comment": "Port numbers are 16 bit integers",
- "href": "http://example.net/path",
- "new_value": "example.com:65535",
- "expected": {
- "href": "http://example.com:65535/path",
- "host": "example.com:65535",
- "hostname": "example.com",
- "port": "65535"
- }
- },
- {
- "comment": "Port numbers are 16 bit integers, overflowing is an error. Hostname is still set, though.",
- "href": "http://example.net/path",
- "new_value": "example.com:65536",
- "expected": {
- "href": "http://example.com/path",
- "host": "example.com",
- "hostname": "example.com",
- "port": ""
- }
- }
- ],
- "hostname": [
- {
- "comment": "Cannot-be-a-base means no host",
- "href": "mailto:me@example.net",
- "new_value": "example.com",
- "expected": {
- "href": "mailto:me@example.net",
- "host": ""
- }
- },
- {
- "comment": "Cannot-be-a-base means no password",
- "href": "data:text/plain,Stuff",
- "new_value": "example.net",
- "expected": {
- "href": "data:text/plain,Stuff",
- "host": ""
- }
- },
- {
- "href": "http://example.net:8080",
- "new_value": "example.com",
- "expected": {
- "href": "http://example.com:8080/",
- "host": "example.com:8080",
- "hostname": "example.com",
- "port": "8080"
- }
- },
- {
- "comment": "The empty host is not valid for special schemes",
- "href": "http://example.net",
- "new_value": "",
- "expected": {
- "href": "http://example.net/",
- "host": "example.net"
- }
- },
- {
- "comment": "The empty host is OK for non-special schemes",
- "href": "view-source+http://example.net/foo",
- "new_value": "",
- "expected": {
- "href": "view-source+http:///foo",
- "host": ""
- }
- },
- {
- "comment": "Path-only URLs can gain a host",
- "href": "a:/foo",
- "new_value": "example.net",
- "expected": {
- "href": "a://example.net/foo",
- "host": "example.net"
- }
- },
- {
- "comment": "Path-only URLs can gain a host",
- "href": "a:/foo",
- "new_value": "example.net",
- "expected": {
- "href": "a://example.net/foo",
- "host": "example.net"
- }
- },
- {
- "comment": "IPv4 address syntax is normalized",
- "href": "http://example.net:8080",
- "new_value": "0x7F000001",
- "expected": {
- "href": "http://127.0.0.1:8080/",
- "host": "127.0.0.1:8080",
- "hostname": "127.0.0.1",
- "port": "8080"
- }
- },
- {
- "comment": "IPv6 address syntax is normalized",
- "href": "http://example.net",
- "new_value": "[::0:01]",
- "expected": {
- "href": "http://[::1]/",
- "host": "[::1]",
- "hostname": "[::1]",
- "port": ""
- }
- },
- {
- "comment": "Stuff after a : delimiter is ignored",
- "href": "http://example.net/path",
- "new_value": "example.com:8080",
- "expected": {
- "href": "http://example.com/path",
- "host": "example.com",
- "hostname": "example.com",
- "port": ""
- }
- },
- {
- "comment": "Stuff after a : delimiter is ignored",
- "href": "http://example.net:8080/path",
- "new_value": "example.com:",
- "expected": {
- "href": "http://example.com:8080/path",
- "host": "example.com:8080",
- "hostname": "example.com",
- "port": "8080"
- }
- },
- {
- "comment": "Stuff after a / delimiter is ignored",
- "href": "http://example.net/path",
- "new_value": "example.com/stuff",
- "expected": {
- "href": "http://example.com/path",
- "host": "example.com",
- "hostname": "example.com",
- "port": ""
- }
- },
- {
- "comment": "Stuff after a ? delimiter is ignored",
- "href": "http://example.net/path",
- "new_value": "example.com?stuff",
- "expected": {
- "href": "http://example.com/path",
- "host": "example.com",
- "hostname": "example.com",
- "port": ""
- }
- },
- {
- "comment": "Stuff after a # delimiter is ignored",
- "href": "http://example.net/path",
- "new_value": "example.com#stuff",
- "expected": {
- "href": "http://example.com/path",
- "host": "example.com",
- "hostname": "example.com",
- "port": ""
- }
- },
- {
- "comment": "Stuff after a \\ delimiter is ignored for special schemes",
- "href": "http://example.net/path",
- "new_value": "example.com\\stuff",
- "expected": {
- "href": "http://example.com/path",
- "host": "example.com",
- "hostname": "example.com",
- "port": ""
- }
- },
- {
- "comment": "\\ is not a delimiter for non-special schemes, and it’s invalid in a domain",
- "href": "view-source+http://example.net/path",
- "new_value": "example.com\\stuff",
- "expected": {
- "href": "view-source+http://example.net/path",
- "host": "example.net",
- "hostname": "example.net",
- "port": ""
- }
- }
- ],
- "port": [
- {
- "href": "http://example.net",
- "new_value": "8080",
- "expected": {
- "href": "http://example.net:8080/",
- "host": "example.net:8080",
- "hostname": "example.net",
- "port": "8080"
- }
- },
- {
- "comment": "Port number is removed if empty in the new value: https://github.com/whatwg/url/pull/113",
- "href": "http://example.net:8080",
- "new_value": "",
- "expected": {
- "href": "http://example.net/",
- "host": "example.net",
- "hostname": "example.net",
- "port": ""
- }
- },
- {
- "comment": "Default port number is removed",
- "href": "http://example.net:8080",
- "new_value": "80",
- "expected": {
- "href": "http://example.net/",
- "host": "example.net",
- "hostname": "example.net",
- "port": ""
- }
- },
- {
- "comment": "Default port number is removed",
- "href": "https://example.net:4433",
- "new_value": "443",
- "expected": {
- "href": "https://example.net/",
- "host": "example.net",
- "hostname": "example.net",
- "port": ""
- }
- },
- {
- "comment": "Default port number is only removed for the relevant scheme",
- "href": "https://example.net",
- "new_value": "80",
- "expected": {
- "href": "https://example.net:80/",
- "host": "example.net:80",
- "hostname": "example.net",
- "port": "80"
- }
- },
- {
- "comment": "Stuff after a / delimiter is ignored",
- "href": "http://example.net/path",
- "new_value": "8080/stuff",
- "expected": {
- "href": "http://example.net:8080/path",
- "host": "example.net:8080",
- "hostname": "example.net",
- "port": "8080"
- }
- },
- {
- "comment": "Stuff after a ? delimiter is ignored",
- "href": "http://example.net/path",
- "new_value": "8080?stuff",
- "expected": {
- "href": "http://example.net:8080/path",
- "host": "example.net:8080",
- "hostname": "example.net",
- "port": "8080"
- }
- },
- {
- "comment": "Stuff after a # delimiter is ignored",
- "href": "http://example.net/path",
- "new_value": "8080#stuff",
- "expected": {
- "href": "http://example.net:8080/path",
- "host": "example.net:8080",
- "hostname": "example.net",
- "port": "8080"
- }
- },
- {
- "comment": "Stuff after a \\ delimiter is ignored for special schemes",
- "href": "http://example.net/path",
- "new_value": "8080\\stuff",
- "expected": {
- "href": "http://example.net:8080/path",
- "host": "example.net:8080",
- "hostname": "example.net",
- "port": "8080"
- }
- },
- {
- "comment": "Anything other than ASCII digit stops the port parser in a setter but is not an error",
- "href": "view-source+http://example.net/path",
- "new_value": "8080stuff2",
- "expected": {
- "href": "view-source+http://example.net:8080/path",
- "host": "example.net:8080",
- "hostname": "example.net",
- "port": "8080"
- }
- },
- {
- "comment": "Anything other than ASCII digit stops the port parser in a setter but is not an error",
- "href": "http://example.net/path",
- "new_value": "8080stuff2",
- "expected": {
- "href": "http://example.net:8080/path",
- "host": "example.net:8080",
- "hostname": "example.net",
- "port": "8080"
- }
- },
- {
- "comment": "Anything other than ASCII digit stops the port parser in a setter but is not an error",
- "href": "http://example.net/path",
- "new_value": "8080+2",
- "expected": {
- "href": "http://example.net:8080/path",
- "host": "example.net:8080",
- "hostname": "example.net",
- "port": "8080"
- }
- },
- {
- "comment": "Port numbers are 16 bit integers",
- "href": "http://example.net/path",
- "new_value": "65535",
- "expected": {
- "href": "http://example.net:65535/path",
- "host": "example.net:65535",
- "hostname": "example.net",
- "port": "65535"
- }
- },
- {
- "comment": "Port numbers are 16 bit integers, overflowing is an error",
- "href": "http://example.net:8080/path",
- "new_value": "65536",
- "expected": {
- "href": "http://example.net:8080/path",
- "host": "example.net:8080",
- "hostname": "example.net",
- "port": "8080"
- }
- }
- ],
- "pathname": [
- {
- "comment": "Cannot-be-a-base don’t have a path",
- "href": "mailto:me@example.net",
- "new_value": "/foo",
- "expected": {
- "href": "mailto:me@example.net",
- "pathname": "me@example.net"
- }
- },
- {
- "href": "unix:/run/foo.socket?timeout=10",
- "new_value": "/var/log/../run/bar.socket",
- "expected": {
- "href": "unix:/var/run/bar.socket?timeout=10",
- "pathname": "/var/run/bar.socket"
- }
- },
- {
- "href": "https://example.net#nav",
- "new_value": "home",
- "expected": {
- "href": "https://example.net/home#nav",
- "pathname": "/home"
- }
- },
- {
- "href": "https://example.net#nav",
- "new_value": "../home",
- "expected": {
- "href": "https://example.net/home#nav",
- "pathname": "/home"
- }
- },
- {
- "comment": "\\ is a segment delimiter for 'special' URLs",
- "href": "http://example.net/home?lang=fr#nav",
- "new_value": "\\a\\%2E\\b\\%2e.\\c",
- "expected": {
- "href": "http://example.net/a/c?lang=fr#nav",
- "pathname": "/a/c"
- }
- },
- {
- "comment": "\\ is *not* a segment delimiter for non-'special' URLs",
- "href": "view-source+http://example.net/home?lang=fr#nav",
- "new_value": "\\a\\%2E\\b\\%2e.\\c",
- "expected": {
- "href": "view-source+http://example.net/\\a\\.\\b\\..\\c?lang=fr#nav",
- "pathname": "/\\a\\.\\b\\..\\c"
- }
- },
- {
- "comment": "UTF-8 percent encoding with the default encode set. Tabs and newlines are removed. Leading or training C0 controls and space are removed.",
- "href": "a:/",
- "new_value": "\u0000\u0001\t\n\r\u001f !\u0000\u0001\t\n\r\u001f !\"#$%&'()*+,-./09:;<=>?@AZ[\\]^_`az{|}~\u007f\u0080\u0081Éé",
- "expected": {
- "href": "a:/!%00%01%1F%20!%22%23$%&'()*+,-./09:;%3C=%3E%3F@AZ[\\]^_%60az%7B|%7D~%7F%C2%80%C2%81%C3%89%C3%A9",
- "pathname": "/!%00%01%1F%20!%22%23$%&'()*+,-./09:;%3C=%3E%3F@AZ[\\]^_%60az%7B|%7D~%7F%C2%80%C2%81%C3%89%C3%A9"
- }
- },
- {
- "comment": "Bytes already percent-encoded are left as-is, except %2E.",
- "href": "http://example.net",
- "new_value": "%2e%2E%c3%89té",
- "expected": {
- "href": "http://example.net/..%c3%89t%C3%A9",
- "pathname": "/..%c3%89t%C3%A9"
- }
- }
- ],
- "search": [
- {
- "href": "https://example.net#nav",
- "new_value": "lang=fr",
- "expected": {
- "href": "https://example.net/?lang=fr#nav",
- "search": "?lang=fr"
- }
- },
- {
- "href": "https://example.net?lang=en-US#nav",
- "new_value": "lang=fr",
- "expected": {
- "href": "https://example.net/?lang=fr#nav",
- "search": "?lang=fr"
- }
- },
- {
- "href": "https://example.net?lang=en-US#nav",
- "new_value": "?lang=fr",
- "expected": {
- "href": "https://example.net/?lang=fr#nav",
- "search": "?lang=fr"
- }
- },
- {
- "href": "https://example.net?lang=en-US#nav",
- "new_value": "??lang=fr",
- "expected": {
- "href": "https://example.net/??lang=fr#nav",
- "search": "??lang=fr"
- }
- },
- {
- "href": "https://example.net?lang=en-US#nav",
- "new_value": "?",
- "expected": {
- "href": "https://example.net/?#nav",
- "search": ""
- }
- },
- {
- "href": "https://example.net?lang=en-US#nav",
- "new_value": "",
- "expected": {
- "href": "https://example.net/#nav",
- "search": ""
- }
- },
- {
- "href": "https://example.net?lang=en-US",
- "new_value": "",
- "expected": {
- "href": "https://example.net/",
- "search": ""
- }
- },
- {
- "href": "https://example.net",
- "new_value": "",
- "expected": {
- "href": "https://example.net/",
- "search": ""
- }
- },
- {
- "comment": "UTF-8 percent encoding with the query encode set. Tabs and newlines are removed. Leading or training C0 controls and space are removed.",
- "href": "a:/",
- "new_value": "\u0000\u0001\t\n\r\u001f !\u0000\u0001\t\n\r\u001f !\"#$%&'()*+,-./09:;<=>?@AZ[\\]^_`az{|}~\u007f\u0080\u0081Éé",
- "expected": {
- "href": "a:/?!%00%01%1F%20!%22%23$%&'()*+,-./09:;%3C=%3E?@AZ[\\]^_`az{|}~%7F%C2%80%C2%81%C3%89%C3%A9",
- "search": "?!%00%01%1F%20!%22%23$%&'()*+,-./09:;%3C=%3E?@AZ[\\]^_`az{|}~%7F%C2%80%C2%81%C3%89%C3%A9"
- }
- },
- {
- "comment": "Bytes already percent-encoded are left as-is",
- "href": "http://example.net",
- "new_value": "%c3%89té",
- "expected": {
- "href": "http://example.net/?%c3%89t%C3%A9",
- "search": "?%c3%89t%C3%A9"
- }
- }
- ],
- "hash": [
- {
- "href": "https://example.net",
- "new_value": "main",
- "expected": {
- "href": "https://example.net/#main",
- "hash": "#main"
- }
- },
- {
- "href": "https://example.net#nav",
- "new_value": "main",
- "expected": {
- "href": "https://example.net/#main",
- "hash": "#main"
- }
- },
- {
- "href": "https://example.net?lang=en-US",
- "new_value": "##nav",
- "expected": {
- "href": "https://example.net/?lang=en-US##nav",
- "hash": "##nav"
- }
- },
- {
- "href": "https://example.net?lang=en-US#nav",
- "new_value": "#main",
- "expected": {
- "href": "https://example.net/?lang=en-US#main",
- "hash": "#main"
- }
- },
- {
- "href": "https://example.net?lang=en-US#nav",
- "new_value": "#",
- "expected": {
- "href": "https://example.net/?lang=en-US#",
- "hash": ""
- }
- },
- {
- "href": "https://example.net?lang=en-US#nav",
- "new_value": "",
- "expected": {
- "href": "https://example.net/?lang=en-US",
- "hash": ""
- }
- },
- {
- "comment": "No percent-encoding at all (!); nuls, tabs, and newlines are removed. Leading or training C0 controls and space are removed.",
- "href": "a:/",
- "new_value": "\u0000\u0001\t\n\r\u001f !\u0000\u0001\t\n\r\u001f !\"#$%&'()*+,-./09:;<=>?@AZ[\\]^_`az{|}~\u007f\u0080\u0081Éé",
- "expected": {
- "href": "a:/#!\u0001\u001f !\"#$%&'()*+,-./09:;<=>?@AZ[\\]^_`az{|}~\u007f\u0080\u0081Éé",
- "hash": "#!\u0001\u001f !\"#$%&'()*+,-./09:;<=>?@AZ[\\]^_`az{|}~\u007f\u0080\u0081Éé"
- }
- },
- {
- "comment": "Bytes already percent-encoded are left as-is",
- "href": "http://example.net",
- "new_value": "%c3%89té",
- "expected": {
- "href": "http://example.net/#%c3%89té",
- "hash": "#%c3%89té"
- }
- }
- ]
-}
diff --git a/third_party/rust/url/tests/unit.rs b/third_party/rust/url/tests/unit.rs
deleted file mode 100644
index 7cea1000c..000000000
--- a/third_party/rust/url/tests/unit.rs
+++ /dev/null
@@ -1,303 +0,0 @@
-// Copyright 2013-2014 The rust-url developers.
-//
-// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
-// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
-// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
-// option. This file may not be copied, modified, or distributed
-// except according to those terms.
-
-//! Unit tests
-
-extern crate url;
-
-use std::borrow::Cow;
-use std::net::{Ipv4Addr, Ipv6Addr};
-use std::path::{Path, PathBuf};
-use url::{Host, Url, form_urlencoded};
-
-macro_rules! assert_from_file_path {
- ($path: expr) => { assert_from_file_path!($path, $path) };
- ($path: expr, $url_path: expr) => {{
- let url = Url::from_file_path(Path::new($path)).unwrap();
- assert_eq!(url.host(), None);
- assert_eq!(url.path(), $url_path);
- assert_eq!(url.to_file_path(), Ok(PathBuf::from($path)));
- }};
-}
-
-
-
-#[test]
-fn new_file_paths() {
- if cfg!(unix) {
- assert_eq!(Url::from_file_path(Path::new("relative")), Err(()));
- assert_eq!(Url::from_file_path(Path::new("../relative")), Err(()));
- }
- if cfg!(windows) {
- assert_eq!(Url::from_file_path(Path::new("relative")), Err(()));
- assert_eq!(Url::from_file_path(Path::new(r"..\relative")), Err(()));
- assert_eq!(Url::from_file_path(Path::new(r"\drive-relative")), Err(()));
- assert_eq!(Url::from_file_path(Path::new(r"\\ucn\")), Err(()));
- }
-
- if cfg!(unix) {
- assert_from_file_path!("/foo/bar");
- assert_from_file_path!("/foo/ba\0r", "/foo/ba%00r");
- assert_from_file_path!("/foo/ba%00r", "/foo/ba%2500r");
- }
-}
-
-#[test]
-#[cfg(unix)]
-fn new_path_bad_utf8() {
- use std::ffi::OsStr;
- use std::os::unix::prelude::*;
-
- let url = Url::from_file_path(Path::new(OsStr::from_bytes(b"/foo/ba\x80r"))).unwrap();
- let os_str = OsStr::from_bytes(b"/foo/ba\x80r");
- assert_eq!(url.to_file_path(), Ok(PathBuf::from(os_str)));
-}
-
-#[test]
-fn new_path_windows_fun() {
- if cfg!(windows) {
- assert_from_file_path!(r"C:\foo\bar", "/C:/foo/bar");
- assert_from_file_path!("C:\\foo\\ba\0r", "/C:/foo/ba%00r");
-
- // Invalid UTF-8
- assert!(Url::parse("file:///C:/foo/ba%80r").unwrap().to_file_path().is_err());
-
- // test windows canonicalized path
- let path = PathBuf::from(r"\\?\C:\foo\bar");
- assert!(Url::from_file_path(path).is_ok());
- }
-}
-
-
-#[test]
-fn new_directory_paths() {
- if cfg!(unix) {
- assert_eq!(Url::from_directory_path(Path::new("relative")), Err(()));
- assert_eq!(Url::from_directory_path(Path::new("../relative")), Err(()));
-
- let url = Url::from_directory_path(Path::new("/foo/bar")).unwrap();
- assert_eq!(url.host(), None);
- assert_eq!(url.path(), "/foo/bar/");
- }
- if cfg!(windows) {
- assert_eq!(Url::from_directory_path(Path::new("relative")), Err(()));
- assert_eq!(Url::from_directory_path(Path::new(r"..\relative")), Err(()));
- assert_eq!(Url::from_directory_path(Path::new(r"\drive-relative")), Err(()));
- assert_eq!(Url::from_directory_path(Path::new(r"\\ucn\")), Err(()));
-
- let url = Url::from_directory_path(Path::new(r"C:\foo\bar")).unwrap();
- assert_eq!(url.host(), None);
- assert_eq!(url.path(), "/C:/foo/bar/");
- }
-}
-
-#[test]
-fn from_str() {
- assert!("http://testing.com/this".parse::<Url>().is_ok());
-}
-
-#[test]
-fn issue_124() {
- let url: Url = "file:a".parse().unwrap();
- assert_eq!(url.path(), "/a");
- let url: Url = "file:...".parse().unwrap();
- assert_eq!(url.path(), "/...");
- let url: Url = "file:..".parse().unwrap();
- assert_eq!(url.path(), "/");
-}
-
-#[test]
-fn test_equality() {
- use std::hash::{Hash, Hasher, SipHasher};
-
- fn check_eq(a: &Url, b: &Url) {
- assert_eq!(a, b);
-
- let mut h1 = SipHasher::new();
- a.hash(&mut h1);
- let mut h2 = SipHasher::new();
- b.hash(&mut h2);
- assert_eq!(h1.finish(), h2.finish());
- }
-
- fn url(s: &str) -> Url {
- let rv = s.parse().unwrap();
- check_eq(&rv, &rv);
- rv
- }
-
- // Doesn't care if default port is given.
- let a: Url = url("https://example.com/");
- let b: Url = url("https://example.com:443/");
- check_eq(&a, &b);
-
- // Different ports
- let a: Url = url("http://example.com/");
- let b: Url = url("http://example.com:8080/");
- assert!(a != b, "{:?} != {:?}", a, b);
-
- // Different scheme
- let a: Url = url("http://example.com/");
- let b: Url = url("https://example.com/");
- assert!(a != b);
-
- // Different host
- let a: Url = url("http://foo.com/");
- let b: Url = url("http://bar.com/");
- assert!(a != b);
-
- // Missing path, automatically substituted. Semantically the same.
- let a: Url = url("http://foo.com");
- let b: Url = url("http://foo.com/");
- check_eq(&a, &b);
-}
-
-#[test]
-fn host() {
- fn assert_host(input: &str, host: Host<&str>) {
- assert_eq!(Url::parse(input).unwrap().host(), Some(host));
- }
- assert_host("http://www.mozilla.org", Host::Domain("www.mozilla.org"));
- assert_host("http://1.35.33.49", Host::Ipv4(Ipv4Addr::new(1, 35, 33, 49)));
- assert_host("http://[2001:0db8:85a3:08d3:1319:8a2e:0370:7344]", Host::Ipv6(Ipv6Addr::new(
- 0x2001, 0x0db8, 0x85a3, 0x08d3, 0x1319, 0x8a2e, 0x0370, 0x7344)));
- assert_host("http://1.35.+33.49", Host::Domain("1.35.+33.49"));
- assert_host("http://[::]", Host::Ipv6(Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 0)));
- assert_host("http://[::1]", Host::Ipv6(Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 1)));
- assert_host("http://0x1.0X23.0x21.061", Host::Ipv4(Ipv4Addr::new(1, 35, 33, 49)));
- assert_host("http://0x1232131", Host::Ipv4(Ipv4Addr::new(1, 35, 33, 49)));
- assert_host("http://111", Host::Ipv4(Ipv4Addr::new(0, 0, 0, 111)));
- assert_host("http://2..2.3", Host::Domain("2..2.3"));
- assert!(Url::parse("http://42.0x1232131").is_err());
- assert!(Url::parse("http://192.168.0.257").is_err());
-}
-
-#[test]
-fn host_serialization() {
- // libstd’s `Display for Ipv6Addr` serializes 0:0:0:0:0:0:_:_ and 0:0:0:0:0:ffff:_:_
- // using IPv4-like syntax, as suggested in https://tools.ietf.org/html/rfc5952#section-4
- // but https://url.spec.whatwg.org/#concept-ipv6-serializer specifies not to.
-
- // Not [::0.0.0.2] / [::ffff:0.0.0.2]
- assert_eq!(Url::parse("http://[0::2]").unwrap().host_str(), Some("[::2]"));
- assert_eq!(Url::parse("http://[0::ffff:0:2]").unwrap().host_str(), Some("[::ffff:0:2]"));
-}
-
-#[test]
-fn test_idna() {
- assert!("http://goșu.ro".parse::<Url>().is_ok());
- assert_eq!(Url::parse("http://☃.net/").unwrap().host(), Some(Host::Domain("xn--n3h.net")));
-}
-
-#[test]
-fn test_serialization() {
- let data = [
- ("http://example.com/", "http://example.com/"),
- ("http://addslash.com", "http://addslash.com/"),
- ("http://@emptyuser.com/", "http://emptyuser.com/"),
- ("http://:@emptypass.com/", "http://:@emptypass.com/"),
- ("http://user@user.com/", "http://user@user.com/"),
- ("http://user:pass@userpass.com/", "http://user:pass@userpass.com/"),
- ("http://slashquery.com/path/?q=something", "http://slashquery.com/path/?q=something"),
- ("http://noslashquery.com/path?q=something", "http://noslashquery.com/path?q=something")
- ];
- for &(input, result) in &data {
- let url = Url::parse(input).unwrap();
- assert_eq!(url.as_str(), result);
- }
-}
-
-#[test]
-fn test_form_urlencoded() {
- let pairs: &[(Cow<str>, Cow<str>)] = &[
- ("foo".into(), "é&".into()),
- ("bar".into(), "".into()),
- ("foo".into(), "#".into())
- ];
- let encoded = form_urlencoded::Serializer::new(String::new()).extend_pairs(pairs).finish();
- assert_eq!(encoded, "foo=%C3%A9%26&bar=&foo=%23");
- assert_eq!(form_urlencoded::parse(encoded.as_bytes()).collect::<Vec<_>>(), pairs.to_vec());
-}
-
-#[test]
-fn test_form_serialize() {
- let encoded = form_urlencoded::Serializer::new(String::new())
- .append_pair("foo", "é&")
- .append_pair("bar", "")
- .append_pair("foo", "#")
- .finish();
- assert_eq!(encoded, "foo=%C3%A9%26&bar=&foo=%23");
-}
-
-#[test]
-/// https://github.com/servo/rust-url/issues/25
-fn issue_25() {
- let filename = if cfg!(windows) { r"C:\run\pg.sock" } else { "/run/pg.sock" };
- let mut url = Url::from_file_path(filename).unwrap();
- url.assert_invariants();
- url.set_scheme("postgres").unwrap();
- url.assert_invariants();
- url.set_host(Some("")).unwrap();
- url.assert_invariants();
- url.set_username("me").unwrap();
- url.assert_invariants();
- let expected = format!("postgres://me@/{}run/pg.sock", if cfg!(windows) { "C:/" } else { "" });
- assert_eq!(url.as_str(), expected);
-}
-
-#[test]
-/// https://github.com/servo/rust-url/issues/61
-fn issue_61() {
- let mut url = Url::parse("http://mozilla.org").unwrap();
- url.set_scheme("https").unwrap();
- assert_eq!(url.port(), None);
- assert_eq!(url.port_or_known_default(), Some(443));
- url.assert_invariants();
-}
-
-#[test]
-#[cfg(not(windows))]
-/// https://github.com/servo/rust-url/issues/197
-fn issue_197() {
- let mut url = Url::from_file_path("/").expect("Failed to parse path");
- url.assert_invariants();
- assert_eq!(url, Url::parse("file:///").expect("Failed to parse path + protocol"));
- url.path_segments_mut().expect("path_segments_mut").pop_if_empty();
-}
-
-#[test]
-/// https://github.com/servo/rust-url/issues/222
-fn append_trailing_slash() {
- let mut url: Url = "http://localhost:6767/foo/bar?a=b".parse().unwrap();
- url.assert_invariants();
- url.path_segments_mut().unwrap().push("");
- url.assert_invariants();
- assert_eq!(url.to_string(), "http://localhost:6767/foo/bar/?a=b");
-}
-
-#[test]
-/// https://github.com/servo/rust-url/issues/227
-fn extend_query_pairs_then_mutate() {
- let mut url: Url = "http://localhost:6767/foo/bar".parse().unwrap();
- url.query_pairs_mut().extend_pairs(vec![ ("auth", "my-token") ].into_iter());
- url.assert_invariants();
- assert_eq!(url.to_string(), "http://localhost:6767/foo/bar?auth=my-token");
- url.path_segments_mut().unwrap().push("some_other_path");
- url.assert_invariants();
- assert_eq!(url.to_string(), "http://localhost:6767/foo/bar/some_other_path?auth=my-token");
-}
-
-#[test]
-/// https://github.com/servo/rust-url/issues/222
-fn append_empty_segment_then_mutate() {
- let mut url: Url = "http://localhost:6767/foo/bar?a=b".parse().unwrap();
- url.assert_invariants();
- url.path_segments_mut().unwrap().push("").pop();
- url.assert_invariants();
- assert_eq!(url.to_string(), "http://localhost:6767/foo/bar?a=b");
-}
diff --git a/third_party/rust/url/tests/urltestdata.json b/third_party/rust/url/tests/urltestdata.json
deleted file mode 100644
index ee5416ecf..000000000
--- a/third_party/rust/url/tests/urltestdata.json
+++ /dev/null
@@ -1,4277 +0,0 @@
-[
- "# Based on http://trac.webkit.org/browser/trunk/LayoutTests/fast/url/script-tests/segments.js",
- {
- "input": "http://example\t.\norg",
- "base": "http://example.org/foo/bar",
- "href": "http://example.org/",
- "origin": "http://example.org",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "example.org",
- "hostname": "example.org",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "http://user:pass@foo:21/bar;par?b#c",
- "base": "http://example.org/foo/bar",
- "href": "http://user:pass@foo:21/bar;par?b#c",
- "origin": "http://foo:21",
- "protocol": "http:",
- "username": "user",
- "password": "pass",
- "host": "foo:21",
- "hostname": "foo",
- "port": "21",
- "pathname": "/bar;par",
- "search": "?b",
- "hash": "#c"
- },
- {
- "input": "http:foo.com",
- "base": "http://example.org/foo/bar",
- "href": "http://example.org/foo/foo.com",
- "origin": "http://example.org",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "example.org",
- "hostname": "example.org",
- "port": "",
- "pathname": "/foo/foo.com",
- "search": "",
- "hash": ""
- },
- {
- "input": "\t :foo.com \n",
- "base": "http://example.org/foo/bar",
- "href": "http://example.org/foo/:foo.com",
- "origin": "http://example.org",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "example.org",
- "hostname": "example.org",
- "port": "",
- "pathname": "/foo/:foo.com",
- "search": "",
- "hash": ""
- },
- {
- "input": " foo.com ",
- "base": "http://example.org/foo/bar",
- "href": "http://example.org/foo/foo.com",
- "origin": "http://example.org",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "example.org",
- "hostname": "example.org",
- "port": "",
- "pathname": "/foo/foo.com",
- "search": "",
- "hash": ""
- },
- {
- "input": "a:\t foo.com",
- "base": "http://example.org/foo/bar",
- "href": "a: foo.com",
- "origin": "null",
- "protocol": "a:",
- "username": "",
- "password": "",
- "host": "",
- "hostname": "",
- "port": "",
- "pathname": " foo.com",
- "search": "",
- "hash": ""
- },
- {
- "input": "http://f:21/ b ? d # e ",
- "base": "http://example.org/foo/bar",
- "href": "http://f:21/%20b%20?%20d%20# e",
- "origin": "http://f:21",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "f:21",
- "hostname": "f",
- "port": "21",
- "pathname": "/%20b%20",
- "search": "?%20d%20",
- "hash": "# e"
- },
- {
- "input": "http://f:/c",
- "base": "http://example.org/foo/bar",
- "href": "http://f/c",
- "origin": "http://f",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "f",
- "hostname": "f",
- "port": "",
- "pathname": "/c",
- "search": "",
- "hash": ""
- },
- {
- "input": "http://f:0/c",
- "base": "http://example.org/foo/bar",
- "href": "http://f:0/c",
- "origin": "http://f:0",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "f:0",
- "hostname": "f",
- "port": "0",
- "pathname": "/c",
- "search": "",
- "hash": ""
- },
- {
- "input": "http://f:00000000000000/c",
- "base": "http://example.org/foo/bar",
- "href": "http://f:0/c",
- "origin": "http://f:0",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "f:0",
- "hostname": "f",
- "port": "0",
- "pathname": "/c",
- "search": "",
- "hash": ""
- },
- {
- "input": "http://f:00000000000000000000080/c",
- "base": "http://example.org/foo/bar",
- "href": "http://f/c",
- "origin": "http://f",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "f",
- "hostname": "f",
- "port": "",
- "pathname": "/c",
- "search": "",
- "hash": ""
- },
- {
- "input": "http://f:b/c",
- "base": "http://example.org/foo/bar",
- "failure": true
- },
- {
- "input": "http://f: /c",
- "base": "http://example.org/foo/bar",
- "failure": true
- },
- {
- "input": "http://f:\n/c",
- "base": "http://example.org/foo/bar",
- "href": "http://f/c",
- "origin": "http://f",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "f",
- "hostname": "f",
- "port": "",
- "pathname": "/c",
- "search": "",
- "hash": ""
- },
- {
- "input": "http://f:fifty-two/c",
- "base": "http://example.org/foo/bar",
- "failure": true
- },
- {
- "input": "http://f:999999/c",
- "base": "http://example.org/foo/bar",
- "failure": true
- },
- {
- "input": "http://f: 21 / b ? d # e ",
- "base": "http://example.org/foo/bar",
- "failure": true
- },
- {
- "input": "",
- "base": "http://example.org/foo/bar",
- "href": "http://example.org/foo/bar",
- "origin": "http://example.org",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "example.org",
- "hostname": "example.org",
- "port": "",
- "pathname": "/foo/bar",
- "search": "",
- "hash": ""
- },
- {
- "input": " \t",
- "base": "http://example.org/foo/bar",
- "href": "http://example.org/foo/bar",
- "origin": "http://example.org",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "example.org",
- "hostname": "example.org",
- "port": "",
- "pathname": "/foo/bar",
- "search": "",
- "hash": ""
- },
- {
- "input": ":foo.com/",
- "base": "http://example.org/foo/bar",
- "href": "http://example.org/foo/:foo.com/",
- "origin": "http://example.org",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "example.org",
- "hostname": "example.org",
- "port": "",
- "pathname": "/foo/:foo.com/",
- "search": "",
- "hash": ""
- },
- {
- "input": ":foo.com\\",
- "base": "http://example.org/foo/bar",
- "href": "http://example.org/foo/:foo.com/",
- "origin": "http://example.org",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "example.org",
- "hostname": "example.org",
- "port": "",
- "pathname": "/foo/:foo.com/",
- "search": "",
- "hash": ""
- },
- {
- "input": ":",
- "base": "http://example.org/foo/bar",
- "href": "http://example.org/foo/:",
- "origin": "http://example.org",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "example.org",
- "hostname": "example.org",
- "port": "",
- "pathname": "/foo/:",
- "search": "",
- "hash": ""
- },
- {
- "input": ":a",
- "base": "http://example.org/foo/bar",
- "href": "http://example.org/foo/:a",
- "origin": "http://example.org",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "example.org",
- "hostname": "example.org",
- "port": "",
- "pathname": "/foo/:a",
- "search": "",
- "hash": ""
- },
- {
- "input": ":/",
- "base": "http://example.org/foo/bar",
- "href": "http://example.org/foo/:/",
- "origin": "http://example.org",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "example.org",
- "hostname": "example.org",
- "port": "",
- "pathname": "/foo/:/",
- "search": "",
- "hash": ""
- },
- {
- "input": ":\\",
- "base": "http://example.org/foo/bar",
- "href": "http://example.org/foo/:/",
- "origin": "http://example.org",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "example.org",
- "hostname": "example.org",
- "port": "",
- "pathname": "/foo/:/",
- "search": "",
- "hash": ""
- },
- {
- "input": ":#",
- "base": "http://example.org/foo/bar",
- "href": "http://example.org/foo/:#",
- "origin": "http://example.org",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "example.org",
- "hostname": "example.org",
- "port": "",
- "pathname": "/foo/:",
- "search": "",
- "hash": ""
- },
- {
- "input": "#",
- "base": "http://example.org/foo/bar",
- "href": "http://example.org/foo/bar#",
- "origin": "http://example.org",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "example.org",
- "hostname": "example.org",
- "port": "",
- "pathname": "/foo/bar",
- "search": "",
- "hash": ""
- },
- {
- "input": "#/",
- "base": "http://example.org/foo/bar",
- "href": "http://example.org/foo/bar#/",
- "origin": "http://example.org",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "example.org",
- "hostname": "example.org",
- "port": "",
- "pathname": "/foo/bar",
- "search": "",
- "hash": "#/"
- },
- {
- "input": "#\\",
- "base": "http://example.org/foo/bar",
- "href": "http://example.org/foo/bar#\\",
- "origin": "http://example.org",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "example.org",
- "hostname": "example.org",
- "port": "",
- "pathname": "/foo/bar",
- "search": "",
- "hash": "#\\"
- },
- {
- "input": "#;?",
- "base": "http://example.org/foo/bar",
- "href": "http://example.org/foo/bar#;?",
- "origin": "http://example.org",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "example.org",
- "hostname": "example.org",
- "port": "",
- "pathname": "/foo/bar",
- "search": "",
- "hash": "#;?"
- },
- {
- "input": "?",
- "base": "http://example.org/foo/bar",
- "href": "http://example.org/foo/bar?",
- "origin": "http://example.org",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "example.org",
- "hostname": "example.org",
- "port": "",
- "pathname": "/foo/bar",
- "search": "",
- "hash": ""
- },
- {
- "input": "/",
- "base": "http://example.org/foo/bar",
- "href": "http://example.org/",
- "origin": "http://example.org",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "example.org",
- "hostname": "example.org",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": ":23",
- "base": "http://example.org/foo/bar",
- "href": "http://example.org/foo/:23",
- "origin": "http://example.org",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "example.org",
- "hostname": "example.org",
- "port": "",
- "pathname": "/foo/:23",
- "search": "",
- "hash": ""
- },
- {
- "input": "/:23",
- "base": "http://example.org/foo/bar",
- "href": "http://example.org/:23",
- "origin": "http://example.org",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "example.org",
- "hostname": "example.org",
- "port": "",
- "pathname": "/:23",
- "search": "",
- "hash": ""
- },
- {
- "input": "::",
- "base": "http://example.org/foo/bar",
- "href": "http://example.org/foo/::",
- "origin": "http://example.org",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "example.org",
- "hostname": "example.org",
- "port": "",
- "pathname": "/foo/::",
- "search": "",
- "hash": ""
- },
- {
- "input": "::23",
- "base": "http://example.org/foo/bar",
- "href": "http://example.org/foo/::23",
- "origin": "http://example.org",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "example.org",
- "hostname": "example.org",
- "port": "",
- "pathname": "/foo/::23",
- "search": "",
- "hash": ""
- },
- {
- "input": "foo://",
- "base": "http://example.org/foo/bar",
- "href": "foo:///",
- "origin": "null",
- "protocol": "foo:",
- "username": "",
- "password": "",
- "host": "",
- "hostname": "",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "http://a:b@c:29/d",
- "base": "http://example.org/foo/bar",
- "href": "http://a:b@c:29/d",
- "origin": "http://c:29",
- "protocol": "http:",
- "username": "a",
- "password": "b",
- "host": "c:29",
- "hostname": "c",
- "port": "29",
- "pathname": "/d",
- "search": "",
- "hash": ""
- },
- {
- "input": "http::@c:29",
- "base": "http://example.org/foo/bar",
- "href": "http://example.org/foo/:@c:29",
- "origin": "http://example.org",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "example.org",
- "hostname": "example.org",
- "port": "",
- "pathname": "/foo/:@c:29",
- "search": "",
- "hash": ""
- },
- {
- "input": "http://&a:foo(b]c@d:2/",
- "base": "http://example.org/foo/bar",
- "href": "http://&a:foo(b%5Dc@d:2/",
- "origin": "http://d:2",
- "protocol": "http:",
- "username": "&a",
- "password": "foo(b%5Dc",
- "host": "d:2",
- "hostname": "d",
- "port": "2",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "http://::@c@d:2",
- "base": "http://example.org/foo/bar",
- "href": "http://:%3A%40c@d:2/",
- "origin": "http://d:2",
- "protocol": "http:",
- "username": "",
- "password": "%3A%40c",
- "host": "d:2",
- "hostname": "d",
- "port": "2",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "http://foo.com:b@d/",
- "base": "http://example.org/foo/bar",
- "href": "http://foo.com:b@d/",
- "origin": "http://d",
- "protocol": "http:",
- "username": "foo.com",
- "password": "b",
- "host": "d",
- "hostname": "d",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "http://foo.com/\\@",
- "base": "http://example.org/foo/bar",
- "href": "http://foo.com//@",
- "origin": "http://foo.com",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "foo.com",
- "hostname": "foo.com",
- "port": "",
- "pathname": "//@",
- "search": "",
- "hash": ""
- },
- {
- "input": "http:\\\\foo.com\\",
- "base": "http://example.org/foo/bar",
- "href": "http://foo.com/",
- "origin": "http://foo.com",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "foo.com",
- "hostname": "foo.com",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "http:\\\\a\\b:c\\d@foo.com\\",
- "base": "http://example.org/foo/bar",
- "href": "http://a/b:c/d@foo.com/",
- "origin": "http://a",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "a",
- "hostname": "a",
- "port": "",
- "pathname": "/b:c/d@foo.com/",
- "search": "",
- "hash": ""
- },
- {
- "input": "foo:/",
- "base": "http://example.org/foo/bar",
- "href": "foo:/",
- "origin": "null",
- "protocol": "foo:",
- "username": "",
- "password": "",
- "host": "",
- "hostname": "",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "foo:/bar.com/",
- "base": "http://example.org/foo/bar",
- "href": "foo:/bar.com/",
- "origin": "null",
- "protocol": "foo:",
- "username": "",
- "password": "",
- "host": "",
- "hostname": "",
- "port": "",
- "pathname": "/bar.com/",
- "search": "",
- "hash": ""
- },
- {
- "input": "foo://///////",
- "base": "http://example.org/foo/bar",
- "href": "foo://///////",
- "origin": "null",
- "protocol": "foo:",
- "username": "",
- "password": "",
- "host": "",
- "hostname": "",
- "port": "",
- "pathname": "///////",
- "search": "",
- "hash": ""
- },
- {
- "input": "foo://///////bar.com/",
- "base": "http://example.org/foo/bar",
- "href": "foo://///////bar.com/",
- "origin": "null",
- "protocol": "foo:",
- "username": "",
- "password": "",
- "host": "",
- "hostname": "",
- "port": "",
- "pathname": "///////bar.com/",
- "search": "",
- "hash": ""
- },
- {
- "input": "foo:////://///",
- "base": "http://example.org/foo/bar",
- "href": "foo:////://///",
- "origin": "null",
- "protocol": "foo:",
- "username": "",
- "password": "",
- "host": "",
- "hostname": "",
- "port": "",
- "pathname": "//://///",
- "search": "",
- "hash": ""
- },
- {
- "input": "c:/foo",
- "base": "http://example.org/foo/bar",
- "href": "c:/foo",
- "origin": "null",
- "protocol": "c:",
- "username": "",
- "password": "",
- "host": "",
- "hostname": "",
- "port": "",
- "pathname": "/foo",
- "search": "",
- "hash": ""
- },
- {
- "input": "//foo/bar",
- "base": "http://example.org/foo/bar",
- "href": "http://foo/bar",
- "origin": "http://foo",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "foo",
- "hostname": "foo",
- "port": "",
- "pathname": "/bar",
- "search": "",
- "hash": ""
- },
- {
- "input": "http://foo/path;a??e#f#g",
- "base": "http://example.org/foo/bar",
- "href": "http://foo/path;a??e#f#g",
- "origin": "http://foo",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "foo",
- "hostname": "foo",
- "port": "",
- "pathname": "/path;a",
- "search": "??e",
- "hash": "#f#g"
- },
- {
- "input": "http://foo/abcd?efgh?ijkl",
- "base": "http://example.org/foo/bar",
- "href": "http://foo/abcd?efgh?ijkl",
- "origin": "http://foo",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "foo",
- "hostname": "foo",
- "port": "",
- "pathname": "/abcd",
- "search": "?efgh?ijkl",
- "hash": ""
- },
- {
- "input": "http://foo/abcd#foo?bar",
- "base": "http://example.org/foo/bar",
- "href": "http://foo/abcd#foo?bar",
- "origin": "http://foo",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "foo",
- "hostname": "foo",
- "port": "",
- "pathname": "/abcd",
- "search": "",
- "hash": "#foo?bar"
- },
- {
- "input": "[61:24:74]:98",
- "base": "http://example.org/foo/bar",
- "href": "http://example.org/foo/[61:24:74]:98",
- "origin": "http://example.org",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "example.org",
- "hostname": "example.org",
- "port": "",
- "pathname": "/foo/[61:24:74]:98",
- "search": "",
- "hash": ""
- },
- {
- "input": "http:[61:27]/:foo",
- "base": "http://example.org/foo/bar",
- "href": "http://example.org/foo/[61:27]/:foo",
- "origin": "http://example.org",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "example.org",
- "hostname": "example.org",
- "port": "",
- "pathname": "/foo/[61:27]/:foo",
- "search": "",
- "hash": ""
- },
- {
- "input": "http://[1::2]:3:4",
- "base": "http://example.org/foo/bar",
- "failure": true
- },
- {
- "input": "http://2001::1",
- "base": "http://example.org/foo/bar",
- "failure": true
- },
- {
- "input": "http://2001::1]",
- "base": "http://example.org/foo/bar",
- "failure": true
- },
- {
- "input": "http://2001::1]:80",
- "base": "http://example.org/foo/bar",
- "failure": true
- },
- {
- "input": "http://[2001::1]",
- "base": "http://example.org/foo/bar",
- "href": "http://[2001::1]/",
- "origin": "http://[2001::1]",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "[2001::1]",
- "hostname": "[2001::1]",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "http://[2001::1]:80",
- "base": "http://example.org/foo/bar",
- "href": "http://[2001::1]/",
- "origin": "http://[2001::1]",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "[2001::1]",
- "hostname": "[2001::1]",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "http:/example.com/",
- "base": "http://example.org/foo/bar",
- "href": "http://example.org/example.com/",
- "origin": "http://example.org",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "example.org",
- "hostname": "example.org",
- "port": "",
- "pathname": "/example.com/",
- "search": "",
- "hash": ""
- },
- {
- "input": "ftp:/example.com/",
- "base": "http://example.org/foo/bar",
- "href": "ftp://example.com/",
- "origin": "ftp://example.com",
- "protocol": "ftp:",
- "username": "",
- "password": "",
- "host": "example.com",
- "hostname": "example.com",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "https:/example.com/",
- "base": "http://example.org/foo/bar",
- "href": "https://example.com/",
- "origin": "https://example.com",
- "protocol": "https:",
- "username": "",
- "password": "",
- "host": "example.com",
- "hostname": "example.com",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "madeupscheme:/example.com/",
- "base": "http://example.org/foo/bar",
- "href": "madeupscheme:/example.com/",
- "origin": "null",
- "protocol": "madeupscheme:",
- "username": "",
- "password": "",
- "host": "",
- "hostname": "",
- "port": "",
- "pathname": "/example.com/",
- "search": "",
- "hash": ""
- },
- {
- "input": "file:/example.com/",
- "base": "http://example.org/foo/bar",
- "href": "file:///example.com/",
- "protocol": "file:",
- "username": "",
- "password": "",
- "host": "",
- "hostname": "",
- "port": "",
- "pathname": "/example.com/",
- "search": "",
- "hash": ""
- },
- {
- "input": "ftps:/example.com/",
- "base": "http://example.org/foo/bar",
- "href": "ftps:/example.com/",
- "origin": "null",
- "protocol": "ftps:",
- "username": "",
- "password": "",
- "host": "",
- "hostname": "",
- "port": "",
- "pathname": "/example.com/",
- "search": "",
- "hash": ""
- },
- {
- "input": "gopher:/example.com/",
- "base": "http://example.org/foo/bar",
- "href": "gopher://example.com/",
- "origin": "gopher://example.com",
- "protocol": "gopher:",
- "username": "",
- "password": "",
- "host": "example.com",
- "hostname": "example.com",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "ws:/example.com/",
- "base": "http://example.org/foo/bar",
- "href": "ws://example.com/",
- "origin": "ws://example.com",
- "protocol": "ws:",
- "username": "",
- "password": "",
- "host": "example.com",
- "hostname": "example.com",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "wss:/example.com/",
- "base": "http://example.org/foo/bar",
- "href": "wss://example.com/",
- "origin": "wss://example.com",
- "protocol": "wss:",
- "username": "",
- "password": "",
- "host": "example.com",
- "hostname": "example.com",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "data:/example.com/",
- "base": "http://example.org/foo/bar",
- "href": "data:/example.com/",
- "origin": "null",
- "protocol": "data:",
- "username": "",
- "password": "",
- "host": "",
- "hostname": "",
- "port": "",
- "pathname": "/example.com/",
- "search": "",
- "hash": ""
- },
- {
- "input": "javascript:/example.com/",
- "base": "http://example.org/foo/bar",
- "href": "javascript:/example.com/",
- "origin": "null",
- "protocol": "javascript:",
- "username": "",
- "password": "",
- "host": "",
- "hostname": "",
- "port": "",
- "pathname": "/example.com/",
- "search": "",
- "hash": ""
- },
- {
- "input": "mailto:/example.com/",
- "base": "http://example.org/foo/bar",
- "href": "mailto:/example.com/",
- "origin": "null",
- "protocol": "mailto:",
- "username": "",
- "password": "",
- "host": "",
- "hostname": "",
- "port": "",
- "pathname": "/example.com/",
- "search": "",
- "hash": ""
- },
- {
- "input": "http:example.com/",
- "base": "http://example.org/foo/bar",
- "href": "http://example.org/foo/example.com/",
- "origin": "http://example.org",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "example.org",
- "hostname": "example.org",
- "port": "",
- "pathname": "/foo/example.com/",
- "search": "",
- "hash": ""
- },
- {
- "input": "ftp:example.com/",
- "base": "http://example.org/foo/bar",
- "href": "ftp://example.com/",
- "origin": "ftp://example.com",
- "protocol": "ftp:",
- "username": "",
- "password": "",
- "host": "example.com",
- "hostname": "example.com",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "https:example.com/",
- "base": "http://example.org/foo/bar",
- "href": "https://example.com/",
- "origin": "https://example.com",
- "protocol": "https:",
- "username": "",
- "password": "",
- "host": "example.com",
- "hostname": "example.com",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "madeupscheme:example.com/",
- "base": "http://example.org/foo/bar",
- "href": "madeupscheme:example.com/",
- "origin": "null",
- "protocol": "madeupscheme:",
- "username": "",
- "password": "",
- "host": "",
- "hostname": "",
- "port": "",
- "pathname": "example.com/",
- "search": "",
- "hash": ""
- },
- {
- "input": "ftps:example.com/",
- "base": "http://example.org/foo/bar",
- "href": "ftps:example.com/",
- "origin": "null",
- "protocol": "ftps:",
- "username": "",
- "password": "",
- "host": "",
- "hostname": "",
- "port": "",
- "pathname": "example.com/",
- "search": "",
- "hash": ""
- },
- {
- "input": "gopher:example.com/",
- "base": "http://example.org/foo/bar",
- "href": "gopher://example.com/",
- "origin": "gopher://example.com",
- "protocol": "gopher:",
- "username": "",
- "password": "",
- "host": "example.com",
- "hostname": "example.com",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "ws:example.com/",
- "base": "http://example.org/foo/bar",
- "href": "ws://example.com/",
- "origin": "ws://example.com",
- "protocol": "ws:",
- "username": "",
- "password": "",
- "host": "example.com",
- "hostname": "example.com",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "wss:example.com/",
- "base": "http://example.org/foo/bar",
- "href": "wss://example.com/",
- "origin": "wss://example.com",
- "protocol": "wss:",
- "username": "",
- "password": "",
- "host": "example.com",
- "hostname": "example.com",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "data:example.com/",
- "base": "http://example.org/foo/bar",
- "href": "data:example.com/",
- "origin": "null",
- "protocol": "data:",
- "username": "",
- "password": "",
- "host": "",
- "hostname": "",
- "port": "",
- "pathname": "example.com/",
- "search": "",
- "hash": ""
- },
- {
- "input": "javascript:example.com/",
- "base": "http://example.org/foo/bar",
- "href": "javascript:example.com/",
- "origin": "null",
- "protocol": "javascript:",
- "username": "",
- "password": "",
- "host": "",
- "hostname": "",
- "port": "",
- "pathname": "example.com/",
- "search": "",
- "hash": ""
- },
- {
- "input": "mailto:example.com/",
- "base": "http://example.org/foo/bar",
- "href": "mailto:example.com/",
- "origin": "null",
- "protocol": "mailto:",
- "username": "",
- "password": "",
- "host": "",
- "hostname": "",
- "port": "",
- "pathname": "example.com/",
- "search": "",
- "hash": ""
- },
- {
- "input": "/a/b/c",
- "base": "http://example.org/foo/bar",
- "href": "http://example.org/a/b/c",
- "origin": "http://example.org",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "example.org",
- "hostname": "example.org",
- "port": "",
- "pathname": "/a/b/c",
- "search": "",
- "hash": ""
- },
- {
- "input": "/a/ /c",
- "base": "http://example.org/foo/bar",
- "href": "http://example.org/a/%20/c",
- "origin": "http://example.org",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "example.org",
- "hostname": "example.org",
- "port": "",
- "pathname": "/a/%20/c",
- "search": "",
- "hash": ""
- },
- {
- "input": "/a%2fc",
- "base": "http://example.org/foo/bar",
- "href": "http://example.org/a%2fc",
- "origin": "http://example.org",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "example.org",
- "hostname": "example.org",
- "port": "",
- "pathname": "/a%2fc",
- "search": "",
- "hash": ""
- },
- {
- "input": "/a/%2f/c",
- "base": "http://example.org/foo/bar",
- "href": "http://example.org/a/%2f/c",
- "origin": "http://example.org",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "example.org",
- "hostname": "example.org",
- "port": "",
- "pathname": "/a/%2f/c",
- "search": "",
- "hash": ""
- },
- {
- "input": "#β",
- "base": "http://example.org/foo/bar",
- "href": "http://example.org/foo/bar#β",
- "origin": "http://example.org",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "example.org",
- "hostname": "example.org",
- "port": "",
- "pathname": "/foo/bar",
- "search": "",
- "hash": "#β"
- },
- {
- "input": "data:text/html,test#test",
- "base": "http://example.org/foo/bar",
- "href": "data:text/html,test#test",
- "origin": "null",
- "protocol": "data:",
- "username": "",
- "password": "",
- "host": "",
- "hostname": "",
- "port": "",
- "pathname": "text/html,test",
- "search": "",
- "hash": "#test"
- },
- "# Based on http://trac.webkit.org/browser/trunk/LayoutTests/fast/url/file.html",
- {
- "input": "file:c:\\foo\\bar.html",
- "base": "file:///tmp/mock/path",
- "href": "file:///c:/foo/bar.html",
- "protocol": "file:",
- "username": "",
- "password": "",
- "host": "",
- "hostname": "",
- "port": "",
- "pathname": "/c:/foo/bar.html",
- "search": "",
- "hash": ""
- },
- {
- "input": " File:c|////foo\\bar.html",
- "base": "file:///tmp/mock/path",
- "href": "file:///c:////foo/bar.html",
- "protocol": "file:",
- "username": "",
- "password": "",
- "host": "",
- "hostname": "",
- "port": "",
- "pathname": "/c:////foo/bar.html",
- "search": "",
- "hash": ""
- },
- {
- "input": "C|/foo/bar",
- "base": "file:///tmp/mock/path",
- "href": "file:///C:/foo/bar",
- "protocol": "file:",
- "username": "",
- "password": "",
- "host": "",
- "hostname": "",
- "port": "",
- "pathname": "/C:/foo/bar",
- "search": "",
- "hash": ""
- },
- {
- "input": "/C|\\foo\\bar",
- "base": "file:///tmp/mock/path",
- "href": "file:///C:/foo/bar",
- "protocol": "file:",
- "username": "",
- "password": "",
- "host": "",
- "hostname": "",
- "port": "",
- "pathname": "/C:/foo/bar",
- "search": "",
- "hash": ""
- },
- {
- "input": "//C|/foo/bar",
- "base": "file:///tmp/mock/path",
- "href": "file:///C:/foo/bar",
- "protocol": "file:",
- "username": "",
- "password": "",
- "host": "",
- "hostname": "",
- "port": "",
- "pathname": "/C:/foo/bar",
- "search": "",
- "hash": ""
- },
- {
- "input": "//server/file",
- "base": "file:///tmp/mock/path",
- "href": "file://server/file",
- "protocol": "file:",
- "username": "",
- "password": "",
- "host": "server",
- "hostname": "server",
- "port": "",
- "pathname": "/file",
- "search": "",
- "hash": ""
- },
- {
- "input": "\\\\server\\file",
- "base": "file:///tmp/mock/path",
- "href": "file://server/file",
- "protocol": "file:",
- "username": "",
- "password": "",
- "host": "server",
- "hostname": "server",
- "port": "",
- "pathname": "/file",
- "search": "",
- "hash": ""
- },
- {
- "input": "/\\server/file",
- "base": "file:///tmp/mock/path",
- "href": "file://server/file",
- "protocol": "file:",
- "username": "",
- "password": "",
- "host": "server",
- "hostname": "server",
- "port": "",
- "pathname": "/file",
- "search": "",
- "hash": ""
- },
- {
- "input": "file:///foo/bar.txt",
- "base": "file:///tmp/mock/path",
- "href": "file:///foo/bar.txt",
- "protocol": "file:",
- "username": "",
- "password": "",
- "host": "",
- "hostname": "",
- "port": "",
- "pathname": "/foo/bar.txt",
- "search": "",
- "hash": ""
- },
- {
- "input": "file:///home/me",
- "base": "file:///tmp/mock/path",
- "href": "file:///home/me",
- "protocol": "file:",
- "username": "",
- "password": "",
- "host": "",
- "hostname": "",
- "port": "",
- "pathname": "/home/me",
- "search": "",
- "hash": ""
- },
- {
- "input": "//",
- "base": "file:///tmp/mock/path",
- "href": "file:///",
- "protocol": "file:",
- "username": "",
- "password": "",
- "host": "",
- "hostname": "",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "///",
- "base": "file:///tmp/mock/path",
- "href": "file:///",
- "protocol": "file:",
- "username": "",
- "password": "",
- "host": "",
- "hostname": "",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "///test",
- "base": "file:///tmp/mock/path",
- "href": "file:///test",
- "protocol": "file:",
- "username": "",
- "password": "",
- "host": "",
- "hostname": "",
- "port": "",
- "pathname": "/test",
- "search": "",
- "hash": ""
- },
- {
- "input": "file://test",
- "base": "file:///tmp/mock/path",
- "href": "file://test/",
- "protocol": "file:",
- "username": "",
- "password": "",
- "host": "test",
- "hostname": "test",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "file://localhost",
- "base": "file:///tmp/mock/path",
- "href": "file:///",
- "protocol": "file:",
- "username": "",
- "password": "",
- "host": "",
- "hostname": "",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "file://localhost/",
- "base": "file:///tmp/mock/path",
- "href": "file:///",
- "protocol": "file:",
- "username": "",
- "password": "",
- "host": "",
- "hostname": "",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "file://localhost/test",
- "base": "file:///tmp/mock/path",
- "href": "file:///test",
- "protocol": "file:",
- "username": "",
- "password": "",
- "host": "",
- "hostname": "",
- "port": "",
- "pathname": "/test",
- "search": "",
- "hash": ""
- },
- {
- "input": "test",
- "base": "file:///tmp/mock/path",
- "href": "file:///tmp/mock/test",
- "protocol": "file:",
- "username": "",
- "password": "",
- "host": "",
- "hostname": "",
- "port": "",
- "pathname": "/tmp/mock/test",
- "search": "",
- "hash": ""
- },
- {
- "input": "file:test",
- "base": "file:///tmp/mock/path",
- "href": "file:///tmp/mock/test",
- "protocol": "file:",
- "username": "",
- "password": "",
- "host": "",
- "hostname": "",
- "port": "",
- "pathname": "/tmp/mock/test",
- "search": "",
- "hash": ""
- },
- "# Based on http://trac.webkit.org/browser/trunk/LayoutTests/fast/url/script-tests/path.js",
- {
- "input": "http://example.com/././foo",
- "base": "about:blank",
- "href": "http://example.com/foo",
- "origin": "http://example.com",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "example.com",
- "hostname": "example.com",
- "port": "",
- "pathname": "/foo",
- "search": "",
- "hash": ""
- },
- {
- "input": "http://example.com/./.foo",
- "base": "about:blank",
- "href": "http://example.com/.foo",
- "origin": "http://example.com",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "example.com",
- "hostname": "example.com",
- "port": "",
- "pathname": "/.foo",
- "search": "",
- "hash": ""
- },
- {
- "input": "http://example.com/foo/.",
- "base": "about:blank",
- "href": "http://example.com/foo/",
- "origin": "http://example.com",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "example.com",
- "hostname": "example.com",
- "port": "",
- "pathname": "/foo/",
- "search": "",
- "hash": ""
- },
- {
- "input": "http://example.com/foo/./",
- "base": "about:blank",
- "href": "http://example.com/foo/",
- "origin": "http://example.com",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "example.com",
- "hostname": "example.com",
- "port": "",
- "pathname": "/foo/",
- "search": "",
- "hash": ""
- },
- {
- "input": "http://example.com/foo/bar/..",
- "base": "about:blank",
- "href": "http://example.com/foo/",
- "origin": "http://example.com",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "example.com",
- "hostname": "example.com",
- "port": "",
- "pathname": "/foo/",
- "search": "",
- "hash": ""
- },
- {
- "input": "http://example.com/foo/bar/../",
- "base": "about:blank",
- "href": "http://example.com/foo/",
- "origin": "http://example.com",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "example.com",
- "hostname": "example.com",
- "port": "",
- "pathname": "/foo/",
- "search": "",
- "hash": ""
- },
- {
- "input": "http://example.com/foo/..bar",
- "base": "about:blank",
- "href": "http://example.com/foo/..bar",
- "origin": "http://example.com",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "example.com",
- "hostname": "example.com",
- "port": "",
- "pathname": "/foo/..bar",
- "search": "",
- "hash": ""
- },
- {
- "input": "http://example.com/foo/bar/../ton",
- "base": "about:blank",
- "href": "http://example.com/foo/ton",
- "origin": "http://example.com",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "example.com",
- "hostname": "example.com",
- "port": "",
- "pathname": "/foo/ton",
- "search": "",
- "hash": ""
- },
- {
- "input": "http://example.com/foo/bar/../ton/../../a",
- "base": "about:blank",
- "href": "http://example.com/a",
- "origin": "http://example.com",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "example.com",
- "hostname": "example.com",
- "port": "",
- "pathname": "/a",
- "search": "",
- "hash": ""
- },
- {
- "input": "http://example.com/foo/../../..",
- "base": "about:blank",
- "href": "http://example.com/",
- "origin": "http://example.com",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "example.com",
- "hostname": "example.com",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "http://example.com/foo/../../../ton",
- "base": "about:blank",
- "href": "http://example.com/ton",
- "origin": "http://example.com",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "example.com",
- "hostname": "example.com",
- "port": "",
- "pathname": "/ton",
- "search": "",
- "hash": ""
- },
- {
- "input": "http://example.com/foo/%2e",
- "base": "about:blank",
- "href": "http://example.com/foo/",
- "origin": "http://example.com",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "example.com",
- "hostname": "example.com",
- "port": "",
- "pathname": "/foo/",
- "search": "",
- "hash": ""
- },
- {
- "input": "http://example.com/foo/%2e%2",
- "base": "about:blank",
- "href": "http://example.com/foo/.%2",
- "origin": "http://example.com",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "example.com",
- "hostname": "example.com",
- "port": "",
- "pathname": "/foo/.%2",
- "search": "",
- "hash": ""
- },
- {
- "input": "http://example.com/foo/%2e./%2e%2e/.%2e/%2e.bar",
- "base": "about:blank",
- "href": "http://example.com/..bar",
- "origin": "http://example.com",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "example.com",
- "hostname": "example.com",
- "port": "",
- "pathname": "/..bar",
- "search": "",
- "hash": ""
- },
- {
- "input": "http://example.com////../..",
- "base": "about:blank",
- "href": "http://example.com//",
- "origin": "http://example.com",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "example.com",
- "hostname": "example.com",
- "port": "",
- "pathname": "//",
- "search": "",
- "hash": ""
- },
- {
- "input": "http://example.com/foo/bar//../..",
- "base": "about:blank",
- "href": "http://example.com/foo/",
- "origin": "http://example.com",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "example.com",
- "hostname": "example.com",
- "port": "",
- "pathname": "/foo/",
- "search": "",
- "hash": ""
- },
- {
- "input": "http://example.com/foo/bar//..",
- "base": "about:blank",
- "href": "http://example.com/foo/bar/",
- "origin": "http://example.com",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "example.com",
- "hostname": "example.com",
- "port": "",
- "pathname": "/foo/bar/",
- "search": "",
- "hash": ""
- },
- {
- "input": "http://example.com/foo",
- "base": "about:blank",
- "href": "http://example.com/foo",
- "origin": "http://example.com",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "example.com",
- "hostname": "example.com",
- "port": "",
- "pathname": "/foo",
- "search": "",
- "hash": ""
- },
- {
- "input": "http://example.com/%20foo",
- "base": "about:blank",
- "href": "http://example.com/%20foo",
- "origin": "http://example.com",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "example.com",
- "hostname": "example.com",
- "port": "",
- "pathname": "/%20foo",
- "search": "",
- "hash": ""
- },
- {
- "input": "http://example.com/foo%",
- "base": "about:blank",
- "href": "http://example.com/foo%",
- "origin": "http://example.com",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "example.com",
- "hostname": "example.com",
- "port": "",
- "pathname": "/foo%",
- "search": "",
- "hash": ""
- },
- {
- "input": "http://example.com/foo%2",
- "base": "about:blank",
- "href": "http://example.com/foo%2",
- "origin": "http://example.com",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "example.com",
- "hostname": "example.com",
- "port": "",
- "pathname": "/foo%2",
- "search": "",
- "hash": ""
- },
- {
- "input": "http://example.com/foo%2zbar",
- "base": "about:blank",
- "href": "http://example.com/foo%2zbar",
- "origin": "http://example.com",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "example.com",
- "hostname": "example.com",
- "port": "",
- "pathname": "/foo%2zbar",
- "search": "",
- "hash": ""
- },
- {
- "input": "http://example.com/foo%2©zbar",
- "base": "about:blank",
- "href": "http://example.com/foo%2%C3%82%C2%A9zbar",
- "origin": "http://example.com",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "example.com",
- "hostname": "example.com",
- "port": "",
- "pathname": "/foo%2%C3%82%C2%A9zbar",
- "search": "",
- "hash": ""
- },
- {
- "input": "http://example.com/foo%41%7a",
- "base": "about:blank",
- "href": "http://example.com/foo%41%7a",
- "origin": "http://example.com",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "example.com",
- "hostname": "example.com",
- "port": "",
- "pathname": "/foo%41%7a",
- "search": "",
- "hash": ""
- },
- {
- "input": "http://example.com/foo\t\u0091%91",
- "base": "about:blank",
- "href": "http://example.com/foo%C2%91%91",
- "origin": "http://example.com",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "example.com",
- "hostname": "example.com",
- "port": "",
- "pathname": "/foo%C2%91%91",
- "search": "",
- "hash": ""
- },
- {
- "input": "http://example.com/foo%00%51",
- "base": "about:blank",
- "href": "http://example.com/foo%00%51",
- "origin": "http://example.com",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "example.com",
- "hostname": "example.com",
- "port": "",
- "pathname": "/foo%00%51",
- "search": "",
- "hash": ""
- },
- {
- "input": "http://example.com/(%28:%3A%29)",
- "base": "about:blank",
- "href": "http://example.com/(%28:%3A%29)",
- "origin": "http://example.com",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "example.com",
- "hostname": "example.com",
- "port": "",
- "pathname": "/(%28:%3A%29)",
- "search": "",
- "hash": ""
- },
- {
- "input": "http://example.com/%3A%3a%3C%3c",
- "base": "about:blank",
- "href": "http://example.com/%3A%3a%3C%3c",
- "origin": "http://example.com",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "example.com",
- "hostname": "example.com",
- "port": "",
- "pathname": "/%3A%3a%3C%3c",
- "search": "",
- "hash": ""
- },
- {
- "input": "http://example.com/foo\tbar",
- "base": "about:blank",
- "href": "http://example.com/foobar",
- "origin": "http://example.com",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "example.com",
- "hostname": "example.com",
- "port": "",
- "pathname": "/foobar",
- "search": "",
- "hash": ""
- },
- {
- "input": "http://example.com\\\\foo\\\\bar",
- "base": "about:blank",
- "href": "http://example.com//foo//bar",
- "origin": "http://example.com",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "example.com",
- "hostname": "example.com",
- "port": "",
- "pathname": "//foo//bar",
- "search": "",
- "hash": ""
- },
- {
- "input": "http://example.com/%7Ffp3%3Eju%3Dduvgw%3Dd",
- "base": "about:blank",
- "href": "http://example.com/%7Ffp3%3Eju%3Dduvgw%3Dd",
- "origin": "http://example.com",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "example.com",
- "hostname": "example.com",
- "port": "",
- "pathname": "/%7Ffp3%3Eju%3Dduvgw%3Dd",
- "search": "",
- "hash": ""
- },
- {
- "input": "http://example.com/@asdf%40",
- "base": "about:blank",
- "href": "http://example.com/@asdf%40",
- "origin": "http://example.com",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "example.com",
- "hostname": "example.com",
- "port": "",
- "pathname": "/@asdf%40",
- "search": "",
- "hash": ""
- },
- {
- "input": "http://example.com/你好你好",
- "base": "about:blank",
- "href": "http://example.com/%E4%BD%A0%E5%A5%BD%E4%BD%A0%E5%A5%BD",
- "origin": "http://example.com",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "example.com",
- "hostname": "example.com",
- "port": "",
- "pathname": "/%E4%BD%A0%E5%A5%BD%E4%BD%A0%E5%A5%BD",
- "search": "",
- "hash": ""
- },
- {
- "input": "http://example.com/‥/foo",
- "base": "about:blank",
- "href": "http://example.com/%E2%80%A5/foo",
- "origin": "http://example.com",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "example.com",
- "hostname": "example.com",
- "port": "",
- "pathname": "/%E2%80%A5/foo",
- "search": "",
- "hash": ""
- },
- {
- "input": "http://example.com//foo",
- "base": "about:blank",
- "href": "http://example.com/%EF%BB%BF/foo",
- "origin": "http://example.com",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "example.com",
- "hostname": "example.com",
- "port": "",
- "pathname": "/%EF%BB%BF/foo",
- "search": "",
- "hash": ""
- },
- {
- "input": "http://example.com/‮/foo/‭/bar",
- "base": "about:blank",
- "href": "http://example.com/%E2%80%AE/foo/%E2%80%AD/bar",
- "origin": "http://example.com",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "example.com",
- "hostname": "example.com",
- "port": "",
- "pathname": "/%E2%80%AE/foo/%E2%80%AD/bar",
- "search": "",
- "hash": ""
- },
- "# Based on http://trac.webkit.org/browser/trunk/LayoutTests/fast/url/script-tests/relative.js",
- {
- "input": "http://www.google.com/foo?bar=baz#",
- "base": "about:blank",
- "href": "http://www.google.com/foo?bar=baz#",
- "origin": "http://www.google.com",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "www.google.com",
- "hostname": "www.google.com",
- "port": "",
- "pathname": "/foo",
- "search": "?bar=baz",
- "hash": ""
- },
- {
- "input": "http://www.google.com/foo?bar=baz# »",
- "base": "about:blank",
- "href": "http://www.google.com/foo?bar=baz# »",
- "origin": "http://www.google.com",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "www.google.com",
- "hostname": "www.google.com",
- "port": "",
- "pathname": "/foo",
- "search": "?bar=baz",
- "hash": "# »"
- },
- {
- "input": "data:test# »",
- "base": "about:blank",
- "href": "data:test# »",
- "origin": "null",
- "protocol": "data:",
- "username": "",
- "password": "",
- "host": "",
- "hostname": "",
- "port": "",
- "pathname": "test",
- "search": "",
- "hash": "# »"
- },
- {
- "input": "http://[www.google.com]/",
- "base": "about:blank",
- "failure": true
- },
- {
- "input": "http://www.google.com",
- "base": "about:blank",
- "href": "http://www.google.com/",
- "origin": "http://www.google.com",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "www.google.com",
- "hostname": "www.google.com",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "http://192.0x00A80001",
- "base": "about:blank",
- "href": "http://192.168.0.1/",
- "origin": "http://192.168.0.1",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "192.168.0.1",
- "hostname": "192.168.0.1",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "http://www/foo%2Ehtml",
- "base": "about:blank",
- "href": "http://www/foo.html",
- "origin": "http://www",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "www",
- "hostname": "www",
- "port": "",
- "pathname": "/foo.html",
- "search": "",
- "hash": ""
- },
- {
- "input": "http://www/foo/%2E/html",
- "base": "about:blank",
- "href": "http://www/foo/html",
- "origin": "http://www",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "www",
- "hostname": "www",
- "port": "",
- "pathname": "/foo/html",
- "search": "",
- "hash": ""
- },
- {
- "input": "http://user:pass@/",
- "base": "about:blank",
- "failure": true
- },
- {
- "input": "http://%25DOMAIN:foobar@foodomain.com/",
- "base": "about:blank",
- "href": "http://%25DOMAIN:foobar@foodomain.com/",
- "origin": "http://foodomain.com",
- "protocol": "http:",
- "username": "%25DOMAIN",
- "password": "foobar",
- "host": "foodomain.com",
- "hostname": "foodomain.com",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "http:\\\\www.google.com\\foo",
- "base": "about:blank",
- "href": "http://www.google.com/foo",
- "origin": "http://www.google.com",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "www.google.com",
- "hostname": "www.google.com",
- "port": "",
- "pathname": "/foo",
- "search": "",
- "hash": ""
- },
- {
- "input": "http://foo:80/",
- "base": "about:blank",
- "href": "http://foo/",
- "origin": "http://foo",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "foo",
- "hostname": "foo",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "http://foo:81/",
- "base": "about:blank",
- "href": "http://foo:81/",
- "origin": "http://foo:81",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "foo:81",
- "hostname": "foo",
- "port": "81",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "httpa://foo:80/",
- "base": "about:blank",
- "href": "httpa://foo:80/",
- "origin": "null",
- "protocol": "httpa:",
- "username": "",
- "password": "",
- "host": "foo:80",
- "hostname": "foo",
- "port": "80",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "http://foo:-80/",
- "base": "about:blank",
- "failure": true
- },
- {
- "input": "https://foo:443/",
- "base": "about:blank",
- "href": "https://foo/",
- "origin": "https://foo",
- "protocol": "https:",
- "username": "",
- "password": "",
- "host": "foo",
- "hostname": "foo",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "https://foo:80/",
- "base": "about:blank",
- "href": "https://foo:80/",
- "origin": "https://foo:80",
- "protocol": "https:",
- "username": "",
- "password": "",
- "host": "foo:80",
- "hostname": "foo",
- "port": "80",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "ftp://foo:21/",
- "base": "about:blank",
- "href": "ftp://foo/",
- "origin": "ftp://foo",
- "protocol": "ftp:",
- "username": "",
- "password": "",
- "host": "foo",
- "hostname": "foo",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "ftp://foo:80/",
- "base": "about:blank",
- "href": "ftp://foo:80/",
- "origin": "ftp://foo:80",
- "protocol": "ftp:",
- "username": "",
- "password": "",
- "host": "foo:80",
- "hostname": "foo",
- "port": "80",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "gopher://foo:70/",
- "base": "about:blank",
- "href": "gopher://foo/",
- "origin": "gopher://foo",
- "protocol": "gopher:",
- "username": "",
- "password": "",
- "host": "foo",
- "hostname": "foo",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "gopher://foo:443/",
- "base": "about:blank",
- "href": "gopher://foo:443/",
- "origin": "gopher://foo:443",
- "protocol": "gopher:",
- "username": "",
- "password": "",
- "host": "foo:443",
- "hostname": "foo",
- "port": "443",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "ws://foo:80/",
- "base": "about:blank",
- "href": "ws://foo/",
- "origin": "ws://foo",
- "protocol": "ws:",
- "username": "",
- "password": "",
- "host": "foo",
- "hostname": "foo",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "ws://foo:81/",
- "base": "about:blank",
- "href": "ws://foo:81/",
- "origin": "ws://foo:81",
- "protocol": "ws:",
- "username": "",
- "password": "",
- "host": "foo:81",
- "hostname": "foo",
- "port": "81",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "ws://foo:443/",
- "base": "about:blank",
- "href": "ws://foo:443/",
- "origin": "ws://foo:443",
- "protocol": "ws:",
- "username": "",
- "password": "",
- "host": "foo:443",
- "hostname": "foo",
- "port": "443",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "ws://foo:815/",
- "base": "about:blank",
- "href": "ws://foo:815/",
- "origin": "ws://foo:815",
- "protocol": "ws:",
- "username": "",
- "password": "",
- "host": "foo:815",
- "hostname": "foo",
- "port": "815",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "wss://foo:80/",
- "base": "about:blank",
- "href": "wss://foo:80/",
- "origin": "wss://foo:80",
- "protocol": "wss:",
- "username": "",
- "password": "",
- "host": "foo:80",
- "hostname": "foo",
- "port": "80",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "wss://foo:81/",
- "base": "about:blank",
- "href": "wss://foo:81/",
- "origin": "wss://foo:81",
- "protocol": "wss:",
- "username": "",
- "password": "",
- "host": "foo:81",
- "hostname": "foo",
- "port": "81",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "wss://foo:443/",
- "base": "about:blank",
- "href": "wss://foo/",
- "origin": "wss://foo",
- "protocol": "wss:",
- "username": "",
- "password": "",
- "host": "foo",
- "hostname": "foo",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "wss://foo:815/",
- "base": "about:blank",
- "href": "wss://foo:815/",
- "origin": "wss://foo:815",
- "protocol": "wss:",
- "username": "",
- "password": "",
- "host": "foo:815",
- "hostname": "foo",
- "port": "815",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "http:/example.com/",
- "base": "about:blank",
- "href": "http://example.com/",
- "origin": "http://example.com",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "example.com",
- "hostname": "example.com",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "ftp:/example.com/",
- "base": "about:blank",
- "href": "ftp://example.com/",
- "origin": "ftp://example.com",
- "protocol": "ftp:",
- "username": "",
- "password": "",
- "host": "example.com",
- "hostname": "example.com",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "https:/example.com/",
- "base": "about:blank",
- "href": "https://example.com/",
- "origin": "https://example.com",
- "protocol": "https:",
- "username": "",
- "password": "",
- "host": "example.com",
- "hostname": "example.com",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "madeupscheme:/example.com/",
- "base": "about:blank",
- "href": "madeupscheme:/example.com/",
- "origin": "null",
- "protocol": "madeupscheme:",
- "username": "",
- "password": "",
- "host": "",
- "hostname": "",
- "port": "",
- "pathname": "/example.com/",
- "search": "",
- "hash": ""
- },
- {
- "input": "file:/example.com/",
- "base": "about:blank",
- "href": "file:///example.com/",
- "protocol": "file:",
- "username": "",
- "password": "",
- "host": "",
- "hostname": "",
- "port": "",
- "pathname": "/example.com/",
- "search": "",
- "hash": ""
- },
- {
- "input": "ftps:/example.com/",
- "base": "about:blank",
- "href": "ftps:/example.com/",
- "origin": "null",
- "protocol": "ftps:",
- "username": "",
- "password": "",
- "host": "",
- "hostname": "",
- "port": "",
- "pathname": "/example.com/",
- "search": "",
- "hash": ""
- },
- {
- "input": "gopher:/example.com/",
- "base": "about:blank",
- "href": "gopher://example.com/",
- "origin": "gopher://example.com",
- "protocol": "gopher:",
- "username": "",
- "password": "",
- "host": "example.com",
- "hostname": "example.com",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "ws:/example.com/",
- "base": "about:blank",
- "href": "ws://example.com/",
- "origin": "ws://example.com",
- "protocol": "ws:",
- "username": "",
- "password": "",
- "host": "example.com",
- "hostname": "example.com",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "wss:/example.com/",
- "base": "about:blank",
- "href": "wss://example.com/",
- "origin": "wss://example.com",
- "protocol": "wss:",
- "username": "",
- "password": "",
- "host": "example.com",
- "hostname": "example.com",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "data:/example.com/",
- "base": "about:blank",
- "href": "data:/example.com/",
- "origin": "null",
- "protocol": "data:",
- "username": "",
- "password": "",
- "host": "",
- "hostname": "",
- "port": "",
- "pathname": "/example.com/",
- "search": "",
- "hash": ""
- },
- {
- "input": "javascript:/example.com/",
- "base": "about:blank",
- "href": "javascript:/example.com/",
- "origin": "null",
- "protocol": "javascript:",
- "username": "",
- "password": "",
- "host": "",
- "hostname": "",
- "port": "",
- "pathname": "/example.com/",
- "search": "",
- "hash": ""
- },
- {
- "input": "mailto:/example.com/",
- "base": "about:blank",
- "href": "mailto:/example.com/",
- "origin": "null",
- "protocol": "mailto:",
- "username": "",
- "password": "",
- "host": "",
- "hostname": "",
- "port": "",
- "pathname": "/example.com/",
- "search": "",
- "hash": ""
- },
- {
- "input": "http:example.com/",
- "base": "about:blank",
- "href": "http://example.com/",
- "origin": "http://example.com",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "example.com",
- "hostname": "example.com",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "ftp:example.com/",
- "base": "about:blank",
- "href": "ftp://example.com/",
- "origin": "ftp://example.com",
- "protocol": "ftp:",
- "username": "",
- "password": "",
- "host": "example.com",
- "hostname": "example.com",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "https:example.com/",
- "base": "about:blank",
- "href": "https://example.com/",
- "origin": "https://example.com",
- "protocol": "https:",
- "username": "",
- "password": "",
- "host": "example.com",
- "hostname": "example.com",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "madeupscheme:example.com/",
- "base": "about:blank",
- "href": "madeupscheme:example.com/",
- "origin": "null",
- "protocol": "madeupscheme:",
- "username": "",
- "password": "",
- "host": "",
- "hostname": "",
- "port": "",
- "pathname": "example.com/",
- "search": "",
- "hash": ""
- },
- {
- "input": "ftps:example.com/",
- "base": "about:blank",
- "href": "ftps:example.com/",
- "origin": "null",
- "protocol": "ftps:",
- "username": "",
- "password": "",
- "host": "",
- "hostname": "",
- "port": "",
- "pathname": "example.com/",
- "search": "",
- "hash": ""
- },
- {
- "input": "gopher:example.com/",
- "base": "about:blank",
- "href": "gopher://example.com/",
- "origin": "gopher://example.com",
- "protocol": "gopher:",
- "username": "",
- "password": "",
- "host": "example.com",
- "hostname": "example.com",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "ws:example.com/",
- "base": "about:blank",
- "href": "ws://example.com/",
- "origin": "ws://example.com",
- "protocol": "ws:",
- "username": "",
- "password": "",
- "host": "example.com",
- "hostname": "example.com",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "wss:example.com/",
- "base": "about:blank",
- "href": "wss://example.com/",
- "origin": "wss://example.com",
- "protocol": "wss:",
- "username": "",
- "password": "",
- "host": "example.com",
- "hostname": "example.com",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "data:example.com/",
- "base": "about:blank",
- "href": "data:example.com/",
- "origin": "null",
- "protocol": "data:",
- "username": "",
- "password": "",
- "host": "",
- "hostname": "",
- "port": "",
- "pathname": "example.com/",
- "search": "",
- "hash": ""
- },
- {
- "input": "javascript:example.com/",
- "base": "about:blank",
- "href": "javascript:example.com/",
- "origin": "null",
- "protocol": "javascript:",
- "username": "",
- "password": "",
- "host": "",
- "hostname": "",
- "port": "",
- "pathname": "example.com/",
- "search": "",
- "hash": ""
- },
- {
- "input": "mailto:example.com/",
- "base": "about:blank",
- "href": "mailto:example.com/",
- "origin": "null",
- "protocol": "mailto:",
- "username": "",
- "password": "",
- "host": "",
- "hostname": "",
- "port": "",
- "pathname": "example.com/",
- "search": "",
- "hash": ""
- },
- "# Based on http://trac.webkit.org/browser/trunk/LayoutTests/fast/url/segments-userinfo-vs-host.html",
- {
- "input": "http:@www.example.com",
- "base": "about:blank",
- "href": "http://www.example.com/",
- "origin": "http://www.example.com",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "www.example.com",
- "hostname": "www.example.com",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "http:/@www.example.com",
- "base": "about:blank",
- "href": "http://www.example.com/",
- "origin": "http://www.example.com",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "www.example.com",
- "hostname": "www.example.com",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "http://@www.example.com",
- "base": "about:blank",
- "href": "http://www.example.com/",
- "origin": "http://www.example.com",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "www.example.com",
- "hostname": "www.example.com",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "http:a:b@www.example.com",
- "base": "about:blank",
- "href": "http://a:b@www.example.com/",
- "origin": "http://www.example.com",
- "protocol": "http:",
- "username": "a",
- "password": "b",
- "host": "www.example.com",
- "hostname": "www.example.com",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "http:/a:b@www.example.com",
- "base": "about:blank",
- "href": "http://a:b@www.example.com/",
- "origin": "http://www.example.com",
- "protocol": "http:",
- "username": "a",
- "password": "b",
- "host": "www.example.com",
- "hostname": "www.example.com",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "http://a:b@www.example.com",
- "base": "about:blank",
- "href": "http://a:b@www.example.com/",
- "origin": "http://www.example.com",
- "protocol": "http:",
- "username": "a",
- "password": "b",
- "host": "www.example.com",
- "hostname": "www.example.com",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "http://@pple.com",
- "base": "about:blank",
- "href": "http://pple.com/",
- "origin": "http://pple.com",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "pple.com",
- "hostname": "pple.com",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "http::b@www.example.com",
- "base": "about:blank",
- "href": "http://:b@www.example.com/",
- "origin": "http://www.example.com",
- "protocol": "http:",
- "username": "",
- "password": "b",
- "host": "www.example.com",
- "hostname": "www.example.com",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "http:/:b@www.example.com",
- "base": "about:blank",
- "href": "http://:b@www.example.com/",
- "origin": "http://www.example.com",
- "protocol": "http:",
- "username": "",
- "password": "b",
- "host": "www.example.com",
- "hostname": "www.example.com",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "http://:b@www.example.com",
- "base": "about:blank",
- "href": "http://:b@www.example.com/",
- "origin": "http://www.example.com",
- "protocol": "http:",
- "username": "",
- "password": "b",
- "host": "www.example.com",
- "hostname": "www.example.com",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "http:/:@/www.example.com",
- "base": "about:blank",
- "failure": true
- },
- {
- "input": "http://user@/www.example.com",
- "base": "about:blank",
- "failure": true
- },
- {
- "input": "http:@/www.example.com",
- "base": "about:blank",
- "failure": true
- },
- {
- "input": "http:/@/www.example.com",
- "base": "about:blank",
- "failure": true
- },
- {
- "input": "http://@/www.example.com",
- "base": "about:blank",
- "failure": true
- },
- {
- "input": "https:@/www.example.com",
- "base": "about:blank",
- "failure": true
- },
- {
- "input": "http:a:b@/www.example.com",
- "base": "about:blank",
- "failure": true
- },
- {
- "input": "http:/a:b@/www.example.com",
- "base": "about:blank",
- "failure": true
- },
- {
- "input": "http://a:b@/www.example.com",
- "base": "about:blank",
- "failure": true
- },
- {
- "input": "http::@/www.example.com",
- "base": "about:blank",
- "failure": true
- },
- {
- "input": "http:a:@www.example.com",
- "base": "about:blank",
- "href": "http://a:@www.example.com/",
- "origin": "http://www.example.com",
- "protocol": "http:",
- "username": "a",
- "password": "",
- "host": "www.example.com",
- "hostname": "www.example.com",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "http:/a:@www.example.com",
- "base": "about:blank",
- "href": "http://a:@www.example.com/",
- "origin": "http://www.example.com",
- "protocol": "http:",
- "username": "a",
- "password": "",
- "host": "www.example.com",
- "hostname": "www.example.com",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "http://a:@www.example.com",
- "base": "about:blank",
- "href": "http://a:@www.example.com/",
- "origin": "http://www.example.com",
- "protocol": "http:",
- "username": "a",
- "password": "",
- "host": "www.example.com",
- "hostname": "www.example.com",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "http://www.@pple.com",
- "base": "about:blank",
- "href": "http://www.@pple.com/",
- "origin": "http://pple.com",
- "protocol": "http:",
- "username": "www.",
- "password": "",
- "host": "pple.com",
- "hostname": "pple.com",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "http:@:www.example.com",
- "base": "about:blank",
- "failure": true
- },
- {
- "input": "http:/@:www.example.com",
- "base": "about:blank",
- "failure": true
- },
- {
- "input": "http://@:www.example.com",
- "base": "about:blank",
- "failure": true
- },
- {
- "input": "http://:@www.example.com",
- "base": "about:blank",
- "href": "http://:@www.example.com/",
- "origin": "http://www.example.com",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "www.example.com",
- "hostname": "www.example.com",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- "# Others",
- {
- "input": "/",
- "base": "http://www.example.com/test",
- "href": "http://www.example.com/",
- "origin": "http://www.example.com",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "www.example.com",
- "hostname": "www.example.com",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "/test.txt",
- "base": "http://www.example.com/test",
- "href": "http://www.example.com/test.txt",
- "origin": "http://www.example.com",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "www.example.com",
- "hostname": "www.example.com",
- "port": "",
- "pathname": "/test.txt",
- "search": "",
- "hash": ""
- },
- {
- "input": ".",
- "base": "http://www.example.com/test",
- "href": "http://www.example.com/",
- "origin": "http://www.example.com",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "www.example.com",
- "hostname": "www.example.com",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "..",
- "base": "http://www.example.com/test",
- "href": "http://www.example.com/",
- "origin": "http://www.example.com",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "www.example.com",
- "hostname": "www.example.com",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "test.txt",
- "base": "http://www.example.com/test",
- "href": "http://www.example.com/test.txt",
- "origin": "http://www.example.com",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "www.example.com",
- "hostname": "www.example.com",
- "port": "",
- "pathname": "/test.txt",
- "search": "",
- "hash": ""
- },
- {
- "input": "./test.txt",
- "base": "http://www.example.com/test",
- "href": "http://www.example.com/test.txt",
- "origin": "http://www.example.com",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "www.example.com",
- "hostname": "www.example.com",
- "port": "",
- "pathname": "/test.txt",
- "search": "",
- "hash": ""
- },
- {
- "input": "../test.txt",
- "base": "http://www.example.com/test",
- "href": "http://www.example.com/test.txt",
- "origin": "http://www.example.com",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "www.example.com",
- "hostname": "www.example.com",
- "port": "",
- "pathname": "/test.txt",
- "search": "",
- "hash": ""
- },
- {
- "input": "../aaa/test.txt",
- "base": "http://www.example.com/test",
- "href": "http://www.example.com/aaa/test.txt",
- "origin": "http://www.example.com",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "www.example.com",
- "hostname": "www.example.com",
- "port": "",
- "pathname": "/aaa/test.txt",
- "search": "",
- "hash": ""
- },
- {
- "input": "../../test.txt",
- "base": "http://www.example.com/test",
- "href": "http://www.example.com/test.txt",
- "origin": "http://www.example.com",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "www.example.com",
- "hostname": "www.example.com",
- "port": "",
- "pathname": "/test.txt",
- "search": "",
- "hash": ""
- },
- {
- "input": "中/test.txt",
- "base": "http://www.example.com/test",
- "href": "http://www.example.com/%E4%B8%AD/test.txt",
- "origin": "http://www.example.com",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "www.example.com",
- "hostname": "www.example.com",
- "port": "",
- "pathname": "/%E4%B8%AD/test.txt",
- "search": "",
- "hash": ""
- },
- {
- "input": "http://www.example2.com",
- "base": "http://www.example.com/test",
- "href": "http://www.example2.com/",
- "origin": "http://www.example2.com",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "www.example2.com",
- "hostname": "www.example2.com",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "//www.example2.com",
- "base": "http://www.example.com/test",
- "href": "http://www.example2.com/",
- "origin": "http://www.example2.com",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "www.example2.com",
- "hostname": "www.example2.com",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "file:...",
- "base": "http://www.example.com/test",
- "href": "file:///...",
- "protocol": "file:",
- "username": "",
- "password": "",
- "host": "",
- "hostname": "",
- "port": "",
- "pathname": "/...",
- "search": "",
- "hash": ""
- },
- {
- "input": "file:..",
- "base": "http://www.example.com/test",
- "href": "file:///",
- "protocol": "file:",
- "username": "",
- "password": "",
- "host": "",
- "hostname": "",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "file:a",
- "base": "http://www.example.com/test",
- "href": "file:///a",
- "protocol": "file:",
- "username": "",
- "password": "",
- "host": "",
- "hostname": "",
- "port": "",
- "pathname": "/a",
- "search": "",
- "hash": ""
- },
- "# Based on http://trac.webkit.org/browser/trunk/LayoutTests/fast/url/host.html",
- "Basic canonicalization, uppercase should be converted to lowercase",
- {
- "input": "http://ExAmPlE.CoM",
- "base": "http://other.com/",
- "href": "http://example.com/",
- "origin": "http://example.com",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "example.com",
- "hostname": "example.com",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "http://example example.com",
- "base": "http://other.com/",
- "failure": true
- },
- {
- "input": "http://Goo%20 goo%7C|.com",
- "base": "http://other.com/",
- "failure": true
- },
- {
- "input": "http://[]",
- "base": "http://other.com/",
- "failure": true
- },
- {
- "input": "http://[:]",
- "base": "http://other.com/",
- "failure": true
- },
- "U+3000 is mapped to U+0020 (space) which is disallowed",
- {
- "input": "http://GOO\u00a0\u3000goo.com",
- "base": "http://other.com/",
- "failure": true
- },
- "Other types of space (no-break, zero-width, zero-width-no-break) are name-prepped away to nothing. U+200B, U+2060, and U+FEFF, are ignored",
- {
- "input": "http://GOO\u200b\u2060\ufeffgoo.com",
- "base": "http://other.com/",
- "href": "http://googoo.com/",
- "origin": "http://googoo.com",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "googoo.com",
- "hostname": "googoo.com",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- "Ideographic full stop (full-width period for Chinese, etc.) should be treated as a dot. U+3002 is mapped to U+002E (dot)",
- {
- "input": "http://www.foo。bar.com",
- "base": "http://other.com/",
- "href": "http://www.foo.bar.com/",
- "origin": "http://www.foo.bar.com",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "www.foo.bar.com",
- "hostname": "www.foo.bar.com",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- "Invalid unicode characters should fail... U+FDD0 is disallowed; %ef%b7%90 is U+FDD0",
- {
- "input": "http://\ufdd0zyx.com",
- "base": "http://other.com/",
- "failure": true
- },
- "This is the same as previous but escaped",
- {
- "input": "http://%ef%b7%90zyx.com",
- "base": "http://other.com/",
- "failure": true
- },
- "Test name prepping, fullwidth input should be converted to ASCII and NOT IDN-ized. This is 'Go' in fullwidth UTF-8/UTF-16.",
- {
- "input": "http://Go.com",
- "base": "http://other.com/",
- "href": "http://go.com/",
- "origin": "http://go.com",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "go.com",
- "hostname": "go.com",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- "URL spec forbids the following. https://www.w3.org/Bugs/Public/show_bug.cgi?id=24257",
- {
- "input": "http://%41.com",
- "base": "http://other.com/",
- "failure": true
- },
- {
- "input": "http://%ef%bc%85%ef%bc%94%ef%bc%91.com",
- "base": "http://other.com/",
- "failure": true
- },
- "...%00 in fullwidth should fail (also as escaped UTF-8 input)",
- {
- "input": "http://%00.com",
- "base": "http://other.com/",
- "failure": true
- },
- {
- "input": "http://%ef%bc%85%ef%bc%90%ef%bc%90.com",
- "base": "http://other.com/",
- "failure": true
- },
- "Basic IDN support, UTF-8 and UTF-16 input should be converted to IDN",
- {
- "input": "http://你好你好",
- "base": "http://other.com/",
- "href": "http://xn--6qqa088eba/",
- "origin": "http://你好你好",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "xn--6qqa088eba",
- "hostname": "xn--6qqa088eba",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- "Invalid escaped characters should fail and the percents should be escaped. https://www.w3.org/Bugs/Public/show_bug.cgi?id=24191",
- {
- "input": "http://%zz%66%a.com",
- "base": "http://other.com/",
- "failure": true
- },
- "If we get an invalid character that has been escaped.",
- {
- "input": "http://%25",
- "base": "http://other.com/",
- "failure": true
- },
- {
- "input": "http://hello%00",
- "base": "http://other.com/",
- "failure": true
- },
- "Escaped numbers should be treated like IP addresses if they are.",
- {
- "input": "http://%30%78%63%30%2e%30%32%35%30.01",
- "base": "http://other.com/",
- "href": "http://192.168.0.1/",
- "origin": "http://192.168.0.1",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "192.168.0.1",
- "hostname": "192.168.0.1",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "http://%30%78%63%30%2e%30%32%35%30.01%2e",
- "base": "http://other.com/",
- "href": "http://192.168.0.1/",
- "origin": "http://192.168.0.1",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "192.168.0.1",
- "hostname": "192.168.0.1",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "http://192.168.0.257",
- "base": "http://other.com/",
- "failure": true
- },
- "Invalid escaping should trigger the regular host error handling",
- {
- "input": "http://%3g%78%63%30%2e%30%32%35%30%2E.01",
- "base": "http://other.com/",
- "failure": true
- },
- "Something that isn't exactly an IP should get treated as a host and spaces escaped",
- {
- "input": "http://192.168.0.1 hello",
- "base": "http://other.com/",
- "failure": true
- },
- "Fullwidth and escaped UTF-8 fullwidth should still be treated as IP",
- {
- "input": "http://0Xc0.0250.01",
- "base": "http://other.com/",
- "href": "http://192.168.0.1/",
- "origin": "http://192.168.0.1",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "192.168.0.1",
- "hostname": "192.168.0.1",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- "Broken IPv6",
- {
- "input": "http://[google.com]",
- "base": "http://other.com/",
- "failure": true
- },
- "Misc Unicode",
- {
- "input": "http://foo:💩@example.com/bar",
- "base": "http://other.com/",
- "href": "http://foo:%F0%9F%92%A9@example.com/bar",
- "origin": "http://example.com",
- "protocol": "http:",
- "username": "foo",
- "password": "%F0%9F%92%A9",
- "host": "example.com",
- "hostname": "example.com",
- "port": "",
- "pathname": "/bar",
- "search": "",
- "hash": ""
- },
- "# resolving a fragment against any scheme succeeds",
- {
- "input": "#",
- "base": "test:test",
- "href": "test:test#",
- "origin": "null",
- "protocol": "test:",
- "username": "",
- "password": "",
- "host": "",
- "hostname": "",
- "port": "",
- "pathname": "test",
- "search": "",
- "hash": ""
- },
- {
- "input": "#x",
- "base": "mailto:x@x.com",
- "href": "mailto:x@x.com#x",
- "origin": "null",
- "protocol": "mailto:",
- "username": "",
- "password": "",
- "host": "",
- "hostname": "",
- "port": "",
- "pathname": "x@x.com",
- "search": "",
- "hash": "#x"
- },
- {
- "input": "#x",
- "base": "data:,",
- "href": "data:,#x",
- "origin": "null",
- "protocol": "data:",
- "username": "",
- "password": "",
- "host": "",
- "hostname": "",
- "port": "",
- "pathname": ",",
- "search": "",
- "hash": "#x"
- },
- {
- "input": "#x",
- "base": "about:blank",
- "href": "about:blank#x",
- "origin": "null",
- "protocol": "about:",
- "username": "",
- "password": "",
- "host": "",
- "hostname": "",
- "port": "",
- "pathname": "blank",
- "search": "",
- "hash": "#x"
- },
- {
- "input": "#",
- "base": "test:test?test",
- "href": "test:test?test#",
- "origin": "null",
- "protocol": "test:",
- "username": "",
- "password": "",
- "host": "",
- "hostname": "",
- "port": "",
- "pathname": "test",
- "search": "?test",
- "hash": ""
- },
- "# multiple @ in authority state",
- {
- "input": "https://@test@test@example:800/",
- "base": "http://doesnotmatter/",
- "href": "https://%40test%40test@example:800/",
- "origin": "https://example:800",
- "protocol": "https:",
- "username": "%40test%40test",
- "password": "",
- "host": "example:800",
- "hostname": "example",
- "port": "800",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "https://@@@example",
- "base": "http://doesnotmatter/",
- "href": "https://%40%40@example/",
- "origin": "https://example",
- "protocol": "https:",
- "username": "%40%40",
- "password": "",
- "host": "example",
- "hostname": "example",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- "non-az-09 characters",
- {
- "input": "http://`{}:`{}@h/`{}?`{}",
- "base": "http://doesnotmatter/",
- "href": "http://%60%7B%7D:%60%7B%7D@h/%60%7B%7D?`{}",
- "origin": "http://h",
- "protocol": "http:",
- "username": "%60%7B%7D",
- "password": "%60%7B%7D",
- "host": "h",
- "hostname": "h",
- "port": "",
- "pathname": "/%60%7B%7D",
- "search": "?`{}",
- "hash": ""
- },
- "# Credentials in base",
- {
- "input": "/some/path",
- "base": "http://user@example.org/smth",
- "href": "http://user@example.org/some/path",
- "origin": "http://example.org",
- "protocol": "http:",
- "username": "user",
- "password": "",
- "host": "example.org",
- "hostname": "example.org",
- "port": "",
- "pathname": "/some/path",
- "search": "",
- "hash": ""
- },
- {
- "input": "",
- "base": "http://user:pass@example.org:21/smth",
- "href": "http://user:pass@example.org:21/smth",
- "origin": "http://example.org:21",
- "protocol": "http:",
- "username": "user",
- "password": "pass",
- "host": "example.org:21",
- "hostname": "example.org",
- "port": "21",
- "pathname": "/smth",
- "search": "",
- "hash": ""
- },
- {
- "input": "/some/path",
- "base": "http://user:pass@example.org:21/smth",
- "href": "http://user:pass@example.org:21/some/path",
- "origin": "http://example.org:21",
- "protocol": "http:",
- "username": "user",
- "password": "pass",
- "host": "example.org:21",
- "hostname": "example.org",
- "port": "21",
- "pathname": "/some/path",
- "search": "",
- "hash": ""
- },
- "# a set of tests designed by zcorpan for relative URLs with unknown schemes",
- {
- "input": "i",
- "base": "sc:sd",
- "failure": true
- },
- {
- "input": "i",
- "base": "sc:sd/sd",
- "failure": true
- },
- {
- "input": "i",
- "base": "sc:/pa/pa",
- "href": "sc:/pa/i",
- "origin": "null",
- "protocol": "sc:",
- "username": "",
- "password": "",
- "host": "",
- "hostname": "",
- "port": "",
- "pathname": "/pa/i",
- "search": "",
- "hash": ""
- },
- {
- "input": "i",
- "base": "sc://ho/pa",
- "href": "sc://ho/i",
- "origin": "null",
- "protocol": "sc:",
- "username": "",
- "password": "",
- "host": "ho",
- "hostname": "ho",
- "port": "",
- "pathname": "/i",
- "search": "",
- "hash": ""
- },
- {
- "input": "i",
- "base": "sc:///pa/pa",
- "href": "sc:///pa/i",
- "origin": "null",
- "protocol": "sc:",
- "username": "",
- "password": "",
- "host": "",
- "hostname": "",
- "port": "",
- "pathname": "/pa/i",
- "search": "",
- "hash": ""
- },
- {
- "input": "../i",
- "base": "sc:sd",
- "failure": true
- },
- {
- "input": "../i",
- "base": "sc:sd/sd",
- "failure": true
- },
- {
- "input": "../i",
- "base": "sc:/pa/pa",
- "href": "sc:/i",
- "origin": "null",
- "protocol": "sc:",
- "username": "",
- "password": "",
- "host": "",
- "hostname": "",
- "port": "",
- "pathname": "/i",
- "search": "",
- "hash": ""
- },
- {
- "input": "../i",
- "base": "sc://ho/pa",
- "href": "sc://ho/i",
- "origin": "null",
- "protocol": "sc:",
- "username": "",
- "password": "",
- "host": "ho",
- "hostname": "ho",
- "port": "",
- "pathname": "/i",
- "search": "",
- "hash": ""
- },
- {
- "input": "../i",
- "base": "sc:///pa/pa",
- "href": "sc:///i",
- "origin": "null",
- "protocol": "sc:",
- "username": "",
- "password": "",
- "host": "",
- "hostname": "",
- "port": "",
- "pathname": "/i",
- "search": "",
- "hash": ""
- },
- {
- "input": "/i",
- "base": "sc:sd",
- "failure": true
- },
- {
- "input": "/i",
- "base": "sc:sd/sd",
- "failure": true
- },
- {
- "input": "/i",
- "base": "sc:/pa/pa",
- "href": "sc:/i",
- "origin": "null",
- "protocol": "sc:",
- "username": "",
- "password": "",
- "host": "",
- "hostname": "",
- "port": "",
- "pathname": "/i",
- "search": "",
- "hash": ""
- },
- {
- "input": "/i",
- "base": "sc://ho/pa",
- "href": "sc://ho/i",
- "origin": "null",
- "protocol": "sc:",
- "username": "",
- "password": "",
- "host": "ho",
- "hostname": "ho",
- "port": "",
- "pathname": "/i",
- "search": "",
- "hash": ""
- },
- {
- "input": "/i",
- "base": "sc:///pa/pa",
- "href": "sc:///i",
- "origin": "null",
- "protocol": "sc:",
- "username": "",
- "password": "",
- "host": "",
- "hostname": "",
- "port": "",
- "pathname": "/i",
- "search": "",
- "hash": ""
- },
- {
- "input": "?i",
- "base": "sc:sd",
- "failure": true
- },
- {
- "input": "?i",
- "base": "sc:sd/sd",
- "failure": true
- },
- {
- "input": "?i",
- "base": "sc:/pa/pa",
- "href": "sc:/pa/pa?i",
- "origin": "null",
- "protocol": "sc:",
- "username": "",
- "password": "",
- "host": "",
- "hostname": "",
- "port": "",
- "pathname": "/pa/pa",
- "search": "?i",
- "hash": ""
- },
- {
- "input": "?i",
- "base": "sc://ho/pa",
- "href": "sc://ho/pa?i",
- "origin": "null",
- "protocol": "sc:",
- "username": "",
- "password": "",
- "host": "ho",
- "hostname": "ho",
- "port": "",
- "pathname": "/pa",
- "search": "?i",
- "hash": ""
- },
- {
- "input": "?i",
- "base": "sc:///pa/pa",
- "href": "sc:///pa/pa?i",
- "origin": "null",
- "protocol": "sc:",
- "username": "",
- "password": "",
- "host": "",
- "hostname": "",
- "port": "",
- "pathname": "/pa/pa",
- "search": "?i",
- "hash": ""
- },
- {
- "input": "#i",
- "base": "sc:sd",
- "href": "sc:sd#i",
- "origin": "null",
- "protocol": "sc:",
- "username": "",
- "password": "",
- "host": "",
- "hostname": "",
- "port": "",
- "pathname": "sd",
- "search": "",
- "hash": "#i"
- },
- {
- "input": "#i",
- "base": "sc:sd/sd",
- "href": "sc:sd/sd#i",
- "origin": "null",
- "protocol": "sc:",
- "username": "",
- "password": "",
- "host": "",
- "hostname": "",
- "port": "",
- "pathname": "sd/sd",
- "search": "",
- "hash": "#i"
- },
- {
- "input": "#i",
- "base": "sc:/pa/pa",
- "href": "sc:/pa/pa#i",
- "origin": "null",
- "protocol": "sc:",
- "username": "",
- "password": "",
- "host": "",
- "hostname": "",
- "port": "",
- "pathname": "/pa/pa",
- "search": "",
- "hash": "#i"
- },
- {
- "input": "#i",
- "base": "sc://ho/pa",
- "href": "sc://ho/pa#i",
- "origin": "null",
- "protocol": "sc:",
- "username": "",
- "password": "",
- "host": "ho",
- "hostname": "ho",
- "port": "",
- "pathname": "/pa",
- "search": "",
- "hash": "#i"
- },
- {
- "input": "#i",
- "base": "sc:///pa/pa",
- "href": "sc:///pa/pa#i",
- "origin": "null",
- "protocol": "sc:",
- "username": "",
- "password": "",
- "host": "",
- "hostname": "",
- "port": "",
- "pathname": "/pa/pa",
- "search": "",
- "hash": "#i"
- },
- "# make sure that relative URL logic works on known typically non-relative schemes too",
- {
- "input": "about:/../",
- "base": "about:blank",
- "href": "about:/",
- "origin": "null",
- "protocol": "about:",
- "username": "",
- "password": "",
- "host": "",
- "hostname": "",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "data:/../",
- "base": "about:blank",
- "href": "data:/",
- "origin": "null",
- "protocol": "data:",
- "username": "",
- "password": "",
- "host": "",
- "hostname": "",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "javascript:/../",
- "base": "about:blank",
- "href": "javascript:/",
- "origin": "null",
- "protocol": "javascript:",
- "username": "",
- "password": "",
- "host": "",
- "hostname": "",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- {
- "input": "mailto:/../",
- "base": "about:blank",
- "href": "mailto:/",
- "origin": "null",
- "protocol": "mailto:",
- "username": "",
- "password": "",
- "host": "",
- "hostname": "",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- "# unknown schemes and non-ASCII domains",
- {
- "input": "sc://ñ.test/",
- "base": "about:blank",
- "href": "sc://xn--ida.test/",
- "origin": "null",
- "protocol": "sc:",
- "username": "",
- "password": "",
- "host": "xn--ida.test",
- "hostname": "xn--ida.test",
- "port": "",
- "pathname": "/",
- "search": "",
- "hash": ""
- },
- "# unknown schemes and backslashes",
- {
- "input": "sc:\\../",
- "base": "about:blank",
- "href": "sc:\\../",
- "origin": "null",
- "protocol": "sc:",
- "username": "",
- "password": "",
- "host": "",
- "hostname": "",
- "port": "",
- "pathname": "\\../",
- "search": "",
- "hash": ""
- },
- "# unknown scheme with path looking like a password",
- {
- "input": "sc::a@example.net",
- "base": "about:blank",
- "href": "sc::a@example.net",
- "origin": "null",
- "protocol": "sc:",
- "username": "",
- "password": "",
- "host": "",
- "hostname": "",
- "port": "",
- "pathname": ":a@example.net",
- "search": "",
- "hash": ""
- },
- "# tests from jsdom/whatwg-url designed for code coverage",
- {
- "input": "http://127.0.0.1:10100/relative_import.html",
- "base": "about:blank",
- "href": "http://127.0.0.1:10100/relative_import.html",
- "origin": "http://127.0.0.1:10100",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "127.0.0.1:10100",
- "hostname": "127.0.0.1",
- "port": "10100",
- "pathname": "/relative_import.html",
- "search": "",
- "hash": ""
- },
- {
- "input": "http://facebook.com/?foo=%7B%22abc%22",
- "base": "about:blank",
- "href": "http://facebook.com/?foo=%7B%22abc%22",
- "origin": "http://facebook.com",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "facebook.com",
- "hostname": "facebook.com",
- "port": "",
- "pathname": "/",
- "search": "?foo=%7B%22abc%22",
- "hash": ""
- },
- {
- "input": "https://localhost:3000/jqueryui@1.2.3",
- "base": "about:blank",
- "href": "https://localhost:3000/jqueryui@1.2.3",
- "origin": "https://localhost:3000",
- "protocol": "https:",
- "username": "",
- "password": "",
- "host": "localhost:3000",
- "hostname": "localhost",
- "port": "3000",
- "pathname": "/jqueryui@1.2.3",
- "search": "",
- "hash": ""
- },
- "# tab/LF/CR",
- {
- "input": "h\tt\nt\rp://h\to\ns\rt:9\t0\n0\r0/p\ta\nt\rh?q\tu\ne\rry#f\tr\na\rg",
- "base": "about:blank",
- "href": "http://host:9000/path?query#frag",
- "origin": "http://host:9000",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "host:9000",
- "hostname": "host",
- "port": "9000",
- "pathname": "/path",
- "search": "?query",
- "hash": "#frag"
- },
- "# Stringification of URL.searchParams",
- {
- "input": "?a=b&c=d",
- "base": "http://example.org/foo/bar",
- "href": "http://example.org/foo/bar?a=b&c=d",
- "origin": "http://example.org",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "example.org",
- "hostname": "example.org",
- "port": "",
- "pathname": "/foo/bar",
- "search": "?a=b&c=d",
- "searchParams": "a=b&c=d",
- "hash": ""
- },
- {
- "input": "??a=b&c=d",
- "base": "http://example.org/foo/bar",
- "href": "http://example.org/foo/bar??a=b&c=d",
- "origin": "http://example.org",
- "protocol": "http:",
- "username": "",
- "password": "",
- "host": "example.org",
- "hostname": "example.org",
- "port": "",
- "pathname": "/foo/bar",
- "search": "??a=b&c=d",
- "searchParams": "%3Fa=b&c=d",
- "hash": ""
- }
-]