wallet-core/test/urls.js
Florian Dold d519415433 Squashed 'thirdparty/URI.js/' content from commit b77c167
git-subtree-dir: thirdparty/URI.js
git-subtree-split: b77c167bc201575956ad409333ff032e504b8044
2016-10-10 03:47:49 +02:00

1893 lines
44 KiB
JavaScript

/*jshint unused:false, scripturl:true */
var urls = [{
name: 'scheme and domain',
url: 'http://www.example.org',
_url: 'http://www.example.org/',
parts: {
protocol: 'http',
username: null,
password: null,
hostname: 'www.example.org',
port: null,
path: '/',
query: null,
fragment: null
},
accessors: {
protocol: 'http',
username: '',
password: '',
port: '',
path: '/',
query: '',
fragment: '',
resource: '/',
authority: 'www.example.org',
origin: 'http://www.example.org',
userinfo: '',
subdomain: 'www',
domain: 'example.org',
tld: 'org',
directory: '/',
filename: '',
suffix: '',
hash: '', // location.hash style
search: '', // location.search style
host: 'www.example.org',
hostname: 'www.example.org'
},
is: {
urn: false,
url: true,
relative: false,
name: true,
sld: false,
ip: false,
ip4: false,
ip6: false,
idn: false,
punycode: false
}
}, {
name: 'second level domain',
url: 'http://www.example.co.uk',
_url: 'http://www.example.co.uk/',
parts: {
protocol: 'http',
username: null,
password: null,
hostname: 'www.example.co.uk',
port: null,
path: '/',
query: null,
fragment: null
},
accessors: {
protocol: 'http',
username: '',
password: '',
port: '',
path: '/',
query: '',
fragment: '',
resource: '/',
authority: 'www.example.co.uk',
origin: 'http://www.example.co.uk',
userinfo: '',
subdomain: 'www',
domain: 'example.co.uk',
tld: 'co.uk',
directory: '/',
filename: '',
suffix: '',
hash: '', // location.hash style
search: '', // location.search style
host: 'www.example.co.uk',
hostname: 'www.example.co.uk'
},
is: {
urn: false,
url: true,
relative: false,
name: true,
sld: true,
ip: false,
ip4: false,
ip6: false,
idn: false,
punycode: false
}
},{
name: 'qualified HTTP',
url: 'http://www.example.org/some/directory/file.html?query=string#fragment',
parts: {
protocol: 'http',
username: null,
password: null,
hostname: 'www.example.org',
port: null,
path: '/some/directory/file.html',
query: 'query=string',
fragment: 'fragment'
},
accessors: {
protocol: 'http',
username: '',
password: '',
port: '',
path: '/some/directory/file.html',
query: 'query=string',
fragment: 'fragment',
resource: '/some/directory/file.html?query=string#fragment',
authority: 'www.example.org',
origin: 'http://www.example.org',
userinfo: '',
subdomain: 'www',
domain: 'example.org',
tld: 'org',
directory: '/some/directory',
filename: 'file.html',
suffix: 'html',
hash: '#fragment',
search: '?query=string',
host: 'www.example.org',
hostname: 'www.example.org'
},
is: {
urn: false,
url: true,
relative: false,
name: true,
sld: false,
ip: false,
ip4: false,
ip6: false,
idn: false,
punycode: false
}
}, {
name: 'funky suffix',
url: 'http://www.example.org/some/directory/file.html-is-awesome?query=string#fragment',
parts: {
protocol: 'http',
username: null,
password: null,
hostname: 'www.example.org',
port: null,
path: '/some/directory/file.html-is-awesome',
query: 'query=string',
fragment: 'fragment'
},
accessors: {
protocol: 'http',
username: '',
password: '',
port: '',
path: '/some/directory/file.html-is-awesome',
query: 'query=string',
fragment: 'fragment',
resource: '/some/directory/file.html-is-awesome?query=string#fragment',
authority: 'www.example.org',
origin: 'http://www.example.org',
userinfo: '',
subdomain: 'www',
domain: 'example.org',
tld: 'org',
directory: '/some/directory',
filename: 'file.html-is-awesome',
suffix: '',
hash: '#fragment',
search: '?query=string',
host: 'www.example.org',
hostname: 'www.example.org'
},
is: {
urn: false,
url: true,
relative: false,
name: true,
sld: false,
ip: false,
ip4: false,
ip6: false,
idn: false,
punycode: false
}
}, {
name: 'complete URL',
url: 'scheme://user:pass@www.example.org:123/some/directory/file.html?query=string#fragment',
parts: {
protocol: 'scheme',
username: 'user',
password: 'pass',
hostname: 'www.example.org',
port: '123',
path: '/some/directory/file.html',
query: 'query=string',
fragment: 'fragment'
},
accessors: {
protocol: 'scheme',
username: 'user',
password: 'pass',
port: '123',
path: '/some/directory/file.html',
query: 'query=string',
fragment: 'fragment',
resource: '/some/directory/file.html?query=string#fragment',
authority: 'user:pass@www.example.org:123',
origin: 'scheme://user:pass@www.example.org:123',
userinfo: 'user:pass',
subdomain: 'www',
domain: 'example.org',
tld: 'org',
directory: '/some/directory',
filename: 'file.html',
suffix: 'html',
hash: '#fragment',
search: '?query=string',
host: 'www.example.org:123',
hostname: 'www.example.org'
},
is: {
urn: false,
url: true,
relative: false,
name: true,
sld: false,
ip: false,
ip4: false,
ip6: false,
idn: false,
punycode: false
}
}, {
name: 'badly encoded userinfo',
url: 'scheme://user:pass:word@www.example.org/',
_url: 'scheme://user:pass%3Aword@www.example.org/',
parts: {
protocol: 'scheme',
username: 'user',
password: 'pass:word',
hostname: 'www.example.org',
port: null,
path: '/',
query: null,
fragment: null
},
accessors: {
protocol: 'scheme',
username: 'user',
password: 'pass:word',
port: '',
path: '/',
query: '',
fragment: '',
resource: '/',
authority: 'user:pass%3Aword@www.example.org',
origin: 'scheme://user:pass%3Aword@www.example.org',
userinfo: 'user:pass%3Aword',
subdomain: 'www',
domain: 'example.org',
tld: 'org',
directory: '/',
filename: '',
suffix: '',
hash: '',
search: '',
host: 'www.example.org',
hostname: 'www.example.org'
},
is: {
urn: false,
url: true,
relative: false,
name: true,
sld: false,
ip: false,
ip4: false,
ip6: false,
idn: false,
punycode: false
}
}, {
name: 'empty username with non-empty password',
url: 'scheme://:password@www.example.org/',
_url: 'scheme://:password@www.example.org/',
parts: {
protocol: 'scheme',
username: null,
password: 'password',
hostname: 'www.example.org',
port: null,
path: '/',
query: null,
fragment: null
},
accessors: {
protocol: 'scheme',
username: '',
password: 'password',
port: '',
path: '/',
query: '',
fragment: '',
resource: '/',
authority: ':password@www.example.org',
origin: 'scheme://:password@www.example.org',
userinfo: ':password',
subdomain: 'www',
domain: 'example.org',
tld: 'org',
directory: '/',
filename: '',
suffix: '',
hash: '',
search: '',
host: 'www.example.org',
hostname: 'www.example.org'
},
is: {
urn: false,
url: true,
relative: false,
name: true,
sld: false,
ip: false,
ip4: false,
ip6: false,
idn: false,
punycode: false
}
}, {
name: 'malformed email in userinfo',
url: 'scheme://john@doe.com:pass:word@www.example.org/',
_url: 'scheme://john%40doe.com:pass%3Aword@www.example.org/',
parts: {
protocol: 'scheme',
username: 'john@doe.com',
password: 'pass:word',
hostname: 'www.example.org',
port: null,
path: '/',
query: null,
fragment: null
},
accessors: {
protocol: 'scheme',
username: 'john@doe.com',
password: 'pass:word',
port: '',
path: '/',
query: '',
fragment: '',
resource: '/',
authority: 'john%40doe.com:pass%3Aword@www.example.org',
origin: 'scheme://john%40doe.com:pass%3Aword@www.example.org',
userinfo: 'john%40doe.com:pass%3Aword',
subdomain: 'www',
domain: 'example.org',
tld: 'org',
directory: '/',
filename: '',
suffix: '',
hash: '',
search: '',
host: 'www.example.org',
hostname: 'www.example.org'
},
is: {
urn: false,
url: true,
relative: false,
name: true,
sld: false,
ip: false,
ip4: false,
ip6: false,
idn: false,
punycode: false
}
}, {
name: 'host-relative: URL',
url: '/some/directory/file.html?query=string#fragment',
parts: {
protocol: null,
username: null,
password: null,
hostname: null,
port: null,
path: '/some/directory/file.html',
query: 'query=string',
fragment: 'fragment'
},
accessors: {
protocol: '',
username: '',
password: '',
port: '',
path: '/some/directory/file.html',
query: 'query=string',
fragment: 'fragment',
resource: '/some/directory/file.html?query=string#fragment',
authority: '',
origin: '',
userinfo: '',
subdomain: '',
domain: '',
tld: '',
directory: '/some/directory',
filename: 'file.html',
suffix: 'html',
hash: '#fragment',
search: '?query=string',
host: '',
hostname: ''
},
is: {
urn: false,
url: true,
relative: true,
name: false,
sld: false,
ip: false,
ip4: false,
ip6: false,
idn: false,
punycode: false
}
}, {
name: 'path-relative: URL',
url: '../some/directory/file.html?query=string#fragment',
parts: {
protocol: null,
username: null,
password: null,
hostname: null,
port: null,
path: '../some/directory/file.html',
query: 'query=string',
fragment: 'fragment'
},
accessors: {
protocol: '',
username: '',
password: '',
port: '',
path: '../some/directory/file.html',
query: 'query=string',
fragment: 'fragment',
resource: '../some/directory/file.html?query=string#fragment',
authority: '',
origin: '',
userinfo: '',
subdomain: '',
domain: '',
tld: '',
directory: '../some/directory',
filename: 'file.html',
suffix: 'html',
hash: '#fragment',
search: '?query=string',
host: '',
hostname: ''
},
is: {
urn: false,
url: true,
relative: true,
name: false,
sld: false,
ip: false,
ip4: false,
ip6: false,
idn: false,
punycode: false
}
}, {
name: 'missing scheme',
url: 'user:pass@www.example.org:123/some/directory/file.html?query=string#fragment',
parts: {
protocol: 'user',
username: null,
password: null,
hostname: null,
port: null,
path: 'pass@www.example.org:123/some/directory/file.html',
query: 'query=string',
fragment: 'fragment'
},
accessors: {
protocol: 'user',
username: '',
password: '',
port: '',
path: 'pass@www.example.org:123/some/directory/file.html',
query: 'query=string',
fragment: 'fragment',
resource: 'pass@www.example.org:123/some/directory/file.html?query=string#fragment',
authority: '',
origin: '',
userinfo: '',
subdomain: '',
domain: '',
tld: '',
directory: '',
filename: '',
suffix: '',
hash: '#fragment',
search: '?query=string',
host: '',
hostname: ''
},
is: {
urn: true,
url: false,
relative: false,
name: false,
sld: false,
ip: false,
ip4: false,
ip6: false,
idn: false,
punycode: false
}
}, {
name: 'ignoring scheme',
url: '://user:pass@example.org:123/some/directory/file.html?query=string#fragment',
_url: '//user:pass@example.org:123/some/directory/file.html?query=string#fragment',
parts: {
protocol: null,
username: 'user',
password: 'pass',
hostname: 'example.org',
port: '123',
path: '/some/directory/file.html',
query: 'query=string',
fragment: 'fragment'
},
accessors: {
protocol: '',
username: 'user',
password: 'pass',
port: '123',
path: '/some/directory/file.html',
query: 'query=string',
fragment: 'fragment',
resource: '/some/directory/file.html?query=string#fragment',
authority: 'user:pass@example.org:123',
origin: 'user:pass@example.org:123',
userinfo: 'user:pass',
subdomain: '',
domain: 'example.org',
tld: 'org',
directory: '/some/directory',
filename: 'file.html',
suffix: 'html',
hash: '#fragment',
search: '?query=string',
host: 'example.org:123',
hostname: 'example.org'
},
is: {
urn: false,
url: true,
relative: false,
name: true,
sld: false,
ip: false,
ip4: false,
ip6: false,
idn: false,
punycode: false
}
}, {
name: 'scheme-relative URL',
url: '//www.example.org/',
parts: {
protocol: null,
username: null,
password: null,
hostname: 'www.example.org',
port: null,
path: '/',
query: null,
fragment: null
},
accessors: {
protocol: '',
username: '',
password: '',
port: '',
path: '/',
query: '',
fragment: '',
resource: '/',
authority: 'www.example.org',
origin: 'www.example.org',
userinfo: '',
subdomain: 'www',
domain: 'example.org',
tld: 'org',
directory: '/',
filename: '',
suffix: '',
hash: '',
search: '',
host: 'www.example.org',
hostname: 'www.example.org'
},
is: {
urn: false,
url: true,
relative: false,
name: true,
sld: false,
ip: false,
ip4: false,
ip6: false,
idn: false,
punycode: false
}
}, {
name: 'IPv4',
url: 'http://user:pass@123.123.123.123:123/some/directory/file.html?query=string#fragment',
parts: {
protocol: 'http',
username: 'user',
password: 'pass',
hostname: '123.123.123.123',
port: '123',
path: '/some/directory/file.html',
query: 'query=string',
fragment: 'fragment'
},
accessors: {
protocol: 'http',
username: 'user',
password: 'pass',
port: '123',
path: '/some/directory/file.html',
query: 'query=string',
fragment: 'fragment',
resource: '/some/directory/file.html?query=string#fragment',
authority: 'user:pass@123.123.123.123:123',
origin: 'http://user:pass@123.123.123.123:123',
userinfo: 'user:pass',
subdomain: '',
domain: '',
tld: '',
directory: '/some/directory',
filename: 'file.html',
suffix: 'html',
hash: '#fragment',
search: '?query=string',
host: '123.123.123.123:123',
hostname: '123.123.123.123'
},
is: {
urn: false,
url: true,
relative: false,
name: false,
sld: false,
ip: true,
ip4: true,
ip6: false,
idn: false,
punycode: false
}
}, {
name: 'IPv6',
url: 'http://user:pass@fe80:0000:0000:0000:0204:61ff:fe9d:f156/some/directory/file.html?query=string#fragment',
_url: 'http://user:pass@[fe80:0000:0000:0000:0204:61ff:fe9d:f156]/some/directory/file.html?query=string#fragment',
parts: {
protocol: 'http',
username: 'user',
password: 'pass',
hostname: 'fe80:0000:0000:0000:0204:61ff:fe9d:f156',
port: null,
path: '/some/directory/file.html',
query: 'query=string',
fragment: 'fragment'
},
accessors: {
protocol: 'http',
username: 'user',
password: 'pass',
port: '',
path: '/some/directory/file.html',
query: 'query=string',
fragment: 'fragment',
resource: '/some/directory/file.html?query=string#fragment',
authority: 'user:pass@[fe80:0000:0000:0000:0204:61ff:fe9d:f156]',
origin: 'http://user:pass@[fe80:0000:0000:0000:0204:61ff:fe9d:f156]',
userinfo: 'user:pass',
subdomain: '',
domain: '',
tld: '',
directory: '/some/directory',
filename: 'file.html',
suffix: 'html',
hash: '#fragment',
search: '?query=string',
host: '[fe80:0000:0000:0000:0204:61ff:fe9d:f156]',
hostname: 'fe80:0000:0000:0000:0204:61ff:fe9d:f156'
},
is: {
urn: false,
url: true,
relative: false,
name: false,
sld: false,
ip: true,
ip4: false,
ip6: true,
idn: false,
punycode: false
}
}, {
name: 'IPv6 with port',
url: 'http://user:pass@[fe80:0000:0000:0000:0204:61ff:fe9d:f156]:123/some/directory/file.html?query=string#fragment',
parts: {
protocol: 'http',
username: 'user',
password: 'pass',
hostname: 'fe80:0000:0000:0000:0204:61ff:fe9d:f156',
port: '123',
path: '/some/directory/file.html',
query: 'query=string',
fragment: 'fragment'
},
accessors: {
protocol: 'http',
username: 'user',
password: 'pass',
port: '123',
path: '/some/directory/file.html',
query: 'query=string',
fragment: 'fragment',
resource: '/some/directory/file.html?query=string#fragment',
authority: 'user:pass@[fe80:0000:0000:0000:0204:61ff:fe9d:f156]:123',
origin: 'http://user:pass@[fe80:0000:0000:0000:0204:61ff:fe9d:f156]:123',
userinfo: 'user:pass',
subdomain: '',
domain: '',
tld: '',
directory: '/some/directory',
filename: 'file.html',
suffix: 'html',
hash: '#fragment',
search: '?query=string',
host: '[fe80:0000:0000:0000:0204:61ff:fe9d:f156]:123',
hostname: 'fe80:0000:0000:0000:0204:61ff:fe9d:f156'
},
is: {
urn: false,
url: true,
relative: false,
name: false,
sld: false,
ip: true,
ip4: false,
ip6: true,
idn: false,
punycode: false
}
}, {
name: 'IPv6 brackets, port, file.ext',
url: 'http://[FEDC:BA98:7654:3210:FEDC:BA98:7654:3210]:80/index.html',
parts: {
protocol: 'http',
username: null,
password: null,
hostname: 'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210',
port: '80',
path: '/index.html',
query: null,
fragment: null
},
accessors: {
protocol: 'http',
username: '',
password: '',
port: '80',
path: '/index.html',
query: '',
fragment: '',
resource: '/index.html',
authority: '[FEDC:BA98:7654:3210:FEDC:BA98:7654:3210]:80',
origin: 'http://[FEDC:BA98:7654:3210:FEDC:BA98:7654:3210]:80',
userinfo: '',
subdomain: '',
domain: '',
tld: '',
directory: '/',
filename: 'index.html',
suffix: 'html',
hash: '',
search: '',
host: '[FEDC:BA98:7654:3210:FEDC:BA98:7654:3210]:80',
hostname: 'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210'
},
is: {
urn: false,
url: true,
relative: false,
name: false,
sld: false,
ip: true,
ip4: false,
ip6: true,
idn: false,
punycode: false
}
}, {
name: 'IPv6 brackets, file.ext',
url: 'http://[1080:0:0:0:8:800:200C:417A]/index.html',
parts: {
protocol: 'http',
username: null,
password: null,
hostname: '1080:0:0:0:8:800:200C:417A',
port: null,
path: '/index.html',
query: null,
fragment: null
},
accessors: {
protocol: 'http',
username: '',
password: '',
port: '',
path: '/index.html',
query: '',
fragment: '',
resource: '/index.html',
authority: '[1080:0:0:0:8:800:200C:417A]',
origin: 'http://[1080:0:0:0:8:800:200C:417A]',
userinfo: '',
subdomain: '',
domain: '',
tld: '',
directory: '/',
filename: 'index.html',
suffix: 'html',
hash: '',
search: '',
host: '[1080:0:0:0:8:800:200C:417A]',
hostname: '1080:0:0:0:8:800:200C:417A'
},
is: {
urn: false,
url: true,
relative: false,
name: false,
sld: false,
ip: true,
ip4: false,
ip6: true,
idn: false,
punycode: false
}
}, {
name: 'IPv6 brackets ::1',
url: 'http://[3ffe:2a00:100:7031::1]',
_url: 'http://[3ffe:2a00:100:7031::1]/',
parts: {
protocol: 'http',
username: null,
password: null,
hostname: '3ffe:2a00:100:7031::1',
port: null,
path: '/',
query: null,
fragment: null
},
accessors: {
protocol: 'http',
username: '',
password: '',
port: '',
path: '/',
query: '',
fragment: '',
resource: '/',
authority: '[3ffe:2a00:100:7031::1]',
origin: 'http://[3ffe:2a00:100:7031::1]',
userinfo: '',
subdomain: '',
domain: '',
tld: '',
directory: '/',
filename: '',
suffix: '',
hash: '',
search: '',
host: '[3ffe:2a00:100:7031::1]',
hostname: '3ffe:2a00:100:7031::1'
},
is: {
urn: false,
url: true,
relative: false,
name: false,
sld: false,
ip: true,
ip4: false,
ip6: true,
idn: false,
punycode: false
}
}, {
name: 'IPv6 brackets, file',
url: 'http://[1080::8:800:200C:417A]/foo',
parts: {
protocol: 'http',
username: null,
password: null,
hostname: '1080::8:800:200C:417A',
port: null,
path: '/foo',
query: null,
fragment: null
},
accessors: {
protocol: 'http',
username: '',
password: '',
port: '',
path: '/foo',
query: '',
fragment: '',
resource: '/foo',
authority: '[1080::8:800:200C:417A]',
origin: 'http://[1080::8:800:200C:417A]',
userinfo: '',
subdomain: '',
domain: '',
tld: '',
directory: '/',
filename: 'foo',
suffix: '',
hash: '',
search: '',
host: '[1080::8:800:200C:417A]',
hostname: '1080::8:800:200C:417A'
},
is: {
urn: false,
url: true,
relative: false,
name: false,
sld: false,
ip: true,
ip4: false,
ip6: true,
idn: false,
punycode: false
}
}, {
name: 'IPv6 IPv4 brackets, path',
url: 'http://[::192.9.5.5]/ipng',
parts: {
protocol: 'http',
username: null,
password: null,
hostname: '::192.9.5.5',
port: null,
path: '/ipng',
query: null,
fragment: null
},
accessors: {
protocol: 'http',
username: '',
password: '',
port: '',
path: '/ipng',
query: '',
fragment: '',
resource: '/ipng',
authority: '[::192.9.5.5]',
origin: 'http://[::192.9.5.5]',
userinfo: '',
subdomain: '',
domain: '',
tld: '',
directory: '/',
filename: 'ipng',
suffix: '',
hash: '',
search: '',
host: '[::192.9.5.5]',
hostname: '::192.9.5.5'
},
is: {
urn: false,
url: true,
relative: false,
name: false,
sld: false,
ip: true,
ip4: false,
ip6: true,
idn: false,
punycode: false
}
}, {
name: 'IPv6 mask IPv4 brackets, port, file.ext',
url: 'http://[::FFFF:129.144.52.38]:80/index.html',
parts: {
protocol: 'http',
username: null,
password: null,
hostname: '::FFFF:129.144.52.38',
port: '80',
path: '/index.html',
query: null,
fragment: null
},
accessors: {
protocol: 'http',
username: '',
password: '',
port: '80',
path: '/index.html',
query: '',
fragment: '',
resource: '/index.html',
authority: '[::FFFF:129.144.52.38]:80',
origin: 'http://[::FFFF:129.144.52.38]:80',
userinfo: '',
subdomain: '',
domain: '',
tld: '',
directory: '/',
filename: 'index.html',
suffix: 'html',
hash: '',
search: '',
host: '[::FFFF:129.144.52.38]:80',
hostname: '::FFFF:129.144.52.38'
},
is: {
urn: false,
url: true,
relative: false,
name: false,
sld: false,
ip: true,
ip4: false,
ip6: true,
idn: false,
punycode: false
}
}, {
name: 'IPv6 brackets',
url: 'http://[2010:836B:4179::836B:4179]',
_url: 'http://[2010:836B:4179::836B:4179]/',
parts: {
protocol: 'http',
username: null,
password: null,
hostname: '2010:836B:4179::836B:4179',
port: null,
path: '/',
query: null,
fragment: null
},
accessors: {
protocol: 'http',
username: '',
password: '',
port: '',
path: '/',
query: '',
fragment: '',
resource: '/',
authority: '[2010:836B:4179::836B:4179]',
origin: 'http://[2010:836B:4179::836B:4179]',
userinfo: '',
subdomain: '',
domain: '',
tld: '',
directory: '/',
filename: '',
suffix: '',
hash: '',
search: '',
host: '[2010:836B:4179::836B:4179]',
hostname: '2010:836B:4179::836B:4179'
},
is: {
urn: false,
url: true,
relative: false,
name: false,
sld: false,
ip: true,
ip4: false,
ip6: true,
idn: false,
punycode: false
}
}, {
name: 'IDN (punycode)',
url: 'http://user:pass@xn--exmple-cua.org:123/some/directory/file.html?query=string#fragment',
parts: {
protocol: 'http',
username: 'user',
password: 'pass',
hostname: 'xn--exmple-cua.org',
port: '123',
path: '/some/directory/file.html',
query: 'query=string',
fragment: 'fragment'
},
accessors: {
protocol: 'http',
username: 'user',
password: 'pass',
port: '123',
path: '/some/directory/file.html',
query: 'query=string',
fragment: 'fragment',
resource: '/some/directory/file.html?query=string#fragment',
authority: 'user:pass@xn--exmple-cua.org:123',
origin: 'http://user:pass@xn--exmple-cua.org:123',
userinfo: 'user:pass',
subdomain: '',
domain: 'xn--exmple-cua.org',
tld: 'org',
directory: '/some/directory',
filename: 'file.html',
suffix: 'html',
hash: '#fragment',
search: '?query=string',
host: 'xn--exmple-cua.org:123',
hostname: 'xn--exmple-cua.org'
},
is: {
urn: false,
url: true,
relative: false,
name: true,
sld: false,
ip: false,
ip4: false,
ip6: false,
idn: false,
punycode: true
}
}, {
name: 'IDN',
url: 'http://user:pass@exämple.org:123/some/directory/file.html?query=string#fragment',
parts: {
protocol: 'http',
username: 'user',
password: 'pass',
hostname: 'exämple.org',
port: '123',
path: '/some/directory/file.html',
query: 'query=string',
fragment: 'fragment'
},
accessors: {
protocol: 'http',
username: 'user',
password: 'pass',
port: '123',
path: '/some/directory/file.html',
query: 'query=string',
fragment: 'fragment',
resource: '/some/directory/file.html?query=string#fragment',
authority: 'user:pass@exämple.org:123',
origin: 'http://user:pass@exämple.org:123',
userinfo: 'user:pass',
subdomain: '',
domain: 'exämple.org',
tld: 'org',
directory: '/some/directory',
filename: 'file.html',
suffix: 'html',
hash: '#fragment',
search: '?query=string',
host: 'exämple.org:123',
hostname: 'exämple.org'
},
is: {
urn: false,
url: true,
relative: false,
name: true,
sld: false,
ip: false,
ip4: false,
ip6: false,
idn: true,
punycode: false
}
}, {
name: 'file://',
url: 'file:///foo/bar/baz.html',
parts: {
protocol: 'file',
username: null,
password: null,
hostname: null,
port: null,
path: '/foo/bar/baz.html',
query: null,
fragment: null
},
accessors: {
protocol: 'file',
username: '',
password: '',
port: '',
path: '/foo/bar/baz.html',
query: '',
fragment: '',
resource: '/foo/bar/baz.html',
authority: '',
origin: '',
userinfo: '',
subdomain: '',
domain: '',
tld: '',
directory: '/foo/bar',
filename: 'baz.html',
suffix: 'html',
hash: '',
search: '',
host: '',
hostname: ''
},
is: {
urn: false,
url: true,
relative: true,
name: false,
sld: false,
ip: false,
ip4: false,
ip6: false,
idn: false,
punycode: false
}
}, {
name: 'file://example.org:123',
url: 'file://example.org:123/foo/bar/baz.html',
parts: {
protocol: 'file',
username: null,
password: null,
hostname: 'example.org',
port: '123',
path: '/foo/bar/baz.html',
query: null,
fragment: null
},
accessors: {
protocol: 'file',
username: '',
password: '',
port: '123',
path: '/foo/bar/baz.html',
query: '',
fragment: '',
resource: '/foo/bar/baz.html',
authority: 'example.org:123',
origin: 'file://example.org:123',
userinfo: '',
subdomain: '',
domain: 'example.org',
tld: 'org',
directory: '/foo/bar',
filename: 'baz.html',
suffix: 'html',
hash: '',
search: '',
host: 'example.org:123',
hostname: 'example.org'
},
is: {
urn: false,
url: true,
relative: false,
name: true,
sld: false,
ip: false,
ip4: false,
ip6: false,
idn: false,
punycode: false
}
}, {
name: 'file:// Windows-Drive-Letter',
url: 'file:///C:/WINDOWS/foo.txt',
parts: {
protocol: 'file',
username: null,
password: null,
hostname: null,
port: null,
path: '/C:/WINDOWS/foo.txt',
query: null,
fragment: null
},
accessors: {
protocol: 'file',
username: '',
password: '',
port: '',
path: '/C:/WINDOWS/foo.txt',
query: '',
fragment: '',
resource: '/C:/WINDOWS/foo.txt',
authority: '',
origin: '',
userinfo: '',
subdomain: '',
domain: '',
tld: '',
directory: '/C:/WINDOWS',
filename: 'foo.txt',
suffix: 'txt',
hash: '',
search: '',
host: '',
hostname: ''
},
is: {
urn: false,
url: true,
relative: true,
name: false,
sld: false,
ip: false,
ip4: false,
ip6: false,
idn: false,
punycode: false
}
}, {
name: 'file://example.org/ Windows-Drive-Letter',
url: 'file://example.org/C:/WINDOWS/foo.txt',
parts: {
protocol: 'file',
username: null,
password: null,
hostname: 'example.org',
port: null,
path: '/C:/WINDOWS/foo.txt',
query: null,
fragment: null
},
accessors: {
protocol: 'file',
username: '',
password: '',
port: '',
path: '/C:/WINDOWS/foo.txt',
query: '',
fragment: '',
resource: '/C:/WINDOWS/foo.txt',
authority: 'example.org',
origin: 'file://example.org',
userinfo: '',
subdomain: '',
domain: 'example.org',
tld: 'org',
directory: '/C:/WINDOWS',
filename: 'foo.txt',
suffix: 'txt',
hash: '',
search: '',
host: 'example.org',
hostname: 'example.org'
},
is: {
urn: false,
url: true,
relative: false,
name: true,
sld: false,
ip: false,
ip4: false,
ip6: false,
idn: false,
punycode: false
}
}, {
name: 'file://localhost/ Windows-Drive-Letter with pipe',
url: 'file://localhost/C|/WINDOWS/foo.txt',
parts: {
protocol: 'file',
username: null,
password: null,
hostname: 'localhost',
port: null,
path: '/C|/WINDOWS/foo.txt',
query: null,
fragment: null
},
accessors: {
protocol: 'file',
username: '',
password: '',
port: '',
path: '/C|/WINDOWS/foo.txt',
query: '',
fragment: '',
resource: '/C|/WINDOWS/foo.txt',
authority: 'localhost',
origin: 'file://localhost',
userinfo: '',
subdomain: '',
domain: 'localhost',
tld: 'localhost',
directory: '/C|/WINDOWS',
filename: 'foo.txt',
suffix: 'txt',
hash: '',
search: '',
host: 'localhost',
hostname: 'localhost'
},
is: {
urn: false,
url: true,
relative: false,
name: true,
sld: false,
ip: false,
ip4: false,
ip6: false,
idn: false,
punycode: false
}
}, {
name: 'Path containing @',
url: 'http://www.example.org/@foobar',
parts: {
protocol: 'http',
username: null,
password: null,
hostname: 'www.example.org',
port: null,
path: '/@foobar',
query: null,
fragment: null
},
accessors: {
protocol: 'http',
username: '',
password: '',
port: '',
path: '/@foobar',
query: '',
fragment: '',
resource: '/@foobar',
authority: 'www.example.org',
origin: 'http://www.example.org',
userinfo: '',
subdomain: 'www',
domain: 'example.org',
tld: 'org',
directory: '/',
filename: '@foobar',
suffix: '',
hash: '', // location.hash style
search: '', // location.search style
host: 'www.example.org',
hostname: 'www.example.org'
},
is: {
urn: false,
url: true,
relative: false,
name: true,
sld: false,
ip: false,
ip4: false,
ip6: false,
idn: false,
punycode: false
}
}, {
name: 'mailto:',
url: 'mailto:hello@example.org?subject=hello',
_url: 'mailto:hello@example.org?subject=hello',
parts: {
protocol: 'mailto',
username: null,
password: null,
hostname: null,
port: null,
path: 'hello@example.org',
query: 'subject=hello',
fragment: null
},
accessors: {
protocol: 'mailto',
username: '',
password: '',
port: '',
path: 'hello@example.org',
query: 'subject=hello',
fragment: '',
resource: 'hello@example.org?subject=hello',
authority: '',
origin: '',
userinfo: '',
subdomain: '',
domain: '',
tld: '',
directory: '',
filename: '',
suffix: '',
hash: '',
search: '?subject=hello',
host: '',
hostname: ''
},
is: {
urn: true,
url: false,
relative: false,
name: false,
sld: false,
ip: false,
ip4: false,
ip6: false,
idn: false,
punycode: false
}
}, {
name: 'magnet:',
url: 'magnet:?xt=urn:btih:f8c020dac7a083defda1769a1196a13facc38ef6&dn=Linux+64x+server+11.10+Pt+Pt&tr=udp%3A%2F%2Ftracker.openbittorrent.com%3A80&tr=udp%3A%2F%2Ftracker.publicbt.com%3A80&tr=udp%3A%2F%2Ftracker.ccc.de%3A80',
_url: 'magnet:?xt=urn:btih:f8c020dac7a083defda1769a1196a13facc38ef6&dn=Linux+64x+server+11.10+Pt+Pt&tr=udp%3A%2F%2Ftracker.openbittorrent.com%3A80&tr=udp%3A%2F%2Ftracker.publicbt.com%3A80&tr=udp%3A%2F%2Ftracker.ccc.de%3A80',
parts: {
protocol: 'magnet',
username: null,
password: null,
hostname: null,
port: null,
path: '',
query: 'xt=urn:btih:f8c020dac7a083defda1769a1196a13facc38ef6&dn=Linux+64x+server+11.10+Pt+Pt&tr=udp%3A%2F%2Ftracker.openbittorrent.com%3A80&tr=udp%3A%2F%2Ftracker.publicbt.com%3A80&tr=udp%3A%2F%2Ftracker.ccc.de%3A80',
fragment: null
},
accessors: {
protocol: 'magnet',
username: '',
password: '',
port: '',
path: '',
query: 'xt=urn:btih:f8c020dac7a083defda1769a1196a13facc38ef6&dn=Linux+64x+server+11.10+Pt+Pt&tr=udp%3A%2F%2Ftracker.openbittorrent.com%3A80&tr=udp%3A%2F%2Ftracker.publicbt.com%3A80&tr=udp%3A%2F%2Ftracker.ccc.de%3A80',
fragment: '',
resource: '?xt=urn:btih:f8c020dac7a083defda1769a1196a13facc38ef6&dn=Linux+64x+server+11.10+Pt+Pt&tr=udp%3A%2F%2Ftracker.openbittorrent.com%3A80&tr=udp%3A%2F%2Ftracker.publicbt.com%3A80&tr=udp%3A%2F%2Ftracker.ccc.de%3A80',
authority: '',
origin: '',
userinfo: '',
subdomain: '',
domain: '',
tld: '',
directory: '',
filename: '',
suffix: '',
hash: '',
search: '?xt=urn:btih:f8c020dac7a083defda1769a1196a13facc38ef6&dn=Linux+64x+server+11.10+Pt+Pt&tr=udp%3A%2F%2Ftracker.openbittorrent.com%3A80&tr=udp%3A%2F%2Ftracker.publicbt.com%3A80&tr=udp%3A%2F%2Ftracker.ccc.de%3A80',
host: '',
hostname: ''
},
is: {
urn: true,
url: false,
relative: false,
name: false,
sld: false,
ip: false,
ip4: false,
ip6: false,
idn: false,
punycode: false
}
}, {
name: 'javascript:',
url: 'javascript:alert("hello world");',
_url: 'javascript:alert("hello world");',
parts: {
protocol: 'javascript',
username: null,
password: null,
hostname: null,
port: null,
path: 'alert("hello world");',
query: null,
fragment: null
},
accessors: {
protocol: 'javascript',
username: '',
password: '',
port: '',
path: 'alert("hello world");',
query: '',
fragment: '',
resource: 'alert("hello world");',
authority: '',
origin: '',
userinfo: '',
subdomain: '',
domain: '',
tld: '',
directory: '',
filename: '',
suffix: '',
hash: '',
search: '',
host: '',
hostname: ''
},
is: {
urn: true,
url: false,
relative: false,
name: false,
sld: false,
ip: false,
ip4: false,
ip6: false,
idn: false,
punycode: false
}
}, {
name: 'colon in path',
url: 'http://en.wikipedia.org/wiki/Help:IPA',
_url: 'http://en.wikipedia.org/wiki/Help:IPA',
parts: {
protocol: 'http',
username: null,
password: null,
hostname: 'en.wikipedia.org',
port: null,
path: '/wiki/Help:IPA',
query: null,
fragment: null
},
accessors: {
protocol: 'http',
username: '',
password: '',
port: '',
path: '/wiki/Help:IPA',
query: '',
fragment: '',
resource: '/wiki/Help:IPA',
authority: 'en.wikipedia.org',
origin: 'http://en.wikipedia.org',
userinfo: '',
subdomain: 'en',
domain: 'wikipedia.org',
tld: 'org',
directory: '/wiki',
filename: 'Help:IPA',
suffix: '',
hash: '',
search: '',
host: 'en.wikipedia.org',
hostname: 'en.wikipedia.org'
},
is: {
urn: false,
url: true,
relative: false,
name: true,
sld: false,
ip: false,
ip4: false,
ip6: false,
idn: false,
punycode: false
}
}, {
name: 'colon in path without protocol',
url: '/wiki/Help:IPA',
_url: '/wiki/Help:IPA',
parts: {
protocol: null,
username: null,
password: null,
hostname: null,
port: null,
path: '/wiki/Help:IPA',
query: null,
fragment: null
},
accessors: {
protocol: '',
username: '',
password: '',
port: '',
path: '/wiki/Help:IPA',
query: '',
fragment: '',
resource: '/wiki/Help:IPA',
authority: '',
origin: '',
userinfo: '',
subdomain: '',
domain: '',
tld: '',
directory: '/wiki',
filename: 'Help:IPA',
suffix: '',
hash: '',
search: '',
host: '',
hostname: ''
},
is: {
urn: false,
url: true,
relative: true,
name: false,
sld: false,
ip: false,
ip4: false,
ip6: false,
idn: false,
punycode: false
}
}, {
name: 'colon dash dash in path without protocol',
url: '/foo/xy://bar',
_url: '/foo/xy://bar',
parts: {
protocol: null,
username: null,
password: null,
hostname: null,
port: null,
path: '/foo/xy://bar',
query: null,
fragment: null
},
accessors: {
protocol: '',
username: '',
password: '',
port: '',
path: '/foo/xy://bar',
query: '',
fragment: '',
resource: '/foo/xy://bar',
authority: '',
origin: '',
userinfo: '',
subdomain: '',
domain: '',
tld: '',
directory: '/foo/xy:/', // sanitized empty directory!
filename: 'bar',
suffix: '',
hash: '',
search: '',
host: '',
hostname: ''
},
is: {
urn: false,
url: true,
relative: true,
name: false,
sld: false,
ip: false,
ip4: false,
ip6: false,
idn: false,
punycode: false
}
}, {
name: 'colon in path',
url: 'http://www.example.org:8080/hello:world',
parts: {
protocol: 'http',
username: null,
password: null,
hostname: 'www.example.org',
port: '8080',
path: '/hello:world',
query: null,
fragment: null
},
accessors: {
protocol: 'http',
username: '',
password: '',
port: '8080',
path: '/hello:world',
query: '',
fragment: '',
resource: '/hello:world',
authority: 'www.example.org:8080',
origin: 'http://www.example.org:8080',
userinfo: '',
subdomain: 'www',
domain: 'example.org',
tld: 'org',
directory: '/',
filename: 'hello:world',
suffix: '',
hash: '', // location.hash style
search: '', // location.search style
host: 'www.example.org:8080',
hostname: 'www.example.org'
},
is: {
urn: false,
url: true,
relative: false,
name: true,
sld: false,
ip: false,
ip4: false,
ip6: false,
idn: false,
punycode: false
}
}, {
name: 'backslashes',
url: 'http://i.xss.com\\www.example.org/some/directory/file.html?query=string#fragment',
_url: 'http://i.xss.com/www.example.org/some/directory/file.html?query=string#fragment',
parts: {
protocol: 'http',
username: null,
password: null,
hostname: 'i.xss.com',
port: null,
path: '/www.example.org/some/directory/file.html',
query: 'query=string',
fragment: 'fragment'
},
accessors: {
protocol: 'http',
username: '',
password: '',
port: '',
path: '/www.example.org/some/directory/file.html',
query: 'query=string',
fragment: 'fragment',
resource: '/www.example.org/some/directory/file.html?query=string#fragment',
authority: 'i.xss.com',
origin: 'http://i.xss.com',
userinfo: '',
subdomain: 'i',
domain: 'xss.com',
tld: 'com',
directory: '/www.example.org/some/directory',
filename: 'file.html',
suffix: 'html',
hash: '#fragment',
search: '?query=string',
host: 'i.xss.com',
hostname: 'i.xss.com'
},
is: {
urn: false,
url: true,
relative: false,
name: true,
sld: false,
ip: false,
ip4: false,
ip6: false,
idn: false,
punycode: false
}
}
];