Re: [url-tests] URL: test setters with javascript URLs (#4910)

# Firefox (nightly channel) #
Testing web-platform-tests at revision 388f156591dc6d66ff807bec30ede016dc542c7f
Using browser at version BuildID 20170123125947; SourceStamp 36486fdc3813ef7943ae5b07b4128866d1938a6c
Starting 10 test iterations
All results were stable
## All results ##
<details>
<summary>1 test ran</summary>
<details>
<summary><a href="http://w3c-test.org/submissions/4910/url/url-setters.html">/url/url-setters.html</a></summary>


|                                                                                    Subtest                                                                                     | Results |
|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------|
|                                                                                                                                                                                | OK      |
| `URL: Setting <javascript:alert(1)>.hash = 'castle'`                                                                                                                           | PASS    |
| `<area>: Setting <http://me@example.net>.password = 'secret'`                                                                                                                  | PASS    |
| `<a>: Setting <sc://x/>.hostname = '\n'`                                                                                                                                       | FAIL    |
| `URL: Setting <https://example.net?lang=en-US#nav>.search = 'lang=fr'`                                                                                                         | PASS    |
| `<a>: Setting <mailto:me@example.net>.protocol = 'http' Cannot-be-a-base URL doesn’t have a host, but URL in a special scheme must.`                                           | FAIL    |
| `<a>: Setting <http://example.net:8080>.port = '' Port number is removed if empty is the new value`                                                                            | PASS    |
| `URL: Setting <sc://x/>.host = '' Non-special scheme`                                                                                                                         | FAIL    |
| `<area>: Setting <unix:/run/foo.socket>.password = 'secret' No host means no password`                                                                                         | PASS    |
| `URL: Setting <http://example.net/>.hostname = '[::1.2.3.4x]'`                                                                                                                 | PASS    |
| `<a>: Setting <a://example.net>.protocol = 'B' Upper-case ASCII is lower-cased`                                                                                                | PASS    |
| `URL: Setting <http://example.net>.port = '8080'`                                                                                                                              | PASS    |
| `<area>: Setting <nonsense:///test>.protocol = 'https'`                                                                                                                        | FAIL    |
| `<area>: Setting <http://example.net>.port = '8080'`                                                                                                                           | PASS    |
| `<area>: Setting <http://:secret@example.net>.username = 'me'`                                                                                                                 | FAIL    |
| `URL: Setting <https://example.net>.search = ''`                                                                                                                               | PASS    |
| `<area>: Setting <file://hi/x>.hostname = ''`                                                                                                                                  | PASS    |
| `<a>: Setting <sc://x/>.hostname = '\r'`                                                                                                                                       | FAIL    |
| `URL: Setting <http://example.net/path>.port = '8080\stuff' Stuff after a \ delimiter is ignored for special schemes`                                                          | PASS    |
| `<area>: Setting <ftp://example.net>.protocol = 'test'`                                                                                                                        | FAIL    |
| `<a>: Setting <https://example.net#nav>.pathname = '../home'`                                                                                                                  | PASS    |
| `URL: Setting <file://y/>.host = 'x:123'`                                                                                                                                      | FAIL    |
| `URL: Setting <https://example.net#nav>.search = 'lang=fr'`                                                                                                                    | PASS    |
| `<area>: Setting <mailto:me@example.net>.pathname = '/foo' Cannot-be-a-base don’t have a path`                                                                                 | FAIL    |
| `<area>: Setting <file:///home/me/index.html>.password = 'secret' No host means no password`                                                                                   | PASS    |
| `<a>: Setting <https://example.net#nav>.hash = 'main'`                                                                                                                         | PASS    |
| `URL: Setting <sc://x/>.host = '?'`                                                                                                                                            | FAIL    |
| `<area>: Setting <sc://x/>.hostname = '@'`                                                                                                                                     | FAIL    |
| `<a>: Setting <http://example.net>.username = '%c3%89té' Bytes already percent-encoded are left as-is.`                                                                        | PASS    |
| `URL: Setting <file:///home/you/index.html>.username = 'me' No host means no username`                                                                                         | PASS    |
| `URL: Setting <unix:/run/foo.socket?timeout=10>.pathname = '/var/log/../run/bar.socket'`                                                                                       | FAIL    |
| `URL: Setting <http://example.net/path>.port = '8080?stuff' Stuff after a ? delimiter is ignored`                                                                              | PASS    |
| `URL: Setting <http://example.net/>.hostname = '[::1.2.]'`                                                                                                                     | PASS    |
| `URL: Setting <view-source+http://example.net/path>.host = 'example.com:8080stuff2' Anything other than ASCII digit stops the port parser in a setter but is not an error`     | FAIL    |
| `URL: Setting <http://example.net/>.host = '[::1.]'`                                                                                                                           | PASS    |
| `URL: Setting <sc://x/>.host = ' '`                                                                                                                                            | FAIL    |
| `<area>: Setting <sc://x/>.port = '12'`                                                                                                                                        | FAIL    |
| `<area>: Setting <sc://x/>.hostname = '\r'`                                                                                                                                    | FAIL    |
| `<area>: Setting <http://example.net/>.hostname = '[google.com]' Broken IPv6`                                                                                                  | PASS    |
| `<a>: Setting <sc://x/>.hostname = '?'`                                                                                                                                        | FAIL    |
| `<area>: Setting <http://example.net/path>.port = '8080/stuff' Stuff after a / delimiter is ignored`                                                                           | PASS    |
| `<area>: Setting <sc://x/>.hostname = '#'`                                                                                                                                     | FAIL    |
| `<a>: Setting <http://example.net>.host = '' The empty host is not valid for special schemes`                                                                                  | PASS    |
| `<a>: Setting <http://example.net/>.host = '[::1.]'`                                                                                                                           | PASS    |
| `URL: Setting <http://example.net/path>.host = 'example.com:8080\stuff' Stuff after a \ delimiter is ignored for special schemes`                                              | PASS    |
| `<area>: Setting <file://y/>.hostname = 'x:123'`                                                                                                                               | FAIL    |
| `<area>: Setting <http://example.net/>.hostname = '[::1.2.3.4x]'`                                                                                                              | PASS    |
| `<area>: Setting <ssh://me@example.net>.protocol = 'gopher'`                                                                                                                   | FAIL    |
| `<a>: Setting <sc://x/>.hostname = '@'`                                                                                                                                        | FAIL    |
| `URL: Setting <http://example.net:8080>.port = '80' Default port number is removed`                                                                                            | PASS    |
| `URL: Setting <http://example.net/>.host = '[::1.2.]'`                                                                                                                         | PASS    |
| `<area>: Setting <unix:/run/foo.socket?timeout=10>.pathname = '/var/log/../run/bar.socket'`                                                                                    | FAIL    |
| `<area>: Setting <http://example.net:8080>.hostname = '0x7F000001' IPv4 address syntax is normalized`                                                                          | PASS    |
| `<area>: Setting <mailto:you@example.net>.username = 'me' Cannot-be-a-base means no username`                                                                                  | PASS    |
| `<a>: Setting <sc://x/>.hostname = '' Non-special scheme`                                                                                                                     | FAIL    |
| `<area>: Setting <https://example.net?lang=en-US#nav>.search = '??lang=fr'`                                                                                                    | PASS    |
| `<a>: Setting <sc:///>.username = 'x'`                                                                                                                                         | PASS    |
| `<a>: Setting <mailto:me@example.net>.host = 'example.com' Cannot-be-a-base means no host`                                                                                     | PASS    |
| `<a>: Setting <http://example.net>.protocol = 'b' Can’t switch from special scheme to non-special`                                                                             | FAIL    |
| `<a>: Setting <http://example.net/>.host = '[::1.2.]'`                                                                                                                         | PASS    |
| `<a>: Setting <mailto:me@example.net>.hostname = 'example.com' Cannot-be-a-base means no host`                                                                                 | PASS    |
| `URL: Setting <sc://x/>.host = '@'`                                                                                                                                            | FAIL    |
| `<a>: Setting <sc:///>.port = '12'`                                                                                                                                            | PASS    |
| `<a>: Setting <a:/>.search = '\t\n\r !"#$%&'()*+,-./09:;<=>?@AZ[\]^_\`az{|}~€Éé' UTF-8 percent encoding with the query encode set. Tabs and newlines are removed.`        | FAIL    |
| `<area>: Setting <a://example.net>.protocol = '+b' No leading punctuation`                                                                                                     | PASS    |
| `<area>: Setting <sc://test@test/>.hostname = ''`                                                                                                                              | FAIL    |
| `<area>: Setting <http://example.net>.protocol = 'b' Can’t switch from special scheme to non-special`                                                                          | FAIL    |
| `URL: Setting <http://example.net>.hostname = '[::0:01]' IPv6 address syntax is normalized`                                                                                    | FAIL    |
| `<area>: Setting <http://example.net:8080>.port = '80' Default port number is removed`                                                                                         | PASS    |
| `URL: Setting <https://example.net?lang=en-US>.search = ''`                                                                                                                    | PASS    |
| `<area>: Setting <data:text/plain,Stuff>.host = 'example.net' Cannot-be-a-base means no password`                                                                              | PASS    |
| `<a>: Setting <https://example.net?lang=en-US#nav>.search = '??lang=fr'`                                                                                                       | PASS    |
| `<a>: Setting <javascript://x/>.password = 'bowser'`                                                                                                                           | FAIL    |
| `<area>: Setting <http://example.net:8080>.port = '' Port number is removed if empty is the new value`                                                                         | PASS    |
| `URL: Setting <file:///home/me/index.html>.password = 'secret' No host means no password`                                                                                      | PASS    |
| `<a>: Setting <https://example.net?lang=en-US#nav>.hash = ''`                                                                                                                  | PASS    |
| `<a>: Setting <http://example.net:8080>.host = 'example.com' Port number is unchanged if not specified in the new value`                                                       | PASS    |
| `<a>: Setting <http://example.net>.password = '%c3%89té' Bytes already percent-encoded are left as-is.`                                                                        | FAIL    |
| `<a>: Setting <https://example.net>.host = 'example.com:80' Default port number is only removed for the relevant scheme`                                                       | PASS    |
| `<a>: Setting <http://example.net/path>.host = 'example.com:8080/stuff' Stuff after a / delimiter is ignored`                                                                  | PASS    |
| `<a>: Setting <a://example.net>.protocol = 'b'`                                                                                                                                | PASS    |
| `URL: Setting <http://me@example.net>.username = ''`                                                                                                                           | PASS    |
| `<a>: Setting <http://example.net/path>.hostname = 'example.com:8080' Stuff after a : delimiter is ignored`                                                                    | FAIL    |
| `URL: Setting <file://localhost/>.port = '12'`                                                                                                                                 | PASS    |
| `<a>: Setting <file:///home/you/index.html>.username = 'me' No host means no username`                                                                                         | PASS    |
| `<a>: Setting <sc://x/>.hostname = '\t'`                                                                                                                                       | FAIL    |
| `<a>: Setting <http://example.net/path>.host = 'example.com:8080?stuff' Stuff after a ? delimiter is ignored`                                                                  | PASS    |
| `<a>: Setting <a://example.net>.protocol = 'bC0+-.'`                                                                                                                           | PASS    |
| `<a>: Setting <http://example.net/path>.host = 'example.com:65536' Port numbers are 16 bit integers, overflowing is an error. Hostname is still set, though.`                  | PASS    |
| `<a>: Setting <a:/>.pathname = '\t\n\r !"#$%&'()*+,-./09:;<=>?@AZ[\]^_\`az{|}~€Éé' UTF-8 percent encoding with the default encode set. Tabs and newlines are removed.`    | FAIL    |
| `URL: Setting <http://example.net/path>.hostname = 'example.com#stuff' Stuff after a # delimiter is ignored`                                                                   | PASS    |
| `<area>: Setting <file://test/>.port = '12'`                                                                                                                                   | FAIL    |
| `<area>: Setting <sc://x/>.host = '/'`                                                                                                                                         | FAIL    |
| `<area>: Setting <http://example.net/path>.host = 'example.com#stuff' Stuff after a # delimiter is ignored`                                                                    | PASS    |
| `<a>: Setting <http://example.net/>.host = '[google.com]' Broken IPv6`                                                                                                         | PASS    |
| `<area>: Setting <mailto:me@example.net>.password = 'secret' Cannot-be-a-base means no password`                                                                               | PASS    |
| `<a>: Setting <http://example.net/path>.host = 'example.com:65535' Port numbers are 16 bit integers`                                                                           | PASS    |
| `<area>: Setting <file://hi/x>.host = ''`                                                                                                                                      | PASS    |
| `URL: Setting <a:/>.pathname = '\t\n\r !"#$%&'()*+,-./09:;<=>?@AZ[\]^_\`az{|}~€Éé' UTF-8 percent encoding with the default encode set. Tabs and newlines are removed.`    | FAIL    |
| `<a>: Setting <http://me:secret@example.net>.username = ''`                                                                                                                    | FAIL    |
| `URL: Setting <http://example.net>.hash = '%c3%89té' Bytes already percent-encoded are left as-is`                                                                             | PASS    |
| `URL: Setting <http://example.net>.host = '[::0:01]:2' IPv6 address syntax is normalized`                                                                                      | FAIL    |
| `<a>: Setting <https://example.net>.hash = 'main'`                                                                                                                             | PASS    |
| `URL: Setting <http://example.net:8080/path>.hostname = 'example.com:' Stuff after a : delimiter is ignored`                                                                   | FAIL    |
| `<a>: Setting <http://example.net/>.hostname = '[google.com]' Broken IPv6`                                                                                                     | PASS    |
| `<a>: Setting <http://example.net/home?lang=fr#nav>.pathname = '\a\%2E\b\%2e.\c' \ is a segment delimiter for 'special' URLs`                                                  | FAIL    |
| `<a>: Setting <sc://test:12/>.host = ''`                                                                                                                                       | FAIL    |
| `<area>: Setting <https://example.net?lang=en-US#nav>.search = '?lang=fr'`                                                                                                     | PASS    |
| `<a>: Setting <data:text/plain,Stuff>.host = 'example.net' Cannot-be-a-base means no password`                                                                                 | PASS    |
| `URL: Setting <sc://example.net>.pathname = '?' ? needs to be encoded, non-special scheme`                                                                                     | FAIL    |
| `<area>: Setting <file://test/>.username = 'test'`                                                                                                                             | FAIL    |
| `<area>: Setting <view-source+http://example.net/path>.port = '8080stuff2' Anything other than ASCII digit stops the port parser in a setter but is not an error`              | FAIL    |
| `URL: Setting <view-source+http://example.net/home?lang=fr#nav>.pathname = '\a\%2E\b\%2e.\c' \ is *not* a segment delimiter for non-'special' URLs`                            | FAIL    |
| `<area>: Setting <http://example.net/path>.host = 'example.com:8080\stuff' Stuff after a \ delimiter is ignored for special schemes`                                           | PASS    |
| `URL: Setting <http://example.net>.pathname = '?' ? needs to be encoded`                                                                                                       | PASS    |
| `<area>: Setting <file:///home/you/index.html>.username = 'me' No host means no username`                                                                                      | PASS    |
| `URL: Setting <mailto:me@example.net>.password = 'secret' Cannot-be-a-base means no password`                                                                                  | PASS    |
| `URL: Setting <http://example.net/path>.host = 'example.com:8080stuff2' Anything other than ASCII digit stops the port parser in a setter but is not an error`                 | PASS    |
| `URL: Setting <sc://x/>.host = '\t'`                                                                                                                                           | FAIL    |
| `<area>: Setting <http://example.net/>.host = '[::1.]'`                                                                                                                        | PASS    |
| `<area>: Setting <http://example.net/home?lang=fr#nav>.pathname = '\a\%2E\b\%2e.\c' \ is a segment delimiter for 'special' URLs`                                               | FAIL    |
| `<area>: Setting <javascript:alert(1)>.hash = 'castle'`                                                                                                                        | PASS    |
| `<a>: Setting <sc://x/>.host = '/'`                                                                                                                                            | FAIL    |
| `<area>: Setting <https://example.net>.port = '80' Default port number is only removed for the relevant scheme`                                                                | PASS    |
| `<area>: Setting <http://example.net/path>.host = 'example.com\stuff' Stuff after a \ delimiter is ignored for special schemes`                                                | PASS    |
| `URL: Setting <a://example.net>.protocol = 'B' Upper-case ASCII is lower-cased`                                                                                                | PASS    |
| `URL: Setting <https://example.net>.host = 'example.com:443' Default port number is removed`                                                                                   | PASS    |
| `URL: Setting <http://example.net/path>.host = 'example.com:65536' Port numbers are 16 bit integers, overflowing is an error. Hostname is still set, though.`                  | PASS    |
| `<area>: Setting <sc://x/>.host = '' Non-special scheme`                                                                                                                      | FAIL    |
| `<area>: Setting <http://example.net/path>.host = 'example.com:8080#stuff' Stuff after a # delimiter is ignored`                                                               | PASS    |
| `<a>: Setting <http://example.net/>.host = '[::1.2.3.4x]'`                                                                                                                     | PASS    |
| `<a>: Setting <javascript://x/>.port = '12'`                                                                                                                                   | FAIL    |
| `URL: Setting <mailto:me@example.net>.hostname = 'example.com' Cannot-be-a-base means no host`                                                                                 | PASS    |
| `<a>: Setting <https://example.net?lang=en-US#nav>.search = '?lang=fr'`                                                                                                        | PASS    |
| `<a>: Setting <https://example.net?lang=en-US#nav>.search = '?'`                                                                                                               | PASS    |
| `URL: Setting <http://example.net:8080>.host = 'example.com' Port number is unchanged if not specified in the new value`                                                       | PASS    |
| `<area>: Setting <file://y/>.hostname = 'loc%41lhost'`                                                                                                                         | PASS    |
| `URL: Setting <a://example.net>.protocol = 'b'`                                                                                                                                | PASS    |
| `<a>: Setting <a://example.net>.protocol = '' The empty string is not a valid scheme. Setter leaves the URL unchanged.`                                                        | PASS    |
| `<a>: Setting <http://example.net/path>.host = 'example.com:8080stuff2' Anything other than ASCII digit stops the port parser in a setter but is not an error`                 | PASS    |
| `<area>: Setting <javascript:alert(1)>.username = 'wario'`                                                                                                                     | PASS    |
| `URL: Setting <http://example.net/path>.host = 'example.com:8080?stuff' Stuff after a ? delimiter is ignored`                                                                  | PASS    |
| `<a>: Setting <view-source+http://example.net/path>.host = 'example.com:8080stuff2' Anything other than ASCII digit stops the port parser in a setter but is not an error`     | FAIL    |
| `<a>: Setting <http://example.net/>.hostname = '[::1.]'`                                                                                                                       | PASS    |
| `URL: Setting <https://example.net#nav>.pathname = 'home'`                                                                                                                     | PASS    |
| `URL: Setting <http://example.net/>.hostname = '[::1.]'`                                                                                                                       | PASS    |
| `<area>: Setting <a://example.net>.protocol = 'b,c' Only some punctuation is acceptable`                                                                                       | PASS    |
| `<area>: Setting <http://example.net>.hash = '%c3%89té' Bytes already percent-encoded are left as-is`                                                                          | PASS    |
| `<a>: Setting <view-source+http://example.net/path>.hostname = 'example.com\stuff' \ is not a delimiter for non-special schemes, but still forbidden in hosts`                 | FAIL    |
| `<area>: Setting <https://example.net#nav>.pathname = 'home'`                                                                                                                  | PASS    |
| `<area>: Setting <http://example.net>.host = '0x7F000001:8080' IPv4 address syntax is normalized`                                                                              | PASS    |
| `<area>: Setting <http://example.net/path>.host = 'example.com:8080?stuff' Stuff after a ? delimiter is ignored`                                                               | PASS    |
| `<area>: Setting <http://example.net/path>.hostname = 'example.com/stuff' Stuff after a / delimiter is ignored`                                                                | PASS    |
| `<area>: Setting <javascript://x/>.username = 'wario'`                                                                                                                         | FAIL    |
| `<area>: Setting <a://example.net>.protocol = 'bé' Non-ASCII is rejected`                                                                                                      | PASS    |
| `URL: Setting <unix:/run/foo.socket>.password = 'secret' No host means no password`                                                                                            | PASS    |
| `URL: Setting <http://example.net>.username = '%c3%89té' Bytes already percent-encoded are left as-is.`                                                                        | PASS    |
| `<area>: Setting <http://example.net>.password = 'secret'`                                                                                                                     | FAIL    |
| `URL: Setting <http://example.net/path>.hostname = 'example.com:8080' Stuff after a : delimiter is ignored`                                                                    | FAIL    |
| `URL: Setting <sc://x/>.hostname = '/'`                                                                                                                                        | FAIL    |
| `<a>: Setting <https://example.net?lang=en-US#nav>.search = ''`                                                                                                                | PASS    |
| `URL: Setting <https://example.net?lang=en-US#nav>.hash = '#'`                                                                                                                 | PASS    |
| `<a>: Setting <http://example.net>.pathname = '%2e%2E%c3%89té' Bytes already percent-encoded are left as-is, including %2E outside dotted segments.`                           | PASS    |
| `<a>: Setting <javascript:alert(1)>.protocol = 'defuse'`                                                                                                                       | PASS    |
| `<a>: Setting <unix:/run/foo.socket>.username = 'me' No host means no username`                                                                                                | PASS    |
| `<area>: Setting <a:/foo>.host = 'example.net' Path-only URLs can gain a host`                                                                                                 | FAIL    |
| `URL: Setting <http://example.net/path>.host = 'example.com\stuff' Stuff after a \ delimiter is ignored for special schemes`                                                   | PASS    |
| `URL: Setting <https://example.net>.port = '80' Default port number is only removed for the relevant scheme`                                                                   | PASS    |
| `<area>: Setting <http://example.net>.host = 'example.com:8080'`                                                                                                               | PASS    |
| `<area>: Setting <file://test/>.password = 'test'`                                                                                                                             | FAIL    |
| `<a>: Setting <nonsense:///test>.protocol = 'https'`                                                                                                                           | FAIL    |
| `URL: Setting <sc://x/>.host = '\n'`                                                                                                                                           | FAIL    |
| `<area>: Setting <https://example.net?lang=en-US#nav>.search = ''`                                                                                                             | PASS    |
| `<a>: Setting <https://example.net?lang=en-US#nav>.hash = '#'`                                                                                                                 | PASS    |
| `URL: Setting <a://example.net>.protocol = '+b' No leading punctuation`                                                                                                        | PASS    |
| `<area>: Setting <http://example.net/path>.port = '8080+2' Anything other than ASCII digit stops the port parser in a setter but is not an error`                              | PASS    |
| `<area>: Setting <http://example.net>.password = '%c3%89té' Bytes already percent-encoded are left as-is.`                                                                     | FAIL    |
| `<area>: Setting <data:text/plain,Stuff>.hostname = 'example.net' Cannot-be-a-base means no password`                                                                          | PASS    |
| `URL: Setting <file://hi/x>.host = ''`                                                                                                                                         | PASS    |
| `URL: Setting <a:/>.hash = '\t\n\r !"#$%&'()*+,-./09:;<=>?@AZ[\]^_\`az{|}~€Éé' Simple percent-encoding; nuls, tabs, and newlines are removed`                             | FAIL    |
| `<a>: Setting <ssh://me@example.net>.protocol = 'file'`                                                                                                                        | FAIL    |
| `<area>: Setting <http://example.net/path>.host = 'example.com?stuff' Stuff after a ? delimiter is ignored`                                                                    | PASS    |
| `<a>: Setting <ftp://example.net>.protocol = 'test'`                                                                                                                           | FAIL    |
| `URL: Setting <sc:///>.password = 'x'`                                                                                                                                         | PASS    |
| `URL: Setting <file://test/>.password = 'test'`                                                                                                                                | FAIL    |
| `URL: Setting <file://y/>.hostname = 'x:123'`                                                                                                                                  | FAIL    |
| `<area>: Setting <http://example.net/path>.port = '8080stuff2' Anything other than ASCII digit stops the port parser in a setter but is not an error`                          | PASS    |
| `<a>: Setting <sc://x/>.host = '#'`                                                                                                                                            | FAIL    |
| `<area>: Setting <http://example.net>.host = '' The empty host is not valid for special schemes`                                                                               | PASS    |
| `<a>: Setting <http://example.net>.password = 'secret'`                                                                                                                        | FAIL    |
| `<a>: Setting <view-source+http://example.net/home?lang=fr#nav>.pathname = '\a\%2E\b\%2e.\c' \ is *not* a segment delimiter for non-'special' URLs`                            | FAIL    |
| `URL: Setting <a://example.net>.protocol = 'é' Non-ASCII is rejected`                                                                                                          | PASS    |
| `<area>: Setting <http://example.net>.hostname = '' The empty host is not valid for special schemes`                                                                           | PASS    |
| `<area>: Setting <view-source+http://example.net/foo>.host = '' The empty host is OK for non-special schemes`                                                                  | FAIL    |
| `URL: Setting <http://example.net>.host = '0x7F000001:8080' IPv4 address syntax is normalized`                                                                                 | PASS    |
| `<area>: Setting <https://example.net>.search = ''`                                                                                                                            | PASS    |
| `URL: Setting <http://me:secret@example.net>.password = ''`                                                                                                                    | PASS    |
| `<area>: Setting <a://example.net>.protocol = '' The empty string is not a valid scheme. Setter leaves the URL unchanged.`                                                     | PASS    |
| `<a>: Setting <view-source+http://example.net/path>.port = '8080stuff2' Anything other than ASCII digit stops the port parser in a setter but is not an error`                 | FAIL    |
| `URL: Setting <http://example.net:8080>.host = 'example.com:' Port number is unchanged if not specified`                                                                       | PASS    |
| `<area>: Setting <http://example.net/>.host = '[::1.2.]'`                                                                                                                      | PASS    |
| `URL: Setting <http://example.net>.host = 'example.com:80' Default port number is removed`                                                                                     | PASS    |
| `URL: Setting <ssh://me@example.net>.protocol = 'http' Can’t switch from non-special scheme to special`                                                                        | FAIL    |
| `<area>: Setting <http://example.net/path>.port = '8080#stuff' Stuff after a # delimiter is ignored`                                                                           | PASS    |
| `<a>: Setting <a://example.net>.protocol = '+b' No leading punctuation`                                                                                                        | PASS    |
| `<area>: Setting <https://example.net>.host = 'example.com:443' Default port number is removed`                                                                                | PASS    |
| `<a>: Setting <a:/foo>.host = 'example.net' Path-only URLs can gain a host`                                                                                                    | FAIL    |
| `URL: Setting <a://example.net>.protocol = 'bé' Non-ASCII is rejected`                                                                                                         | PASS    |
| `URL: Setting <https://example.net?lang=en-US#nav>.search = '?'`                                                                                                               | PASS    |
| `<a>: Setting <view-source+http://example.net/path>.host = 'example.com\stuff' \ is not a delimiter for non-special schemes, but still forbidden in hosts`                     | FAIL    |
| `<a>: Setting <http://example.net/path>.port = '8080+2' Anything other than ASCII digit stops the port parser in a setter but is not an error`                                 | PASS    |
| `<area>: Setting <http://example.net/path>.port = '65535' Port numbers are 16 bit integers`                                                                                    | PASS    |
| `<a>: Setting <http://example.net>.hostname = '' The empty host is not valid for special schemes`                                                                              | PASS    |
| `<area>: Setting <mailto:me@example.net>.hostname = 'example.com' Cannot-be-a-base means no host`                                                                              | PASS    |
| `URL: Setting <a://example.net>.protocol = '' The empty string is not a valid scheme. Setter leaves the URL unchanged.`                                                        | PASS    |
| `<area>: Setting <http://example.net/>.host = '[google.com]' Broken IPv6`                                                                                                      | PASS    |
| `<a>: Setting <file:///home/me/index.html>.password = 'secret' No host means no password`                                                                                      | PASS    |
| `URL: Setting <data:text/plain,Stuff>.host = 'example.net' Cannot-be-a-base means no password`                                                                                 | PASS    |
| `<area>: Setting <view-source+http://example.net/path>.hostname = 'example.com\stuff' \ is not a delimiter for non-special schemes, but still forbidden in hosts`              | FAIL    |
| `URL: Setting <http://example.net>.username = '\t\n\r !"#$%&'()*+,-./09:;<=>?@AZ[\]^_\`az{|}~€Éé' UTF-8 percent encoding with the userinfo encode set.`                   | FAIL    |
| `<a>: Setting <http://example.net/path>.host = 'example.com#stuff' Stuff after a # delimiter is ignored`                                                                       | PASS    |
| `URL: Setting <sc://x/>.hostname = '' Non-special scheme`                                                                                                                     | FAIL    |
| `URL: Setting <a:/foo>.hostname = 'example.net' Path-only URLs can gain a host`                                                                                                | FAIL    |
| `URL: Setting <http://example.net/path>.port = '65535' Port numbers are 16 bit integers`                                                                                       | PASS    |
| `<a>: Setting <sc://x/>.hostname = '#'`                                                                                                                                        | FAIL    |
| `URL: Setting <http://example.net>.pathname = '#' # needs to be encoded`                                                                                                       | PASS    |
| `<area>: Setting <a://example.net>.protocol = '0b' No leading digit`                                                                                                           | PASS    |
| `<area>: Setting <sc://example.net>.pathname = '?' ? needs to be encoded, non-special scheme`                                                                                  | FAIL    |
| `URL: Setting <sc://test@test/>.hostname = ''`                                                                                                                                 | FAIL    |
| `Loading data…`                                                                                                                                                                | PASS    |
| `<area>: Setting <http://example.net/path>.host = 'example.com:65536' Port numbers are 16 bit integers, overflowing is an error. Hostname is still set, though.`               | PASS    |
| `<a>: Setting <https://example.net>.search = ''`                                                                                                                               | PASS    |
| `<a>: Setting <file://y/>.hostname = 'loc%41lhost'`                                                                                                                            | PASS    |
| `<a>: Setting <sc://test:12/>.hostname = ''`                                                                                                                                   | FAIL    |
| `<a>: Setting <a://example.net>.protocol = 'bé' Non-ASCII is rejected`                                                                                                         | PASS    |
| `URL: Setting <data:text/html,<p>Test>.protocol = 'view-source+data:foo : bar' Stuff after the first ':' is ignored`                                                           | PASS    |
| `<a>: Setting <https://example.net?lang=en-US>.hash = '##nav'`                                                                                                                 | PASS    |
| `URL: Setting <non-base:value>.port = '12'`                                                                                                                                    | PASS    |
| `<area>: Setting <http://:secret@example.net>.password = ''`                                                                                                                   | FAIL    |
| `<area>: Setting <a:/foo>.hostname = 'example.net' Path-only URLs can gain a host`                                                                                             | FAIL    |
| `URL: Setting <file://test/>.port = '12'`                                                                                                                                      | FAIL    |
| `URL: Setting <http://example.net/path>.host = 'example.com:8080#stuff' Stuff after a # delimiter is ignored`                                                                  | PASS    |
| `<area>: Setting <sc://x/>.hostname = '/'`                                                                                                                                     | FAIL    |
| `<area>: Setting <https://example.net?lang=en-US#nav>.hash = '#'`                                                                                                              | PASS    |
| `<area>: Setting <ssh://me@example.net>.protocol = 'http' Can’t switch from non-special scheme to special`                                                                     | FAIL    |
| `<area>: Setting <http://example.net>.host = '[::0:01]:2' IPv6 address syntax is normalized`                                                                                   | FAIL    |
| `URL: Setting <sc://test@test/>.host = ''`                                                                                                                                     | FAIL    |
| `<a>: Setting <http://example.net/path>.host = 'example.com:8080+2' Anything other than ASCII digit stops the port parser in a setter but is not an error`                     | PASS    |
| `<a>: Setting <sc://test@test/>.hostname = ''`                                                                                                                                 | FAIL    |
| `<a>: Setting <http://example.net/path>.hostname = 'example.com?stuff' Stuff after a ? delimiter is ignored`                                                                   | PASS    |
| `<area>: Setting <http://example.net/path>.host = 'example.com:8080/stuff' Stuff after a / delimiter is ignored`                                                               | PASS    |
| `<area>: Setting <view-source+http://example.net/home?lang=fr#nav>.pathname = '\a\%2E\b\%2e.\c' \ is *not* a segment delimiter for non-'special' URLs`                         | FAIL    |
| `<a>: Setting <https://example.net?lang=en-US#nav>.search = 'lang=fr'`                                                                                                         | PASS    |
| `<area>: Setting <sc://x/>.host = '@'`                                                                                                                                         | FAIL    |
| `<a>: Setting <http://:secret@example.net>.username = 'me'`                                                                                                                    | FAIL    |
| `<a>: Setting <data:text/plain,Stuff>.hostname = 'example.net' Cannot-be-a-base means no password`                                                                             | PASS    |
| `URL: Setting <view-source+http://example.net/path>.hostname = 'example.com\stuff' \ is not a delimiter for non-special schemes, but still forbidden in hosts`                 | FAIL    |
| `<a>: Setting <https://example.net#nav>.search = 'lang=fr'`                                                                                                                    | PASS    |
| `URL: Setting <sc://x/>.hostname = '\n'`                                                                                                                                       | FAIL    |
| `URL: Setting <http://example.net/home?lang=fr#nav>.pathname = '\a\%2E\b\%2e.\c' \ is a segment delimiter for 'special' URLs`                                                  | FAIL    |
| `URL: Setting <http://example.net/path>.host = 'example.com?stuff' Stuff after a ? delimiter is ignored`                                                                       | PASS    |
| `URL: Setting <a://example.net>.protocol = 'b,c' Only some punctuation is acceptable`                                                                                          | PASS    |
| `<a>: Setting <http://example.net:8080/path>.port = '65536' Port numbers are 16 bit integers, overflowing is an error`                                                         | PASS    |
| `<a>: Setting <http://example.net/path>.port = '8080stuff2' Anything other than ASCII digit stops the port parser in a setter but is not an error`                             | PASS    |
| `<area>: Setting <ssh://me@example.net>.protocol = 'file'`                                                                                                                     | FAIL    |
| `<a>: Setting <http://example.net/>.hostname = '[::1.2.3.4x]'`                                                                                                                 | PASS    |
| `<area>: Setting <https://example.net?lang=en-US>.hash = '##nav'`                                                                                                              | PASS    |
| `<area>: Setting <file://y/>.host = 'loc%41lhost'`                                                                                                                             | PASS    |
| `<area>: Setting <https://example.net?lang=en-US>.search = ''`                                                                                                                 | PASS    |
| `URL: Setting <sc://x/>.host = '/'`                                                                                                                                            | FAIL    |
| `<area>: Setting <http://me:secret@example.net>.password = ''`                                                                                                                 | PASS    |
| `<area>: Setting <https://example.net?lang=en-US#nav>.hash = ''`                                                                                                               | PASS    |
| `<area>: Setting <https://example.net?lang=en-US#nav>.hash = '#main'`                                                                                                          | PASS    |
| `<a>: Setting <data:text/html,<p>Test>.protocol = 'view-source+data:foo : bar' Stuff after the first ':' is ignored`                                                           | PASS    |
| `<area>: Setting <https://example.net#nav>.pathname = '../home'`                                                                                                               | PASS    |
| `URL: Setting <http://example.net>.password = '\t\n\r !"#$%&'()*+,-./09:;<=>?@AZ[\]^_\`az{|}~€Éé' UTF-8 percent encoding with the userinfo encode set.`                   | FAIL    |
| `<a>: Setting <http://example.net:8080>.port = '80' Default port number is removed`                                                                                            | PASS    |
| `<a>: Setting <http://example.net/path>.port = '8080\stuff' Stuff after a \ delimiter is ignored for special schemes`                                                          | PASS    |
| `<a>: Setting <http://example.net/path>.host = 'example.com:8080\stuff' Stuff after a \ delimiter is ignored for special schemes`                                              | PASS    |
| `<a>: Setting <file://y/>.host = 'x:123'`                                                                                                                                      | FAIL    |
| `<a>: Setting <sc://x/>.hostname = '/'`                                                                                                                                        | FAIL    |
| `<area>: Setting <a://example.net>.protocol = 'bC0+-.'`                                                                                                                        | PASS    |
| `<a>: Setting <file://test/>.username = 'test'`                                                                                                                                | FAIL    |
| `URL: Setting <https://example.net>.hash = 'main'`                                                                                                                             | PASS    |
| `URL: Setting <http://example.net/path>.port = '8080/stuff' Stuff after a / delimiter is ignored`                                                                              | PASS    |
| `<a>: Setting <https://example.net>.protocol = 's'`                                                                                                                            | FAIL    |
| `<a>: Setting <http://example.net>.password = '\t\n\r !"#$%&'()*+,-./09:;<=>?@AZ[\]^_\`az{|}~€Éé' UTF-8 percent encoding with the userinfo encode set.`                   | FAIL    |
| `<a>: Setting <http://example.net/path>.hostname = 'example.com/stuff' Stuff after a / delimiter is ignored`                                                                   | PASS    |
| `<area>: Setting <sc://x/>.host = '\r'`                                                                                                                                        | FAIL    |
| `URL: Setting <view-source+http://example.net/path>.host = 'example.com\stuff' \ is not a delimiter for non-special schemes, but still forbidden in hosts`                     | FAIL    |
| `<area>: Setting <http://example.net>.password = '\t\n\r !"#$%&'()*+,-./09:;<=>?@AZ[\]^_\`az{|}~€Éé' UTF-8 percent encoding with the userinfo encode set.`                | FAIL    |
| `URL: Setting <http://example.net:8080/path>.port = '65536' Port numbers are 16 bit integers, overflowing is an error`                                                         | PASS    |
| `<area>: Setting <https://example.net>.protocol = 's'`                                                                                                                         | FAIL    |
| `<area>: Setting <sc://test@test/>.host = ''`                                                                                                                                  | FAIL    |
| `<area>: Setting <sc://x/>.host = '#'`                                                                                                                                         | FAIL    |
| `<area>: Setting <http://example.net/>.hostname = '[::1.]'`                                                                                                                    | PASS    |
| `<area>: Setting <sc:///>.password = 'x'`                                                                                                                                      | PASS    |
| `<a>: Setting <file://hi/x>.host = ''`                                                                                                                                         | PASS    |
| `<area>: Setting <http://example.net/path>.host = 'example.com:8080+2' Anything other than ASCII digit stops the port parser in a setter but is not an error`                  | PASS    |
| `<a>: Setting <file://localhost/>.port = '12'`                                                                                                                                 | PASS    |
| `URL: Setting <http://example.net/path>.host = 'example.com#stuff' Stuff after a # delimiter is ignored`                                                                       | PASS    |
| `URL: Setting <https://example.net?lang=en-US#nav>.search = '?lang=fr'`                                                                                                        | PASS    |
| `URL: Setting <a://example.net>.protocol = 'bC0+-.'`                                                                                                                           | PASS    |
| `<a>: Setting <http://example.net/>.host = '[::1.2.3.]'`                                                                                                                       | PASS    |
| `<a>: Setting <http://example.net>.protocol = 'https:foo : bar' Stuff after the first ':' is ignored`                                                                          | PASS    |
| `URL: Setting <javascript://x/>.password = 'bowser'`                                                                                                                           | FAIL    |
| `<area>: Setting <a://example.net>.protocol = 'b'`                                                                                                                             | PASS    |
| `<area>: Setting <javascript://x/>.port = '12'`                                                                                                                                | FAIL    |
| `<area>: Setting <sc:///>.username = 'x'`                                                                                                                                      | PASS    |
| `<area>: Setting <sc://example.net>.pathname = '#' # needs to be encoded, non-special scheme`                                                                                  | FAIL    |
| `URL: Setting <https://example.net>.protocol = 's'`                                                                                                                            | FAIL    |
| `URL: Setting <sc://x/>.port = '12'`                                                                                                                                           | FAIL    |
| `<area>: Setting <http://example.net:8080/path>.port = '65536' Port numbers are 16 bit integers, overflowing is an error`                                                      | PASS    |
| `<area>: Setting <http://example.net>.host = 'example.com:80' Default port number is removed`                                                                                  | PASS    |
| `<a>: Setting <https://example.net:4433>.port = '443' Default port number is removed`                                                                                          | PASS    |
| `<area>: Setting <https://example.net?lang=en-US#nav>.search = 'lang=fr'`                                                                                                      | PASS    |
| `<a>: Setting <sc://test@test/>.host = ''`                                                                                                                                     | FAIL    |
| `<area>: Setting <mailto:me@example.net>.host = 'example.com' Cannot-be-a-base means no host`                                                                                  | PASS    |
| `<a>: Setting <http://example.net>.pathname = '#' # needs to be encoded`                                                                                                       | PASS    |
| `URL: Setting <sc:///>.username = 'x'`                                                                                                                                         | PASS    |
| `<a>: Setting <https://example.net#nav>.pathname = 'home'`                                                                                                                     | PASS    |
| `<area>: Setting <http://example.net/path>.port = '8080\stuff' Stuff after a \ delimiter is ignored for special schemes`                                                       | PASS    |
| `<area>: Setting <file://localhost/>.port = '12'`                                                                                                                              | PASS    |
| `URL: Setting <mailto:you@example.net>.username = 'me' Cannot-be-a-base means no username`                                                                                     | PASS    |
| `URL: Setting <http://example.net:8080>.hostname = '0x7F000001' IPv4 address syntax is normalized`                                                                             | PASS    |
| `<area>: Setting <mailto:me@example.net>.protocol = 'http' Cannot-be-a-base URL doesn’t have a host, but URL in a special scheme must.`                                        | FAIL    |
| `<area>: Setting <https://example.net#nav>.hash = 'main'`                                                                                                                      | PASS    |
| `<a>: Setting <sc://x/>.host = ' '`                                                                                                                                            | FAIL    |
| `URL: Setting <http://example.net>.host = '' The empty host is not valid for special schemes`                                                                                  | PASS    |
| `<area>: Setting <sc:///>.port = '12'`                                                                                                                                         | PASS    |
| `<area>: Setting <http://example.net/path>.hostname = 'example.com:8080' Stuff after a : delimiter is ignored`                                                                 | FAIL    |
| `URL: Setting <sc://test:12/>.hostname = ''`                                                                                                                                   | FAIL    |
| `<area>: Setting <http://example.net/path>.hostname = 'example.com#stuff' Stuff after a # delimiter is ignored`                                                                | PASS    |
| `<a>: Setting <http://example.net>.search = '%c3%89té' Bytes already percent-encoded are left as-is`                                                                           | PASS    |
| `<a>: Setting <https://example.net>.port = '80' Default port number is only removed for the relevant scheme`                                                                   | PASS    |
| `URL: Setting <http://example.net>.protocol = 'b' Can’t switch from special scheme to non-special`                                                                             | FAIL    |
| `<a>: Setting <http://example.net>.username = 'me'`                                                                                                                            | PASS    |
| `<a>: Setting <non-base:value>.port = '12'`                                                                                                                                    | PASS    |
| `<area>: Setting <sc://x/>.hostname = '\n'`                                                                                                                                    | FAIL    |
| `<area>: Setting <a:/>.search = '\t\n\r !"#$%&'()*+,-./09:;<=>?@AZ[\]^_\`az{|}~€Éé' UTF-8 percent encoding with the query encode set. Tabs and newlines are removed.`     | FAIL    |
| `<a>: Setting <http://example.net/path>.host = 'example.com\stuff' Stuff after a \ delimiter is ignored for special schemes`                                                   | PASS    |
| `URL: Setting <http://me@example.net>.password = 'secret'`                                                                                                                     | PASS    |
| `URL: Setting <http://:secret@example.net>.password = ''`                                                                                                                      | FAIL    |
| `URL: Setting <http://example.net:8080>.port = '' Port number is removed if empty is the new value`                                                                            | PASS    |
| `URL: Setting <ssh://me@example.net>.protocol = 'file'`                                                                                                                        | FAIL    |
| `URL: Setting <http://example.net/path>.hostname = 'example.com\stuff' Stuff after a \ delimiter is ignored for special schemes`                                               | PASS    |
| `<a>: Setting <ssh://me@example.net>.protocol = 'http' Can’t switch from non-special scheme to special`                                                                        | FAIL    |
| `<a>: Setting <http://example.net:8080>.hostname = 'example.com'`                                                                                                              | PASS    |
| `URL: Setting <nonsense:///test>.protocol = 'https'`                                                                                                                           | FAIL    |
| `<area>: Setting <http://example.net>.username = 'me'`                                                                                                                         | PASS    |
| `<area>: Setting <view-source+http://example.net/foo>.hostname = '' The empty host is OK for non-special schemes`                                                              | FAIL    |
| `URL: Setting <file://hi/x>.hostname = ''`                                                                                                                                     | PASS    |
| `<a>: Setting <file://test/>.port = '12'`                                                                                                                                      | FAIL    |
| `<a>: Setting <a://example.net>.protocol = '0b' No leading digit`                                                                                                              | PASS    |
| `<a>: Setting <sc://example.net>.pathname = '#' # needs to be encoded, non-special scheme`                                                                                     | FAIL    |
| `<area>: Setting <a:/>.hash = '\t\n\r !"#$%&'()*+,-./09:;<=>?@AZ[\]^_\`az{|}~€Éé' Simple percent-encoding; nuls, tabs, and newlines are removed`                          | FAIL    |
| `<area>: Setting <https://example.net>.hash = 'main'`                                                                                                                          | PASS    |
| `<a>: Setting <file://y/>.hostname = 'x:123'`                                                                                                                                  | FAIL    |
| `<area>: Setting <sc://x/>.host = '\t'`                                                                                                                                        | FAIL    |
| `URL: Setting <https://example.net#nav>.pathname = '../home'`                                                                                                                  | PASS    |
| `<a>: Setting <a:/>.hash = '\t\n\r !"#$%&'()*+,-./09:;<=>?@AZ[\]^_\`az{|}~€Éé' Simple percent-encoding; nuls, tabs, and newlines are removed`                             | FAIL    |
| `<a>: Setting <unix:/run/foo.socket?timeout=10>.pathname = '/var/log/../run/bar.socket'`                                                                                       | FAIL    |
| `<a>: Setting <mailto:you@example.net>.username = 'me' Cannot-be-a-base means no username`                                                                                     | PASS    |
| `<area>: Setting <sc://x/>.host = '?'`                                                                                                                                         | FAIL    |
| `URL: Setting <http://example.net/path>.port = '8080stuff2' Anything other than ASCII digit stops the port parser in a setter but is not an error`                             | PASS    |
| `<a>: Setting <http://example.net:8080>.hostname = '0x7F000001' IPv4 address syntax is normalized`                                                                             | PASS    |
| `URL: Setting <sc://x/>.hostname = '@'`                                                                                                                                        | FAIL    |
| `<area>: Setting <http://example.net/path>.hostname = 'example.com?stuff' Stuff after a ? delimiter is ignored`                                                                | PASS    |
| `<a>: Setting <sc://x/>.host = '\t'`                                                                                                                                           | FAIL    |
| `URL: Setting <javascript:alert(1)>.protocol = 'defuse'`                                                                                                                       | PASS    |
| `<area>: Setting <a:/>.pathname = '\t\n\r !"#$%&'()*+,-./09:;<=>?@AZ[\]^_\`az{|}~€Éé' UTF-8 percent encoding with the default encode set. Tabs and newlines are removed.` | FAIL    |
| `<a>: Setting <file://test/>.password = 'test'`                                                                                                                                | FAIL    |
| `<a>: Setting <ssh://me@example.net>.protocol = 'gopher'`                                                                                                                      | FAIL    |
| `<area>: Setting <view-source+http://example.net/path>.host = 'example.com\stuff' \ is not a delimiter for non-special schemes, but still forbidden in hosts`                  | FAIL    |
| `<area>: Setting <sc://x/>.host = ' '`                                                                                                                                         | FAIL    |
| `<area>: Setting <http://example.net/path>.host = 'example.com/stuff' Stuff after a / delimiter is ignored`                                                                    | PASS    |
| `URL: Setting <http://example.net/path>.host = 'example.com:8080+2' Anything other than ASCII digit stops the port parser in a setter but is not an error`                     | PASS    |
| `<a>: Setting <mailto:me@example.net>.pathname = '/foo' Cannot-be-a-base don’t have a path`                                                                                    | FAIL    |
| `URL: Setting <https://example.net?lang=en-US#nav>.search = ''`                                                                                                                | PASS    |
| `URL: Setting <ftp://example.net>.protocol = 'test'`                                                                                                                           | FAIL    |
| `URL: Setting <a:/>.search = '\t\n\r !"#$%&'()*+,-./09:;<=>?@AZ[\]^_\`az{|}~€Éé' UTF-8 percent encoding with the query encode set. Tabs and newlines are removed.`        | FAIL    |
| `URL: Setting <sc://example.net>.pathname = '#' # needs to be encoded, non-special scheme`                                                                                     | FAIL    |
| `<a>: Setting <http://example.net/path>.port = '8080/stuff' Stuff after a / delimiter is ignored`                                                                              | PASS    |
| `<a>: Setting <sc://x/>.host = '?'`                                                                                                                                            | FAIL    |
| `<area>: Setting <http://me@example.net>.username = ''`                                                                                                                        | PASS    |
| `<a>: Setting <a://example.net>.protocol = 'b,c' Only some punctuation is acceptable`                                                                                          | PASS    |
| `<area>: Setting <sc://x/>.hostname = '' Non-special scheme`                                                                                                                  | FAIL    |
| `URL: Setting <sc://x/>.hostname = ' '`                                                                                                                                        | FAIL    |
| `<a>: Setting <http://example.net/path>.host = 'example.com:8080#stuff' Stuff after a # delimiter is ignored`                                                                  | PASS    |
| `<a>: Setting <http://example.net:8080>.host = 'example.com:' Port number is unchanged if not specified`                                                                       | PASS    |
| `<area>: Setting <https://example.net#nav>.search = 'lang=fr'`                                                                                                                 | PASS    |
| `<area>: Setting <file://y/>.host = 'x:123'`                                                                                                                                   | FAIL    |
| `<area>: Setting <https://example.net?lang=en-US#nav>.search = '?'`                                                                                                            | PASS    |
| `URL: Setting <mailto:me@example.net>.pathname = '/foo' Cannot-be-a-base don’t have a path`                                                                                    | PASS    |
| `<a>: Setting <https://example.net>.host = 'example.com:443' Default port number is removed`                                                                                   | PASS    |
| `<area>: Setting <http://example.net>.hostname = '[::0:01]' IPv6 address syntax is normalized`                                                                                 | FAIL    |
| `<a>: Setting <http://example.net>.host = '[::0:01]:2' IPv6 address syntax is normalized`                                                                                      | FAIL    |
| `<a>: Setting <sc://x/>.host = '@'`                                                                                                                                            | FAIL    |
| `URL: Setting <http://me:secret@example.net>.username = ''`                                                                                                                    | FAIL    |
| `URL: Setting <sc://x/>.hostname = '\t'`                                                                                                                                       | FAIL    |
| `URL: Setting <https://example.net:4433>.port = '443' Default port number is removed`                                                                                          | PASS    |
| `URL: Setting <https://example.net>.host = 'example.com:80' Default port number is only removed for the relevant scheme`                                                       | PASS    |
| `URL: Setting <http://example.net/>.hostname = '[::1.2.3.]'`                                                                                                                   | PASS    |
| `<area>: Setting <http://example.net:8080>.hostname = 'example.com'`                                                                                                           | PASS    |
| `<a>: Setting <sc://x/>.hostname = ' '`                                                                                                                                        | FAIL    |
| `<a>: Setting <view-source+http://example.net/foo>.hostname = '' The empty host is OK for non-special schemes`                                                                 | FAIL    |
| `URL: Setting <sc:///>.port = '12'`                                                                                                                                            | PASS    |
| `<a>: Setting <http://example.net/path>.hostname = 'example.com#stuff' Stuff after a # delimiter is ignored`                                                                   | PASS    |
| `URL: Setting <view-source+http://example.net/path>.port = '8080stuff2' Anything other than ASCII digit stops the port parser in a setter but is not an error`                 | FAIL    |
| `<a>: Setting <http://example.net>.host = 'example.com:8080'`                                                                                                                  | PASS    |
| `<a>: Setting <http://example.net>.host = '0x7F000001:8080' IPv4 address syntax is normalized`                                                                                 | PASS    |
| `URL: Setting <a://example.net>.protocol = '0b' No leading digit`                                                                                                              | PASS    |
| `<a>: Setting <http://example.net/>.hostname = '[::1.2.]'`                                                                                                                     | PASS    |
| `<a>: Setting <http://example.net>.username = '\t\n\r !"#$%&'()*+,-./09:;<=>?@AZ[\]^_\`az{|}~€Éé' UTF-8 percent encoding with the userinfo encode set.`                   | FAIL    |
| `URL: Setting <https://example.net?lang=en-US#nav>.hash = ''`                                                                                                                  | PASS    |
| `<a>: Setting <javascript://x/>.username = 'wario'`                                                                                                                            | FAIL    |
| `URL: Setting <http://example.net/>.host = '[google.com]' Broken IPv6`                                                                                                         | PASS    |
| `<a>: Setting <https://example.net?lang=en-US#nav>.hash = '#main'`                                                                                                             | PASS    |
| `<a>: Setting <http://me@example.net>.password = 'secret'`                                                                                                                     | PASS    |
| `<a>: Setting <http://example.net>.hostname = '[::0:01]' IPv6 address syntax is normalized`                                                                                    | FAIL    |
| `<a>: Setting <sc://x/>.host = '' Non-special scheme`                                                                                                                         | FAIL    |
| `<a>: Setting <javascript:alert(1)>.hash = 'castle'`                                                                                                                           | PASS    |
| `<area>: Setting <http://example.net>.pathname = '?' ? needs to be encoded`                                                                                                    | PASS    |
| `<area>: Setting <http://example.net/path>.port = '8080?stuff' Stuff after a ? delimiter is ignored`                                                                           | PASS    |
| `<area>: Setting <http://example.net>.username = '%c3%89té' Bytes already percent-encoded are left as-is.`                                                                     | PASS    |
| `URL: Setting <sc://x/>.hostname = '?'`                                                                                                                                        | FAIL    |
| `URL: Setting <http://example.net>.protocol = 'https:foo : bar' Stuff after the first ':' is ignored`                                                                          | PASS    |
| `<a>: Setting <sc:///>.password = 'x'`                                                                                                                                         | PASS    |
| `<area>: Setting <http://example.net>.pathname = '#' # needs to be encoded`                                                                                                    | PASS    |
| `URL: Setting <http://example.net/path>.host = 'example.com:8080/stuff' Stuff after a / delimiter is ignored`                                                                  | PASS    |
| `<a>: Setting <sc://example.net>.pathname = '?' ? needs to be encoded, non-special scheme`                                                                                     | FAIL    |
| `URL: Setting <view-source+http://example.net/foo>.host = '' The empty host is OK for non-special schemes`                                                                     | FAIL    |
| `<a>: Setting <sc://x/>.host = '\r'`                                                                                                                                           | FAIL    |
| `<a>: Setting <http://example.net>.hash = '%c3%89té' Bytes already percent-encoded are left as-is`                                                                             | PASS    |
| `<area>: Setting <http://example.net>.pathname = '%2e%2E%c3%89té' Bytes already percent-encoded are left as-is, including %2E outside dotted segments.`                        | PASS    |
| `<area>: Setting <view-source+http://example.net/path>.host = 'example.com:8080stuff2' Anything other than ASCII digit stops the port parser in a setter but is not an error`  | FAIL    |
| `URL: Setting <file://test/>.username = 'test'`                                                                                                                                | FAIL    |
| `<area>: Setting <http://example.net:8080>.host = 'example.com' Port number is unchanged if not specified in the new value`                                                    | PASS    |
| `URL: Setting <http://example.net/>.hostname = '[google.com]' Broken IPv6`                                                                                                     | PASS    |
| `<a>: Setting <http://example.net/path>.host = 'example.com/stuff' Stuff after a / delimiter is ignored`                                                                       | PASS    |
| `<area>: Setting <http://example.net>.protocol = 'https:foo : bar' Stuff after the first ':' is ignored`                                                                       | PASS    |
| `URL: Setting <file://y/>.hostname = 'loc%41lhost'`                                                                                                                            | PASS    |
| `<a>: Setting <http://example.net/path>.port = '8080?stuff' Stuff after a ? delimiter is ignored`                                                                              | PASS    |
| `URL: Setting <https://example.net#nav>.hash = 'main'`                                                                                                                         | PASS    |
| `<a>: Setting <http://example.net>.port = '8080'`                                                                                                                              | PASS    |
| `<a>: Setting <a://example.net>.protocol = 'é' Non-ASCII is rejected`                                                                                                          | PASS    |
| `<a>: Setting <sc://x/>.host = '\n'`                                                                                                                                           | FAIL    |
| `<a>: Setting <mailto:me@example.net>.password = 'secret' Cannot-be-a-base means no password`                                                                                  | PASS    |
| `URL: Setting <http://example.net/path>.port = '8080+2' Anything other than ASCII digit stops the port parser in a setter but is not an error`                                 | PASS    |
| `<a>: Setting <http://example.net/path>.port = '8080#stuff' Stuff after a # delimiter is ignored`                                                                              | PASS    |
| `URL: Setting <https://example.net?lang=en-US>.hash = '##nav'`                                                                                                                 | PASS    |
| `<a>: Setting <http://me@example.net>.username = ''`                                                                                                                           | PASS    |
| `URL: Setting <data:text/plain,Stuff>.hostname = 'example.net' Cannot-be-a-base means no password`                                                                             | PASS    |
| `URL: Setting <file://y/>.host = 'loc%41lhost'`                                                                                                                                | PASS    |
| `<area>: Setting <https://example.net:4433>.port = '443' Default port number is removed`                                                                                       | PASS    |
| `<area>: Setting <http://example.net/>.hostname = '[::1.2.]'`                                                                                                                  | PASS    |
| `<a>: Setting <https://example.net?lang=en-US>.search = ''`                                                                                                                    | PASS    |
| `URL: Setting <http://example.net/path>.host = 'example.com/stuff' Stuff after a / delimiter is ignored`                                                                       | PASS    |
| `URL: Setting <https://example.net?lang=en-US#nav>.search = '??lang=fr'`                                                                                                       | PASS    |
| `URL: Setting <http://example.net>.host = 'example.com:8080'`                                                                                                                  | PASS    |
| `URL: Setting <http://example.net>.hostname = '' The empty host is not valid for special schemes`                                                                              | PASS    |
| `<area>: Setting <a://example.net>.protocol = 'B' Upper-case ASCII is lower-cased`                                                                                             | PASS    |
| `<area>: Setting <a://example.net>.protocol = 'é' Non-ASCII is rejected`                                                                                                       | PASS    |
| `URL: Setting <view-source+http://example.net/foo>.hostname = '' The empty host is OK for non-special schemes`                                                                 | FAIL    |
| `<a>: Setting <sc://x/>.port = '12'`                                                                                                                                           | FAIL    |
| `<area>: Setting <http://example.net/path>.host = 'example.com:8080stuff2' Anything other than ASCII digit stops the port parser in a setter but is not an error`              | PASS    |
| `<area>: Setting <http://example.net:8080>.host = 'example.com:' Port number is unchanged if not specified`                                                                    | PASS    |
| `<area>: Setting <sc://test:12/>.host = ''`                                                                                                                                    | FAIL    |
| `<area>: Setting <data:text/html,<p>Test>.protocol = 'view-source+data:foo : bar' Stuff after the first ':' is ignored`                                                        | PASS    |
| `<area>: Setting <non-base:value>.port = '12'`                                                                                                                                 | PASS    |
| `URL: Setting <sc://x/>.hostname = '#'`                                                                                                                                        | FAIL    |
| `URL: Setting <sc://x/>.host = '\r'`                                                                                                                                           | FAIL    |
| `<area>: Setting <sc://x/>.hostname = ' '`                                                                                                                                     | FAIL    |
| `URL: Setting <sc://x/>.hostname = '\r'`                                                                                                                                       | FAIL    |
| `URL: Setting <sc://x/>.host = '#'`                                                                                                                                            | FAIL    |
| `<a>: Setting <http://me:secret@example.net>.password = ''`                                                                                                                    | PASS    |
| `URL: Setting <http://example.net/>.host = '[::1.2.3.]'`                                                                                                                       | PASS    |
| `<a>: Setting <http://example.net>.pathname = '?' ? needs to be encoded`                                                                                                       | PASS    |
| `<area>: Setting <http://example.net>.username = '\t\n\r !"#$%&'()*+,-./09:;<=>?@AZ[\]^_\`az{|}~€Éé' UTF-8 percent encoding with the userinfo encode set.`                | FAIL    |
| `<area>: Setting <sc://test:12/>.hostname = ''`                                                                                                                                | FAIL    |
| `<area>: Setting <http://example.net/path>.hostname = 'example.com\stuff' Stuff after a \ delimiter is ignored for special schemes`                                            | PASS    |
| `<a>: Setting <http://example.net/path>.hostname = 'example.com\stuff' Stuff after a \ delimiter is ignored for special schemes`                                               | PASS    |
| `<area>: Setting <javascript://x/>.password = 'bowser'`                                                                                                                        | FAIL    |
| `<a>: Setting <http://:secret@example.net>.password = ''`                                                                                                                      | FAIL    |
| `URL: Setting <http://example.net:8080>.hostname = 'example.com'`                                                                                                              | PASS    |
| `<area>: Setting <sc://x/>.hostname = '\t'`                                                                                                                                    | FAIL    |
| `<a>: Setting <view-source+http://example.net/foo>.host = '' The empty host is OK for non-special schemes`                                                                     | FAIL    |
| `<a>: Setting <http://example.net>.host = 'example.com:80' Default port number is removed`                                                                                     | PASS    |
| `URL: Setting <https://example.net?lang=en-US#nav>.hash = '#main'`                                                                                                             | PASS    |
| `<a>: Setting <a:/foo>.hostname = 'example.net' Path-only URLs can gain a host`                                                                                                | FAIL    |
| `<area>: Setting <javascript:alert(1)>.protocol = 'defuse'`                                                                                                                    | PASS    |
| `<area>: Setting <http://example.net>.search = '%c3%89té' Bytes already percent-encoded are left as-is`                                                                        | PASS    |
| `URL: Setting <http://example.net>.password = '%c3%89té' Bytes already percent-encoded are left as-is.`                                                                        | FAIL    |
| `<area>: Setting <http://me:secret@example.net>.username = ''`                                                                                                                 | FAIL    |
| `<area>: Setting <http://example.net/>.hostname = '[::1.2.3.]'`                                                                                                                | PASS    |
| `<a>: Setting <javascript:alert(1)>.username = 'wario'`                                                                                                                        | PASS    |
| `URL: Setting <http://example.net/path>.hostname = 'example.com/stuff' Stuff after a / delimiter is ignored`                                                                   | PASS    |
| `<area>: Setting <https://example.net>.host = 'example.com:80' Default port number is only removed for the relevant scheme`                                                    | PASS    |
| `<a>: Setting <http://example.net:8080/path>.hostname = 'example.com:' Stuff after a : delimiter is ignored`                                                                   | FAIL    |
| `URL: Setting <javascript:alert(1)>.username = 'wario'`                                                                                                                        | PASS    |
| `URL: Setting <javascript://x/>.username = 'wario'`                                                                                                                            | FAIL    |
| `<a>: Setting <file://y/>.host = 'loc%41lhost'`                                                                                                                                | PASS    |
| `<area>: Setting <http://example.net/>.host = '[::1.2.3.]'`                                                                                                                    | PASS    |
| `<area>: Setting <unix:/run/foo.socket>.username = 'me' No host means no username`                                                                                             | PASS    |
| `URL: Setting <a:/foo>.host = 'example.net' Path-only URLs can gain a host`                                                                                                    | FAIL    |
| `<a>: Setting <http://example.net/>.hostname = '[::1.2.3.]'`                                                                                                                   | PASS    |
| `<area>: Setting <http://example.net/>.host = '[::1.2.3.4x]'`                                                                                                                  | PASS    |
| `URL: Setting <http://example.net>.username = 'me'`                                                                                                                            | PASS    |
| `URL: Setting <http://example.net>.password = 'secret'`                                                                                                                        | FAIL    |
| `URL: Setting <http://example.net/path>.host = 'example.com:65535' Port numbers are 16 bit integers`                                                                           | PASS    |
| `URL: Setting <http://example.net>.search = '%c3%89té' Bytes already percent-encoded are left as-is`                                                                           | PASS    |
| `<a>: Setting <file://hi/x>.hostname = ''`                                                                                                                                     | PASS    |
| `<area>: Setting <http://example.net:8080/path>.hostname = 'example.com:' Stuff after a : delimiter is ignored`                                                                | FAIL    |
| `<area>: Setting <sc://x/>.host = '\n'`                                                                                                                                        | FAIL    |
| `URL: Setting <mailto:me@example.net>.protocol = 'http' Cannot-be-a-base URL doesn’t have a host, but URL in a special scheme must.`                                           | FAIL    |
| `<area>: Setting <sc://x/>.hostname = '?'`                                                                                                                                     | FAIL    |
| `<a>: Setting <unix:/run/foo.socket>.password = 'secret' No host means no password`                                                                                            | PASS    |
| `URL: Setting <mailto:me@example.net>.host = 'example.com' Cannot-be-a-base means no host`                                                                                     | PASS    |
| `URL: Setting <ssh://me@example.net>.protocol = 'gopher'`                                                                                                                      | FAIL    |
| `URL: Setting <http://:secret@example.net>.username = 'me'`                                                                                                                    | FAIL    |
| `<a>: Setting <http://example.net/path>.port = '65535' Port numbers are 16 bit integers`                                                                                       | PASS    |
| `URL: Setting <javascript://x/>.port = '12'`                                                                                                                                   | FAIL    |
| `URL: Setting <http://example.net/path>.hostname = 'example.com?stuff' Stuff after a ? delimiter is ignored`                                                                   | PASS    |
| `URL: Setting <http://example.net/>.host = '[::1.2.3.4x]'`                                                                                                                     | PASS    |
| `<a>: Setting <http://example.net/path>.host = 'example.com?stuff' Stuff after a ? delimiter is ignored`                                                                       | PASS    |
| `<area>: Setting <http://example.net/path>.host = 'example.com:65535' Port numbers are 16 bit integers`                                                                        | PASS    |
| `URL: Setting <http://example.net/path>.port = '8080#stuff' Stuff after a # delimiter is ignored`                                                                              | PASS    |
| `URL: Setting <sc://test:12/>.host = ''`                                                                                                                                       | FAIL    |
| `URL: Setting <http://example.net>.pathname = '%2e%2E%c3%89té' Bytes already percent-encoded are left as-is, including %2E outside dotted segments.`                           | PASS    |
| `URL: Setting <unix:/run/foo.socket>.username = 'me' No host means no username`                                                                                                | PASS    |

</details>
</details>

View on GitHub: https://github.com/w3c/web-platform-tests/pull/4910#issuecomment-280646526

Received on Friday, 17 February 2017 13:17:19 UTC