Files
ladybird/Tests/LibWeb/Text/expected/wpt-import/urlpattern/urlpattern.any.txt
Shannon Booth 0a58497ab9 LibURL/Pattern: Fix PatternParser logic for prefix codepoint comparison
We were not properly handling the case that prefix code point was the
empty string (which we represent as an OptionalNone). While this
still resulted in the correct pattern string being generated, an
incorrect regular expression was being generated causing matching
to fail.
2025-04-07 10:29:09 -04:00

360 lines
28 KiB
Plaintext
Raw Blame History

Harness status: OK
Found 354 tests
353 Pass
1 Fail
Pass Loading data...
Pass Pattern: [{"pathname":"/foo/bar"}] Inputs: [{"pathname":"/foo/bar"}]
Pass Pattern: [{"pathname":"/foo/bar"}] Inputs: [{"pathname":"/foo/ba"}]
Pass Pattern: [{"pathname":"/foo/bar"}] Inputs: [{"pathname":"/foo/bar/"}]
Pass Pattern: [{"pathname":"/foo/bar"}] Inputs: [{"pathname":"/foo/bar/baz"}]
Pass Pattern: [{"pathname":"/foo/bar"}] Inputs: ["https://example.com/foo/bar"]
Pass Pattern: [{"pathname":"/foo/bar"}] Inputs: ["https://example.com/foo/bar/baz"]
Pass Pattern: [{"pathname":"/foo/bar"}] Inputs: [{"hostname":"example.com","pathname":"/foo/bar"}]
Pass Pattern: [{"pathname":"/foo/bar"}] Inputs: [{"hostname":"example.com","pathname":"/foo/bar/baz"}]
Pass Pattern: [{"pathname":"/foo/bar"}] Inputs: [{"pathname":"/foo/bar","baseURL":"https://example.com"}]
Pass Pattern: [{"pathname":"/foo/bar"}] Inputs: [{"pathname":"/foo/bar/baz","baseURL":"https://example.com"}]
Pass Pattern: [{"pathname":"/foo/bar","baseURL":"https://example.com?query#hash"}] Inputs: [{"pathname":"/foo/bar"}]
Pass Pattern: [{"pathname":"/foo/bar","baseURL":"https://example.com?query#hash"}] Inputs: [{"hostname":"example.com","pathname":"/foo/bar"}]
Pass Pattern: [{"pathname":"/foo/bar","baseURL":"https://example.com?query#hash"}] Inputs: [{"protocol":"https","hostname":"example.com","pathname":"/foo/bar"}]
Pass Pattern: [{"pathname":"/foo/bar","baseURL":"https://example.com"}] Inputs: [{"protocol":"https","hostname":"example.com","pathname":"/foo/bar"}]
Pass Pattern: [{"pathname":"/foo/bar","baseURL":"https://example.com"}] Inputs: [{"protocol":"https","hostname":"example.com","pathname":"/foo/bar/baz"}]
Pass Pattern: [{"pathname":"/foo/bar","baseURL":"https://example.com?query#hash"}] Inputs: [{"protocol":"https","hostname":"example.com","pathname":"/foo/bar","search":"otherquery","hash":"otherhash"}]
Pass Pattern: [{"pathname":"/foo/bar","baseURL":"https://example.com"}] Inputs: [{"protocol":"https","hostname":"example.com","pathname":"/foo/bar","search":"otherquery","hash":"otherhash"}]
Pass Pattern: [{"pathname":"/foo/bar","baseURL":"https://example.com?otherquery#otherhash"}] Inputs: [{"protocol":"https","hostname":"example.com","pathname":"/foo/bar","search":"otherquery","hash":"otherhash"}]
Pass Pattern: [{"pathname":"/foo/bar","baseURL":"https://example.com?query#hash"}] Inputs: ["https://example.com/foo/bar"]
Pass Pattern: [{"pathname":"/foo/bar","baseURL":"https://example.com?query#hash"}] Inputs: ["https://example.com/foo/bar?otherquery#otherhash"]
Pass Pattern: [{"pathname":"/foo/bar","baseURL":"https://example.com?query#hash"}] Inputs: ["https://example.com/foo/bar?query#hash"]
Pass Pattern: [{"pathname":"/foo/bar","baseURL":"https://example.com?query#hash"}] Inputs: ["https://example.com/foo/bar/baz"]
Pass Pattern: [{"pathname":"/foo/bar","baseURL":"https://example.com?query#hash"}] Inputs: ["https://other.com/foo/bar"]
Pass Pattern: [{"pathname":"/foo/bar","baseURL":"https://example.com?query#hash"}] Inputs: ["http://other.com/foo/bar"]
Pass Pattern: [{"pathname":"/foo/bar","baseURL":"https://example.com?query#hash"}] Inputs: [{"pathname":"/foo/bar","baseURL":"https://example.com"}]
Pass Pattern: [{"pathname":"/foo/bar","baseURL":"https://example.com?query#hash"}] Inputs: [{"pathname":"/foo/bar","baseURL":"https://example.com?query#hash"}]
Pass Pattern: [{"pathname":"/foo/bar","baseURL":"https://example.com?query#hash"}] Inputs: [{"pathname":"/foo/bar/baz","baseURL":"https://example.com"}]
Pass Pattern: [{"pathname":"/foo/bar","baseURL":"https://example.com?query#hash"}] Inputs: [{"pathname":"/foo/bar","baseURL":"https://other.com"}]
Pass Pattern: [{"pathname":"/foo/bar","baseURL":"https://example.com?query#hash"}] Inputs: [{"pathname":"/foo/bar","baseURL":"http://example.com"}]
Pass Pattern: [{"pathname":"/foo/:bar"}] Inputs: [{"pathname":"/foo/bar"}]
Pass Pattern: [{"pathname":"/foo/([^\\/]+?)"}] Inputs: [{"pathname":"/foo/bar"}]
Pass Pattern: [{"pathname":"/foo/:bar"}] Inputs: [{"pathname":"/foo/index.html"}]
Pass Pattern: [{"pathname":"/foo/:bar"}] Inputs: [{"pathname":"/foo/bar/"}]
Pass Pattern: [{"pathname":"/foo/:bar"}] Inputs: [{"pathname":"/foo/"}]
Pass Pattern: [{"pathname":"/foo/(.*)"}] Inputs: [{"pathname":"/foo/bar"}]
Pass Pattern: [{"pathname":"/foo/*"}] Inputs: [{"pathname":"/foo/bar"}]
Pass Pattern: [{"pathname":"/foo/(.*)"}] Inputs: [{"pathname":"/foo/bar/baz"}]
Pass Pattern: [{"pathname":"/foo/*"}] Inputs: [{"pathname":"/foo/bar/baz"}]
Pass Pattern: [{"pathname":"/foo/(.*)"}] Inputs: [{"pathname":"/foo/"}]
Pass Pattern: [{"pathname":"/foo/*"}] Inputs: [{"pathname":"/foo/"}]
Pass Pattern: [{"pathname":"/foo/(.*)"}] Inputs: [{"pathname":"/foo"}]
Pass Pattern: [{"pathname":"/foo/*"}] Inputs: [{"pathname":"/foo"}]
Pass Pattern: [{"pathname":"/foo/:bar(.*)"}] Inputs: [{"pathname":"/foo/bar"}]
Pass Pattern: [{"pathname":"/foo/:bar(.*)"}] Inputs: [{"pathname":"/foo/bar/baz"}]
Pass Pattern: [{"pathname":"/foo/:bar(.*)"}] Inputs: [{"pathname":"/foo/"}]
Pass Pattern: [{"pathname":"/foo/:bar(.*)"}] Inputs: [{"pathname":"/foo"}]
Pass Pattern: [{"pathname":"/foo/:bar?"}] Inputs: [{"pathname":"/foo/bar"}]
Pass Pattern: [{"pathname":"/foo/:bar?"}] Inputs: [{"pathname":"/foo"}]
Pass Pattern: [{"pathname":"/foo/:bar?"}] Inputs: [{"pathname":"/foo/"}]
Pass Pattern: [{"pathname":"/foo/:bar?"}] Inputs: [{"pathname":"/foobar"}]
Pass Pattern: [{"pathname":"/foo/:bar?"}] Inputs: [{"pathname":"/foo/bar/baz"}]
Pass Pattern: [{"pathname":"/foo/:bar+"}] Inputs: [{"pathname":"/foo/bar"}]
Pass Pattern: [{"pathname":"/foo/:bar+"}] Inputs: [{"pathname":"/foo/bar/baz"}]
Pass Pattern: [{"pathname":"/foo/:bar+"}] Inputs: [{"pathname":"/foo"}]
Pass Pattern: [{"pathname":"/foo/:bar+"}] Inputs: [{"pathname":"/foo/"}]
Pass Pattern: [{"pathname":"/foo/:bar+"}] Inputs: [{"pathname":"/foobar"}]
Pass Pattern: [{"pathname":"/foo/:bar*"}] Inputs: [{"pathname":"/foo/bar"}]
Pass Pattern: [{"pathname":"/foo/:bar*"}] Inputs: [{"pathname":"/foo/bar/baz"}]
Pass Pattern: [{"pathname":"/foo/:bar*"}] Inputs: [{"pathname":"/foo"}]
Pass Pattern: [{"pathname":"/foo/:bar*"}] Inputs: [{"pathname":"/foo/"}]
Pass Pattern: [{"pathname":"/foo/:bar*"}] Inputs: [{"pathname":"/foobar"}]
Pass Pattern: [{"pathname":"/foo/(.*)?"}] Inputs: [{"pathname":"/foo/bar"}]
Pass Pattern: [{"pathname":"/foo/*?"}] Inputs: [{"pathname":"/foo/bar"}]
Pass Pattern: [{"pathname":"/foo/(.*)?"}] Inputs: [{"pathname":"/foo/bar/baz"}]
Pass Pattern: [{"pathname":"/foo/*?"}] Inputs: [{"pathname":"/foo/bar/baz"}]
Pass Pattern: [{"pathname":"/foo/(.*)?"}] Inputs: [{"pathname":"/foo"}]
Pass Pattern: [{"pathname":"/foo/*?"}] Inputs: [{"pathname":"/foo"}]
Pass Pattern: [{"pathname":"/foo/(.*)?"}] Inputs: [{"pathname":"/foo/"}]
Pass Pattern: [{"pathname":"/foo/*?"}] Inputs: [{"pathname":"/foo/"}]
Pass Pattern: [{"pathname":"/foo/(.*)?"}] Inputs: [{"pathname":"/foobar"}]
Pass Pattern: [{"pathname":"/foo/*?"}] Inputs: [{"pathname":"/foobar"}]
Pass Pattern: [{"pathname":"/foo/(.*)?"}] Inputs: [{"pathname":"/fo"}]
Pass Pattern: [{"pathname":"/foo/*?"}] Inputs: [{"pathname":"/fo"}]
Pass Pattern: [{"pathname":"/foo/(.*)+"}] Inputs: [{"pathname":"/foo/bar"}]
Pass Pattern: [{"pathname":"/foo/*+"}] Inputs: [{"pathname":"/foo/bar"}]
Pass Pattern: [{"pathname":"/foo/(.*)+"}] Inputs: [{"pathname":"/foo/bar/baz"}]
Pass Pattern: [{"pathname":"/foo/*+"}] Inputs: [{"pathname":"/foo/bar/baz"}]
Pass Pattern: [{"pathname":"/foo/(.*)+"}] Inputs: [{"pathname":"/foo"}]
Pass Pattern: [{"pathname":"/foo/*+"}] Inputs: [{"pathname":"/foo"}]
Pass Pattern: [{"pathname":"/foo/(.*)+"}] Inputs: [{"pathname":"/foo/"}]
Pass Pattern: [{"pathname":"/foo/*+"}] Inputs: [{"pathname":"/foo/"}]
Pass Pattern: [{"pathname":"/foo/(.*)+"}] Inputs: [{"pathname":"/foobar"}]
Pass Pattern: [{"pathname":"/foo/*+"}] Inputs: [{"pathname":"/foobar"}]
Pass Pattern: [{"pathname":"/foo/(.*)+"}] Inputs: [{"pathname":"/fo"}]
Pass Pattern: [{"pathname":"/foo/*+"}] Inputs: [{"pathname":"/fo"}]
Pass Pattern: [{"pathname":"/foo/(.*)*"}] Inputs: [{"pathname":"/foo/bar"}]
Pass Pattern: [{"pathname":"/foo/**"}] Inputs: [{"pathname":"/foo/bar"}]
Pass Pattern: [{"pathname":"/foo/(.*)*"}] Inputs: [{"pathname":"/foo/bar/baz"}]
Pass Pattern: [{"pathname":"/foo/**"}] Inputs: [{"pathname":"/foo/bar/baz"}]
Pass Pattern: [{"pathname":"/foo/(.*)*"}] Inputs: [{"pathname":"/foo"}]
Pass Pattern: [{"pathname":"/foo/**"}] Inputs: [{"pathname":"/foo"}]
Pass Pattern: [{"pathname":"/foo/(.*)*"}] Inputs: [{"pathname":"/foo/"}]
Pass Pattern: [{"pathname":"/foo/**"}] Inputs: [{"pathname":"/foo/"}]
Pass Pattern: [{"pathname":"/foo/(.*)*"}] Inputs: [{"pathname":"/foobar"}]
Pass Pattern: [{"pathname":"/foo/**"}] Inputs: [{"pathname":"/foobar"}]
Pass Pattern: [{"pathname":"/foo/(.*)*"}] Inputs: [{"pathname":"/fo"}]
Pass Pattern: [{"pathname":"/foo/**"}] Inputs: [{"pathname":"/fo"}]
Pass Pattern: [{"pathname":"/foo{/bar}"}] Inputs: [{"pathname":"/foo/bar"}]
Pass Pattern: [{"pathname":"/foo{/bar}"}] Inputs: [{"pathname":"/foo/bar/baz"}]
Pass Pattern: [{"pathname":"/foo{/bar}"}] Inputs: [{"pathname":"/foo"}]
Pass Pattern: [{"pathname":"/foo{/bar}"}] Inputs: [{"pathname":"/foo/"}]
Pass Pattern: [{"pathname":"/foo{/bar}?"}] Inputs: [{"pathname":"/foo/bar"}]
Pass Pattern: [{"pathname":"/foo{/bar}?"}] Inputs: [{"pathname":"/foo/bar/baz"}]
Pass Pattern: [{"pathname":"/foo{/bar}?"}] Inputs: [{"pathname":"/foo"}]
Pass Pattern: [{"pathname":"/foo{/bar}?"}] Inputs: [{"pathname":"/foo/"}]
Pass Pattern: [{"pathname":"/foo{/bar}+"}] Inputs: [{"pathname":"/foo/bar"}]
Pass Pattern: [{"pathname":"/foo{/bar}+"}] Inputs: [{"pathname":"/foo/bar/bar"}]
Pass Pattern: [{"pathname":"/foo{/bar}+"}] Inputs: [{"pathname":"/foo/bar/baz"}]
Pass Pattern: [{"pathname":"/foo{/bar}+"}] Inputs: [{"pathname":"/foo"}]
Pass Pattern: [{"pathname":"/foo{/bar}+"}] Inputs: [{"pathname":"/foo/"}]
Pass Pattern: [{"pathname":"/foo{/bar}*"}] Inputs: [{"pathname":"/foo/bar"}]
Pass Pattern: [{"pathname":"/foo{/bar}*"}] Inputs: [{"pathname":"/foo/bar/bar"}]
Pass Pattern: [{"pathname":"/foo{/bar}*"}] Inputs: [{"pathname":"/foo/bar/baz"}]
Pass Pattern: [{"pathname":"/foo{/bar}*"}] Inputs: [{"pathname":"/foo"}]
Pass Pattern: [{"pathname":"/foo{/bar}*"}] Inputs: [{"pathname":"/foo/"}]
Pass Pattern: [{"protocol":"(café)"}] Inputs: undefined
Pass Pattern: [{"username":"(café)"}] Inputs: undefined
Pass Pattern: [{"password":"(café)"}] Inputs: undefined
Pass Pattern: [{"hostname":"(café)"}] Inputs: undefined
Pass Pattern: [{"pathname":"(café)"}] Inputs: undefined
Pass Pattern: [{"search":"(café)"}] Inputs: undefined
Pass Pattern: [{"hash":"(café)"}] Inputs: undefined
Pass Pattern: [{"protocol":":café"}] Inputs: [{"protocol":"foo"}]
Pass Pattern: [{"username":":café"}] Inputs: [{"username":"foo"}]
Pass Pattern: [{"password":":café"}] Inputs: [{"password":"foo"}]
Pass Pattern: [{"hostname":":café"}] Inputs: [{"hostname":"foo"}]
Pass Pattern: [{"pathname":"/:café"}] Inputs: [{"pathname":"/foo"}]
Pass Pattern: [{"search":":café"}] Inputs: [{"search":"foo"}]
Pass Pattern: [{"hash":":café"}] Inputs: [{"hash":"foo"}]
Pass Pattern: [{"protocol":":℘"}] Inputs: [{"protocol":"foo"}]
Pass Pattern: [{"username":":℘"}] Inputs: [{"username":"foo"}]
Pass Pattern: [{"password":":℘"}] Inputs: [{"password":"foo"}]
Pass Pattern: [{"hostname":":℘"}] Inputs: [{"hostname":"foo"}]
Pass Pattern: [{"pathname":"/:℘"}] Inputs: [{"pathname":"/foo"}]
Pass Pattern: [{"search":":℘"}] Inputs: [{"search":"foo"}]
Pass Pattern: [{"hash":":℘"}] Inputs: [{"hash":"foo"}]
Pass Pattern: [{"protocol":":㐀"}] Inputs: [{"protocol":"foo"}]
Pass Pattern: [{"username":":㐀"}] Inputs: [{"username":"foo"}]
Pass Pattern: [{"password":":㐀"}] Inputs: [{"password":"foo"}]
Pass Pattern: [{"hostname":":㐀"}] Inputs: [{"hostname":"foo"}]
Pass Pattern: [{"pathname":"/:㐀"}] Inputs: [{"pathname":"/foo"}]
Pass Pattern: [{"search":":㐀"}] Inputs: [{"search":"foo"}]
Pass Pattern: [{"hash":":㐀"}] Inputs: [{"hash":"foo"}]
Pass Pattern: [{"protocol":"(.*)"}] Inputs: [{"protocol":"café"}]
Pass Pattern: [{"protocol":"(.*)"}] Inputs: [{"protocol":"cafe"}]
Pass Pattern: [{"protocol":"foo-bar"}] Inputs: [{"protocol":"foo-bar"}]
Pass Pattern: [{"username":"caf%C3%A9"}] Inputs: [{"username":"café"}]
Pass Pattern: [{"username":"café"}] Inputs: [{"username":"café"}]
Pass Pattern: [{"username":"caf%c3%a9"}] Inputs: [{"username":"café"}]
Pass Pattern: [{"password":"caf%C3%A9"}] Inputs: [{"password":"café"}]
Pass Pattern: [{"password":"café"}] Inputs: [{"password":"café"}]
Pass Pattern: [{"password":"caf%c3%a9"}] Inputs: [{"password":"café"}]
Pass Pattern: [{"hostname":"xn--caf-dma.com"}] Inputs: [{"hostname":"café.com"}]
Pass Pattern: [{"hostname":"café.com"}] Inputs: [{"hostname":"café.com"}]
Pass Pattern: ["http://<2F><><EFBFBD>U+deb2.com/"] Inputs: ["http://<2F><><EFBFBD>U+deb2.com/"]
Pass Pattern: ["http://\ud83d \udeb2"] Inputs: undefined
Pass Pattern: [{"hostname":"\ud83d \udeb2"}] Inputs: undefined
Pass Pattern: [{"pathname":"\ud83d \udeb2"}] Inputs: []
Pass Pattern: [{"pathname":":\ud83d \udeb2"}] Inputs: undefined
Pass Pattern: [{"pathname":":a<><61><EFBFBD>U+dd00b"}] Inputs: []
Pass Pattern: [{"pathname":"test/:a<><61><EFBFBD>U+dc50b"}] Inputs: [{"pathname":"test/foo"}]
Pass Pattern: [{"pathname":":<3A><><EFBFBD>U+deb2"}] Inputs: undefined
Pass Pattern: [{"port":""}] Inputs: [{"protocol":"http","port":"80"}]
Pass Pattern: [{"protocol":"http","port":"80"}] Inputs: [{"protocol":"http","port":"80"}]
Pass Pattern: [{"protocol":"http","port":"80{20}?"}] Inputs: [{"protocol":"http","port":"80"}]
Pass Pattern: [{"protocol":"http","port":"80 "}] Inputs: [{"protocol":"http","port":"80"}]
Pass Pattern: [{"protocol":"http","port":"100000"}] Inputs: [{"protocol":"http","port":"100000"}]
Pass Pattern: [{"port":"80"}] Inputs: [{"protocol":"http","port":"80"}]
Pass Pattern: [{"protocol":"http{s}?","port":"80"}] Inputs: [{"protocol":"http","port":"80"}]
Pass Pattern: [{"port":"80"}] Inputs: [{"port":"80"}]
Pass Pattern: [{"port":"80"}] Inputs: [{"port":"8\t0"}]
Pass Pattern: [{"port":"80"}] Inputs: [{"port":"80x"}]
Pass Pattern: [{"port":"80"}] Inputs: [{"port":"80?x"}]
Pass Pattern: [{"port":"80"}] Inputs: [{"port":"80\\x"}]
Pass Pattern: [{"port":"(.*)"}] Inputs: [{"port":"invalid80"}]
Pass Pattern: [{"pathname":"/foo/bar"}] Inputs: [{"pathname":"/foo/./bar"}]
Pass Pattern: [{"pathname":"/foo/baz"}] Inputs: [{"pathname":"/foo/bar/../baz"}]
Pass Pattern: [{"pathname":"/caf%C3%A9"}] Inputs: [{"pathname":"/café"}]
Pass Pattern: [{"pathname":"/café"}] Inputs: [{"pathname":"/café"}]
Pass Pattern: [{"pathname":"/caf%c3%a9"}] Inputs: [{"pathname":"/café"}]
Pass Pattern: [{"pathname":"/foo/bar"}] Inputs: [{"pathname":"foo/bar"}]
Pass Pattern: [{"pathname":"/foo/bar"}] Inputs: [{"pathname":"foo/bar","baseURL":"https://example.com"}]
Pass Pattern: [{"pathname":"/foo/../bar"}] Inputs: [{"pathname":"/bar"}]
Pass Pattern: [{"pathname":"./foo/bar","baseURL":"https://example.com"}] Inputs: [{"pathname":"foo/bar","baseURL":"https://example.com"}]
Pass Pattern: [{"pathname":"","baseURL":"https://example.com"}] Inputs: [{"pathname":"/","baseURL":"https://example.com"}]
Pass Pattern: [{"pathname":"{/bar}","baseURL":"https://example.com/foo/"}] Inputs: [{"pathname":"./bar","baseURL":"https://example.com/foo/"}]
Pass Pattern: [{"pathname":"\\/bar","baseURL":"https://example.com/foo/"}] Inputs: [{"pathname":"./bar","baseURL":"https://example.com/foo/"}]
Pass Pattern: [{"pathname":"b","baseURL":"https://example.com/foo/"}] Inputs: [{"pathname":"./b","baseURL":"https://example.com/foo/"}]
Pass Pattern: [{"pathname":"foo/bar"}] Inputs: ["https://example.com/foo/bar"]
Pass Pattern: [{"pathname":"foo/bar","baseURL":"https://example.com"}] Inputs: ["https://example.com/foo/bar"]
Pass Pattern: [{"pathname":":name.html","baseURL":"https://example.com"}] Inputs: ["https://example.com/foo.html"]
Pass Pattern: [{"search":"q=caf%C3%A9"}] Inputs: [{"search":"q=café"}]
Pass Pattern: [{"search":"q=café"}] Inputs: [{"search":"q=café"}]
Pass Pattern: [{"search":"q=caf%c3%a9"}] Inputs: [{"search":"q=café"}]
Pass Pattern: [{"hash":"caf%C3%A9"}] Inputs: [{"hash":"café"}]
Pass Pattern: [{"hash":"café"}] Inputs: [{"hash":"café"}]
Pass Pattern: [{"hash":"caf%c3%a9"}] Inputs: [{"hash":"café"}]
Pass Pattern: [{"protocol":"about","pathname":"(blank|sourcedoc)"}] Inputs: ["about:blank"]
Pass Pattern: [{"protocol":"data","pathname":":number([0-9]+)"}] Inputs: ["data:8675309"]
Pass Pattern: [{"pathname":"/(\\m)"}] Inputs: undefined
Pass Pattern: [{"pathname":"/foo!"}] Inputs: [{"pathname":"/foo!"}]
Pass Pattern: [{"pathname":"/foo\\:"}] Inputs: [{"pathname":"/foo:"}]
Pass Pattern: [{"pathname":"/foo\\{"}] Inputs: [{"pathname":"/foo{"}]
Pass Pattern: [{"pathname":"/foo\\("}] Inputs: [{"pathname":"/foo("}]
Pass Pattern: [{"protocol":"javascript","pathname":"var x = 1;"}] Inputs: [{"protocol":"javascript","pathname":"var x = 1;"}]
Pass Pattern: [{"pathname":"var x = 1;"}] Inputs: [{"protocol":"javascript","pathname":"var x = 1;"}]
Pass Pattern: [{"protocol":"javascript","pathname":"var x = 1;"}] Inputs: [{"baseURL":"javascript:var x = 1;"}]
Pass Pattern: [{"protocol":"(data|javascript)","pathname":"var x = 1;"}] Inputs: [{"protocol":"javascript","pathname":"var x = 1;"}]
Pass Pattern: [{"protocol":"(https|javascript)","pathname":"var x = 1;"}] Inputs: [{"protocol":"javascript","pathname":"var x = 1;"}]
Pass Pattern: [{"pathname":"var x = 1;"}] Inputs: [{"pathname":"var x = 1;"}]
Pass Pattern: [{"pathname":"/foo/bar"}] Inputs: ["./foo/bar","https://example.com"]
Pass Pattern: [{"pathname":"/foo/bar"}] Inputs: [{"pathname":"/foo/bar"},"https://example.com"]
Pass Pattern: ["https://example.com:8080/foo?bar#baz"] Inputs: [{"pathname":"/foo","search":"bar","hash":"baz","baseURL":"https://example.com:8080"}]
Pass Pattern: ["/foo?bar#baz","https://example.com:8080"] Inputs: [{"pathname":"/foo","search":"bar","hash":"baz","baseURL":"https://example.com:8080"}]
Pass Pattern: ["/foo"] Inputs: undefined
Pass Pattern: ["example.com/foo"] Inputs: undefined
Pass Pattern: ["http{s}?://{*.}?example.com/:product/:endpoint"] Inputs: ["https://sub.example.com/foo/bar"]
Pass Pattern: ["https://example.com?foo"] Inputs: ["https://example.com/?foo"]
Pass Pattern: ["https://example.com#foo"] Inputs: ["https://example.com/#foo"]
Pass Pattern: ["https://example.com:8080?foo"] Inputs: ["https://example.com:8080/?foo"]
Pass Pattern: ["https://example.com:8080#foo"] Inputs: ["https://example.com:8080/#foo"]
Pass Pattern: ["https://example.com/?foo"] Inputs: ["https://example.com/?foo"]
Pass Pattern: ["https://example.com/#foo"] Inputs: ["https://example.com/#foo"]
Pass Pattern: ["https://example.com/*?foo"] Inputs: ["https://example.com/?foo"]
Pass Pattern: ["https://example.com/*\\?foo"] Inputs: ["https://example.com/?foo"]
Pass Pattern: ["https://example.com/:name?foo"] Inputs: ["https://example.com/bar?foo"]
Pass Pattern: ["https://example.com/:name\\?foo"] Inputs: ["https://example.com/bar?foo"]
Pass Pattern: ["https://example.com/(bar)?foo"] Inputs: ["https://example.com/bar?foo"]
Pass Pattern: ["https://example.com/(bar)\\?foo"] Inputs: ["https://example.com/bar?foo"]
Pass Pattern: ["https://example.com/{bar}?foo"] Inputs: ["https://example.com/bar?foo"]
Pass Pattern: ["https://example.com/{bar}\\?foo"] Inputs: ["https://example.com/bar?foo"]
Pass Pattern: ["https://example.com/"] Inputs: ["https://example.com:8080/"]
Pass Pattern: ["data:foobar"] Inputs: ["data:foobar"]
Pass Pattern: ["data\\:foobar"] Inputs: ["data:foobar"]
Pass Pattern: ["https://{sub.}?example.com/foo"] Inputs: ["https://example.com/foo"]
Pass Pattern: ["https://{sub.}?example{.com/}foo"] Inputs: ["https://example.com/foo"]
Pass Pattern: ["{https://}example.com/foo"] Inputs: ["https://example.com/foo"]
Pass Pattern: ["https://(sub.)?example.com/foo"] Inputs: ["https://example.com/foo"]
Pass Pattern: ["https://(sub.)?example(.com/)foo"] Inputs: ["https://example.com/foo"]
Pass Pattern: ["(https://)example.com/foo"] Inputs: ["https://example.com/foo"]
Pass Pattern: ["https://{sub{.}}example.com/foo"] Inputs: ["https://example.com/foo"]
Pass Pattern: ["https://(sub(?:.))?example.com/foo"] Inputs: ["https://example.com/foo"]
Pass Pattern: ["file:///foo/bar"] Inputs: ["file:///foo/bar"]
Pass Pattern: ["data:"] Inputs: ["data:"]
Pass Pattern: ["foo://bar"] Inputs: ["foo://bad_url_browser_interop"]
Pass Pattern: ["(café)://foo"] Inputs: undefined
Pass Pattern: ["https://example.com/foo?bar#baz"] Inputs: [{"protocol":"https:","search":"?bar","hash":"#baz","baseURL":"http://example.com/foo"}]
Pass Pattern: [{"protocol":"http{s}?:","search":"?bar","hash":"#baz"}] Inputs: ["http://example.com/foo?bar#baz"]
Pass Pattern: ["?bar#baz","https://example.com/foo"] Inputs: ["?bar#baz","https://example.com/foo"]
Pass Pattern: ["?bar","https://example.com/foo#baz"] Inputs: ["?bar","https://example.com/foo#snafu"]
Pass Pattern: ["#baz","https://example.com/foo?bar"] Inputs: ["#baz","https://example.com/foo?bar"]
Pass Pattern: ["#baz","https://example.com/foo"] Inputs: ["#baz","https://example.com/foo"]
Pass Pattern: [{"pathname":"*"}] Inputs: ["foo","data:data-urls-cannot-be-base-urls"]
Pass Pattern: [{"pathname":"*"}] Inputs: ["foo","not|a|valid|url"]
Pass Pattern: ["https://foo\\:bar@example.com"] Inputs: ["https://foo:bar@example.com"]
Pass Pattern: ["https://foo@example.com"] Inputs: ["https://foo@example.com"]
Pass Pattern: ["https://\\:bar@example.com"] Inputs: ["https://:bar@example.com"]
Pass Pattern: ["https://:user::pass@example.com"] Inputs: ["https://foo:bar@example.com"]
Pass Pattern: ["https\\:foo\\:bar@example.com"] Inputs: ["https:foo:bar@example.com"]
Pass Pattern: ["data\\:foo\\:bar@example.com"] Inputs: ["data:foo:bar@example.com"]
Pass Pattern: ["https://foo{\\:}bar@example.com"] Inputs: ["https://foo:bar@example.com"]
Pass Pattern: ["data{\\:}channel.html","https://example.com"] Inputs: ["https://example.com/data:channel.html"]
Pass Pattern: ["http://[\\:\\:1]/"] Inputs: ["http://[::1]/"]
Pass Pattern: ["http://[\\:\\:1]:8080/"] Inputs: ["http://[::1]:8080/"]
Pass Pattern: ["http://[\\:\\:a]/"] Inputs: ["http://[::a]/"]
Pass Pattern: ["http://[:address]/"] Inputs: ["http://[::1]/"]
Pass Pattern: ["http://[\\:\\:AB\\::num]/"] Inputs: ["http://[::ab:1]/"]
Pass Pattern: [{"hostname":"[\\:\\:AB\\::num]"}] Inputs: [{"hostname":"[::ab:1]"}]
Pass Pattern: [{"hostname":"[\\:\\:xY\\::num]"}] Inputs: undefined
Pass Pattern: [{"hostname":"{[\\:\\:ab\\::num]}"}] Inputs: [{"hostname":"[::ab:1]"}]
Pass Pattern: [{"hostname":"{[\\:\\:fé\\::num]}"}] Inputs: undefined
Pass Pattern: [{"hostname":"{[\\:\\::num\\:1]}"}] Inputs: [{"hostname":"[::ab:1]"}]
Pass Pattern: [{"hostname":"{[\\:\\::num\\:fé]}"}] Inputs: undefined
Pass Pattern: [{"hostname":"[*\\:1]"}] Inputs: [{"hostname":"[::ab:1]"}]
Pass Pattern: [{"hostname":"*\\:1]"}] Inputs: undefined
Pass Pattern: ["https://foo{{@}}example.com"] Inputs: ["https://foo@example.com"]
Pass Pattern: ["https://foo{@example.com"] Inputs: ["https://foo@example.com"]
Pass Pattern: ["data\\:text/javascript,let x = 100/:tens?5;"] Inputs: ["data:text/javascript,let x = 100/5;"]
Pass Pattern: [{"pathname":"/:id/:id"}] Inputs: undefined
Pass Pattern: [{"pathname":"/foo","baseURL":""}] Inputs: undefined
Pass Pattern: ["/foo",""] Inputs: undefined
Pass Pattern: [{"pathname":"/foo"},"https://example.com"] Inputs: undefined
Pass Pattern: [{"pathname":":name*"}] Inputs: [{"pathname":"foobar"}]
Pass Pattern: [{"pathname":":name+"}] Inputs: [{"pathname":"foobar"}]
Pass Pattern: [{"pathname":":name"}] Inputs: [{"pathname":"foobar"}]
Pass Pattern: [{"protocol":":name*"}] Inputs: [{"protocol":"foobar"}]
Pass Pattern: [{"protocol":":name+"}] Inputs: [{"protocol":"foobar"}]
Pass Pattern: [{"protocol":":name"}] Inputs: [{"protocol":"foobar"}]
Pass Pattern: [{"hostname":"bad hostname"}] Inputs: undefined
Pass Pattern: [{"hostname":"bad#hostname"}] Inputs: [{"hostname":"bad"}]
Pass Pattern: [{"hostname":"bad%hostname"}] Inputs: undefined
Pass Pattern: [{"hostname":"bad/hostname"}] Inputs: [{"hostname":"bad"}]
Pass Pattern: [{"hostname":"bad\\:hostname"}] Inputs: undefined
Pass Pattern: [{"hostname":"bad<hostname"}] Inputs: undefined
Pass Pattern: [{"hostname":"bad>hostname"}] Inputs: undefined
Pass Pattern: [{"hostname":"bad?hostname"}] Inputs: undefined
Pass Pattern: [{"hostname":"bad@hostname"}] Inputs: undefined
Pass Pattern: [{"hostname":"bad[hostname"}] Inputs: undefined
Pass Pattern: [{"hostname":"bad]hostname"}] Inputs: undefined
Pass Pattern: [{"hostname":"bad\\\\hostname"}] Inputs: [{"hostname":"badhostname"}]
Pass Pattern: [{"hostname":"bad^hostname"}] Inputs: undefined
Pass Pattern: [{"hostname":"bad|hostname"}] Inputs: undefined
Pass Pattern: [{"hostname":"bad\nhostname"}] Inputs: [{"hostname":"badhostname"}]
Pass Pattern: [{"hostname":"bad\rhostname"}] Inputs: [{"hostname":"badhostname"}]
Pass Pattern: [{"hostname":"bad\thostname"}] Inputs: [{"hostname":"badhostname"}]
Pass Pattern: [{}] Inputs: ["https://example.com/"]
Pass Pattern: [] Inputs: ["https://example.com/"]
Pass Pattern: [] Inputs: [{}]
Pass Pattern: [] Inputs: []
Pass Pattern: [{"pathname":"(foo)(.*)"}] Inputs: [{"pathname":"foobarbaz"}]
Pass Pattern: [{"pathname":"{(foo)bar}(.*)"}] Inputs: [{"pathname":"foobarbaz"}]
Pass Pattern: [{"pathname":"(foo)?(.*)"}] Inputs: [{"pathname":"foobarbaz"}]
Pass Pattern: [{"pathname":"{:foo}(.*)"}] Inputs: [{"pathname":"foobarbaz"}]
Pass Pattern: [{"pathname":"{:foo}(barbaz)"}] Inputs: [{"pathname":"foobarbaz"}]
Pass Pattern: [{"pathname":"{:foo}{(.*)}"}] Inputs: [{"pathname":"foobarbaz"}]
Pass Pattern: [{"pathname":"{:foo}{(.*)bar}"}] Inputs: [{"pathname":"foobarbaz"}]
Pass Pattern: [{"pathname":"{:foo}{bar(.*)}"}] Inputs: [{"pathname":"foobarbaz"}]
Pass Pattern: [{"pathname":"{:foo}:bar(.*)"}] Inputs: [{"pathname":"foobarbaz"}]
Pass Pattern: [{"pathname":"{:foo}?(.*)"}] Inputs: [{"pathname":"foobarbaz"}]
Pass Pattern: [{"pathname":"{:foo\\bar}"}] Inputs: [{"pathname":"foobar"}]
Pass Pattern: [{"pathname":"{:foo\\.bar}"}] Inputs: [{"pathname":"foo.bar"}]
Pass Pattern: [{"pathname":"{:foo(foo)bar}"}] Inputs: [{"pathname":"foobar"}]
Pass Pattern: [{"pathname":"{:foo}bar"}] Inputs: [{"pathname":"foobar"}]
Pass Pattern: [{"pathname":":foo\\bar"}] Inputs: [{"pathname":"foobar"}]
Pass Pattern: [{"pathname":":foo{}(.*)"}] Inputs: [{"pathname":"foobar"}]
Pass Pattern: [{"pathname":":foo{}bar"}] Inputs: [{"pathname":"foobar"}]
Pass Pattern: [{"pathname":":foo{}?bar"}] Inputs: [{"pathname":"foobar"}]
Fail Pattern: [{"pathname":"*{}**?"}] Inputs: [{"pathname":"foobar"}]
Pass Pattern: [{"pathname":":foo(baz)(.*)"}] Inputs: [{"pathname":"bazbar"}]
Pass Pattern: [{"pathname":":foo(baz)bar"}] Inputs: [{"pathname":"bazbar"}]
Pass Pattern: [{"pathname":"*/*"}] Inputs: [{"pathname":"foo/bar"}]
Pass Pattern: [{"pathname":"*\\/*"}] Inputs: [{"pathname":"foo/bar"}]
Pass Pattern: [{"pathname":"*/{*}"}] Inputs: [{"pathname":"foo/bar"}]
Pass Pattern: [{"pathname":"*//*"}] Inputs: [{"pathname":"foo/bar"}]
Pass Pattern: [{"pathname":"/:foo."}] Inputs: [{"pathname":"/bar."}]
Pass Pattern: [{"pathname":"/:foo.."}] Inputs: [{"pathname":"/bar.."}]
Pass Pattern: [{"pathname":"./foo"}] Inputs: [{"pathname":"./foo"}]
Pass Pattern: [{"pathname":"../foo"}] Inputs: [{"pathname":"../foo"}]
Pass Pattern: [{"pathname":":foo./"}] Inputs: [{"pathname":"bar./"}]
Pass Pattern: [{"pathname":":foo../"}] Inputs: [{"pathname":"bar../"}]
Pass Pattern: [{"pathname":"/:foo\\bar"}] Inputs: [{"pathname":"/bazbar"}]
Pass Pattern: [{"pathname":"/foo/bar"},{"ignoreCase":true}] Inputs: [{"pathname":"/FOO/BAR"}]
Pass Pattern: [{"ignoreCase":true}] Inputs: [{"pathname":"/FOO/BAR"}]
Pass Pattern: ["https://example.com:8080/foo?bar#baz",{"ignoreCase":true}] Inputs: [{"pathname":"/FOO","search":"BAR","hash":"BAZ","baseURL":"https://example.com:8080"}]
Pass Pattern: ["/foo?bar#baz","https://example.com:8080",{"ignoreCase":true}] Inputs: [{"pathname":"/FOO","search":"BAR","hash":"BAZ","baseURL":"https://example.com:8080"}]
Pass Pattern: ["/foo?bar#baz",{"ignoreCase":true},"https://example.com:8080"] Inputs: [{"pathname":"/FOO","search":"BAR","hash":"BAZ","baseURL":"https://example.com:8080"}]
Pass Pattern: [{"search":"foo","baseURL":"https://example.com/a/+/b"}] Inputs: [{"search":"foo","baseURL":"https://example.com/a/+/b"}]
Pass Pattern: [{"hash":"foo","baseURL":"https://example.com/?q=*&v=?&hmm={}&umm=()"}] Inputs: [{"hash":"foo","baseURL":"https://example.com/?q=*&v=?&hmm={}&umm=()"}]
Pass Pattern: ["#foo","https://example.com/?q=*&v=?&hmm={}&umm=()"] Inputs: ["https://example.com/?q=*&v=?&hmm={}&umm=()#foo"]
Pass Pattern: [{"pathname":"/([[a-z]--a])"}] Inputs: [{"pathname":"/a"}]
Pass Pattern: [{"pathname":"/([[a-z]--a])"}] Inputs: [{"pathname":"/z"}]
Pass Pattern: [{"pathname":"/([\\d&&[0-1]])"}] Inputs: [{"pathname":"/0"}]
Pass Pattern: [{"pathname":"/([\\d&&[0-1]])"}] Inputs: [{"pathname":"/3"}]