Probably of more use to the IRI WG. ------- Forwarded message ------- From: "Adam Barth" <w3c@adambarth.com> To: "HTML WG" <public-html@w3.org> Cc: "Larry Masinter" <LMM@acm.org> Subject: URL parsing Date: Fri, 23 Apr 2010 07:03:31 +0900 I haven't been paying that close attention to all the machinations around URL parsing in this working group, but I've been looking into URL parsing a bit recently. In case it's useful to this working group (or the IETF's URL working group), I've attached some raw data on how various browsers parse URLs. These tests are from this test suite: http://trac.webkit.org/browser/trunk/LayoutTests/fast/url which is adapted from these unit tests: http://code.google.com/p/google-url/source/browse/trunk/src/url_canon_unittest.cc I might send a summary of my findings after I analyze the data. Enjoy! Adam -- Anne van Kesteren http://annevankesteren.nl/ = LayoutTests/fast/url/scheme.html = == Firefox == PASS canonicalize('http://example.com/') is 'http://example.com/' PASS canonicalize('HTTP://example.com/') is 'http://example.com/' == Chrome == PASS canonicalize('http://example.com/') is 'http://example.com/' PASS canonicalize('HTTP://example.com/') is 'http://example.com/' == Safari == PASS canonicalize('http://example.com/') is 'http://example.com/' FAIL canonicalize('HTTP://example.com/') should be http://example.com/. Was HTTP://example.com/. == IE8 == PASS canonicalize('http://example.com/') is 'http://example.com/' PASS canonicalize('HTTP://example.com/') is 'http://example.com/' = LayoutTests/fast/url/host.html = == Firefox == PASS canonicalize('http://GoOgLe.CoM/') is 'http://google.com/' FAIL canonicalize('http://Goo%20 goo%7C|.com/') should be http://goo%20%20goo%7C%7C.com/. Was http://Goo%20 goo%7C|.com/. FAIL canonicalize('http://GOO goo.com/') should be http://goo%20%20goo.com/. Was http://goo goo.com/. PASS canonicalize('http://GOOgoo.com/') is 'http://googoo.com/' PASS canonicalize('http://www.foo。bar.com/') is 'http://www.foo.bar.com/' FAIL canonicalize('http://zyx.com/') should be http://%EF%BF%BDzyx.com/. Was http://zyx.com/. FAIL canonicalize('http://%ef%b7%90zyx.com/') should be http://%EF%BF%BDzyx.com/. Was http://%ef%b7%90zyx.com/. PASS canonicalize('http://Go.com/') is 'http://go.com/' FAIL canonicalize('http://%41.com/') should be http://a.com/. Was http://%41.com/. FAIL canonicalize('http://%ef%bc%85%ef%bc%94%ef%bc%91.com/') should be http://a.com/. Was http://%ef%bc%85%ef%bc%94%ef%bc%91.com/. PASS canonicalize('http://%00.com/') is 'http://%00.com/' FAIL canonicalize('http://%ef%bc%85%ef%bc%90%ef%bc%90.com/') should be http://%00.com/. Was http://%ef%bc%85%ef%bc%90%ef%bc%90.com/. PASS canonicalize('http://你好你好/') is 'http://xn--6qqa088eba/' FAIL canonicalize('http://%E4%BD%A0%E5%A5%BD你好/') should be http://xn--6qqa088eba/. Was http://xn--%e4%bd%a0%e5%a5%bd-5g72ap39l/. FAIL canonicalize('http://%zz%66%a/') should be http://%25zzf%25a/. Was http://%zz%66%a/. PASS canonicalize('http://%25/') is 'http://%25/' PASS canonicalize('http://hello%00/') is 'http://hello%00/' FAIL canonicalize('http://%30%78%63%30%2e%30%32%35%30.01/') should be http://192.168.0.1/. Was http://%30%78%63%30%2e%30%32%35%30.01/. FAIL canonicalize('http://%30%78%63%30%2e%30%32%35%30.01%2e/') should be http://192.168.0.1/. Was http://%30%78%63%30%2e%30%32%35%30.01%2e/. FAIL canonicalize('http://%3g%78%63%30%2e%30%32%35%30%2E.01/') should be http://%253gxc0.0250..01/. Was http://%3g%78%63%30%2e%30%32%35%30%2e.01/. FAIL canonicalize('http://192.168.0.1 hello/') should be http://192.168.0.1%20hello/. Was http://192.168.0.1 hello/. FAIL canonicalize('http://0Xc0.0250.01/') should be http://192.168.0.1/. Was http://0xc0.0250.01/. PASS canonicalize('http://192.168.0.257/') is 'http://192.168.0.257/' PASS canonicalize('http://[google.com]/') is 'http://[google.com]/' FAIL canonicalize('http://т(/') should be http://xn--%28-7ed/. Was http://xn--(-8tb/. == Chrome == PASS canonicalize('http://GoOgLe.CoM/') is 'http://google.com/' PASS canonicalize('http://Goo%20 goo%7C|.com/') is 'http://goo%20%20goo%7C%7C.com/' PASS canonicalize('http://GOO goo.com/') is 'http://goo%20%20goo.com/' PASS canonicalize('http://GOOgoo.com/') is 'http://googoo.com/' PASS canonicalize('http://www.foo。bar.com/') is 'http://www.foo.bar.com/' PASS canonicalize('http://zyx.com/') is 'http://%EF%BF%BDzyx.com/' PASS canonicalize('http://%ef%b7%90zyx.com/') is 'http://%EF%BF%BDzyx.com/' PASS canonicalize('http://Go.com/') is 'http://go.com/' PASS canonicalize('http://%41.com/') is 'http://a.com/' PASS canonicalize('http://%ef%bc%85%ef%bc%94%ef%bc%91.com/') is 'http://a.com/' PASS canonicalize('http://%00.com/') is 'http://%00.com/' PASS canonicalize('http://%ef%bc%85%ef%bc%90%ef%bc%90.com/') is 'http://%00.com/' PASS canonicalize('http://你好你好/') is 'http://xn--6qqa088eba/' PASS canonicalize('http://%E4%BD%A0%E5%A5%BD你好/') is 'http://xn--6qqa088eba/' PASS canonicalize('http://%zz%66%a/') is 'http://%25zzf%25a/' PASS canonicalize('http://%25/') is 'http://%25/' PASS canonicalize('http://hello%00/') is 'http://hello%00/' PASS canonicalize('http://%30%78%63%30%2e%30%32%35%30.01/') is 'http://192.168.0.1/' PASS canonicalize('http://%30%78%63%30%2e%30%32%35%30.01%2e/') is 'http://192.168.0.1/' PASS canonicalize('http://%3g%78%63%30%2e%30%32%35%30%2E.01/') is 'http://%253gxc0.0250..01/' PASS canonicalize('http://192.168.0.1 hello/') is 'http://192.168.0.1%20hello/' PASS canonicalize('http://0Xc0.0250.01/') is 'http://192.168.0.1/' PASS canonicalize('http://192.168.0.257/') is 'http://192.168.0.257/' PASS canonicalize('http://[google.com]/') is 'http://[google.com]/' PASS canonicalize('http://т(/') is 'http://xn--%28-7ed/' == Safari == FAIL canonicalize('http://GoOgLe.CoM/') should be http://google.com/. Was http://GoOgLe.CoM/. FAIL canonicalize('http://Goo%20 goo%7C|.com/') should be http://goo%20%20goo%7C%7C.com/. Was http://Goo%20 goo%7C|.com/. FAIL canonicalize('http://GOO goo.com/') should be http://goo%20%20goo.com/. Was http://goo goo.com/. PASS canonicalize('http://GOOgoo.com/') is 'http://googoo.com/' PASS canonicalize('http://www.foo。bar.com/') is 'http://www.foo.bar.com/' FAIL canonicalize('http://zyx.com/') should be http://%EF%BF%BDzyx.com/. Was http:/. FAIL canonicalize('http://%ef%b7%90zyx.com/') should be http://%EF%BF%BDzyx.com/. Was http://%ef%b7%90zyx.com/. PASS canonicalize('http://Go.com/') is 'http://go.com/' FAIL canonicalize('http://%41.com/') should be http://a.com/. Was http://%41.com/. FAIL canonicalize('http://%ef%bc%85%ef%bc%94%ef%bc%91.com/') should be http://a.com/. Was http://%ef%bc%85%ef%bc%94%ef%bc%91.com/. PASS canonicalize('http://%00.com/') is 'http://%00.com/' FAIL canonicalize('http://%ef%bc%85%ef%bc%90%ef%bc%90.com/') should be http://%00.com/. Was http://%ef%bc%85%ef%bc%90%ef%bc%90.com/. PASS canonicalize('http://你好你好/') is 'http://xn--6qqa088eba/' FAIL canonicalize('http://%E4%BD%A0%E5%A5%BD你好/') should be http://xn--6qqa088eba/. Was http://xn--%e4%bd%a0%e5%a5%bd-5g72ap39l/. FAIL canonicalize('http://%zz%66%a/') should be http://%25zzf%25a/. Was http://%zz%66%a/. PASS canonicalize('http://%25/') is 'http://%25/' PASS canonicalize('http://hello%00/') is 'http://hello%00/' FAIL canonicalize('http://%30%78%63%30%2e%30%32%35%30.01/') should be http://192.168.0.1/. Was http://%30%78%63%30%2e%30%32%35%30.01/. FAIL canonicalize('http://%30%78%63%30%2e%30%32%35%30.01%2e/') should be http://192.168.0.1/. Was http://%30%78%63%30%2e%30%32%35%30.01%2e/. FAIL canonicalize('http://%3g%78%63%30%2e%30%32%35%30%2E.01/') should be http://%253gxc0.0250..01/. Was http://%3g%78%63%30%2e%30%32%35%30%2E.01/. FAIL canonicalize('http://192.168.0.1 hello/') should be http://192.168.0.1%20hello/. Was http://192.168.0.1 hello/. FAIL canonicalize('http://0Xc0.0250.01/') should be http://192.168.0.1/. Was http://0xc0.0250.01/. PASS canonicalize('http://192.168.0.257/') is 'http://192.168.0.257/' PASS canonicalize('http://[google.com]/') is 'http://[google.com]/' FAIL canonicalize('http://т(/') should be http://xn--%28-7ed/. Was http://xn--(-8tb/. == IE8 == PASS canonicalize('http://GoOgLe.CoM/') is 'http://google.com/' FAIL canonicalize('http://Goo%20 goo%7C|.com/') should be http://goo%20%20goo%7C%7C.com/. Was http://goo%20%20goo%7c%7c.com/. FAIL canonicalize('http://GOO goo.com/') should be http://goo%20%20goo.com/. Threw exception [object Error] PASS canonicalize('http://GOOgoo.com/') is 'http://googoo.com/' PASS canonicalize('http://www.foo。bar.com/') is 'http://www.foo.bar.com/' FAIL canonicalize('http://�zyx.com/') should be http://%EF%BF%BDzyx.com/. Was http://zyx.com/. FAIL canonicalize('http://%ef%b7%90zyx.com/') should be http://%EF%BF%BDzyx.com/. Was http://%ef%b7%90zyx.com/. PASS canonicalize('http://Go.com/') is 'http://go.com/' FAIL canonicalize('http://%41.com/') should be http://a.com/. Threw exception [object Error] FAIL canonicalize('http://%ef%bc%85%ef%bc%94%ef%bc%91.com/') should be http://a.com/. Was http://%ef%bc%85%ef%bc%94%ef%bc%91.com/. FAIL canonicalize('http://%00.com/') should be http://%00.com/. Threw exception [object Error] FAIL canonicalize('http://%ef%bc%85%ef%bc%90%ef%bc%90.com/') should be http://%00.com/. Was http://%ef%bc%85%ef%bc%90%ef%bc%90.com/. FAIL canonicalize('http://你好你好/') should be http://xn--6qqa088eba/. Was http://你好你好/. FAIL canonicalize('http://%E4%BD%A0%E5%A5%BD你好/') should be http://xn--6qqa088eba/. Threw exception [object Error] FAIL canonicalize('http://%zz%66%a/') should be http://%25zzf%25a/. Threw exception [object Error] PASS canonicalize('http://%25/') is 'http://%25/' FAIL canonicalize('http://hello%00/') should be http://hello%00/. Threw exception [object Error] FAIL canonicalize('http://%30%78%63%30%2e%30%32%35%30.01/') should be http://192.168.0.1/. Was http://0xc0.0250.01/. FAIL canonicalize('http://%30%78%63%30%2e%30%32%35%30.01%2e/') should be http://192.168.0.1/. Was http://0xc0.0250.01./. FAIL canonicalize('http://%3g%78%63%30%2e%30%32%35%30%2E.01/') should be http://%253gxc0.0250..01/. Threw exception [object Error] PASS canonicalize('http://192.168.0.1 hello/') is 'http://192.168.0.1%20hello/' FAIL canonicalize('http://0Xc0.0250.01/') should be http://192.168.0.1/. Was http://0xc0.0250.01/. PASS canonicalize('http://192.168.0.257/') is 'http://192.168.0.257/' FAIL canonicalize('http://[google.com]/') should be http://[google.com]/. Threw exception [object Error] FAIL canonicalize('http://т(/') should be http://xn--%28-7ed/. Threw exception [object Error] = LayoutTests/fast/url/port.html = == Firefox == FAIL canonicalize('http://www.example.com:as df/') should be http://www.example.com:as%20df/. Was http://www.example.com:as df/. PASS canonicalize('http://www.example.com:-2/') is 'http://www.example.com:-2/' PASS canonicalize('http://www.example.com:80/') is 'http://www.example.com/' PASS canonicalize('http://www.example.com:8080/') is 'http://www.example.com:8080/' PASS canonicalize('foobar://www.example.com:80/') is 'foobar://www.example.com:80/' == Chrome == PASS canonicalize('http://www.example.com:as df/') is 'http://www.example.com:as%20df/' PASS canonicalize('http://www.example.com:-2/') is 'http://www.example.com:-2/' PASS canonicalize('http://www.example.com:80/') is 'http://www.example.com/' PASS canonicalize('http://www.example.com:8080/') is 'http://www.example.com:8080/' PASS canonicalize('foobar://www.example.com:80/') is 'foobar://www.example.com:80/' == Safari == FAIL canonicalize('http://www.example.com:as df/') should be http://www.example.com:as%20df/. Was http://www.example.com:as df/. PASS canonicalize('http://www.example.com:-2/') is 'http://www.example.com:-2/' FAIL canonicalize('http://www.example.com:80/') should be http://www.example.com/. Was http://www.example.com:80/. PASS canonicalize('http://www.example.com:8080/') is 'http://www.example.com:8080/' PASS canonicalize('foobar://www.example.com:80/') is 'foobar://www.example.com:80/' == IE8 == FAIL canonicalize('http://www.example.com:as df/') should be http://www.example.com:as%20df/. Threw exception [object Error] FAIL canonicalize('http://www.example.com:-2/') should be http://www.example.com:-2/. Threw exception [object Error] PASS canonicalize('http://www.example.com:80/') is 'http://www.example.com/' PASS canonicalize('http://www.example.com:8080/') is 'http://www.example.com:8080/' = LayoutTests/fast/url/path.html = == Firefox == PASS canonicalize('http://example.com/././foo') is 'http://example.com/foo' PASS canonicalize('http://example.com/./.foo') is 'http://example.com/.foo' PASS canonicalize('http://example.com/foo/.') is 'http://example.com/foo/' PASS canonicalize('http://example.com/foo/./') is 'http://example.com/foo/' PASS canonicalize('http://example.com/foo/bar/..') is 'http://example.com/foo/' PASS canonicalize('http://example.com/foo/bar/../') is 'http://example.com/foo/' PASS canonicalize('http://example.com/foo/..bar') is 'http://example.com/foo/..bar' PASS canonicalize('http://example.com/foo/bar/../ton') is 'http://example.com/foo/ton' PASS canonicalize('http://example.com/foo/bar/../ton/../../a') is 'http://example.com/a' PASS canonicalize('http://example.com/foo/../../..') is 'http://example.com/' PASS canonicalize('http://example.com/foo/../../../ton') is 'http://example.com/ton' FAIL canonicalize('http://example.com/foo/%2e') should be http://example.com/foo/. Was http://example.com/foo/%2e. FAIL canonicalize('http://example.com/foo/%2e%2') should be http://example.com/foo/.%2. Was http://example.com/foo/%2e%2. FAIL canonicalize('http://example.com/foo/%2e./%2e%2e/.%2e/%2e.bar') should be http://example.com/..bar. Was http://example.com/%2e.bar. PASS canonicalize('http://example.com////../..') is 'http://example.com//' PASS canonicalize('http://example.com/foo') is 'http://example.com/foo' PASS canonicalize('http://example.com/%20foo') is 'http://example.com/%20foo' PASS canonicalize('http://example.com/foo%') is 'http://example.com/foo%' PASS canonicalize('http://example.com/foo%2') is 'http://example.com/foo%2' PASS canonicalize('http://example.com/foo%2zbar') is 'http://example.com/foo%2zbar' PASS canonicalize('http://example.com/foo%2©zbar') is 'http://example.com/foo%2%C3%82%C2%A9zbar' FAIL canonicalize('http://example.com/foo%41%7a') should be http://example.com/fooAz. Was http://example.com/foo%41%7a. FAIL canonicalize('http://example.com/foo %91') should be http://example.com/foo%09%C2%91%91. Was http://example.com/foo%C2%91%91. FAIL canonicalize('http://example.com/foo%00%51') should be http://example.com/foo%00Q. Was http://example.com/foo%00%51. PASS canonicalize('http://example.com/(%28:%3A%29)') is 'http://example.com/(%28:%3A%29)' PASS canonicalize('http://example.com/%3A%3a%3C%3c') is 'http://example.com/%3A%3a%3C%3c' FAIL canonicalize('http://example.com/foo bar') should be http://example.com/foo%09bar. Was http://example.com/foobar. FAIL canonicalize('http://example.com\\foo\\bar') should be http://example.com/foo/bar. Was http://example.com\foo\bar/. PASS canonicalize('http://example.com/%7Ffp3%3Eju%3Dduvgw%3Dd') is 'http://example.com/%7Ffp3%3Eju%3Dduvgw%3Dd' PASS canonicalize('http://example.com/@asdf%40') is 'http://example.com/@asdf%40' PASS canonicalize('http://example.com/你好你') is 'http://example.com/%E4%BD%A0%E5%A5%BD%E4%BD%A0%E5%A5%BD' FAIL canonicalize('http://example.com/zyx') should be http://example.com/%EF%BF%BDzyx. Was http://example.com/%EF%B7%90zyx. == Chrome == PASS canonicalize('http://example.com/././foo') is 'http://example.com/foo' PASS canonicalize('http://example.com/./.foo') is 'http://example.com/.foo' PASS canonicalize('http://example.com/foo/.') is 'http://example.com/foo/' PASS canonicalize('http://example.com/foo/./') is 'http://example.com/foo/' PASS canonicalize('http://example.com/foo/bar/..') is 'http://example.com/foo/' PASS canonicalize('http://example.com/foo/bar/../') is 'http://example.com/foo/' PASS canonicalize('http://example.com/foo/..bar') is 'http://example.com/foo/..bar' PASS canonicalize('http://example.com/foo/bar/../ton') is 'http://example.com/foo/ton' PASS canonicalize('http://example.com/foo/bar/../ton/../../a') is 'http://example.com/a' PASS canonicalize('http://example.com/foo/../../..') is 'http://example.com/' PASS canonicalize('http://example.com/foo/../../../ton') is 'http://example.com/ton' PASS canonicalize('http://example.com/foo/%2e') is 'http://example.com/foo/' PASS canonicalize('http://example.com/foo/%2e%2') is 'http://example.com/foo/.%2' PASS canonicalize('http://example.com/foo/%2e./%2e%2e/.%2e/%2e.bar') is 'http://example.com/..bar' PASS canonicalize('http://example.com////../..') is 'http://example.com//' PASS canonicalize('http://example.com/foo') is 'http://example.com/foo' PASS canonicalize('http://example.com/%20foo') is 'http://example.com/%20foo' PASS canonicalize('http://example.com/foo%') is 'http://example.com/foo%' PASS canonicalize('http://example.com/foo%2') is 'http://example.com/foo%2' PASS canonicalize('http://example.com/foo%2zbar') is 'http://example.com/foo%2zbar' PASS canonicalize('http://example.com/foo%2©zbar') is 'http://example.com/foo%2%C3%82%C2%A9zbar' PASS canonicalize('http://example.com/foo%41%7a') is 'http://example.com/fooAz' FAIL canonicalize('http://example.com/foo %91') should be http://example.com/foo%09%C2%91%91. Was http://example.com/foo%C2%91%91. PASS canonicalize('http://example.com/foo%00%51') is 'http://example.com/foo%00Q' PASS canonicalize('http://example.com/(%28:%3A%29)') is 'http://example.com/(%28:%3A%29)' PASS canonicalize('http://example.com/%3A%3a%3C%3c') is 'http://example.com/%3A%3a%3C%3c' FAIL canonicalize('http://example.com/foo bar') should be http://example.com/foo%09bar. Was http://example.com/foobar. PASS canonicalize('http://example.com\\foo\\bar') is 'http://example.com/foo/bar' PASS canonicalize('http://example.com/%7Ffp3%3Eju%3Dduvgw%3Dd') is 'http://example.com/%7Ffp3%3Eju%3Dduvgw%3Dd' PASS canonicalize('http://example.com/@asdf%40') is 'http://example.com/@asdf%40' PASS canonicalize('http://example.com/你好你') is 'http://example.com/%E4%BD%A0%E5%A5%BD%E4%BD%A0%E5%A5%BD' PASS canonicalize('http://example.com/zyx') is 'http://example.com/%EF%BF%BDzyx' == Safari == PASS canonicalize('http://example.com/././foo') is 'http://example.com/foo' PASS canonicalize('http://example.com/./.foo') is 'http://example.com/.foo' PASS canonicalize('http://example.com/foo/.') is 'http://example.com/foo/' PASS canonicalize('http://example.com/foo/./') is 'http://example.com/foo/' PASS canonicalize('http://example.com/foo/bar/..') is 'http://example.com/foo/' PASS canonicalize('http://example.com/foo/bar/../') is 'http://example.com/foo/' PASS canonicalize('http://example.com/foo/..bar') is 'http://example.com/foo/..bar' PASS canonicalize('http://example.com/foo/bar/../ton') is 'http://example.com/foo/ton' PASS canonicalize('http://example.com/foo/bar/../ton/../../a') is 'http://example.com/a' PASS canonicalize('http://example.com/foo/../../..') is 'http://example.com/' PASS canonicalize('http://example.com/foo/../../../ton') is 'http://example.com/ton' FAIL canonicalize('http://example.com/foo/%2e') should be http://example.com/foo/. Was http://example.com/foo/%2e. FAIL canonicalize('http://example.com/foo/%2e%2') should be http://example.com/foo/.%2. Was http://example.com/foo/%2e%2. FAIL canonicalize('http://example.com/foo/%2e./%2e%2e/.%2e/%2e.bar') should be http://example.com/..bar. Was http://example.com/foo/%2e./%2e%2e/.%2e/%2e.bar. FAIL canonicalize('http://example.com////../..') should be http://example.com//. Was http://example.com/. PASS canonicalize('http://example.com/foo') is 'http://example.com/foo' PASS canonicalize('http://example.com/%20foo') is 'http://example.com/%20foo' PASS canonicalize('http://example.com/foo%') is 'http://example.com/foo%' PASS canonicalize('http://example.com/foo%2') is 'http://example.com/foo%2' PASS canonicalize('http://example.com/foo%2zbar') is 'http://example.com/foo%2zbar' PASS canonicalize('http://example.com/foo%2©zbar') is 'http://example.com/foo%2%C3%82%C2%A9zbar' FAIL canonicalize('http://example.com/foo%41%7a') should be http://example.com/fooAz. Was http://example.com/foo%41%7a. FAIL canonicalize('http://example.com/foo %91') should be http://example.com/foo%09%C2%91%91. Was http://example.com/foo%C2%91%91. FAIL canonicalize('http://example.com/foo%00%51') should be http://example.com/foo%00Q. Was http://example.com/foo%00%51. PASS canonicalize('http://example.com/(%28:%3A%29)') is 'http://example.com/(%28:%3A%29)' PASS canonicalize('http://example.com/%3A%3a%3C%3c') is 'http://example.com/%3A%3a%3C%3c' FAIL canonicalize('http://example.com/foo bar') should be http://example.com/foo%09bar. Was http://example.com/foobar. PASS canonicalize('http://example.com\\foo\\bar') is 'http://example.com/foo/bar' PASS canonicalize('http://example.com/%7Ffp3%3Eju%3Dduvgw%3Dd') is 'http://example.com/%7Ffp3%3Eju%3Dduvgw%3Dd' PASS canonicalize('http://example.com/@asdf%40') is 'http://example.com/@asdf%40' PASS canonicalize('http://example.com/你好你') is 'http://example.com/%E4%BD%A0%E5%A5%BD%E4%BD%A0%E5%A5%BD' FAIL canonicalize('http://example.com/zyx') should be http://example.com/%EF%BF%BDzyx. Was http://example.com/%EF%B7%90zyx. == IE8 == PASS canonicalize('http://example.com/././foo') is 'http://example.com/foo' PASS canonicalize('http://example.com/./.foo') is 'http://example.com/.foo' PASS canonicalize('http://example.com/foo/.') is 'http://example.com/foo/' PASS canonicalize('http://example.com/foo/./') is 'http://example.com/foo/' PASS canonicalize('http://example.com/foo/bar/..') is 'http://example.com/foo/' PASS canonicalize('http://example.com/foo/bar/../') is 'http://example.com/foo/' PASS canonicalize('http://example.com/foo/..bar') is 'http://example.com/foo/..bar' PASS canonicalize('http://example.com/foo/bar/../ton') is 'http://example.com/foo/ton' PASS canonicalize('http://example.com/foo/bar/../ton/../../a') is 'http://example.com/a' PASS canonicalize('http://example.com/foo/../../..') is 'http://example.com/' PASS canonicalize('http://example.com/foo/../../../ton') is 'http://example.com/ton' PASS canonicalize('http://example.com/foo/%2e') is 'http://example.com/foo/' FAIL canonicalize('http://example.com/foo/%2e%2') should be http://example.com/foo/.%2. Threw exception [object Error] PASS canonicalize('http://example.com/foo/%2e./%2e%2e/.%2e/%2e.bar') is 'http://example.com/..bar' PASS canonicalize('http://example.com////../..') is 'http://example.com//' PASS canonicalize('http://example.com/foo') is 'http://example.com/foo' PASS canonicalize('http://example.com/%20foo') is 'http://example.com/%20foo' FAIL canonicalize('http://example.com/foo%') should be http://example.com/foo%. Threw exception [object Error] FAIL canonicalize('http://example.com/foo%2') should be http://example.com/foo%2. Threw exception [object Error] FAIL canonicalize('http://example.com/foo%2zbar') should be http://example.com/foo%2zbar. Threw exception [object Error] FAIL canonicalize('http://example.com/foo%2©zbar') should be http://example.com/foo%2%C3%82%C2%A9zbar. Threw exception [object Error] PASS canonicalize('http://example.com/foo%41%7a') is 'http://example.com/fooAz' FAIL canonicalize('http://example.com/foo %91') should be http://example.com/foo%09%C2%91%91. Was http://example.com/foo%91. FAIL canonicalize('http://example.com/foo%00%51') should be http://example.com/foo%00Q. Threw exception [object Error] PASS canonicalize('http://example.com/(%28:%3A%29)') is 'http://example.com/(%28:%3A%29)' PASS canonicalize('http://example.com/%3A%3a%3C%3c') is 'http://example.com/%3A%3a%3C%3c' FAIL canonicalize('http://example.com/foo bar') should be http://example.com/foo%09bar. Was http://example.com/foobar. PASS canonicalize('http://example.com\\foo\\bar') is 'http://example.com/foo/bar' PASS canonicalize('http://example.com/%7Ffp3%3Eju%3Dduvgw%3Dd') is 'http://example.com/%7Ffp3%3Eju%3Dduvgw%3Dd' PASS canonicalize('http://example.com/@asdf%40') is 'http://example.com/@asdf%40' FAIL canonicalize('http://example.com/你好你') should be http://example.com/%E4%BD%A0%E5%A5%BD%E4%BD%A0%E5%A5%BD. Was http://example.com/你好你. FAIL canonicalize('http://example.com/�zyx') should be http://example.com/%EF%BF%BDzyx. Was http://example.com/zyx. = LayoutTests/fast/url/query.html = == Firefox == PASS canonicalize('http://www.example.com/?foo=bar') is 'http://www.example.com/?foo=bar' PASS canonicalize('http://www.example.com/?as?df') is 'http://www.example.com/?as?df' PASS canonicalize('http://www.example.com/?\x02hello bye') is 'http://www.example.com/?%02hello%7F%20bye' PASS canonicalize('http://www.example.com/?%40%41123') is 'http://www.example.com/?%40%41123' FAIL canonicalize('http://www.example.com/?q=你') should be http://www.example.com/?q=%26%2320320%3B%26%2322909%3B. Was http://www.example.com/?q=%E4%BD%A0%E5%A5%BD. FAIL canonicalize('http://www.example.com/?q=\ud800\ud800') should be http://www.example.com/?q=%26%2355296%3B%26%2355296%3B. Was http://www.example.com/?q=%EF%BF%BD%EF%BF%BD. PASS canonicalize('http://www.example.com/?q=<asdf>') is 'http://www.example.com/?q=%3Casdf%3E' PASS canonicalize('http://www.example.com/?q="asdf"') is 'http://www.example.com/?q=%22asdf%22' == Chrome == PASS canonicalize('http://www.example.com/?foo=bar') is 'http://www.example.com/?foo=bar' PASS canonicalize('http://www.example.com/?as?df') is 'http://www.example.com/?as?df' FAIL canonicalize('http://www.example.com/?\x02hello bye') should be http://www.example.com/?%02hello%7F%20bye. Was http://www.example.com/?hello%7F%20bye. PASS canonicalize('http://www.example.com/?%40%41123') is 'http://www.example.com/?%40%41123' PASS canonicalize('http://www.example.com/?q=你') is 'http://www.example.com/?q=%26%2320320%3B%26%2322909%3B' PASS canonicalize('http://www.example.com/?q=\ud800\ud800') is 'http://www.example.com/?q=%26%2355296%3B%26%2355296%3B' PASS canonicalize('http://www.example.com/?q=<asdf>') is 'http://www.example.com/?q=%3Casdf%3E' PASS canonicalize('http://www.example.com/?q="asdf"') is 'http://www.example.com/?q=%22asdf%22' == Safari == PASS canonicalize('http://www.example.com/?foo=bar') is 'http://www.example.com/?foo=bar' PASS canonicalize('http://www.example.com/?as?df') is 'http://www.example.com/?as?df' PASS canonicalize('http://www.example.com/?\x02hello bye') is 'http://www.example.com/?%02hello%7F%20bye' PASS canonicalize('http://www.example.com/?%40%41123') is 'http://www.example.com/?%40%41123' PASS canonicalize('http://www.example.com/?q=你') is 'http://www.example.com/?q=%26%2320320%3B%26%2322909%3B' PASS canonicalize('http://www.example.com/?q=\ud800\ud800') is 'http://www.example.com/?q=%26%2355296%3B%26%2355296%3B' PASS canonicalize('http://www.example.com/?q=<asdf>') is 'http://www.example.com/?q=%3Casdf%3E' PASS canonicalize('http://www.example.com/?q="asdf"') is 'http://www.example.com/?q=%22asdf%22' == IE8 == PASS canonicalize('http://www.example.com/?foo=bar') is 'http://www.example.com/?foo=bar' PASS canonicalize('http://www.example.com/?as?df') is 'http://www.example.com/?as?df' FAIL canonicalize('http://www.example.com/?\x02hello bye') should be http://www.example.com/?%02hello%7F%20bye. Was http://www.example.com/?hello bye. PASS canonicalize('http://www.example.com/?%40%41123') is 'http://www.example.com/?%40%41123' FAIL canonicalize('http://www.example.com/?q=你') should be http://www.example.com/?q=%26%2320320%3B%26%2322909%3B. Was http://www.example.com/?q=你. FAIL canonicalize('http://www.example.com/?q=\ud800\ud800') should be http://www.example.com/?q=%26%2355296%3B%26%2355296%3B. Was http://www.example.com/?q=�. FAIL canonicalize('http://www.example.com/?q=<asdf>') should be http://www.example.com/?q=%3Casdf%3E. Was http://www.example.com/?q=<asdf>. FAIL canonicalize('http://www.example.com/?q="asdf"') should be http://www.example.com/?q=%22asdf%22. Was http://www.example.com/?q="asdf". = LayoutTests/fast/url/anchor.html = == Firefox == FAIL canonicalize('http://www.example.com/#hello, world') should be http://www.example.com/#hello, world. Was http://www.example.com/#hello,%20world. FAIL canonicalize('http://www.example.com/#Â') should be http://www.example.com/#Â. Was http://www.example.com/#%C3%82%C2%A9. FAIL canonicalize('http://www.example.com/#ss') should be http://www.example.com/#ss. Was http://www.example.com/#%F0%90%8C%80ss. PASS canonicalize('http://www.example.com/#%41%a') is 'http://www.example.com/#%41%a' FAIL canonicalize('http://www.example.com/#\ud800\u597d') should be http://www.example.com/#�. Was http://www.example.com/#%EF%BF%BD%E5%A5%BD. FAIL canonicalize('http://www.example.com/#a\uFDD0') should be http://www.example.com/#a. Was http://www.example.com/#a%EF%B7%90. PASS canonicalize('http://www.example.com/#asdf#qwer') is 'http://www.example.com/#asdf#qwer' PASS canonicalize('http://www.example.com/##asdf') is 'http://www.example.com/##asdf' == Chrome == PASS canonicalize('http://www.example.com/#hello, world') is 'http://www.example.com/#hello, world' PASS canonicalize('http://www.example.com/#Â') is 'http://www.example.com/#Â' PASS canonicalize('http://www.example.com/#ss') is 'http://www.example.com/#ss' PASS canonicalize('http://www.example.com/#%41%a') is 'http://www.example.com/#%41%a' PASS canonicalize('http://www.example.com/#\ud800\u597d') is 'http://www.example.com/#\uFFFD\u597D' FAIL canonicalize('http://www.example.com/#a\uFDD0') should be http://www.example.com/#a. Was http://www.example.com/#a. PASS canonicalize('http://www.example.com/#asdf#qwer') is 'http://www.example.com/#asdf#qwer' PASS canonicalize('http://www.example.com/##asdf') is 'http://www.example.com/##asdf' == Safari == FAIL canonicalize('http://www.example.com/#hello, world') should be http://www.example.com/#hello, world. Was http://www.example.com/#hello,%20world. FAIL canonicalize('http://www.example.com/#Â') should be http://www.example.com/#Â. Was http://www.example.com/#%C2%A9. FAIL canonicalize('http://www.example.com/#ss') should be http://www.example.com/#ss. Was http://www.example.com/#%26%2366304%3Bss. PASS canonicalize('http://www.example.com/#%41%a') is 'http://www.example.com/#%41%a' FAIL canonicalize('http://www.example.com/#\ud800\u597d') should be http://www.example.com/#�. Was http://www.example.com/#%26%2355296%3B%26%2322909%3B. FAIL canonicalize('http://www.example.com/#a\uFDD0') should be http://www.example.com/#a. Was http://www.example.com/#a%26%2364976%3B. FAIL canonicalize('http://www.example.com/#asdf#qwer') should be http://www.example.com/#asdf#qwer. Was http://www.example.com/#asdf%23qwer. FAIL canonicalize('http://www.example.com/##asdf') should be http://www.example.com/##asdf. Was http://www.example.com/#%23asdf. == IE8 == PASS canonicalize('http://www.example.com/#hello, world') is 'http://www.example.com/#hello, world' PASS canonicalize('http://www.example.com/#Â') is 'http://www.example.com/#Â' PASS canonicalize('http://www.example.com/#ss') is 'http://www.example.com/#ss' PASS canonicalize('http://www.example.com/#%41%a') is 'http://www.example.com/#%41%a' FAIL canonicalize('http://www.example.com/#\ud800\u597d') should be http://www.example.com/#�. Was http://www.example.com/#�. FAIL canonicalize('http://www.example.com/#a\uFDD0') should be http://www.example.com/#a. Was http://www.example.com/#a. PASS canonicalize('http://www.example.com/#asdf#qwer') is 'http://www.example.com/#asdf#qwer' PASS canonicalize('http://www.example.com/##asdf') is 'http://www.example.com/##asdf' = LayoutTests/fast/url/standard-url.html = == Firefox == PASS canonicalize('http://www.google.com/foo?bar=baz#') is 'http://www.google.com/foo?bar=baz#' PASS canonicalize('http://[www.google.com]/') is 'http://[www.google.com]/' FAIL canonicalize('http:////////user:@google.com:99?foo') should be http://user@google.com:99/?foo. Was http://user:@google.com:99/?foo. FAIL canonicalize('http://192.0x00A80001') should be http://192.168.0.1/. Was http://192.0x00a80001/. FAIL canonicalize('http://www/foo%2Ehtml') should be http://www/foo.html. Was http://www/foo%2Ehtml. PASS canonicalize('http://user:pass@/') is 'http://user:pass@/' PASS canonicalize('http://%25DOMAIN:foobar@foodomain.com/') is 'http://%25DOMAIN:foobar@foodomain.com/' FAIL canonicalize('http:\\\\www.google.com\\foo') should be http://www.google.com/foo. Was http://\\www.google.com\foo/. FAIL canonicalize('http://www.google.com/asdf#\ud800') should be http://www.google.com/asdf#. Was http://www.google.com/asdf#%EF%BF%BD. PASS canonicalize('http://foo:80/') is 'http://foo/' PASS canonicalize('http://foo:81/') is 'http://foo:81/' PASS canonicalize('httpa://foo:80/') is 'httpa://foo:80/' PASS canonicalize('http://foo:-80/') is 'http://foo:-80/' PASS canonicalize('https://foo:443/') is 'https://foo/' PASS canonicalize('https://foo:80/') is 'https://foo:80/' PASS canonicalize('ftp://foo:21/') is 'ftp://foo/' PASS canonicalize('ftp://foo:80/') is 'ftp://foo:80/' PASS canonicalize('gopher://foo:70/') is 'gopher://foo/' PASS canonicalize('gopher://foo:443/') is 'gopher://foo:443/' FAIL canonicalize('ws://foo:80/') should be ws://foo/. Was ws://foo:80/. PASS canonicalize('ws://foo:81/') is 'ws://foo:81/' PASS canonicalize('ws://foo:443/') is 'ws://foo:443/' PASS canonicalize('ws://foo:815/') is 'ws://foo:815/' PASS canonicalize('wss://foo:80/') is 'wss://foo:80/' PASS canonicalize('wss://foo:81/') is 'wss://foo:81/' FAIL canonicalize('wss://foo:443/') should be wss://foo/. Was wss://foo:443/. PASS canonicalize('wss://foo:815/') is 'wss://foo:815/' == Chrome == PASS canonicalize('http://www.google.com/foo?bar=baz#') is 'http://www.google.com/foo?bar=baz#' PASS canonicalize('http://[www.google.com]/') is 'http://[www.google.com]/' PASS canonicalize('http:////////user:@google.com:99?foo') is 'http://user@google.com:99/?foo' PASS canonicalize('http://192.0x00A80001') is 'http://192.168.0.1/' PASS canonicalize('http://www/foo%2Ehtml') is 'http://www/foo.html' PASS canonicalize('http://user:pass@/') is 'http://user:pass@/' PASS canonicalize('http://%25DOMAIN:foobar@foodomain.com/') is 'http://%25DOMAIN:foobar@foodomain.com/' PASS canonicalize('http:\\\\www.google.com\\foo') is 'http://www.google.com/foo' PASS canonicalize('http://www.google.com/asdf#\ud800') is 'http://www.google.com/asdf#\uFFFD' PASS canonicalize('http://foo:80/') is 'http://foo/' PASS canonicalize('http://foo:81/') is 'http://foo:81/' PASS canonicalize('httpa://foo:80/') is 'httpa://foo:80/' PASS canonicalize('http://foo:-80/') is 'http://foo:-80/' PASS canonicalize('https://foo:443/') is 'https://foo/' PASS canonicalize('https://foo:80/') is 'https://foo:80/' PASS canonicalize('ftp://foo:21/') is 'ftp://foo/' PASS canonicalize('ftp://foo:80/') is 'ftp://foo:80/' PASS canonicalize('gopher://foo:70/') is 'gopher://foo/' PASS canonicalize('gopher://foo:443/') is 'gopher://foo:443/' PASS canonicalize('ws://foo:80/') is 'ws://foo/' PASS canonicalize('ws://foo:81/') is 'ws://foo:81/' PASS canonicalize('ws://foo:443/') is 'ws://foo:443/' PASS canonicalize('ws://foo:815/') is 'ws://foo:815/' PASS canonicalize('wss://foo:80/') is 'wss://foo:80/' PASS canonicalize('wss://foo:81/') is 'wss://foo:81/' PASS canonicalize('wss://foo:443/') is 'wss://foo/' PASS canonicalize('wss://foo:815/') is 'wss://foo:815/' == Safari == PASS canonicalize('http://www.google.com/foo?bar=baz#') is 'http://www.google.com/foo?bar=baz#' PASS canonicalize('http://[www.google.com]/') is 'http://[www.google.com]/' FAIL canonicalize('http:////////user:@google.com:99?foo') should be http://user@google.com:99/?foo. Was http://////user:@google.com:99?foo. FAIL canonicalize('http://192.0x00A80001') should be http://192.168.0.1/. Was http://192.0x00A80001/. FAIL canonicalize('http://www/foo%2Ehtml') should be http://www/foo.html. Was http://www/foo%2Ehtml. PASS canonicalize('http://user:pass@/') is 'http://user:pass@/' PASS canonicalize('http://%25DOMAIN:foobar@foodomain.com/') is 'http://%25DOMAIN:foobar@foodomain.com/' PASS canonicalize('http:\\\\www.google.com\\foo') is 'http://www.google.com/foo' FAIL canonicalize('http://www.google.com/asdf#\ud800') should be http://www.google.com/asdf#. Was http://www.google.com/asdf#%26%2355296%3B. FAIL canonicalize('http://foo:80/') should be http://foo/. Was http://foo:80/. PASS canonicalize('http://foo:81/') is 'http://foo:81/' PASS canonicalize('httpa://foo:80/') is 'httpa://foo:80/' PASS canonicalize('http://foo:-80/') is 'http://foo:-80/' FAIL canonicalize('https://foo:443/') should be https://foo/. Was https://foo:443/. PASS canonicalize('https://foo:80/') is 'https://foo:80/' FAIL canonicalize('ftp://foo:21/') should be ftp://foo/. Was ftp://foo:21/. PASS canonicalize('ftp://foo:80/') is 'ftp://foo:80/' FAIL canonicalize('gopher://foo:70/') should be gopher://foo/. Was gopher://foo:70/. PASS canonicalize('gopher://foo:443/') is 'gopher://foo:443/' FAIL canonicalize('ws://foo:80/') should be ws://foo/. Was ws://foo:80/. PASS canonicalize('ws://foo:81/') is 'ws://foo:81/' PASS canonicalize('ws://foo:443/') is 'ws://foo:443/' PASS canonicalize('ws://foo:815/') is 'ws://foo:815/' PASS canonicalize('wss://foo:80/') is 'wss://foo:80/' PASS canonicalize('wss://foo:81/') is 'wss://foo:81/' FAIL canonicalize('wss://foo:443/') should be wss://foo/. Was wss://foo:443/. PASS canonicalize('wss://foo:815/') is 'wss://foo:815/' == IE8 == PASS canonicalize('http://www.google.com/foo?bar=baz#') is 'http://www.google.com/foo?bar=baz#' FAIL canonicalize('http://[www.google.com]/') should be http://[www.google.com]/. Threw exception [object Error] FAIL canonicalize('http:////////user:@google.com:99?foo') should be http://user@google.com:99/?foo. Was http:////////user:@google.com:99?foo. PASS canonicalize('http://192.0x00A80001') is 'http://192.168.0.1/' PASS canonicalize('http://www/foo%2Ehtml') is 'http://www/foo.html' FAIL canonicalize('http://user:pass@/') should be http://user:pass@/. Threw exception [object Error] FAIL canonicalize('http://%25DOMAIN:foobar@foodomain.com/') should be http://%25DOMAIN:foobar@foodomain.com/. Threw exception [object Error] PASS canonicalize('http:\\\\www.google.com\\foo') is 'http://www.google.com/foo' FAIL canonicalize('http://www.google.com/asdf#\ud800') should be http://www.google.com/asdf#. Was http://www.google.com/asdf#. PASS canonicalize('http://foo:80/') is 'http://foo/' PASS canonicalize('http://foo:81/') is 'http://foo:81/' PASS canonicalize('httpa://foo:80/') is 'httpa://foo:80/' FAIL canonicalize('http://foo:-80/') should be http://foo:-80/. Threw exception [object Error] PASS canonicalize('https://foo:443/') is 'https://foo/' PASS canonicalize('https://foo:80/') is 'https://foo:80/' PASS canonicalize('ftp://foo:21/') is 'ftp://foo/' PASS canonicalize('ftp://foo:80/') is 'ftp://foo:80/' PASS canonicalize('gopher://foo:70/') is 'gopher://foo/' PASS canonicalize('gopher://foo:443/') is 'gopher://foo:443/' FAIL canonicalize('ws://foo:80/') should be ws://foo/. Was ws://foo:80/. PASS canonicalize('ws://foo:81/') is 'ws://foo:81/' PASS canonicalize('ws://foo:443/') is 'ws://foo:443/' PASS canonicalize('ws://foo:815/') is 'ws://foo:815/' PASS canonicalize('wss://foo:80/') is 'wss://foo:80/' PASS canonicalize('wss://foo:81/') is 'wss://foo:81/' FAIL canonicalize('wss://foo:443/') should be wss://foo/. Was wss://foo:443/. PASS canonicalize('wss://foo:815/') is 'wss://foo:815/' = LayoutTests/fast/url/path-url.html = == Firefox == PASS canonicalize('javascript:') is 'javascript:' PASS canonicalize('JavaScript:Foo') is 'javascript:Foo' == Chrome == PASS canonicalize('javascript:') is 'javascript:' PASS canonicalize('JavaScript:Foo') is 'javascript:Foo' == Safari == PASS canonicalize('javascript:') is 'javascript:' FAIL canonicalize('JavaScript:Foo') should be javascript:Foo. Was JavaScript:Foo. == IE8 == PASS canonicalize('javascript:') is 'javascript:' PASS canonicalize('JavaScript:Foo') is 'javascript:Foo' = LayoutTests/fast/url/ipv4.html = == Firefox == FAIL canonicalize('http:///') should be http:. Was http:///. PASS canonicalize('http://./') is 'http://./' PASS canonicalize('http://192.168.0.1/') is 'http://192.168.0.1/' FAIL canonicalize('http://0300.0250.00.01/') should be http://192.168.0.1/. Was http://0300.0250.00.01/. FAIL canonicalize('http://0xC0.0Xa8.0x0.0x1/') should be http://192.168.0.1/. Was http://0xc0.0xa8.0x0.0x1/. PASS canonicalize('http://192.168.9.com/') is 'http://192.168.9.com/' PASS canonicalize('http://19a.168.0.1/') is 'http://19a.168.0.1/' PASS canonicalize('http://0308.0250.00.01/') is 'http://0308.0250.00.01/' PASS canonicalize('http://0xCG.0xA8.0x0.0x1/') is 'http://0xcg.0xa8.0x0.0x1/' FAIL canonicalize('http://192/') should be http://0.0.0.192/. Was http://192/. FAIL canonicalize('http://0xC0a80001/') should be http://192.168.0.1/. Was http://0xc0a80001/. FAIL canonicalize('http://030052000001/') should be http://192.168.0.1/. Was http://030052000001/. FAIL canonicalize('http://000030052000001/') should be http://192.168.0.1/. Was http://000030052000001/. FAIL canonicalize('http://192.168/') should be http://192.0.0.168/. Was http://192.168/. FAIL canonicalize('http://192.0x00A80001/') should be http://192.168.0.1/. Was http://192.0x00a80001/. FAIL canonicalize('http://0xc0.052000001/') should be http://192.168.0.1/. Was http://0xc0.052000001/. FAIL canonicalize('http://192.168.1/') should be http://192.168.0.1/. Was http://192.168.1/. PASS canonicalize('http://192.168.0.0.1/') is 'http://192.168.0.0.1/' FAIL canonicalize('http://192.168.0.1./') should be http://192.168.0.1/. Was http://192.168.0.1./. FAIL canonicalize('http://192.168.0.1. hello/') should be http://192.168.0.1.%20hello/. Was http://192.168.0.1. hello/. PASS canonicalize('http://192.168.0.1../') is 'http://192.168.0.1../' PASS canonicalize('http://192.168..1/') is 'http://192.168..1/' PASS canonicalize('http://0x100.0/') is 'http://0x100.0/' PASS canonicalize('http://0x100.0.0/') is 'http://0x100.0.0/' PASS canonicalize('http://0x100.0.0.0/') is 'http://0x100.0.0.0/' PASS canonicalize('http://0.0x100.0.0/') is 'http://0.0x100.0.0/' PASS canonicalize('http://0.0.0x100.0/') is 'http://0.0.0x100.0/' PASS canonicalize('http://0.0.0.0x100/') is 'http://0.0.0.0x100/' PASS canonicalize('http://0.0.0x10000/') is 'http://0.0.0x10000/' PASS canonicalize('http://0.0x1000000/') is 'http://0.0x1000000/' PASS canonicalize('http://0x100000000/') is 'http://0x100000000/' FAIL canonicalize('http://0xFF.0/') should be http://255.0.0.0/. Was http://0xff.0/. FAIL canonicalize('http://0xFF.0.0/') should be http://255.0.0.0/. Was http://0xff.0.0/. FAIL canonicalize('http://0xFF.0.0.0/') should be http://255.0.0.0/. Was http://0xff.0.0.0/. FAIL canonicalize('http://0.0xFF.0.0/') should be http://0.255.0.0/. Was http://0.0xff.0.0/. FAIL canonicalize('http://0.0.0xFF.0/') should be http://0.0.255.0/. Was http://0.0.0xff.0/. FAIL canonicalize('http://0.0.0.0xFF/') should be http://0.0.0.255/. Was http://0.0.0.0xff/. FAIL canonicalize('http://0.0.0xFFFF/') should be http://0.0.255.255/. Was http://0.0.0xffff/. FAIL canonicalize('http://0.0xFFFFFF/') should be http://0.255.255.255/. Was http://0.0xffffff/. FAIL canonicalize('http://0xFFFFFFFF/') should be http://255.255.255.255/. Was http://0xffffffff/. PASS canonicalize('http://276.256.0xf1a2.077777/') is 'http://276.256.0xf1a2.077777/' PASS canonicalize('http://192.168.0.257/') is 'http://192.168.0.257/' PASS canonicalize('http://192.168.0xa20001/') is 'http://192.168.0xa20001/' PASS canonicalize('http://192.015052000001/') is 'http://192.015052000001/' PASS canonicalize('http://0X12C0a80001/') is 'http://0x12c0a80001/' PASS canonicalize('http://276.1.2/') is 'http://276.1.2/' FAIL canonicalize('http://192.168.0.1 hello/') should be http://192.168.0.1%20hello/. Was http://192.168.0.1 hello/. FAIL canonicalize('http://0000000000000300.0x00000000000000fF.00000000000000001/') should be http://192.255.0.1/. Was http://0000000000000300.0x00000000000000ff.00000000000000001/. PASS canonicalize('http://0000000000000300.0xffffffffFFFFFFFF.3022415481470977/') is 'http://0000000000000300.0xffffffffffffffff.3022415481470977/' FAIL canonicalize('http://00000000000000000001/') should be http://0.0.0.1/. Was http://00000000000000000001/. PASS canonicalize('http://0000000000000000100000000000000001/') is 'http://0000000000000000100000000000000001/' PASS canonicalize('http://0.0.0.000000000000000000z/') is 'http://0.0.0.000000000000000000z/' PASS canonicalize('http://0.0.0.100000000000000000z/') is 'http://0.0.0.100000000000000000z/' FAIL canonicalize('http://0.00.0x.0x0/') should be http://0.0.0.0/. Was http://0.00.0x.0x0/. == Chrome == PASS canonicalize('http:///') is 'http:' PASS canonicalize('http://./') is 'http://./' PASS canonicalize('http://192.168.0.1/') is 'http://192.168.0.1/' PASS canonicalize('http://0300.0250.00.01/') is 'http://192.168.0.1/' PASS canonicalize('http://0xC0.0Xa8.0x0.0x1/') is 'http://192.168.0.1/' PASS canonicalize('http://192.168.9.com/') is 'http://192.168.9.com/' PASS canonicalize('http://19a.168.0.1/') is 'http://19a.168.0.1/' PASS canonicalize('http://0308.0250.00.01/') is 'http://0308.0250.00.01/' PASS canonicalize('http://0xCG.0xA8.0x0.0x1/') is 'http://0xcg.0xa8.0x0.0x1/' PASS canonicalize('http://192/') is 'http://0.0.0.192/' PASS canonicalize('http://0xC0a80001/') is 'http://192.168.0.1/' PASS canonicalize('http://030052000001/') is 'http://192.168.0.1/' PASS canonicalize('http://000030052000001/') is 'http://192.168.0.1/' PASS canonicalize('http://192.168/') is 'http://192.0.0.168/' PASS canonicalize('http://192.0x00A80001/') is 'http://192.168.0.1/' PASS canonicalize('http://0xc0.052000001/') is 'http://192.168.0.1/' PASS canonicalize('http://192.168.1/') is 'http://192.168.0.1/' PASS canonicalize('http://192.168.0.0.1/') is 'http://192.168.0.0.1/' PASS canonicalize('http://192.168.0.1./') is 'http://192.168.0.1/' PASS canonicalize('http://192.168.0.1. hello/') is 'http://192.168.0.1.%20hello/' PASS canonicalize('http://192.168.0.1../') is 'http://192.168.0.1../' PASS canonicalize('http://192.168..1/') is 'http://192.168..1/' PASS canonicalize('http://0x100.0/') is 'http://0x100.0/' PASS canonicalize('http://0x100.0.0/') is 'http://0x100.0.0/' PASS canonicalize('http://0x100.0.0.0/') is 'http://0x100.0.0.0/' PASS canonicalize('http://0.0x100.0.0/') is 'http://0.0x100.0.0/' PASS canonicalize('http://0.0.0x100.0/') is 'http://0.0.0x100.0/' PASS canonicalize('http://0.0.0.0x100/') is 'http://0.0.0.0x100/' PASS canonicalize('http://0.0.0x10000/') is 'http://0.0.0x10000/' PASS canonicalize('http://0.0x1000000/') is 'http://0.0x1000000/' PASS canonicalize('http://0x100000000/') is 'http://0x100000000/' PASS canonicalize('http://0xFF.0/') is 'http://255.0.0.0/' PASS canonicalize('http://0xFF.0.0/') is 'http://255.0.0.0/' PASS canonicalize('http://0xFF.0.0.0/') is 'http://255.0.0.0/' PASS canonicalize('http://0.0xFF.0.0/') is 'http://0.255.0.0/' PASS canonicalize('http://0.0.0xFF.0/') is 'http://0.0.255.0/' PASS canonicalize('http://0.0.0.0xFF/') is 'http://0.0.0.255/' PASS canonicalize('http://0.0.0xFFFF/') is 'http://0.0.255.255/' PASS canonicalize('http://0.0xFFFFFF/') is 'http://0.255.255.255/' PASS canonicalize('http://0xFFFFFFFF/') is 'http://255.255.255.255/' PASS canonicalize('http://276.256.0xf1a2.077777/') is 'http://276.256.0xf1a2.077777/' PASS canonicalize('http://192.168.0.257/') is 'http://192.168.0.257/' PASS canonicalize('http://192.168.0xa20001/') is 'http://192.168.0xa20001/' PASS canonicalize('http://192.015052000001/') is 'http://192.015052000001/' PASS canonicalize('http://0X12C0a80001/') is 'http://0x12c0a80001/' PASS canonicalize('http://276.1.2/') is 'http://276.1.2/' PASS canonicalize('http://192.168.0.1 hello/') is 'http://192.168.0.1%20hello/' PASS canonicalize('http://0000000000000300.0x00000000000000fF.00000000000000001/') is 'http://192.255.0.1/' PASS canonicalize('http://0000000000000300.0xffffffffFFFFFFFF.3022415481470977/') is 'http://0000000000000300.0xffffffffffffffff.3022415481470977/' PASS canonicalize('http://00000000000000000001/') is 'http://0.0.0.1/' PASS canonicalize('http://0000000000000000100000000000000001/') is 'http://0000000000000000100000000000000001/' PASS canonicalize('http://0.0.0.000000000000000000z/') is 'http://0.0.0.000000000000000000z/' PASS canonicalize('http://0.0.0.100000000000000000z/') is 'http://0.0.0.100000000000000000z/' PASS canonicalize('http://0.00.0x.0x0/') is 'http://0.0.0.0/' == Safari == FAIL canonicalize('http:///') should be http:. Was http:/. PASS canonicalize('http://./') is 'http://./' PASS canonicalize('http://192.168.0.1/') is 'http://192.168.0.1/' FAIL canonicalize('http://0300.0250.00.01/') should be http://192.168.0.1/. Was http://0300.0250.00.01/. FAIL canonicalize('http://0xC0.0Xa8.0x0.0x1/') should be http://192.168.0.1/. Was http://0xC0.0Xa8.0x0.0x1/. PASS canonicalize('http://192.168.9.com/') is 'http://192.168.9.com/' PASS canonicalize('http://19a.168.0.1/') is 'http://19a.168.0.1/' PASS canonicalize('http://0308.0250.00.01/') is 'http://0308.0250.00.01/' FAIL canonicalize('http://0xCG.0xA8.0x0.0x1/') should be http://0xcg.0xa8.0x0.0x1/. Was http://0xCG.0xA8.0x0.0x1/. FAIL canonicalize('http://192/') should be http://0.0.0.192/. Was http://192/. FAIL canonicalize('http://0xC0a80001/') should be http://192.168.0.1/. Was http://0xC0a80001/. FAIL canonicalize('http://030052000001/') should be http://192.168.0.1/. Was http://030052000001/. FAIL canonicalize('http://000030052000001/') should be http://192.168.0.1/. Was http://000030052000001/. FAIL canonicalize('http://192.168/') should be http://192.0.0.168/. Was http://192.168/. FAIL canonicalize('http://192.0x00A80001/') should be http://192.168.0.1/. Was http://192.0x00A80001/. FAIL canonicalize('http://0xc0.052000001/') should be http://192.168.0.1/. Was http://0xc0.052000001/. FAIL canonicalize('http://192.168.1/') should be http://192.168.0.1/. Was http://192.168.1/. PASS canonicalize('http://192.168.0.0.1/') is 'http://192.168.0.0.1/' FAIL canonicalize('http://192.168.0.1./') should be http://192.168.0.1/. Was http://192.168.0.1./. FAIL canonicalize('http://192.168.0.1. hello/') should be http://192.168.0.1.%20hello/. Was http://192.168.0.1. hello/. PASS canonicalize('http://192.168.0.1../') is 'http://192.168.0.1../' PASS canonicalize('http://192.168..1/') is 'http://192.168..1/' PASS canonicalize('http://0x100.0/') is 'http://0x100.0/' PASS canonicalize('http://0x100.0.0/') is 'http://0x100.0.0/' PASS canonicalize('http://0x100.0.0.0/') is 'http://0x100.0.0.0/' PASS canonicalize('http://0.0x100.0.0/') is 'http://0.0x100.0.0/' PASS canonicalize('http://0.0.0x100.0/') is 'http://0.0.0x100.0/' PASS canonicalize('http://0.0.0.0x100/') is 'http://0.0.0.0x100/' PASS canonicalize('http://0.0.0x10000/') is 'http://0.0.0x10000/' PASS canonicalize('http://0.0x1000000/') is 'http://0.0x1000000/' PASS canonicalize('http://0x100000000/') is 'http://0x100000000/' FAIL canonicalize('http://0xFF.0/') should be http://255.0.0.0/. Was http://0xFF.0/. FAIL canonicalize('http://0xFF.0.0/') should be http://255.0.0.0/. Was http://0xFF.0.0/. FAIL canonicalize('http://0xFF.0.0.0/') should be http://255.0.0.0/. Was http://0xFF.0.0.0/. FAIL canonicalize('http://0.0xFF.0.0/') should be http://0.255.0.0/. Was http://0.0xFF.0.0/. FAIL canonicalize('http://0.0.0xFF.0/') should be http://0.0.255.0/. Was http://0.0.0xFF.0/. FAIL canonicalize('http://0.0.0.0xFF/') should be http://0.0.0.255/. Was http://0.0.0.0xFF/. FAIL canonicalize('http://0.0.0xFFFF/') should be http://0.0.255.255/. Was http://0.0.0xFFFF/. FAIL canonicalize('http://0.0xFFFFFF/') should be http://0.255.255.255/. Was http://0.0xFFFFFF/. FAIL canonicalize('http://0xFFFFFFFF/') should be http://255.255.255.255/. Was http://0xFFFFFFFF/. PASS canonicalize('http://276.256.0xf1a2.077777/') is 'http://276.256.0xf1a2.077777/' PASS canonicalize('http://192.168.0.257/') is 'http://192.168.0.257/' PASS canonicalize('http://192.168.0xa20001/') is 'http://192.168.0xa20001/' PASS canonicalize('http://192.015052000001/') is 'http://192.015052000001/' FAIL canonicalize('http://0X12C0a80001/') should be http://0x12c0a80001/. Was http://0X12C0a80001/. PASS canonicalize('http://276.1.2/') is 'http://276.1.2/' FAIL canonicalize('http://192.168.0.1 hello/') should be http://192.168.0.1%20hello/. Was http://192.168.0.1 hello/. FAIL canonicalize('http://0000000000000300.0x00000000000000fF.00000000000000001/') should be http://192.255.0.1/. Was http://0000000000000300.0x00000000000000fF.00000000000000001/. FAIL canonicalize('http://0000000000000300.0xffffffffFFFFFFFF.3022415481470977/') should be http://0000000000000300.0xffffffffffffffff.3022415481470977/. Was http://0000000000000300.0xffffffffFFFFFFFF.3022415481470977/. FAIL canonicalize('http://00000000000000000001/') should be http://0.0.0.1/. Was http://00000000000000000001/. PASS canonicalize('http://0000000000000000100000000000000001/') is 'http://0000000000000000100000000000000001/' PASS canonicalize('http://0.0.0.000000000000000000z/') is 'http://0.0.0.000000000000000000z/' PASS canonicalize('http://0.0.0.100000000000000000z/') is 'http://0.0.0.100000000000000000z/' FAIL canonicalize('http://0.00.0x.0x0/') should be http://0.0.0.0/. Was http://0.00.0x.0x0/. == IE8 == FAIL canonicalize('http:///') should be http:. Was http:///. PASS canonicalize('http://./') is 'http://./' PASS canonicalize('http://192.168.0.1/') is 'http://192.168.0.1/' PASS canonicalize('http://0300.0250.00.01/') is 'http://192.168.0.1/' PASS canonicalize('http://0xC0.0Xa8.0x0.0x1/') is 'http://192.168.0.1/' PASS canonicalize('http://192.168.9.com/') is 'http://192.168.9.com/' PASS canonicalize('http://19a.168.0.1/') is 'http://19a.168.0.1/' PASS canonicalize('http://0308.0250.00.01/') is 'http://0308.0250.00.01/' PASS canonicalize('http://0xCG.0xA8.0x0.0x1/') is 'http://0xcg.0xa8.0x0.0x1/' PASS canonicalize('http://192/') is 'http://0.0.0.192/' PASS canonicalize('http://0xC0a80001/') is 'http://192.168.0.1/' PASS canonicalize('http://030052000001/') is 'http://192.168.0.1/' PASS canonicalize('http://000030052000001/') is 'http://192.168.0.1/' PASS canonicalize('http://192.168/') is 'http://192.0.0.168/' PASS canonicalize('http://192.0x00A80001/') is 'http://192.168.0.1/' PASS canonicalize('http://0xc0.052000001/') is 'http://192.168.0.1/' PASS canonicalize('http://192.168.1/') is 'http://192.168.0.1/' PASS canonicalize('http://192.168.0.0.1/') is 'http://192.168.0.0.1/' FAIL canonicalize('http://192.168.0.1./') should be http://192.168.0.1/. Was http://192.168.0.1./. PASS canonicalize('http://192.168.0.1. hello/') is 'http://192.168.0.1.%20hello/' PASS canonicalize('http://192.168.0.1../') is 'http://192.168.0.1../' PASS canonicalize('http://192.168..1/') is 'http://192.168..1/' PASS canonicalize('http://0x100.0/') is 'http://0x100.0/' PASS canonicalize('http://0x100.0.0/') is 'http://0x100.0.0/' PASS canonicalize('http://0x100.0.0.0/') is 'http://0x100.0.0.0/' PASS canonicalize('http://0.0x100.0.0/') is 'http://0.0x100.0.0/' PASS canonicalize('http://0.0.0x100.0/') is 'http://0.0.0x100.0/' PASS canonicalize('http://0.0.0.0x100/') is 'http://0.0.0.0x100/' PASS canonicalize('http://0.0.0x10000/') is 'http://0.0.0x10000/' PASS canonicalize('http://0.0x1000000/') is 'http://0.0x1000000/' PASS canonicalize('http://0x100000000/') is 'http://0x100000000/' PASS canonicalize('http://0xFF.0/') is 'http://255.0.0.0/' PASS canonicalize('http://0xFF.0.0/') is 'http://255.0.0.0/' PASS canonicalize('http://0xFF.0.0.0/') is 'http://255.0.0.0/' PASS canonicalize('http://0.0xFF.0.0/') is 'http://0.255.0.0/' PASS canonicalize('http://0.0.0xFF.0/') is 'http://0.0.255.0/' PASS canonicalize('http://0.0.0.0xFF/') is 'http://0.0.0.255/' PASS canonicalize('http://0.0.0xFFFF/') is 'http://0.0.255.255/' PASS canonicalize('http://0.0xFFFFFF/') is 'http://0.255.255.255/' PASS canonicalize('http://0xFFFFFFFF/') is 'http://255.255.255.255/' PASS canonicalize('http://276.256.0xf1a2.077777/') is 'http://276.256.0xf1a2.077777/' PASS canonicalize('http://192.168.0.257/') is 'http://192.168.0.257/' PASS canonicalize('http://192.168.0xa20001/') is 'http://192.168.0xa20001/' PASS canonicalize('http://192.015052000001/') is 'http://192.015052000001/' FAIL canonicalize('http://0X12C0a80001/') should be http://0x12c0a80001/. Was http://192.168.0.1/. PASS canonicalize('http://276.1.2/') is 'http://276.1.2/' PASS canonicalize('http://192.168.0.1 hello/') is 'http://192.168.0.1%20hello/' FAIL canonicalize('http://0000000000000300.0x00000000000000fF.00000000000000001/') should be http://192.255.0.1/. Was http://0000000000000300.0x00000000000000ff.00000000000000001/. PASS canonicalize('http://0000000000000300.0xffffffffFFFFFFFF.3022415481470977/') is 'http://0000000000000300.0xffffffffffffffff.3022415481470977/' PASS canonicalize('http://00000000000000000001/') is 'http://0.0.0.1/' PASS canonicalize('http://0000000000000000100000000000000001/') is 'http://0000000000000000100000000000000001/' PASS canonicalize('http://0.0.0.000000000000000000z/') is 'http://0.0.0.000000000000000000z/' PASS canonicalize('http://0.0.0.100000000000000000z/') is 'http://0.0.0.100000000000000000z/' FAIL canonicalize('http://0.00.0x.0x0/') should be http://0.0.0.0/. Was http://0.00.0x.0x0/. = LayoutTests/fast/url/ipv6.html = == Firefox == FAIL canonicalize('http:///') should be http:. Was http:///. PASS canonicalize('http://[/') is 'http://[/' FAIL canonicalize('http://[:/') should be http://[:/. Was http://[/. PASS canonicalize('http://]/') is 'http://]/' PASS canonicalize('http://:]/') is 'http://:]/' PASS canonicalize('http://[]/') is 'http://[]/' PASS canonicalize('http://[:]/') is 'http://[:]/' PASS canonicalize('http://2001:db8::1/') is 'http://2001:db8::1/' PASS canonicalize('http://[2001:db8::1/') is 'http://[2001:db8::1/' PASS canonicalize('http://2001:db8::1]/') is 'http://2001:db8::1]/' PASS canonicalize('http://[::]/') is 'http://[::]/' PASS canonicalize('http://[::1]/') is 'http://[::1]/' PASS canonicalize('http://[1::]/') is 'http://[1::]/' FAIL canonicalize('http://[::192.168.0.1]/') should be http://[::c0a8:1]/. Was http://[::192.168.0.1]/. FAIL canonicalize('http://[::ffff:192.168.0.1]/') should be http://[::ffff:c0a8:1]/. Was http://[::ffff:192.168.0.1]/. FAIL canonicalize('http://[000:01:02:003:004:5:6:007]/') should be http://[0:1:2:3:4:5:6:7]/. Was http://[000:01:02:003:004:5:6:007]/. PASS canonicalize('http://[A:b:c:DE:fF:0:1:aC]/') is 'http://[a:b:c:de:ff:0:1:ac]/' FAIL canonicalize('http://[1:0:0:2::3:0]/') should be http://[1::2:0:0:3:0]/. Was http://[1:0:0:2::3:0]/. PASS canonicalize('http://[1::2:0:0:3:0]/') is 'http://[1::2:0:0:3:0]/' PASS canonicalize('http://[::eeee:192.168.0.1]/') is 'http://[::eeee:192.168.0.1]/' PASS canonicalize('http://[2001::192.168.0.1]/') is 'http://[2001::192.168.0.1]/' PASS canonicalize('http://[1:2:192.168.0.1:5:6]/') is 'http://[1:2:192.168.0.1:5:6]/' FAIL canonicalize('http://[::ffff:192.1.2]/') should be http://[::ffff:c001:2]/. Was http://[::ffff:192.1.2]/. FAIL canonicalize('http://[::ffff:0xC0.0Xa8.0x0.0x1]/') should be http://[::ffff:c0a8:1]/. Was http://[::ffff:0xc0.0xa8.0x0.0x1]/. FAIL canonicalize('http://[0:0::0:0:8]/') should be http://[::8]/. Was http://[0:0::0:0:8]/. PASS canonicalize('http://[2001:db8::1]/') is 'http://[2001:db8::1]/' PASS canonicalize('http://[2001::db8::1]/') is 'http://[2001::db8::1]/' PASS canonicalize('http://[2001:db8:::1]/') is 'http://[2001:db8:::1]/' PASS canonicalize('http://[:::]/') is 'http://[:::]/' PASS canonicalize('http://[2001::.com]/') is 'http://[2001::.com]/' PASS canonicalize('http://[::192.168.0.0.1]/') is 'http://[::192.168.0.0.1]/' PASS canonicalize('http://[::ffff:192.168.0.0.1]/') is 'http://[::ffff:192.168.0.0.1]/' PASS canonicalize('http://[1:2:3:4:5:6:7:8:9]/') is 'http://[1:2:3:4:5:6:7:8:9]/' PASS canonicalize('http://[0:0:0:0:0:0:0:192.168.0.1]/') is 'http://[0:0:0:0:0:0:0:192.168.0.1]/' PASS canonicalize('http://[1:2:3:4:5:6::192.168.0.1]/') is 'http://[1:2:3:4:5:6::192.168.0.1]/' FAIL canonicalize('http://[1:2:3:4:5:6::8]/') should be http://[1:2:3:4:5:6:0:8]/. Was http://[1:2:3:4:5:6::8]/. PASS canonicalize('http://[1:2:3:4:5:6:7:8:]/') is 'http://[1:2:3:4:5:6:7:8:]/' PASS canonicalize('http://[1:2:3:4:5:6:192.168.0.1:]/') is 'http://[1:2:3:4:5:6:192.168.0.1:]/' PASS canonicalize('http://[-1:2:3:4:5:6:7:8]/') is 'http://[-1:2:3:4:5:6:7:8]/' FAIL canonicalize('http://[1::%1]/') should be http://[1::%251]/. Was http://[1::%1]/. FAIL canonicalize('http://[1::%eth0]/') should be http://[1::%25eth0]/. Was http://[1::%eth0]/. FAIL canonicalize('http://[1::%]/') should be http://[1::%25]/. Was http://[1::%]/. FAIL canonicalize('http://[%]/') should be http://[%25]/. Was http://[%]/. FAIL canonicalize('http://[::%:]/') should be http://[::%25:]/. Was http://[::%:]/. PASS canonicalize('http://[:0:0::0:0:8]/') is 'http://[:0:0::0:0:8]/' PASS canonicalize('http://[0:0::0:0:8:]/') is 'http://[0:0::0:0:8:]/' PASS canonicalize('http://[:0:0::0:0:8:]/') is 'http://[:0:0::0:0:8:]/' PASS canonicalize('http://[::192.168..1]/') is 'http://[::192.168..1]/' FAIL canonicalize('http://[::1 hello]/') should be http://[::1%20hello]/. Was http://[::1 hello]/. == Chrome == PASS canonicalize('http:///') is 'http:' PASS canonicalize('http://[/') is 'http://[/' PASS canonicalize('http://[:/') is 'http://[:/' PASS canonicalize('http://]/') is 'http://]/' PASS canonicalize('http://:]/') is 'http://:]/' PASS canonicalize('http://[]/') is 'http://[]/' PASS canonicalize('http://[:]/') is 'http://[:]/' PASS canonicalize('http://2001:db8::1/') is 'http://2001:db8::1/' PASS canonicalize('http://[2001:db8::1/') is 'http://[2001:db8::1/' PASS canonicalize('http://2001:db8::1]/') is 'http://2001:db8::1]/' PASS canonicalize('http://[::]/') is 'http://[::]/' PASS canonicalize('http://[::1]/') is 'http://[::1]/' PASS canonicalize('http://[1::]/') is 'http://[1::]/' PASS canonicalize('http://[::192.168.0.1]/') is 'http://[::c0a8:1]/' PASS canonicalize('http://[::ffff:192.168.0.1]/') is 'http://[::ffff:c0a8:1]/' PASS canonicalize('http://[000:01:02:003:004:5:6:007]/') is 'http://[0:1:2:3:4:5:6:7]/' PASS canonicalize('http://[A:b:c:DE:fF:0:1:aC]/') is 'http://[a:b:c:de:ff:0:1:ac]/' PASS canonicalize('http://[1:0:0:2::3:0]/') is 'http://[1::2:0:0:3:0]/' PASS canonicalize('http://[1::2:0:0:3:0]/') is 'http://[1::2:0:0:3:0]/' PASS canonicalize('http://[::eeee:192.168.0.1]/') is 'http://[::eeee:192.168.0.1]/' PASS canonicalize('http://[2001::192.168.0.1]/') is 'http://[2001::192.168.0.1]/' PASS canonicalize('http://[1:2:192.168.0.1:5:6]/') is 'http://[1:2:192.168.0.1:5:6]/' PASS canonicalize('http://[::ffff:192.1.2]/') is 'http://[::ffff:c001:2]/' PASS canonicalize('http://[::ffff:0xC0.0Xa8.0x0.0x1]/') is 'http://[::ffff:c0a8:1]/' PASS canonicalize('http://[0:0::0:0:8]/') is 'http://[::8]/' PASS canonicalize('http://[2001:db8::1]/') is 'http://[2001:db8::1]/' PASS canonicalize('http://[2001::db8::1]/') is 'http://[2001::db8::1]/' PASS canonicalize('http://[2001:db8:::1]/') is 'http://[2001:db8:::1]/' PASS canonicalize('http://[:::]/') is 'http://[:::]/' PASS canonicalize('http://[2001::.com]/') is 'http://[2001::.com]/' PASS canonicalize('http://[::192.168.0.0.1]/') is 'http://[::192.168.0.0.1]/' PASS canonicalize('http://[::ffff:192.168.0.0.1]/') is 'http://[::ffff:192.168.0.0.1]/' PASS canonicalize('http://[1:2:3:4:5:6:7:8:9]/') is 'http://[1:2:3:4:5:6:7:8:9]/' PASS canonicalize('http://[0:0:0:0:0:0:0:192.168.0.1]/') is 'http://[0:0:0:0:0:0:0:192.168.0.1]/' PASS canonicalize('http://[1:2:3:4:5:6::192.168.0.1]/') is 'http://[1:2:3:4:5:6::192.168.0.1]/' PASS canonicalize('http://[1:2:3:4:5:6::8]/') is 'http://[1:2:3:4:5:6:0:8]/' PASS canonicalize('http://[1:2:3:4:5:6:7:8:]/') is 'http://[1:2:3:4:5:6:7:8:]/' PASS canonicalize('http://[1:2:3:4:5:6:192.168.0.1:]/') is 'http://[1:2:3:4:5:6:192.168.0.1:]/' PASS canonicalize('http://[-1:2:3:4:5:6:7:8]/') is 'http://[-1:2:3:4:5:6:7:8]/' PASS canonicalize('http://[1::%1]/') is 'http://[1::%251]/' PASS canonicalize('http://[1::%eth0]/') is 'http://[1::%25eth0]/' PASS canonicalize('http://[1::%]/') is 'http://[1::%25]/' PASS canonicalize('http://[%]/') is 'http://[%25]/' PASS canonicalize('http://[::%:]/') is 'http://[::%25:]/' PASS canonicalize('http://[:0:0::0:0:8]/') is 'http://[:0:0::0:0:8]/' PASS canonicalize('http://[0:0::0:0:8:]/') is 'http://[0:0::0:0:8:]/' PASS canonicalize('http://[:0:0::0:0:8:]/') is 'http://[:0:0::0:0:8:]/' PASS canonicalize('http://[::192.168..1]/') is 'http://[::192.168..1]/' PASS canonicalize('http://[::1 hello]/') is 'http://[::1%20hello]/' == Safari == FAIL canonicalize('http:///') should be http:. Was http:/. PASS canonicalize('http://[/') is 'http://[/' PASS canonicalize('http://[:/') is 'http://[:/' PASS canonicalize('http://]/') is 'http://]/' PASS canonicalize('http://:]/') is 'http://:]/' PASS canonicalize('http://[]/') is 'http://[]/' PASS canonicalize('http://[:]/') is 'http://[:]/' PASS canonicalize('http://2001:db8::1/') is 'http://2001:db8::1/' PASS canonicalize('http://[2001:db8::1/') is 'http://[2001:db8::1/' PASS canonicalize('http://2001:db8::1]/') is 'http://2001:db8::1]/' PASS canonicalize('http://[::]/') is 'http://[::]/' PASS canonicalize('http://[::1]/') is 'http://[::1]/' PASS canonicalize('http://[1::]/') is 'http://[1::]/' FAIL canonicalize('http://[::192.168.0.1]/') should be http://[::c0a8:1]/. Was http://[::192.168.0.1]/. FAIL canonicalize('http://[::ffff:192.168.0.1]/') should be http://[::ffff:c0a8:1]/. Was http://[::ffff:192.168.0.1]/. FAIL canonicalize('http://[000:01:02:003:004:5:6:007]/') should be http://[0:1:2:3:4:5:6:7]/. Was http://[000:01:02:003:004:5:6:007]/. FAIL canonicalize('http://[A:b:c:DE:fF:0:1:aC]/') should be http://[a:b:c:de:ff:0:1:ac]/. Was http://[A:b:c:DE:fF:0:1:aC]/. FAIL canonicalize('http://[1:0:0:2::3:0]/') should be http://[1::2:0:0:3:0]/. Was http://[1:0:0:2::3:0]/. PASS canonicalize('http://[1::2:0:0:3:0]/') is 'http://[1::2:0:0:3:0]/' PASS canonicalize('http://[::eeee:192.168.0.1]/') is 'http://[::eeee:192.168.0.1]/' PASS canonicalize('http://[2001::192.168.0.1]/') is 'http://[2001::192.168.0.1]/' PASS canonicalize('http://[1:2:192.168.0.1:5:6]/') is 'http://[1:2:192.168.0.1:5:6]/' FAIL canonicalize('http://[::ffff:192.1.2]/') should be http://[::ffff:c001:2]/. Was http://[::ffff:192.1.2]/. FAIL canonicalize('http://[::ffff:0xC0.0Xa8.0x0.0x1]/') should be http://[::ffff:c0a8:1]/. Was http://[::ffff:0xC0.0Xa8.0x0.0x1]/. FAIL canonicalize('http://[0:0::0:0:8]/') should be http://[::8]/. Was http://[0:0::0:0:8]/. PASS canonicalize('http://[2001:db8::1]/') is 'http://[2001:db8::1]/' PASS canonicalize('http://[2001::db8::1]/') is 'http://[2001::db8::1]/' PASS canonicalize('http://[2001:db8:::1]/') is 'http://[2001:db8:::1]/' PASS canonicalize('http://[:::]/') is 'http://[:::]/' PASS canonicalize('http://[2001::.com]/') is 'http://[2001::.com]/' PASS canonicalize('http://[::192.168.0.0.1]/') is 'http://[::192.168.0.0.1]/' PASS canonicalize('http://[::ffff:192.168.0.0.1]/') is 'http://[::ffff:192.168.0.0.1]/' PASS canonicalize('http://[1:2:3:4:5:6:7:8:9]/') is 'http://[1:2:3:4:5:6:7:8:9]/' PASS canonicalize('http://[0:0:0:0:0:0:0:192.168.0.1]/') is 'http://[0:0:0:0:0:0:0:192.168.0.1]/' PASS canonicalize('http://[1:2:3:4:5:6::192.168.0.1]/') is 'http://[1:2:3:4:5:6::192.168.0.1]/' FAIL canonicalize('http://[1:2:3:4:5:6::8]/') should be http://[1:2:3:4:5:6:0:8]/. Was http://[1:2:3:4:5:6::8]/. PASS canonicalize('http://[1:2:3:4:5:6:7:8:]/') is 'http://[1:2:3:4:5:6:7:8:]/' PASS canonicalize('http://[1:2:3:4:5:6:192.168.0.1:]/') is 'http://[1:2:3:4:5:6:192.168.0.1:]/' PASS canonicalize('http://[-1:2:3:4:5:6:7:8]/') is 'http://[-1:2:3:4:5:6:7:8]/' FAIL canonicalize('http://[1::%1]/') should be http://[1::%251]/. Was http://[1::%1]/. FAIL canonicalize('http://[1::%eth0]/') should be http://[1::%25eth0]/. Was http://[1::%eth0]/. FAIL canonicalize('http://[1::%]/') should be http://[1::%25]/. Was http://[1::%]/. FAIL canonicalize('http://[%]/') should be http://[%25]/. Was http://[%]/. FAIL canonicalize('http://[::%:]/') should be http://[::%25:]/. Was http://[::%:]/. PASS canonicalize('http://[:0:0::0:0:8]/') is 'http://[:0:0::0:0:8]/' PASS canonicalize('http://[0:0::0:0:8:]/') is 'http://[0:0::0:0:8:]/' PASS canonicalize('http://[:0:0::0:0:8:]/') is 'http://[:0:0::0:0:8:]/' PASS canonicalize('http://[::192.168..1]/') is 'http://[::192.168..1]/' FAIL canonicalize('http://[::1 hello]/') should be http://[::1%20hello]/. Was http://[::1 hello]/. == IE8 == (Unable to run test for some reason.) = LayoutTests/fast/url/mailto.html = == Firefox == PASS canonicalize('mailto:addr1') is 'mailto:addr1' PASS canonicalize('mailto:addr1@foo.com') is 'mailto:addr1@foo.com' FAIL canonicalize('mailto:addr1 ') should be mailto:addr1. Was mailto:addr1%20. PASS canonicalize('mailto:addr1?to=jon') is 'mailto:addr1?to=jon' PASS canonicalize('mailto:addr1,addr2') is 'mailto:addr1,addr2' FAIL canonicalize('mailto:addr1, addr2') should be mailto:addr1, addr2. Was mailto:addr1,%20addr2. PASS canonicalize('mailto:addr1%2caddr2') is 'mailto:addr1%2caddr2' PASS canonicalize('mailto:') is 'mailto:%F0%90%8C%80' PASS canonicalize('mailto:addr1?') is 'mailto:addr1?' PASS canonicalize('mailto:í ') == 'mailto:%EF%BF%BD' is false == Chrome == PASS canonicalize('mailto:addr1') is 'mailto:addr1' PASS canonicalize('mailto:addr1@foo.com') is 'mailto:addr1@foo.com' PASS canonicalize('mailto:addr1 ') is 'mailto:addr1' PASS canonicalize('mailto:addr1?to=jon') is 'mailto:addr1?to=jon' PASS canonicalize('mailto:addr1,addr2') is 'mailto:addr1,addr2' PASS canonicalize('mailto:addr1, addr2') is 'mailto:addr1, addr2' PASS canonicalize('mailto:addr1%2caddr2') is 'mailto:addr1%2caddr2' PASS canonicalize('mailto:') is 'mailto:%F0%90%8C%80' PASS canonicalize('mailto:addr1?') is 'mailto:addr1?' PASS canonicalize('mailto:í ') == 'mailto:%EF%BF%BD' is false == Safari == PASS canonicalize('mailto:addr1') is 'mailto:addr1' PASS canonicalize('mailto:addr1@foo.com') is 'mailto:addr1@foo.com' FAIL canonicalize('mailto:addr1 ') should be mailto:addr1. Was mailto:addr1%20. PASS canonicalize('mailto:addr1?to=jon') is 'mailto:addr1?to=jon' PASS canonicalize('mailto:addr1,addr2') is 'mailto:addr1,addr2' FAIL canonicalize('mailto:addr1, addr2') should be mailto:addr1, addr2. Was mailto:addr1,%20addr2. PASS canonicalize('mailto:addr1%2caddr2') is 'mailto:addr1%2caddr2' PASS canonicalize('mailto:') is 'mailto:%F0%90%8C%80' PASS canonicalize('mailto:addr1?') is 'mailto:addr1?' PASS canonicalize('mailto:í ') == 'mailto:%EF%BF%BD' is false == IE8 == PASS canonicalize('mailto:addr1') is 'mailto:addr1' PASS canonicalize('mailto:addr1@foo.com') is 'mailto:addr1@foo.com' PASS canonicalize('mailto:addr1 ') is 'mailto:addr1' PASS canonicalize('mailto:addr1?to=jon') is 'mailto:addr1?to=jon' PASS canonicalize('mailto:addr1,addr2') is 'mailto:addr1,addr2' FAIL canonicalize('mailto:addr1, addr2') should be mailto:addr1, addr2. Was mailto:addr1,%20addr2. PASS canonicalize('mailto:addr1%2caddr2') is 'mailto:addr1%2caddr2' FAIL canonicalize('mailto:') should be mailto:%F0%90%8C%80. Was mailto:. PASS canonicalize('mailto:addr1?') is 'mailto:addr1?'Received on Monday, 26 April 2010 05:48:31 GMT
This archive was generated by hypermail 2.2.0+W3C-0.50 : Monday, 30 April 2012 19:51:56 GMT