[ { "pattern": [{ "pathname": "/foo/bar" }], "inputs": [{ "pathname": "/foo/bar" }], "expected_match": { "pathname": { "input": "/foo/bar", "groups": {} } } }, { "pattern": [{ "pathname": "/foo/bar" }], "inputs": [{ "pathname": "/foo/ba" }], "expected_match": null }, { "pattern": [{ "pathname": "/foo/bar" }], "inputs": [{ "pathname": "/foo/bar/" }], "expected_match": null }, { "pattern": [{ "pathname": "/foo/bar" }], "inputs": [{ "pathname": "/foo/bar/baz" }], "expected_match": null }, { "pattern": [{ "pathname": "/foo/bar" }], "inputs": [ "https://example.com/foo/bar" ], "expected_match": { "hostname": { "input": "example.com", "groups": { "0": "example.com" } }, "pathname": { "input": "/foo/bar", "groups": {} }, "protocol": { "input": "https", "groups": { "0": "https" } } } }, { "pattern": [{ "pathname": "/foo/bar" }], "inputs": [ "https://example.com/foo/bar/baz" ], "expected_match": null }, { "pattern": [{ "pathname": "/foo/bar" }], "inputs": [{ "hostname": "example.com", "pathname": "/foo/bar" }], "expected_match": { "hostname": { "input": "example.com", "groups": { "0": "example.com" } }, "pathname": { "input": "/foo/bar", "groups": {} } } }, { "pattern": [{ "pathname": "/foo/bar" }], "inputs": [{ "hostname": "example.com", "pathname": "/foo/bar/baz" }], "expected_match": null }, { "pattern": [{ "pathname": "/foo/bar" }], "inputs": [{ "pathname": "/foo/bar", "baseURL": "https://example.com" }], "expected_match": { "hostname": { "input": "example.com", "groups": { "0": "example.com" } }, "pathname": { "input": "/foo/bar", "groups": {} }, "protocol": { "input": "https", "groups": { "0": "https" } } } }, { "pattern": [{ "pathname": "/foo/bar" }], "inputs": [{ "pathname": "/foo/bar/baz", "baseURL": "https://example.com" }], "expected_match": null }, { "pattern": [{ "pathname": "/foo/bar", "baseURL": "https://example.com?query#hash" }], "inputs": [{ "pathname": "/foo/bar" }], "expected_match": null }, { "pattern": [{ "pathname": "/foo/bar", "baseURL": "https://example.com?query#hash" }], "inputs": [{ "hostname": "example.com", "pathname": "/foo/bar" }], "expected_match": null }, { "pattern": [{ "pathname": "/foo/bar", "baseURL": "https://example.com?query#hash" }], "inputs": [{ "protocol": "https", "hostname": "example.com", "pathname": "/foo/bar" }], "exactly_empty_components": [ "username", "password", "port" ], "expected_match": null }, { "pattern": [{ "pathname": "/foo/bar", "baseURL": "https://example.com" }], "inputs": [{ "protocol": "https", "hostname": "example.com", "pathname": "/foo/bar" }], "exactly_empty_components": [ "username", "password", "port", "search", "hash" ], "expected_match": { "hostname": { "input": "example.com", "groups": {} }, "pathname": { "input": "/foo/bar", "groups": {} }, "protocol": { "input": "https", "groups": {} } } }, { "pattern": [{ "pathname": "/foo/bar", "baseURL": "https://example.com" }], "inputs": [{ "protocol": "https", "hostname": "example.com", "pathname": "/foo/bar/baz" }], "expected_match": null }, { "pattern": [{ "pathname": "/foo/bar", "baseURL": "https://example.com?query#hash" }], "inputs": [{ "protocol": "https", "hostname": "example.com", "pathname": "/foo/bar", "search": "otherquery", "hash": "otherhash" }], "exactly_empty_components": [ "username", "password", "port" ], "expected_match": null }, { "pattern": [{ "pathname": "/foo/bar", "baseURL": "https://example.com" }], "inputs": [{ "protocol": "https", "hostname": "example.com", "pathname": "/foo/bar", "search": "otherquery", "hash": "otherhash" }], "exactly_empty_components": [ "username", "password", "port", "search", "hash" ], "expected_match": null }, { "pattern": [{ "pathname": "/foo/bar", "baseURL": "https://example.com?otherquery#otherhash" }], "inputs": [{ "protocol": "https", "hostname": "example.com", "pathname": "/foo/bar", "search": "otherquery", "hash": "otherhash" }], "exactly_empty_components": [ "username", "password", "port" ], "expected_match": { "hash": { "input": "otherhash", "groups": {} }, "hostname": { "input": "example.com", "groups": {} }, "pathname": { "input": "/foo/bar", "groups": {} }, "protocol": { "input": "https", "groups": {} }, "search": { "input": "otherquery", "groups": {} } } }, { "pattern": [{ "pathname": "/foo/bar", "baseURL": "https://example.com?query#hash" }], "inputs": [ "https://example.com/foo/bar" ], "exactly_empty_components": [ "username", "password", "port" ], "expected_match": null }, { "pattern": [{ "pathname": "/foo/bar", "baseURL": "https://example.com?query#hash" }], "inputs": [ "https://example.com/foo/bar?otherquery#otherhash" ], "exactly_empty_components": [ "username", "password", "port" ], "expected_match": null }, { "pattern": [{ "pathname": "/foo/bar", "baseURL": "https://example.com?query#hash" }], "inputs": [ "https://example.com/foo/bar?query#hash" ], "exactly_empty_components": [ "username", "password", "port" ], "expected_match": { "hash": { "input": "hash", "groups": {} }, "hostname": { "input": "example.com", "groups": {} }, "pathname": { "input": "/foo/bar", "groups": {} }, "protocol": { "input": "https", "groups": {} }, "search": { "input": "query", "groups": {} } } }, { "pattern": [{ "pathname": "/foo/bar", "baseURL": "https://example.com?query#hash" }], "inputs": [ "https://example.com/foo/bar/baz" ], "expected_match": null }, { "pattern": [{ "pathname": "/foo/bar", "baseURL": "https://example.com?query#hash" }], "inputs": [ "https://other.com/foo/bar" ], "expected_match": null }, { "pattern": [{ "pathname": "/foo/bar", "baseURL": "https://example.com?query#hash" }], "inputs": [ "http://other.com/foo/bar" ], "expected_match": null }, { "pattern": [{ "pathname": "/foo/bar", "baseURL": "https://example.com?query#hash" }], "inputs": [{ "pathname": "/foo/bar", "baseURL": "https://example.com" }], "exactly_empty_components": [ "username", "password", "port" ], "expected_match": null }, { "pattern": [{ "pathname": "/foo/bar", "baseURL": "https://example.com?query#hash" }], "inputs": [{ "pathname": "/foo/bar", "baseURL": "https://example.com?query#hash" }], "exactly_empty_components": [ "username", "password", "port" ], "expected_match": { "hash": { "input": "hash", "groups": {} }, "hostname": { "input": "example.com", "groups": {} }, "pathname": { "input": "/foo/bar", "groups": {} }, "protocol": { "input": "https", "groups": {} }, "search": { "input": "query", "groups": {} } } }, { "pattern": [{ "pathname": "/foo/bar", "baseURL": "https://example.com?query#hash" }], "inputs": [{ "pathname": "/foo/bar/baz", "baseURL": "https://example.com" }], "expected_match": null }, { "pattern": [{ "pathname": "/foo/bar", "baseURL": "https://example.com?query#hash" }], "inputs": [{ "pathname": "/foo/bar", "baseURL": "https://other.com" }], "expected_match": null }, { "pattern": [{ "pathname": "/foo/bar", "baseURL": "https://example.com?query#hash" }], "inputs": [{ "pathname": "/foo/bar", "baseURL": "http://example.com" }], "expected_match": null }, { "pattern": [{ "pathname": "/foo/:bar" }], "inputs": [{ "pathname": "/foo/bar" }], "expected_match": { "pathname": { "input": "/foo/bar", "groups": { "bar": "bar" } } } }, { "pattern": [{ "pathname": "/foo/([^\\/]+?)" }], "inputs": [{ "pathname": "/foo/bar" }], "expected_match": { "pathname": { "input": "/foo/bar", "groups": { "0": "bar" } } } }, { "pattern": [{ "pathname": "/foo/:bar" }], "inputs": [{ "pathname": "/foo/index.html" }], "expected_match": { "pathname": { "input": "/foo/index.html", "groups": { "bar": "index.html" } } } }, { "pattern": [{ "pathname": "/foo/:bar" }], "inputs": [{ "pathname": "/foo/bar/" }], "expected_match": null }, { "pattern": [{ "pathname": "/foo/:bar" }], "inputs": [{ "pathname": "/foo/" }], "expected_match": null }, { "pattern": [{ "pathname": "/foo/(.*)" }], "inputs": [{ "pathname": "/foo/bar" }], "expected_obj": { "pathname": "/foo/*" }, "expected_match": { "pathname": { "input": "/foo/bar", "groups": { "0": "bar" } } } }, { "pattern": [{ "pathname": "/foo/*" }], "inputs": [{ "pathname": "/foo/bar" }], "expected_match": { "pathname": { "input": "/foo/bar", "groups": { "0": "bar" } } } }, { "pattern": [{ "pathname": "/foo/(.*)" }], "inputs": [{ "pathname": "/foo/bar/baz" }], "expected_obj": { "pathname": "/foo/*" }, "expected_match": { "pathname": { "input": "/foo/bar/baz", "groups": { "0": "bar/baz" } } } }, { "pattern": [{ "pathname": "/foo/*" }], "inputs": [{ "pathname": "/foo/bar/baz" }], "expected_match": { "pathname": { "input": "/foo/bar/baz", "groups": { "0": "bar/baz" } } } }, { "pattern": [{ "pathname": "/foo/(.*)" }], "inputs": [{ "pathname": "/foo/" }], "expected_obj": { "pathname": "/foo/*" }, "expected_match": { "pathname": { "input": "/foo/", "groups": { "0": "" } } } }, { "pattern": [{ "pathname": "/foo/*" }], "inputs": [{ "pathname": "/foo/" }], "expected_match": { "pathname": { "input": "/foo/", "groups": { "0": "" } } } }, { "pattern": [{ "pathname": "/foo/(.*)" }], "inputs": [{ "pathname": "/foo" }], "expected_obj": { "pathname": "/foo/*" }, "expected_match": null }, { "pattern": [{ "pathname": "/foo/*" }], "inputs": [{ "pathname": "/foo" }], "expected_match": null }, { "pattern": [{ "pathname": "/foo/:bar(.*)" }], "inputs": [{ "pathname": "/foo/bar" }], "expected_match": { "pathname": { "input": "/foo/bar", "groups": { "bar": "bar" } } } }, { "pattern": [{ "pathname": "/foo/:bar(.*)" }], "inputs": [{ "pathname": "/foo/bar/baz" }], "expected_match": { "pathname": { "input": "/foo/bar/baz", "groups": { "bar": "bar/baz" } } } }, { "pattern": [{ "pathname": "/foo/:bar(.*)" }], "inputs": [{ "pathname": "/foo/" }], "expected_match": { "pathname": { "input": "/foo/", "groups": { "bar": "" } } } }, { "pattern": [{ "pathname": "/foo/:bar(.*)" }], "inputs": [{ "pathname": "/foo" }], "expected_match": null }, { "pattern": [{ "pathname": "/foo/:bar?" }], "inputs": [{ "pathname": "/foo/bar" }], "expected_match": { "pathname": { "input": "/foo/bar", "groups": { "bar": "bar" } } } }, { "pattern": [{ "pathname": "/foo/:bar?" }], "inputs": [{ "pathname": "/foo" }], "//": "The `null` below is translated to undefined in the test harness.", "expected_match": { "pathname": { "input": "/foo", "groups": { "bar": null } } } }, { "pattern": [{ "pathname": "/foo/:bar?" }], "inputs": [{ "pathname": "/foo/" }], "expected_match": null }, { "pattern": [{ "pathname": "/foo/:bar?" }], "inputs": [{ "pathname": "/foobar" }], "expected_match": null }, { "pattern": [{ "pathname": "/foo/:bar?" }], "inputs": [{ "pathname": "/foo/bar/baz" }], "expected_match": null }, { "pattern": [{ "pathname": "/foo/:bar+" }], "inputs": [{ "pathname": "/foo/bar" }], "expected_match": { "pathname": { "input": "/foo/bar", "groups": { "bar": "bar" } } } }, { "pattern": [{ "pathname": "/foo/:bar+" }], "inputs": [{ "pathname": "/foo/bar/baz" }], "expected_match": { "pathname": { "input": "/foo/bar/baz", "groups": { "bar": "bar/baz" } } } }, { "pattern": [{ "pathname": "/foo/:bar+" }], "inputs": [{ "pathname": "/foo" }], "expected_match": null }, { "pattern": [{ "pathname": "/foo/:bar+" }], "inputs": [{ "pathname": "/foo/" }], "expected_match": null }, { "pattern": [{ "pathname": "/foo/:bar+" }], "inputs": [{ "pathname": "/foobar" }], "expected_match": null }, { "pattern": [{ "pathname": "/foo/:bar*" }], "inputs": [{ "pathname": "/foo/bar" }], "expected_match": { "pathname": { "input": "/foo/bar", "groups": { "bar": "bar" } } } }, { "pattern": [{ "pathname": "/foo/:bar*" }], "inputs": [{ "pathname": "/foo/bar/baz" }], "expected_match": { "pathname": { "input": "/foo/bar/baz", "groups": { "bar": "bar/baz" } } } }, { "pattern": [{ "pathname": "/foo/:bar*" }], "inputs": [{ "pathname": "/foo" }], "//": "The `null` below is translated to undefined in the test harness.", "expected_match": { "pathname": { "input": "/foo", "groups": { "bar": null } } } }, { "pattern": [{ "pathname": "/foo/:bar*" }], "inputs": [{ "pathname": "/foo/" }], "expected_match": null }, { "pattern": [{ "pathname": "/foo/:bar*" }], "inputs": [{ "pathname": "/foobar" }], "expected_match": null }, { "pattern": [{ "pathname": "/foo/(.*)?" }], "inputs": [{ "pathname": "/foo/bar" }], "expected_obj": { "pathname": "/foo/*?" }, "expected_match": { "pathname": { "input": "/foo/bar", "groups": { "0": "bar" } } } }, { "pattern": [{ "pathname": "/foo/*?" }], "inputs": [{ "pathname": "/foo/bar" }], "expected_match": { "pathname": { "input": "/foo/bar", "groups": { "0": "bar" } } } }, { "pattern": [{ "pathname": "/foo/(.*)?" }], "inputs": [{ "pathname": "/foo/bar/baz" }], "expected_obj": { "pathname": "/foo/*?" }, "expected_match": { "pathname": { "input": "/foo/bar/baz", "groups": { "0": "bar/baz" } } } }, { "pattern": [{ "pathname": "/foo/*?" }], "inputs": [{ "pathname": "/foo/bar/baz" }], "expected_match": { "pathname": { "input": "/foo/bar/baz", "groups": { "0": "bar/baz" } } } }, { "pattern": [{ "pathname": "/foo/(.*)?" }], "inputs": [{ "pathname": "/foo" }], "expected_obj": { "pathname": "/foo/*?" }, "//": "The `null` below is translated to undefined in the test harness.", "expected_match": { "pathname": { "input": "/foo", "groups": { "0": null } } } }, { "pattern": [{ "pathname": "/foo/*?" }], "inputs": [{ "pathname": "/foo" }], "//": "The `null` below is translated to undefined in the test harness.", "expected_match": { "pathname": { "input": "/foo", "groups": { "0": null } } } }, { "pattern": [{ "pathname": "/foo/(.*)?" }], "inputs": [{ "pathname": "/foo/" }], "expected_obj": { "pathname": "/foo/*?" }, "expected_match": { "pathname": { "input": "/foo/", "groups": { "0": "" } } } }, { "pattern": [{ "pathname": "/foo/*?" }], "inputs": [{ "pathname": "/foo/" }], "expected_match": { "pathname": { "input": "/foo/", "groups": { "0": "" } } } }, { "pattern": [{ "pathname": "/foo/(.*)?" }], "inputs": [{ "pathname": "/foobar" }], "expected_obj": { "pathname": "/foo/*?" }, "expected_match": null }, { "pattern": [{ "pathname": "/foo/*?" }], "inputs": [{ "pathname": "/foobar" }], "expected_match": null }, { "pattern": [{ "pathname": "/foo/(.*)?" }], "inputs": [{ "pathname": "/fo" }], "expected_obj": { "pathname": "/foo/*?" }, "expected_match": null }, { "pattern": [{ "pathname": "/foo/*?" }], "inputs": [{ "pathname": "/fo" }], "expected_match": null }, { "pattern": [{ "pathname": "/foo/(.*)+" }], "inputs": [{ "pathname": "/foo/bar" }], "expected_obj": { "pathname": "/foo/*+" }, "expected_match": { "pathname": { "input": "/foo/bar", "groups": { "0": "bar" } } } }, { "pattern": [{ "pathname": "/foo/*+" }], "inputs": [{ "pathname": "/foo/bar" }], "expected_match": { "pathname": { "input": "/foo/bar", "groups": { "0": "bar" } } } }, { "pattern": [{ "pathname": "/foo/(.*)+" }], "inputs": [{ "pathname": "/foo/bar/baz" }], "expected_obj": { "pathname": "/foo/*+" }, "expected_match": { "pathname": { "input": "/foo/bar/baz", "groups": { "0": "bar/baz" } } } }, { "pattern": [{ "pathname": "/foo/*+" }], "inputs": [{ "pathname": "/foo/bar/baz" }], "expected_match": { "pathname": { "input": "/foo/bar/baz", "groups": { "0": "bar/baz" } } } }, { "pattern": [{ "pathname": "/foo/(.*)+" }], "inputs": [{ "pathname": "/foo" }], "expected_obj": { "pathname": "/foo/*+" }, "expected_match": null }, { "pattern": [{ "pathname": "/foo/*+" }], "inputs": [{ "pathname": "/foo" }], "expected_match": null }, { "pattern": [{ "pathname": "/foo/(.*)+" }], "inputs": [{ "pathname": "/foo/" }], "expected_obj": { "pathname": "/foo/*+" }, "expected_match": { "pathname": { "input": "/foo/", "groups": { "0": "" } } } }, { "pattern": [{ "pathname": "/foo/*+" }], "inputs": [{ "pathname": "/foo/" }], "expected_match": { "pathname": { "input": "/foo/", "groups": { "0": "" } } } }, { "pattern": [{ "pathname": "/foo/(.*)+" }], "inputs": [{ "pathname": "/foobar" }], "expected_obj": { "pathname": "/foo/*+" }, "expected_match": null }, { "pattern": [{ "pathname": "/foo/*+" }], "inputs": [{ "pathname": "/foobar" }], "expected_match": null }, { "pattern": [{ "pathname": "/foo/(.*)+" }], "inputs": [{ "pathname": "/fo" }], "expected_obj": { "pathname": "/foo/*+" }, "expected_match": null }, { "pattern": [{ "pathname": "/foo/*+" }], "inputs": [{ "pathname": "/fo" }], "expected_match": null }, { "pattern": [{ "pathname": "/foo/(.*)*" }], "inputs": [{ "pathname": "/foo/bar" }], "expected_obj": { "pathname": "/foo/**" }, "expected_match": { "pathname": { "input": "/foo/bar", "groups": { "0": "bar" } } } }, { "pattern": [{ "pathname": "/foo/**" }], "inputs": [{ "pathname": "/foo/bar" }], "expected_match": { "pathname": { "input": "/foo/bar", "groups": { "0": "bar" } } } }, { "pattern": [{ "pathname": "/foo/(.*)*" }], "inputs": [{ "pathname": "/foo/bar/baz" }], "expected_obj": { "pathname": "/foo/**" }, "expected_match": { "pathname": { "input": "/foo/bar/baz", "groups": { "0": "bar/baz" } } } }, { "pattern": [{ "pathname": "/foo/**" }], "inputs": [{ "pathname": "/foo/bar/baz" }], "expected_match": { "pathname": { "input": "/foo/bar/baz", "groups": { "0": "bar/baz" } } } }, { "pattern": [{ "pathname": "/foo/(.*)*" }], "inputs": [{ "pathname": "/foo" }], "expected_obj": { "pathname": "/foo/**" }, "//": "The `null` below is translated to undefined in the test harness.", "expected_match": { "pathname": { "input": "/foo", "groups": { "0": null } } } }, { "pattern": [{ "pathname": "/foo/**" }], "inputs": [{ "pathname": "/foo" }], "//": "The `null` below is translated to undefined in the test harness.", "expected_match": { "pathname": { "input": "/foo", "groups": { "0": null } } } }, { "pattern": [{ "pathname": "/foo/(.*)*" }], "inputs": [{ "pathname": "/foo/" }], "expected_obj": { "pathname": "/foo/**" }, "expected_match": { "pathname": { "input": "/foo/", "groups": { "0": "" } } } }, { "pattern": [{ "pathname": "/foo/**" }], "inputs": [{ "pathname": "/foo/" }], "expected_match": { "pathname": { "input": "/foo/", "groups": { "0": "" } } } }, { "pattern": [{ "pathname": "/foo/(.*)*" }], "inputs": [{ "pathname": "/foobar" }], "expected_obj": { "pathname": "/foo/**" }, "expected_match": null }, { "pattern": [{ "pathname": "/foo/**" }], "inputs": [{ "pathname": "/foobar" }], "expected_match": null }, { "pattern": [{ "pathname": "/foo/(.*)*" }], "inputs": [{ "pathname": "/fo" }], "expected_obj": { "pathname": "/foo/**" }, "expected_match": null }, { "pattern": [{ "pathname": "/foo/**" }], "inputs": [{ "pathname": "/fo" }], "expected_match": null }, { "pattern": [{ "pathname": "/foo{/bar}" }], "inputs": [{ "pathname": "/foo/bar" }], "expected_obj": { "pathname": "/foo/bar" }, "expected_match": { "pathname": { "input": "/foo/bar", "groups": {} } } }, { "pattern": [{ "pathname": "/foo{/bar}" }], "inputs": [{ "pathname": "/foo/bar/baz" }], "expected_obj": { "pathname": "/foo/bar" }, "expected_match": null }, { "pattern": [{ "pathname": "/foo{/bar}" }], "inputs": [{ "pathname": "/foo" }], "expected_obj": { "pathname": "/foo/bar" }, "expected_match": null }, { "pattern": [{ "pathname": "/foo{/bar}" }], "inputs": [{ "pathname": "/foo/" }], "expected_obj": { "pathname": "/foo/bar" }, "expected_match": null }, { "pattern": [{ "pathname": "/foo{/bar}?" }], "inputs": [{ "pathname": "/foo/bar" }], "expected_match": { "pathname": { "input": "/foo/bar", "groups": {} } } }, { "pattern": [{ "pathname": "/foo{/bar}?" }], "inputs": [{ "pathname": "/foo/bar/baz" }], "expected_match": null }, { "pattern": [{ "pathname": "/foo{/bar}?" }], "inputs": [{ "pathname": "/foo" }], "expected_match": { "pathname": { "input": "/foo", "groups": {} } } }, { "pattern": [{ "pathname": "/foo{/bar}?" }], "inputs": [{ "pathname": "/foo/" }], "expected_match": null }, { "pattern": [{ "pathname": "/foo{/bar}+" }], "inputs": [{ "pathname": "/foo/bar" }], "expected_match": { "pathname": { "input": "/foo/bar", "groups": {} } } }, { "pattern": [{ "pathname": "/foo{/bar}+" }], "inputs": [{ "pathname": "/foo/bar/bar" }], "expected_match": { "pathname": { "input": "/foo/bar/bar", "groups": {} } } }, { "pattern": [{ "pathname": "/foo{/bar}+" }], "inputs": [{ "pathname": "/foo/bar/baz" }], "expected_match": null }, { "pattern": [{ "pathname": "/foo{/bar}+" }], "inputs": [{ "pathname": "/foo" }], "expected_match": null }, { "pattern": [{ "pathname": "/foo{/bar}+" }], "inputs": [{ "pathname": "/foo/" }], "expected_match": null }, { "pattern": [{ "pathname": "/foo{/bar}*" }], "inputs": [{ "pathname": "/foo/bar" }], "expected_match": { "pathname": { "input": "/foo/bar", "groups": {} } } }, { "pattern": [{ "pathname": "/foo{/bar}*" }], "inputs": [{ "pathname": "/foo/bar/bar" }], "expected_match": { "pathname": { "input": "/foo/bar/bar", "groups": {} } } }, { "pattern": [{ "pathname": "/foo{/bar}*" }], "inputs": [{ "pathname": "/foo/bar/baz" }], "expected_match": null }, { "pattern": [{ "pathname": "/foo{/bar}*" }], "inputs": [{ "pathname": "/foo" }], "expected_match": { "pathname": { "input": "/foo", "groups": {} } } }, { "pattern": [{ "pathname": "/foo{/bar}*" }], "inputs": [{ "pathname": "/foo/" }], "expected_match": null }, { "pattern": [{ "protocol": "(café)" }], "expected_obj": "error" }, { "pattern": [{ "username": "(café)" }], "expected_obj": "error" }, { "pattern": [{ "password": "(café)" }], "expected_obj": "error" }, { "pattern": [{ "hostname": "(café)" }], "expected_obj": "error" }, { "pattern": [{ "pathname": "(café)" }], "expected_obj": "error" }, { "pattern": [{ "search": "(café)" }], "expected_obj": "error" }, { "pattern": [{ "hash": "(café)" }], "expected_obj": "error" }, { "pattern": [{ "protocol": ":café" }], "inputs": [{ "protocol": "foo" }], "expected_match": { "protocol": { "input": "foo", "groups": { "café": "foo" } } } }, { "pattern": [{ "username": ":café" }], "inputs": [{ "username": "foo" }], "expected_match": { "username": { "input": "foo", "groups": { "café": "foo" } } } }, { "pattern": [{ "password": ":café" }], "inputs": [{ "password": "foo" }], "expected_match": { "password": { "input": "foo", "groups": { "café": "foo" } } } }, { "pattern": [{ "hostname": ":café" }], "inputs": [{ "hostname": "foo" }], "expected_match": { "hostname": { "input": "foo", "groups": { "café": "foo" } } } }, { "pattern": [{ "pathname": "/:café" }], "inputs": [{ "pathname": "/foo" }], "expected_match": { "pathname": { "input": "/foo", "groups": { "café": "foo" } } } }, { "pattern": [{ "search": ":café" }], "inputs": [{ "search": "foo" }], "expected_match": { "search": { "input": "foo", "groups": { "café": "foo" } } } }, { "pattern": [{ "hash": ":café" }], "inputs": [{ "hash": "foo" }], "expected_match": { "hash": { "input": "foo", "groups": { "café": "foo" } } } }, { "pattern": [{ "protocol": ":\u2118" }], "inputs": [{ "protocol": "foo" }], "expected_match": { "protocol": { "input": "foo", "groups": { "\u2118": "foo" } } } }, { "pattern": [{ "username": ":\u2118" }], "inputs": [{ "username": "foo" }], "expected_match": { "username": { "input": "foo", "groups": { "\u2118": "foo" } } } }, { "pattern": [{ "password": ":\u2118" }], "inputs": [{ "password": "foo" }], "expected_match": { "password": { "input": "foo", "groups": { "\u2118": "foo" } } } }, { "pattern": [{ "hostname": ":\u2118" }], "inputs": [{ "hostname": "foo" }], "expected_match": { "hostname": { "input": "foo", "groups": { "\u2118": "foo" } } } }, { "pattern": [{ "pathname": "/:\u2118" }], "inputs": [{ "pathname": "/foo" }], "expected_match": { "pathname": { "input": "/foo", "groups": { "\u2118": "foo" } } } }, { "pattern": [{ "search": ":\u2118" }], "inputs": [{ "search": "foo" }], "expected_match": { "search": { "input": "foo", "groups": { "\u2118": "foo" } } } }, { "pattern": [{ "hash": ":\u2118" }], "inputs": [{ "hash": "foo" }], "expected_match": { "hash": { "input": "foo", "groups": { "\u2118": "foo" } } } }, { "pattern": [{ "protocol": ":\u3400" }], "inputs": [{ "protocol": "foo" }], "expected_match": { "protocol": { "input": "foo", "groups": { "\u3400": "foo" } } } }, { "pattern": [{ "username": ":\u3400" }], "inputs": [{ "username": "foo" }], "expected_match": { "username": { "input": "foo", "groups": { "\u3400": "foo" } } } }, { "pattern": [{ "password": ":\u3400" }], "inputs": [{ "password": "foo" }], "expected_match": { "password": { "input": "foo", "groups": { "\u3400": "foo" } } } }, { "pattern": [{ "hostname": ":\u3400" }], "inputs": [{ "hostname": "foo" }], "expected_match": { "hostname": { "input": "foo", "groups": { "\u3400": "foo" } } } }, { "pattern": [{ "pathname": "/:\u3400" }], "inputs": [{ "pathname": "/foo" }], "expected_match": { "pathname": { "input": "/foo", "groups": { "\u3400": "foo" } } } }, { "pattern": [{ "search": ":\u3400" }], "inputs": [{ "search": "foo" }], "expected_match": { "search": { "input": "foo", "groups": { "\u3400": "foo" } } } }, { "pattern": [{ "hash": ":\u3400" }], "inputs": [{ "hash": "foo" }], "expected_match": { "hash": { "input": "foo", "groups": { "\u3400": "foo" } } } }, { "pattern": [{ "protocol": "(.*)" }], "inputs": [{ "protocol" : "café" }], "expected_obj": { "protocol": "*" }, "expected_match": null }, { "pattern": [{ "protocol": "(.*)" }], "inputs": [{ "protocol": "cafe" }], "expected_obj": { "protocol": "*" }, "expected_match": { "protocol": { "input": "cafe", "groups": { "0": "cafe" }} } }, { "pattern": [{ "protocol": "foo-bar" }], "inputs": [{ "protocol": "foo-bar" }], "expected_match": { "protocol": { "input": "foo-bar", "groups": {} } } }, { "pattern": [{ "username": "caf%C3%A9" }], "inputs": [{ "username" : "café" }], "expected_match": { "username": { "input": "caf%C3%A9", "groups": {}} } }, { "pattern": [{ "username": "café" }], "inputs": [{ "username" : "café" }], "expected_obj": { "username": "caf%C3%A9" }, "expected_match": { "username": { "input": "caf%C3%A9", "groups": {}} } }, { "pattern": [{ "username": "caf%c3%a9" }], "inputs": [{ "username" : "café" }], "expected_match": null }, { "pattern": [{ "password": "caf%C3%A9" }], "inputs": [{ "password" : "café" }], "expected_match": { "password": { "input": "caf%C3%A9", "groups": {}} } }, { "pattern": [{ "password": "café" }], "inputs": [{ "password" : "café" }], "expected_obj": { "password": "caf%C3%A9" }, "expected_match": { "password": { "input": "caf%C3%A9", "groups": {}} } }, { "pattern": [{ "password": "caf%c3%a9" }], "inputs": [{ "password" : "café" }], "expected_match": null }, { "pattern": [{ "hostname": "xn--caf-dma.com" }], "inputs": [{ "hostname" : "café.com" }], "expected_match": { "hostname": { "input": "xn--caf-dma.com", "groups": {}} } }, { "pattern": [{ "hostname": "café.com" }], "inputs": [{ "hostname" : "café.com" }], "expected_obj": { "hostname": "xn--caf-dma.com" }, "expected_match": { "hostname": { "input": "xn--caf-dma.com", "groups": {}} } }, { "pattern": [{ "port": "" }], "inputs": [{ "protocol": "http", "port": "80" }], "exactly_empty_components": [ "port" ], "expected_match": { "protocol": { "input": "http", "groups": { "0": "http" }} } }, { "pattern": [{ "protocol": "http", "port": "80" }], "inputs": [{ "protocol": "http", "port": "80" }], "exactly_empty_components": [ "port" ], "expected_match": { "protocol": { "input": "http", "groups": {}} } }, { "pattern": [{ "protocol": "http", "port": "80{20}?" }], "inputs": [{ "protocol": "http", "port": "80" }], "expected_match": null }, { "pattern": [{ "protocol": "http", "port": "80 " }], "inputs": [{ "protocol": "http", "port": "80" }], "expected_obj": "error" }, { "pattern": [{ "port": "80" }], "inputs": [{ "protocol": "http", "port": "80" }], "expected_match": null }, { "pattern": [{ "protocol": "http{s}?", "port": "80" }], "inputs": [{ "protocol": "http", "port": "80" }], "expected_match": null }, { "pattern": [{ "port": "80" }], "inputs": [{ "port": "80" }], "expected_match": { "port": { "input": "80", "groups": {}} } }, { "pattern": [{ "port": "(.*)" }], "inputs": [{ "port": "invalid80" }], "expected_obj": { "port": "*" }, "expected_match": null }, { "pattern": [{ "pathname": "/foo/bar" }], "inputs": [{ "pathname": "/foo/./bar" }], "expected_match": { "pathname": { "input": "/foo/bar", "groups": {}} } }, { "pattern": [{ "pathname": "/foo/baz" }], "inputs": [{ "pathname": "/foo/bar/../baz" }], "expected_match": { "pathname": { "input": "/foo/baz", "groups": {}} } }, { "pattern": [{ "pathname": "/caf%C3%A9" }], "inputs": [{ "pathname": "/café" }], "expected_match": { "pathname": { "input": "/caf%C3%A9", "groups": {}} } }, { "pattern": [{ "pathname": "/café" }], "inputs": [{ "pathname": "/café" }], "expected_obj": { "pathname": "/caf%C3%A9" }, "expected_match": { "pathname": { "input": "/caf%C3%A9", "groups": {}} } }, { "pattern": [{ "pathname": "/caf%c3%a9" }], "inputs": [{ "pathname": "/café" }], "expected_match": null }, { "pattern": [{ "pathname": "/foo/bar" }], "inputs": [{ "pathname": "foo/bar" }], "expected_match": null }, { "pattern": [{ "pathname": "/foo/bar" }], "inputs": [{ "pathname": "foo/bar", "baseURL": "https://example.com" }], "expected_match": { "protocol": { "input": "https", "groups": { "0": "https" }}, "hostname": { "input": "example.com", "groups": { "0": "example.com" }}, "pathname": { "input": "/foo/bar", "groups": {}} } }, { "pattern": [{ "pathname": "/foo/../bar" }], "inputs": [{ "pathname": "/bar" }], "expected_obj": { "pathname": "/bar" }, "expected_match": { "pathname": { "input": "/bar", "groups": {}} } }, { "pattern": [{ "pathname": "./foo/bar", "baseURL": "https://example.com" }], "inputs": [{ "pathname": "foo/bar", "baseURL": "https://example.com" }], "exactly_empty_components": [ "username", "password", "port", "search", "hash" ], "expected_obj": { "pathname": "/foo/bar" }, "expected_match": { "protocol": { "input": "https", "groups": {}}, "hostname": { "input": "example.com", "groups": {}}, "pathname": { "input": "/foo/bar", "groups": {}} } }, { "pattern": [{ "pathname": "", "baseURL": "https://example.com" }], "inputs": [{ "pathname": "/", "baseURL": "https://example.com" }], "exactly_empty_components": [ "username", "password", "port", "search", "hash" ], "expected_obj": { "pathname": "/" }, "expected_match": { "protocol": { "input": "https", "groups": {}}, "hostname": { "input": "example.com", "groups": {}}, "pathname": { "input": "/", "groups": {}} } }, { "pattern": [{ "pathname": "{/bar}", "baseURL": "https://example.com/foo/" }], "inputs": [{ "pathname": "./bar", "baseURL": "https://example.com/foo/" }], "exactly_empty_components": [ "username", "password", "port", "search", "hash" ], "expected_obj": { "pathname": "/bar" }, "expected_match": null }, { "pattern": [{ "pathname": "\\/bar", "baseURL": "https://example.com/foo/" }], "inputs": [{ "pathname": "./bar", "baseURL": "https://example.com/foo/" }], "exactly_empty_components": [ "username", "password", "port", "search", "hash" ], "expected_obj": { "pathname": "/bar" }, "expected_match": null }, { "pattern": [{ "pathname": "b", "baseURL": "https://example.com/foo/" }], "inputs": [{ "pathname": "./b", "baseURL": "https://example.com/foo/" }], "exactly_empty_components": [ "username", "password", "port", "search", "hash" ], "expected_obj": { "pathname": "/foo/b" }, "expected_match": { "protocol": { "input": "https", "groups": {}}, "hostname": { "input": "example.com", "groups": {}}, "pathname": { "input": "/foo/b", "groups": {}} } }, { "pattern": [{ "pathname": "foo/bar" }], "inputs": [ "https://example.com/foo/bar" ], "expected_match": null }, { "pattern": [{ "pathname": "foo/bar", "baseURL": "https://example.com" }], "inputs": [ "https://example.com/foo/bar" ], "exactly_empty_components": [ "username", "password", "port", "search", "hash" ], "expected_obj": { "pathname": "/foo/bar" }, "expected_match": { "protocol": { "input": "https", "groups": {}}, "hostname": { "input": "example.com", "groups": {}}, "pathname": { "input": "/foo/bar", "groups": {}} } }, { "pattern": [{ "pathname": ":name.html", "baseURL": "https://example.com" }], "inputs": [ "https://example.com/foo.html"] , "exactly_empty_components": [ "username", "password", "port", "search", "hash" ], "expected_obj": { "pathname": "/:name.html" }, "expected_match": { "protocol": { "input": "https", "groups": {}}, "hostname": { "input": "example.com", "groups": {}}, "pathname": { "input": "/foo.html", "groups": { "name": "foo" }} } }, { "pattern": [{ "search": "q=caf%C3%A9" }], "inputs": [{ "search": "q=café" }], "expected_match": { "search": { "input": "q=caf%C3%A9", "groups": {}} } }, { "pattern": [{ "search": "q=café" }], "inputs": [{ "search": "q=café" }], "expected_obj": { "search": "q=caf%C3%A9" }, "expected_match": { "search": { "input": "q=caf%C3%A9", "groups": {}} } }, { "pattern": [{ "search": "q=caf%c3%a9" }], "inputs": [{ "search": "q=café" }], "expected_match": null }, { "pattern": [{ "hash": "caf%C3%A9" }], "inputs": [{ "hash": "café" }], "expected_match": { "hash": { "input": "caf%C3%A9", "groups": {}} } }, { "pattern": [{ "hash": "café" }], "inputs": [{ "hash": "café" }], "expected_obj": { "hash": "caf%C3%A9" }, "expected_match": { "hash": { "input": "caf%C3%A9", "groups": {}} } }, { "pattern": [{ "hash": "caf%c3%a9" }], "inputs": [{ "hash": "café" }], "expected_match": null }, { "pattern": [{ "protocol": "about", "pathname": "(blank|sourcedoc)" }], "inputs": [ "about:blank" ], "expected_match": { "protocol": { "input": "about", "groups": {}}, "pathname": { "input": "blank", "groups": { "0": "blank" }} } }, { "pattern": [{ "protocol": "data", "pathname": ":number([0-9]+)" }], "inputs": [ "data:8675309" ], "expected_match": { "protocol": { "input": "data", "groups": {}}, "pathname": { "input": "8675309", "groups": { "number": "8675309" }} } }, { "pattern": [{ "pathname": "/(\\m)" }], "expected_obj": "error" }, { "pattern": [{ "pathname": "/foo!" }], "inputs": [{ "pathname": "/foo!" }], "expected_match": { "pathname": { "input": "/foo!", "groups": {}} } }, { "pattern": [{ "pathname": "/foo\\:" }], "inputs": [{ "pathname": "/foo:" }], "expected_match": { "pathname": { "input": "/foo:", "groups": {}} } }, { "pattern": [{ "pathname": "/foo\\{" }], "inputs": [{ "pathname": "/foo{" }], "expected_obj": { "pathname": "/foo%7B" }, "expected_match": { "pathname": { "input": "/foo%7B", "groups": {}} } }, { "pattern": [{ "pathname": "/foo\\(" }], "inputs": [{ "pathname": "/foo(" }], "expected_match": { "pathname": { "input": "/foo(", "groups": {}} } }, { "pattern": [{ "protocol": "javascript", "pathname": "var x = 1;" }], "inputs": [{ "protocol": "javascript", "pathname": "var x = 1;" }], "expected_match": { "protocol": { "input": "javascript", "groups": {}}, "pathname": { "input": "var x = 1;", "groups": {}} } }, { "pattern": [{ "pathname": "var x = 1;" }], "inputs": [{ "protocol": "javascript", "pathname": "var x = 1;" }], "expected_obj": { "pathname": "var%20x%20=%201;" }, "expected_match": null }, { "pattern": [{ "protocol": "javascript", "pathname": "var x = 1;" }], "inputs": [{ "baseURL": "javascript:var x = 1;" }], "expected_match": { "protocol": { "input": "javascript", "groups": {}}, "pathname": { "input": "var x = 1;", "groups": {}} } }, { "pattern": [{ "protocol": "(data|javascript)", "pathname": "var x = 1;" }], "inputs": [{ "protocol": "javascript", "pathname": "var x = 1;" }], "expected_match": { "protocol": { "input": "javascript", "groups": {"0": "javascript"}}, "pathname": { "input": "var x = 1;", "groups": {}} } }, { "pattern": [{ "protocol": "(https|javascript)", "pathname": "var x = 1;" }], "inputs": [{ "protocol": "javascript", "pathname": "var x = 1;" }], "expected_obj": { "pathname": "var%20x%20=%201;" }, "expected_match": null }, { "pattern": [{ "pathname": "var x = 1;" }], "inputs": [{ "pathname": "var x = 1;" }], "expected_obj": { "pathname": "var%20x%20=%201;" }, "expected_match": { "pathname": { "input": "var%20x%20=%201;", "groups": {}} } }, { "pattern": [{ "pathname": "/foo/bar" }], "inputs": [ "./foo/bar", "https://example.com" ], "expected_match": { "hostname": { "input": "example.com", "groups": { "0": "example.com" } }, "pathname": { "input": "/foo/bar", "groups": {} }, "protocol": { "input": "https", "groups": { "0": "https" } } } }, { "pattern": [{ "pathname": "/foo/bar" }], "inputs": [ { "pathname": "/foo/bar" }, "https://example.com" ], "expected_match": "error" }, { "pattern": [ "https://example.com:8080/foo?bar#baz" ], "inputs": [{ "pathname": "/foo", "search": "bar", "hash": "baz", "baseURL": "https://example.com:8080" }], "exactly_empty_components": [ "username", "password" ], "expected_obj": { "protocol": "https", "hostname": "example.com", "port": "8080", "pathname": "/foo", "search": "bar", "hash": "baz" }, "expected_match": { "protocol": { "input": "https", "groups": {} }, "hostname": { "input": "example.com", "groups": {} }, "port": { "input": "8080", "groups": {} }, "pathname": { "input": "/foo", "groups": {} }, "search": { "input": "bar", "groups": {} }, "hash": { "input": "baz", "groups": {} } } }, { "pattern": [ "/foo?bar#baz", "https://example.com:8080" ], "inputs": [{ "pathname": "/foo", "search": "bar", "hash": "baz", "baseURL": "https://example.com:8080" }], "exactly_empty_components": [ "username", "password" ], "expected_obj": { "pathname": "/foo", "search": "bar", "hash": "baz" }, "expected_match": { "protocol": { "input": "https", "groups": {} }, "hostname": { "input": "example.com", "groups": {} }, "port": { "input": "8080", "groups": {} }, "pathname": { "input": "/foo", "groups": {} }, "search": { "input": "bar", "groups": {} }, "hash": { "input": "baz", "groups": {} } } }, { "pattern": [ "/foo" ], "expected_obj": "error" }, { "pattern": [ "example.com/foo" ], "expected_obj": "error" }, { "pattern": [ "http{s}?://{*.}?example.com/:product/:endpoint" ], "inputs": [ "https://sub.example.com/foo/bar" ], "exactly_empty_components": [ "username", "password", "port", "search", "hash" ], "expected_obj": { "protocol": "http{s}?", "hostname": "{*.}?example.com", "pathname": "/:product/:endpoint" }, "expected_match": { "protocol": { "input": "https", "groups": {} }, "hostname": { "input": "sub.example.com", "groups": { "0": "sub" } }, "pathname": { "input": "/foo/bar", "groups": { "product": "foo", "endpoint": "bar" } } } }, { "pattern": [ "https://example.com?foo" ], "inputs": [ "https://example.com/?foo" ], "exactly_empty_components": [ "username", "password", "port", "search", "hash" ], "expected_obj": { "protocol": "https", "hostname": "example.com", "pathname": "/", "search": "foo" }, "expected_match": { "protocol": { "input": "https", "groups": {} }, "hostname": { "input": "example.com", "groups": {} }, "pathname": { "input": "/", "groups": {} }, "search": { "input": "foo", "groups": {} } } }, { "pattern": [ "https://example.com#foo" ], "inputs": [ "https://example.com/#foo" ], "exactly_empty_components": [ "username", "password", "port", "search", "hash" ], "expected_obj": { "protocol": "https", "hostname": "example.com", "pathname": "/", "hash": "foo" }, "expected_match": { "protocol": { "input": "https", "groups": {} }, "hostname": { "input": "example.com", "groups": {} }, "pathname": { "input": "/", "groups": {} }, "hash": { "input": "foo", "groups": {} } } }, { "pattern": [ "https://example.com:8080?foo" ], "inputs": [ "https://example.com:8080/?foo" ], "exactly_empty_components": [ "username", "password", "hash" ], "expected_obj": { "protocol": "https", "hostname": "example.com", "port": "8080", "pathname": "/", "search": "foo" }, "expected_match": { "protocol": { "input": "https", "groups": {} }, "hostname": { "input": "example.com", "groups": {} }, "port": { "input": "8080", "groups": {} }, "pathname": { "input": "/", "groups": {} }, "search": { "input": "foo", "groups": {} } } }, { "pattern": [ "https://example.com:8080#foo" ], "inputs": [ "https://example.com:8080/#foo" ], "exactly_empty_components": [ "username", "password", "search" ], "expected_obj": { "protocol": "https", "hostname": "example.com", "port": "8080", "pathname": "/", "hash": "foo" }, "expected_match": { "protocol": { "input": "https", "groups": {} }, "hostname": { "input": "example.com", "groups": {} }, "port": { "input": "8080", "groups": {} }, "pathname": { "input": "/", "groups": {} }, "hash": { "input": "foo", "groups": {} } } }, { "pattern": [ "https://example.com/?foo" ], "inputs": [ "https://example.com/?foo" ], "exactly_empty_components": [ "username", "password", "port", "hash" ], "expected_obj": { "protocol": "https", "hostname": "example.com", "pathname": "/", "search": "foo" }, "expected_match": { "protocol": { "input": "https", "groups": {} }, "hostname": { "input": "example.com", "groups": {} }, "pathname": { "input": "/", "groups": {} }, "search": { "input": "foo", "groups": {} } } }, { "pattern": [ "https://example.com/#foo" ], "inputs": [ "https://example.com/#foo" ], "exactly_empty_components": [ "username", "password", "port", "search" ], "expected_obj": { "protocol": "https", "hostname": "example.com", "pathname": "/", "hash": "foo" }, "expected_match": { "protocol": { "input": "https", "groups": {} }, "hostname": { "input": "example.com", "groups": {} }, "pathname": { "input": "/", "groups": {} }, "hash": { "input": "foo", "groups": {} } } }, { "pattern": [ "https://example.com/*?foo" ], "inputs": [ "https://example.com/?foo" ], "exactly_empty_components": [ "username", "password", "port", "search", "hash" ], "expected_obj": { "protocol": "https", "hostname": "example.com", "pathname": "/*?foo" }, "expected_match": null }, { "pattern": [ "https://example.com/*\\?foo" ], "inputs": [ "https://example.com/?foo" ], "exactly_empty_components": [ "username", "password", "port", "hash" ], "expected_obj": { "protocol": "https", "hostname": "example.com", "pathname": "/*", "search": "foo" }, "expected_match": { "protocol": { "input": "https", "groups": {} }, "hostname": { "input": "example.com", "groups": {} }, "pathname": { "input": "/", "groups": { "0": "" } }, "search": { "input": "foo", "groups": {} } } }, { "pattern": [ "https://example.com/:name?foo" ], "inputs": [ "https://example.com/bar?foo" ], "exactly_empty_components": [ "username", "password", "port", "search", "hash" ], "expected_obj": { "protocol": "https", "hostname": "example.com", "pathname": "/:name?foo" }, "expected_match": null }, { "pattern": [ "https://example.com/:name\\?foo" ], "inputs": [ "https://example.com/bar?foo" ], "exactly_empty_components": [ "username", "password", "port", "hash" ], "expected_obj": { "protocol": "https", "hostname": "example.com", "pathname": "/:name", "search": "foo" }, "expected_match": { "protocol": { "input": "https", "groups": {} }, "hostname": { "input": "example.com", "groups": {} }, "pathname": { "input": "/bar", "groups": { "name": "bar" } }, "search": { "input": "foo", "groups": {} } } }, { "pattern": [ "https://example.com/(bar)?foo" ], "inputs": [ "https://example.com/bar?foo" ], "exactly_empty_components": [ "username", "password", "port", "search", "hash" ], "expected_obj": { "protocol": "https", "hostname": "example.com", "pathname": "/(bar)?foo" }, "expected_match": null }, { "pattern": [ "https://example.com/(bar)\\?foo" ], "inputs": [ "https://example.com/bar?foo" ], "exactly_empty_components": [ "username", "password", "port", "hash" ], "expected_obj": { "protocol": "https", "hostname": "example.com", "pathname": "/(bar)", "search": "foo" }, "expected_match": { "protocol": { "input": "https", "groups": {} }, "hostname": { "input": "example.com", "groups": {} }, "pathname": { "input": "/bar", "groups": { "0": "bar" } }, "search": { "input": "foo", "groups": {} } } }, { "pattern": [ "https://example.com/{bar}?foo" ], "inputs": [ "https://example.com/bar?foo" ], "exactly_empty_components": [ "username", "password", "port", "search", "hash" ], "expected_obj": { "protocol": "https", "hostname": "example.com", "pathname": "/{bar}?foo" }, "expected_match": null }, { "pattern": [ "https://example.com/{bar}\\?foo" ], "inputs": [ "https://example.com/bar?foo" ], "exactly_empty_components": [ "username", "password", "port", "hash" ], "expected_obj": { "protocol": "https", "hostname": "example.com", "pathname": "/bar", "search": "foo" }, "expected_match": { "protocol": { "input": "https", "groups": {} }, "hostname": { "input": "example.com", "groups": {} }, "pathname": { "input": "/bar", "groups": {} }, "search": { "input": "foo", "groups": {} } } }, { "pattern": [ "https://example.com/" ], "inputs": [ "https://example.com:8080/" ], "exactly_empty_components": [ "username", "password", "port", "search", "hash" ], "expected_obj": { "protocol": "https", "hostname": "example.com", "port": "", "pathname": "/" }, "expected_match": null }, { "pattern": [ "data:foobar" ], "inputs": [ "data:foobar" ], "expected_obj": "error" }, { "pattern": [ "data\\:foobar" ], "inputs": [ "data:foobar" ], "exactly_empty_components": [ "username", "password", "hostname", "port", "search", "hash" ], "expected_obj": { "protocol": "data", "pathname": "foobar" }, "expected_match": { "protocol": { "input": "data", "groups": {} }, "pathname": { "input": "foobar", "groups": {} } } }, { "pattern": [ "https://{sub.}?example.com/foo" ], "inputs": [ "https://example.com/foo" ], "exactly_empty_components": [ "username", "password", "port", "search", "hash" ], "expected_obj": { "protocol": "https", "hostname": "{sub.}?example.com", "pathname": "/foo" }, "expected_match": { "protocol": { "input": "https", "groups": {} }, "hostname": { "input": "example.com", "groups": {} }, "pathname": { "input": "/foo", "groups": {} } } }, { "pattern": [ "https://{sub.}?example{.com/}foo" ], "inputs": [ "https://example.com/foo" ], "expected_obj": "error" }, { "pattern": [ "{https://}example.com/foo" ], "inputs": [ "https://example.com/foo" ], "expected_obj": "error" }, { "pattern": [ "https://(sub.)?example.com/foo" ], "inputs": [ "https://example.com/foo" ], "exactly_empty_components": [ "username", "password", "port", "search", "hash" ], "expected_obj": { "protocol": "https", "hostname": "(sub.)?example.com", "pathname": "/foo" }, "//": "The `null` below is translated to undefined in the test harness.", "expected_match": { "protocol": { "input": "https", "groups": {} }, "hostname": { "input": "example.com", "groups": { "0": null } }, "pathname": { "input": "/foo", "groups": {} } } }, { "pattern": [ "https://(sub.)?example(.com/)foo" ], "inputs": [ "https://example.com/foo" ], "exactly_empty_components": [ "username", "password", "port", "search", "hash" ], "expected_obj": { "protocol": "https", "hostname": "(sub.)?example(.com/)foo", "pathname": "/" }, "expected_match": null }, { "pattern": [ "(https://)example.com/foo" ], "inputs": [ "https://example.com/foo" ], "expected_obj": "error" }, { "pattern": [ "https://{sub{.}}example.com/foo" ], "inputs": [ "https://example.com/foo" ], "expected_obj": "error" }, { "pattern": [ "https://(sub(?:.))?example.com/foo" ], "inputs": [ "https://example.com/foo" ], "exactly_empty_components": [ "username", "password", "port", "search", "hash" ], "expected_obj": { "protocol": "https", "hostname": "(sub(?:.))?example.com", "pathname": "/foo" }, "//": "The `null` below is translated to undefined in the test harness.", "expected_match": { "protocol": { "input": "https", "groups": {} }, "hostname": { "input": "example.com", "groups": { "0": null } }, "pathname": { "input": "/foo", "groups": {} } } }, { "pattern": [ "file:///foo/bar" ], "inputs": [ "file:///foo/bar" ], "exactly_empty_components": [ "username", "password", "hostname", "port", "search", "hash" ], "expected_obj": { "protocol": "file", "pathname": "/foo/bar" }, "expected_match": { "protocol": { "input": "file", "groups": {} }, "pathname": { "input": "/foo/bar", "groups": {} } } }, { "pattern": [ "data:" ], "inputs": [ "data:" ], "exactly_empty_components": [ "username", "password", "hostname", "port", "pathname", "search", "hash" ], "expected_obj": { "protocol": "data" }, "expected_match": { "protocol": { "input": "data", "groups": {} } } }, { "pattern": [ "foo://bar" ], "inputs": [ "foo://bad_url_browser_interop" ], "exactly_empty_components": [ "username", "password", "port", "pathname", "search", "hash" ], "expected_obj": { "protocol": "foo", "hostname": "bar" }, "expected_match": null }, { "pattern": [ "(café)://foo" ], "expected_obj": "error" }, { "pattern": [ "https://example.com/foo?bar#baz" ], "inputs": [{ "protocol": "https:", "search": "?bar", "hash": "#baz", "baseURL": "http://example.com/foo" }], "exactly_empty_components": [ "username", "password", "port" ], "expected_obj": { "protocol": "https", "hostname": "example.com", "pathname": "/foo", "search": "bar", "hash": "baz" }, "expected_match": { "protocol": { "input": "https", "groups": {} }, "hostname": { "input": "example.com", "groups": {} }, "pathname": { "input": "/foo", "groups": {} }, "search": { "input": "bar", "groups": {} }, "hash": { "input": "baz", "groups": {} } } }, { "pattern": [{ "protocol": "http{s}?:", "search": "?bar", "hash": "#baz" }], "inputs": [ "http://example.com/foo?bar#baz" ], "expected_obj": { "protocol": "http{s}?", "search": "bar", "hash": "baz" }, "expected_match": { "protocol": { "input": "http", "groups": {} }, "hostname": { "input": "example.com", "groups": { "0": "example.com" }}, "pathname": { "input": "/foo", "groups": { "0": "/foo" }}, "search": { "input": "bar", "groups": {} }, "hash": { "input": "baz", "groups": {} } } }, { "pattern": [ "?bar#baz", "https://example.com/foo" ], "inputs": [ "?bar#baz", "https://example.com/foo" ], "exactly_empty_components": [ "username", "password", "port" ], "expected_obj": { "protocol": "https", "hostname": "example.com", "pathname": "/foo", "search": "bar", "hash": "baz" }, "expected_match": { "protocol": { "input": "https", "groups": {} }, "hostname": { "input": "example.com", "groups": {} }, "pathname": { "input": "/foo", "groups": {} }, "search": { "input": "bar", "groups": {} }, "hash": { "input": "baz", "groups": {} } } }, { "pattern": [ "?bar", "https://example.com/foo#baz" ], "inputs": [ "?bar", "https://example.com/foo#snafu" ], "exactly_empty_components": [ "username", "password", "port", "hash" ], "expected_obj": { "protocol": "https", "hostname": "example.com", "pathname": "/foo", "search": "bar" }, "expected_match": { "protocol": { "input": "https", "groups": {} }, "hostname": { "input": "example.com", "groups": {} }, "pathname": { "input": "/foo", "groups": {} }, "search": { "input": "bar", "groups": {} } } }, { "pattern": [ "#baz", "https://example.com/foo?bar" ], "inputs": [ "#baz", "https://example.com/foo?bar" ], "exactly_empty_components": [ "username", "password", "port" ], "expected_obj": { "protocol": "https", "hostname": "example.com", "pathname": "/foo", "search": "bar", "hash": "baz" }, "expected_match": { "protocol": { "input": "https", "groups": {} }, "hostname": { "input": "example.com", "groups": {} }, "pathname": { "input": "/foo", "groups": {} }, "search": { "input": "bar", "groups": {} }, "hash": { "input": "baz", "groups": {} } } }, { "pattern": [ "#baz", "https://example.com/foo" ], "inputs": [ "#baz", "https://example.com/foo" ], "exactly_empty_components": [ "username", "password", "port", "search" ], "expected_obj": { "protocol": "https", "hostname": "example.com", "pathname": "/foo", "hash": "baz" }, "expected_match": { "protocol": { "input": "https", "groups": {} }, "hostname": { "input": "example.com", "groups": {} }, "pathname": { "input": "/foo", "groups": {} }, "hash": { "input": "baz", "groups": {} } } }, { "pattern": [{ "pathname": "*" }], "inputs": [ "foo", "data:data-urls-cannot-be-base-urls" ], "expected_match": null }, { "pattern": [{ "pathname": "*" }], "inputs": [ "foo", "not|a|valid|url" ], "expected_match": null }, { "pattern": [ "https://foo\\:bar@example.com" ], "inputs": [ "https://foo:bar@example.com" ], "exactly_empty_components": [ "port", "search", "hash" ], "expected_obj": { "protocol": "https", "username": "foo", "password": "bar", "hostname": "example.com", "pathname": "/" }, "expected_match": { "protocol": { "input": "https", "groups": {} }, "username": { "input": "foo", "groups": {} }, "password": { "input": "bar", "groups": {} }, "hostname": { "input": "example.com", "groups": {} }, "pathname": { "input": "/", "groups": {} } } }, { "pattern": [ "https://foo@example.com" ], "inputs": [ "https://foo@example.com" ], "exactly_empty_components": [ "password", "port", "search", "hash" ], "expected_obj": { "protocol": "https", "username": "foo", "hostname": "example.com", "pathname": "/" }, "expected_match": { "protocol": { "input": "https", "groups": {} }, "username": { "input": "foo", "groups": {} }, "hostname": { "input": "example.com", "groups": {} }, "pathname": { "input": "/", "groups": {} } } }, { "pattern": [ "https://\\:bar@example.com" ], "inputs": [ "https://:bar@example.com" ], "exactly_empty_components": [ "username", "port", "search", "hash" ], "expected_obj": { "protocol": "https", "password": "bar", "hostname": "example.com", "pathname": "/" }, "expected_match": { "protocol": { "input": "https", "groups": {} }, "password": { "input": "bar", "groups": {} }, "hostname": { "input": "example.com", "groups": {} }, "pathname": { "input": "/", "groups": {} } } }, { "pattern": [ "https://:user::pass@example.com" ], "inputs": [ "https://foo:bar@example.com" ], "exactly_empty_components": [ "port", "search", "hash" ], "expected_obj": { "protocol": "https", "username": ":user", "password": ":pass", "hostname": "example.com", "pathname": "/" }, "expected_match": { "protocol": { "input": "https", "groups": {} }, "username": { "input": "foo", "groups": { "user": "foo" } }, "password": { "input": "bar", "groups": { "pass": "bar" } }, "hostname": { "input": "example.com", "groups": {} }, "pathname": { "input": "/", "groups": {} } } }, { "pattern": [ "https\\:foo\\:bar@example.com" ], "inputs": [ "https:foo:bar@example.com" ], "exactly_empty_components": [ "port", "search", "hash" ], "expected_obj": { "protocol": "https", "username": "foo", "password": "bar", "hostname": "example.com", "pathname": "/" }, "expected_match": { "protocol": { "input": "https", "groups": {} }, "username": { "input": "foo", "groups": {} }, "password": { "input": "bar", "groups": {} }, "hostname": { "input": "example.com", "groups": {} }, "pathname": { "input": "/", "groups": {} } } }, { "pattern": [ "data\\:foo\\:bar@example.com" ], "inputs": [ "data:foo:bar@example.com" ], "exactly_empty_components": [ "username", "password", "hostname", "port", "search", "hash" ], "expected_obj": { "protocol": "data", "pathname": "foo\\:bar@example.com" }, "expected_match": { "protocol": { "input": "data", "groups": {} }, "pathname": { "input": "foo:bar@example.com", "groups": {} } } }, { "pattern": [ "https://foo{\\:}bar@example.com" ], "inputs": [ "https://foo:bar@example.com" ], "exactly_empty_components": [ "password", "port", "search", "hash" ], "expected_obj": { "protocol": "https", "username": "foo%3Abar", "hostname": "example.com", "pathname": "/" }, "expected_match": null }, { "pattern": [ "data{\\:}channel.html", "https://example.com" ], "inputs": [ "https://example.com/data:channel.html" ], "exactly_empty_components": [ "username", "password", "port", "search", "hash" ], "expected_obj": { "protocol": "https", "hostname": "example.com", "pathname": "/data\\:channel.html" }, "expected_match": { "protocol": { "input": "https", "groups": {} }, "hostname": { "input": "example.com", "groups": {} }, "pathname": { "input": "/data:channel.html", "groups": {} } } }, { "pattern": [ "http://[\\:\\:1]/" ], "inputs": [ "http://[::1]/" ], "exactly_empty_components": [ "username", "password", "port", "search", "hash" ], "expected_obj": { "protocol": "http", "hostname": "[\\:\\:1]", "pathname": "/" }, "expected_match": { "protocol": { "input": "http", "groups": {} }, "hostname": { "input": "[::1]", "groups": {} }, "pathname": { "input": "/", "groups": {} } } }, { "pattern": [ "http://[\\:\\:1]:8080/" ], "inputs": [ "http://[::1]:8080/" ], "exactly_empty_components": [ "username", "password", "search", "hash" ], "expected_obj": { "protocol": "http", "hostname": "[\\:\\:1]", "port": "8080", "pathname": "/" }, "expected_match": { "protocol": { "input": "http", "groups": {} }, "hostname": { "input": "[::1]", "groups": {} }, "port": { "input": "8080", "groups": {} }, "pathname": { "input": "/", "groups": {} } } }, { "pattern": [ "http://[\\:\\:a]/" ], "inputs": [ "http://[::a]/" ], "exactly_empty_components": [ "username", "password", "port", "search", "hash" ], "expected_obj": { "protocol": "http", "hostname": "[\\:\\:a]", "pathname": "/" }, "expected_match": { "protocol": { "input": "http", "groups": {} }, "hostname": { "input": "[::a]", "groups": {} }, "pathname": { "input": "/", "groups": {} } } }, { "pattern": [ "http://[:address]/" ], "inputs": [ "http://[::1]/" ], "exactly_empty_components": [ "username", "password", "port", "search", "hash" ], "expected_obj": { "protocol": "http", "hostname": "[:address]", "pathname": "/" }, "expected_match": { "protocol": { "input": "http", "groups": {} }, "hostname": { "input": "[::1]", "groups": { "address": "::1" }}, "pathname": { "input": "/", "groups": {} } } }, { "pattern": [ "http://[\\:\\:AB\\::num]/" ], "inputs": [ "http://[::ab:1]/" ], "exactly_empty_components": [ "username", "password", "port", "search", "hash" ], "expected_obj": { "protocol": "http", "hostname": "[\\:\\:ab\\::num]", "pathname": "/" }, "expected_match": { "protocol": { "input": "http", "groups": {} }, "hostname": { "input": "[::ab:1]", "groups": { "num": "1" }}, "pathname": { "input": "/", "groups": {} } } }, { "pattern": [{ "hostname": "[\\:\\:AB\\::num]" }], "inputs": [{ "hostname": "[::ab:1]" }], "expected_obj": { "hostname": "[\\:\\:ab\\::num]" }, "expected_match": { "hostname": { "input": "[::ab:1]", "groups": { "num": "1" }} } }, { "pattern": [{ "hostname": "[\\:\\:xY\\::num]" }], "expected_obj": "error" }, { "pattern": [{ "hostname": "{[\\:\\:ab\\::num]}" }], "inputs": [{ "hostname": "[::ab:1]" }], "expected_match": { "hostname": { "input": "[::ab:1]", "groups": { "num": "1" }} } }, { "pattern": [{ "hostname": "{[\\:\\:fé\\::num]}" }], "expected_obj": "error" }, { "pattern": [{ "hostname": "{[\\:\\::num\\:1]}" }], "inputs": [{ "hostname": "[::ab:1]" }], "expected_match": { "hostname": { "input": "[::ab:1]", "groups": { "num": "ab" }} } }, { "pattern": [{ "hostname": "{[\\:\\::num\\:fé]}" }], "expected_obj": "error" }, { "pattern": [{ "hostname": "[*\\:1]" }], "inputs": [{ "hostname": "[::ab:1]" }], "expected_match": { "hostname": { "input": "[::ab:1]", "groups": { "0": "::ab" }} } }, { "pattern": [{ "hostname": "*\\:1]" }], "expected_obj": "error" }, { "pattern": [ "https://foo{{@}}example.com" ], "inputs": [ "https://foo@example.com" ], "expected_obj": "error" }, { "pattern": [ "https://foo{@example.com" ], "inputs": [ "https://foo@example.com" ], "expected_obj": "error" }, { "pattern": [ "data\\:text/javascript,let x = 100/:tens?5;" ], "inputs": [ "data:text/javascript,let x = 100/5;" ], "exactly_empty_components": [ "username", "password", "hostname", "port", "search", "hash" ], "expected_obj": { "protocol": "data", "pathname": "text/javascript,let x = 100/:tens?5;" }, "//": "The `null` below is translated to undefined in the test harness.", "expected_match": { "protocol": { "input": "data", "groups": {} }, "pathname": { "input": "text/javascript,let x = 100/5;", "groups": { "tens": null } } } }, { "pattern": [{ "pathname": "/:id/:id" }], "expected_obj": "error" }, { "pattern": [{ "pathname": "/foo", "baseURL": "" }], "expected_obj": "error" }, { "pattern": [ "/foo", "" ], "expected_obj": "error" }, { "pattern": [{ "pathname": "/foo" }, "https://example.com" ], "expected_obj": "error" }, { "pattern": [{ "pathname": ":name*" }], "inputs": [{ "pathname": "foobar" }], "expected_match": { "pathname": { "input": "foobar", "groups": { "name": "foobar" }} } }, { "pattern": [{ "pathname": ":name+" }], "inputs": [{ "pathname": "foobar" }], "expected_match": { "pathname": { "input": "foobar", "groups": { "name": "foobar" }} } }, { "pattern": [{ "pathname": ":name" }], "inputs": [{ "pathname": "foobar" }], "expected_match": { "pathname": { "input": "foobar", "groups": { "name": "foobar" }} } }, { "pattern": [{ "protocol": ":name*" }], "inputs": [{ "protocol": "foobar" }], "expected_match": { "protocol": { "input": "foobar", "groups": { "name": "foobar" }} } }, { "pattern": [{ "protocol": ":name+" }], "inputs": [{ "protocol": "foobar" }], "expected_match": { "protocol": { "input": "foobar", "groups": { "name": "foobar" }} } }, { "pattern": [{ "protocol": ":name" }], "inputs": [{ "protocol": "foobar" }], "expected_match": { "protocol": { "input": "foobar", "groups": { "name": "foobar" }} } }, { "pattern": [{ "hostname": "bad hostname" }], "expected_obj": "error" }, { "pattern": [{ "hostname": "bad#hostname" }], "expected_obj": "error" }, { "pattern": [{ "hostname": "bad%hostname" }], "expected_obj": "error" }, { "pattern": [{ "hostname": "bad/hostname" }], "expected_obj": "error" }, { "pattern": [{ "hostname": "bad\\:hostname" }], "expected_obj": "error" }, { "pattern": [{ "hostname": "badhostname" }], "expected_obj": "error" }, { "pattern": [{ "hostname": "bad?hostname" }], "expected_obj": "error" }, { "pattern": [{ "hostname": "bad@hostname" }], "expected_obj": "error" }, { "pattern": [{ "hostname": "bad[hostname" }], "expected_obj": "error" }, { "pattern": [{ "hostname": "bad]hostname" }], "expected_obj": "error" }, { "pattern": [{ "hostname": "bad\\\\hostname" }], "expected_obj": "error" }, { "pattern": [{ "hostname": "bad^hostname" }], "expected_obj": "error" }, { "pattern": [{ "hostname": "bad|hostname" }], "expected_obj": "error" }, { "pattern": [{ "hostname": "bad\nhostname" }], "expected_obj": "error" }, { "pattern": [{ "hostname": "bad\rhostname" }], "expected_obj": "error" }, { "pattern": [{ "hostname": "bad\thostname" }], "expected_obj": "error" }, { "pattern": [{}], "inputs": ["https://example.com/"], "expected_match": { "protocol": { "input": "https", "groups": { "0": "https" }}, "hostname": { "input": "example.com", "groups": { "0": "example.com" }}, "pathname": { "input": "/", "groups": { "0": "/" }} } }, { "pattern": [], "inputs": ["https://example.com/"], "expected_match": { "protocol": { "input": "https", "groups": { "0": "https" }}, "hostname": { "input": "example.com", "groups": { "0": "example.com" }}, "pathname": { "input": "/", "groups": { "0": "/" }} } }, { "pattern": [], "inputs": [{}], "expected_match": {} }, { "pattern": [], "inputs": [], "expected_match": { "inputs": [{}] } }, { "pattern": [{ "pathname": "(foo)(.*)" }], "inputs": [{ "pathname": "foobarbaz" }], "expected_match": { "pathname": { "input": "foobarbaz", "groups": { "0": "foo", "1": "barbaz" }} } }, { "pattern": [{ "pathname": "{(foo)bar}(.*)" }], "inputs": [{ "pathname": "foobarbaz" }], "expected_match": { "pathname": { "input": "foobarbaz", "groups": { "0": "foo", "1": "baz" }} } }, { "pattern": [{ "pathname": "(foo)?(.*)" }], "inputs": [{ "pathname": "foobarbaz" }], "expected_obj": { "pathname": "(foo)?*" }, "expected_match": { "pathname": { "input": "foobarbaz", "groups": { "0": "foo", "1": "barbaz" }} } }, { "pattern": [{ "pathname": "{:foo}(.*)" }], "inputs": [{ "pathname": "foobarbaz" }], "expected_match": { "pathname": { "input": "foobarbaz", "groups": { "foo": "f", "0": "oobarbaz" }} } }, { "pattern": [{ "pathname": "{:foo}(barbaz)" }], "inputs": [{ "pathname": "foobarbaz" }], "expected_match": { "pathname": { "input": "foobarbaz", "groups": { "foo": "foo", "0": "barbaz" }} } }, { "pattern": [{ "pathname": "{:foo}{(.*)}" }], "inputs": [{ "pathname": "foobarbaz" }], "expected_obj": { "pathname": "{:foo}(.*)" }, "expected_match": { "pathname": { "input": "foobarbaz", "groups": { "foo": "f", "0": "oobarbaz" }} } }, { "pattern": [{ "pathname": "{:foo}{(.*)bar}" }], "inputs": [{ "pathname": "foobarbaz" }], "expected_obj": { "pathname": ":foo{*bar}" }, "expected_match": null }, { "pattern": [{ "pathname": "{:foo}{bar(.*)}" }], "inputs": [{ "pathname": "foobarbaz" }], "expected_obj": { "pathname": ":foo{bar*}" }, "expected_match": { "pathname": { "input": "foobarbaz", "groups": { "foo": "foo", "0": "baz" }} } }, { "pattern": [{ "pathname": "{:foo}:bar(.*)" }], "inputs": [{ "pathname": "foobarbaz" }], "expected_obj": { "pathname": ":foo:bar(.*)" }, "expected_match": { "pathname": { "input": "foobarbaz", "groups": { "foo": "f", "bar": "oobarbaz" }} } }, { "pattern": [{ "pathname": "{:foo}?(.*)" }], "inputs": [{ "pathname": "foobarbaz" }], "expected_obj": { "pathname": ":foo?*" }, "expected_match": { "pathname": { "input": "foobarbaz", "groups": { "foo": "f", "0": "oobarbaz" }} } }, { "pattern": [{ "pathname": "{:foo\\bar}" }], "inputs": [{ "pathname": "foobar" }], "expected_match": { "pathname": { "input": "foobar", "groups": { "foo": "foo" }} } }, { "pattern": [{ "pathname": "{:foo\\.bar}" }], "inputs": [{ "pathname": "foo.bar" }], "expected_obj": { "pathname": "{:foo.bar}" }, "expected_match": { "pathname": { "input": "foo.bar", "groups": { "foo": "foo" }} } }, { "pattern": [{ "pathname": "{:foo(foo)bar}" }], "inputs": [{ "pathname": "foobar" }], "expected_match": { "pathname": { "input": "foobar", "groups": { "foo": "foo" }} } }, { "pattern": [{ "pathname": "{:foo}bar" }], "inputs": [{ "pathname": "foobar" }], "expected_match": { "pathname": { "input": "foobar", "groups": { "foo": "foo" }} } }, { "pattern": [{ "pathname": ":foo\\bar" }], "inputs": [{ "pathname": "foobar" }], "expected_obj": { "pathname": "{:foo}bar" }, "expected_match": { "pathname": { "input": "foobar", "groups": { "foo": "foo" }} } }, { "pattern": [{ "pathname": ":foo{}(.*)" }], "inputs": [{ "pathname": "foobar" }], "expected_obj": { "pathname": "{:foo}(.*)" }, "expected_match": { "pathname": { "input": "foobar", "groups": { "foo": "f", "0": "oobar" }} } }, { "pattern": [{ "pathname": ":foo{}bar" }], "inputs": [{ "pathname": "foobar" }], "expected_obj": { "pathname": "{:foo}bar" }, "expected_match": { "pathname": { "input": "foobar", "groups": { "foo": "foo" }} } }, { "pattern": [{ "pathname": ":foo{}?bar" }], "inputs": [{ "pathname": "foobar" }], "expected_obj": { "pathname": "{:foo}bar" }, "expected_match": { "pathname": { "input": "foobar", "groups": { "foo": "foo" }} } }, { "pattern": [{ "pathname": "*{}**?" }], "inputs": [{ "pathname": "foobar" }], "expected_obj": { "pathname": "*(.*)?" }, "//": "The `null` below is translated to undefined in the test harness.", "expected_match": { "pathname": { "input": "foobar", "groups": { "0": "foobar", "1": null }} } }, { "pattern": [{ "pathname": ":foo(baz)(.*)" }], "inputs": [{ "pathname": "bazbar" }], "expected_match": { "pathname": { "input": "bazbar", "groups": { "foo": "baz", "0": "bar" }} } }, { "pattern": [{ "pathname": ":foo(baz)bar" }], "inputs": [{ "pathname": "bazbar" }], "expected_match": { "pathname": { "input": "bazbar", "groups": { "foo": "baz" }} } }, { "pattern": [{ "pathname": "*/*" }], "inputs": [{ "pathname": "foo/bar" }], "expected_match": { "pathname": { "input": "foo/bar", "groups": { "0": "foo", "1": "bar" }} } }, { "pattern": [{ "pathname": "*\\/*" }], "inputs": [{ "pathname": "foo/bar" }], "expected_obj": { "pathname": "*/{*}" }, "expected_match": { "pathname": { "input": "foo/bar", "groups": { "0": "foo", "1": "bar" }} } }, { "pattern": [{ "pathname": "*/{*}" }], "inputs": [{ "pathname": "foo/bar" }], "expected_match": { "pathname": { "input": "foo/bar", "groups": { "0": "foo", "1": "bar" }} } }, { "pattern": [{ "pathname": "*//*" }], "inputs": [{ "pathname": "foo/bar" }], "expected_match": null }, { "pattern": [{ "pathname": "/:foo." }], "inputs": [{ "pathname": "/bar." }], "expected_match": { "pathname": { "input": "/bar.", "groups": { "foo": "bar" } } } }, { "pattern": [{ "pathname": "/:foo.." }], "inputs": [{ "pathname": "/bar.." }], "expected_match": { "pathname": { "input": "/bar..", "groups": { "foo": "bar" } } } }, { "pattern": [{ "pathname": "./foo" }], "inputs": [{ "pathname": "./foo" }], "expected_match": { "pathname": { "input": "./foo", "groups": {}} } }, { "pattern": [{ "pathname": "../foo" }], "inputs": [{ "pathname": "../foo" }], "expected_match": { "pathname": { "input": "../foo", "groups": {}} } }, { "pattern": [{ "pathname": ":foo./" }], "inputs": [{ "pathname": "bar./" }], "expected_match": { "pathname": { "input": "bar./", "groups": { "foo": "bar" }} } }, { "pattern": [{ "pathname": ":foo../" }], "inputs": [{ "pathname": "bar../" }], "expected_match": { "pathname": { "input": "bar../", "groups": { "foo": "bar" }} } }, { "pattern": [{ "pathname": "/:foo\\bar" }], "inputs": [{ "pathname": "/bazbar" }], "expected_obj": { "pathname": "{/:foo}bar" }, "expected_match": { "pathname": { "input": "/bazbar", "groups": { "foo": "baz" }} } }, { "pattern": [{ "pathname": "/foo/bar" }, { "ignoreCase": true }], "inputs": [{ "pathname": "/FOO/BAR" }], "expected_match": { "pathname": { "input": "/FOO/BAR", "groups": {} } } }, { "pattern": [{ "ignoreCase": true }], "inputs": [{ "pathname": "/FOO/BAR" }], "expected_match": { "pathname": { "input": "/FOO/BAR", "groups": { "0": "/FOO/BAR" } } } }, { "pattern": [ "https://example.com:8080/foo?bar#baz", { "ignoreCase": true }], "inputs": [{ "pathname": "/FOO", "search": "BAR", "hash": "BAZ", "baseURL": "https://example.com:8080" }], "exactly_empty_components": [ "username", "password" ], "expected_obj": { "protocol": "https", "hostname": "example.com", "port": "8080", "pathname": "/foo", "search": "bar", "hash": "baz" }, "expected_match": { "protocol": { "input": "https", "groups": {} }, "hostname": { "input": "example.com", "groups": {} }, "port": { "input": "8080", "groups": {} }, "pathname": { "input": "/FOO", "groups": {} }, "search": { "input": "BAR", "groups": {} }, "hash": { "input": "BAZ", "groups": {} } } }, { "pattern": [ "/foo?bar#baz", "https://example.com:8080", { "ignoreCase": true }], "inputs": [{ "pathname": "/FOO", "search": "BAR", "hash": "BAZ", "baseURL": "https://example.com:8080" }], "exactly_empty_components": [ "username", "password" ], "expected_obj": { "protocol": "https", "hostname": "example.com", "port": "8080", "pathname": "/foo", "search": "bar", "hash": "baz" }, "expected_match": { "protocol": { "input": "https", "groups": {} }, "hostname": { "input": "example.com", "groups": {} }, "port": { "input": "8080", "groups": {} }, "pathname": { "input": "/FOO", "groups": {} }, "search": { "input": "BAR", "groups": {} }, "hash": { "input": "BAZ", "groups": {} } } }, { "pattern": [ "/foo?bar#baz", { "ignoreCase": true }, "https://example.com:8080" ], "inputs": [{ "pathname": "/FOO", "search": "BAR", "hash": "BAZ", "baseURL": "https://example.com:8080" }], "expected_obj": "error" }, { "pattern": [{ "search": "foo", "baseURL": "https://example.com/a/+/b" }], "inputs": [{ "search": "foo", "baseURL": "https://example.com/a/+/b" }], "exactly_empty_components": [ "username", "password", "port", "hash" ], "expected_obj": { "pathname": "/a/\\+/b" }, "expected_match": { "hostname": { "input": "example.com", "groups": {} }, "pathname": { "input": "/a/+/b", "groups": {} }, "protocol": { "input": "https", "groups": {} }, "search": { "input": "foo", "groups": {} } } }, { "pattern": [{ "hash": "foo", "baseURL": "https://example.com/?q=*&v=?&hmm={}&umm=()" }], "inputs": [{ "hash": "foo", "baseURL": "https://example.com/?q=*&v=?&hmm={}&umm=()" }], "exactly_empty_components": [ "username", "password", "port" ], "expected_obj": { "search": "q=\\*&v=\\?&hmm=\\{\\}&umm=\\(\\)" }, "expected_match": { "hostname": { "input": "example.com", "groups": {} }, "pathname": { "input": "/", "groups": {} }, "protocol": { "input": "https", "groups": {} }, "search": { "input": "q=*&v=?&hmm={}&umm=()", "groups": {} }, "hash": { "input": "foo", "groups": {} } } }, { "pattern": [ "#foo", "https://example.com/?q=*&v=?&hmm={}&umm=()" ], "inputs": [ "https://example.com/?q=*&v=?&hmm={}&umm=()#foo" ], "exactly_empty_components": [ "username", "password", "port" ], "expected_obj": { "search": "q=\\*&v=\\?&hmm=\\{\\}&umm=\\(\\)", "hash": "foo" }, "expected_match": { "hostname": { "input": "example.com", "groups": {} }, "pathname": { "input": "/", "groups": {} }, "protocol": { "input": "https", "groups": {} }, "search": { "input": "q=*&v=?&hmm={}&umm=()", "groups": {} }, "hash": { "input": "foo", "groups": {} } } } ]