mirror of
https://github.com/nodejs/node.git
synced 2025-05-05 19:08:17 +00:00

the WHATWG url parser relies on ICU's punycode implementation. A handful of the standard tests fail when ICU is not present because of the additional checks that are not implemented. For now, skip the parse and setter tests if ICU is not present. PR-URL: https://github.com/nodejs/node/pull/9246 Reviewed-By: Michael Dawson <michael_dawson@ca.ibm.com> Reviewed-By: Roman Reiss <me@silverwind.io> Reviewed-By: Johan Bergström <bugs@bergstroem.nu> Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
130 lines
3.3 KiB
JavaScript
130 lines
3.3 KiB
JavaScript
'use strict';
|
|
|
|
const common = require('../common');
|
|
|
|
if (!common.hasIntl) {
|
|
// A handful of the tests fail when ICU is not included.
|
|
common.skip('missing Intl... skipping test');
|
|
return;
|
|
}
|
|
|
|
const URL = require('url').URL;
|
|
const path = require('path');
|
|
const assert = require('assert');
|
|
const tests = require(path.join(common.fixturesDir, 'url-tests.json'));
|
|
|
|
for (const test of tests) {
|
|
if (typeof test === 'string')
|
|
continue;
|
|
|
|
if (test.failure) {
|
|
assert.throws(() => new URL(test.input, test.base), /Invalid URL/);
|
|
} else {
|
|
assert.doesNotThrow(() => {
|
|
const url = new URL(test.input, test.base);
|
|
assert.strictEqual(url.href, test.href);
|
|
});
|
|
}
|
|
}
|
|
|
|
const additional_tests = [
|
|
{
|
|
'url': 'tftp://foobar.com/someconfig;mode=netascii',
|
|
'protocol': 'tftp:',
|
|
'hostname': 'foobar.com',
|
|
'pathname': '/someconfig;mode=netascii'
|
|
},
|
|
{
|
|
'url': 'telnet://user:pass@foobar.com:23/',
|
|
'protocol': 'telnet:',
|
|
'username': 'user',
|
|
'password': 'pass',
|
|
'hostname': 'foobar.com',
|
|
'port': '23',
|
|
'pathname': '/'
|
|
},
|
|
{
|
|
'url': 'ut2004://10.10.10.10:7777/Index.ut2',
|
|
'protocol': 'ut2004:',
|
|
'hostname': '10.10.10.10',
|
|
'port': '7777',
|
|
'pathname': '/Index.ut2'
|
|
},
|
|
{
|
|
'url': 'redis://foo:bar@somehost:6379/0?baz=bam&qux=baz',
|
|
'protocol': 'redis:',
|
|
'username': 'foo',
|
|
'password': 'bar',
|
|
'hostname': 'somehost',
|
|
'port': '6379',
|
|
'pathname': '/0',
|
|
'search': '?baz=bam&qux=baz'
|
|
},
|
|
{
|
|
'url': 'rsync://foo@host:911/sup',
|
|
'protocol': 'rsync:',
|
|
'username': 'foo',
|
|
'hostname': 'host',
|
|
'port': '911',
|
|
'pathname': '/sup'
|
|
},
|
|
{
|
|
'url': 'git://github.com/foo/bar.git',
|
|
'protocol': 'git:',
|
|
'hostname': 'github.com',
|
|
'pathname': '/foo/bar.git'
|
|
},
|
|
{
|
|
'url': 'irc://myserver.com:6999/channel?passwd',
|
|
'protocol': 'irc:',
|
|
'hostname': 'myserver.com',
|
|
'port': '6999',
|
|
'pathname': '/channel',
|
|
'search': '?passwd'
|
|
},
|
|
{
|
|
'url': 'dns://fw.example.org:9999/foo.bar.org?type=TXT',
|
|
'protocol': 'dns:',
|
|
'hostname': 'fw.example.org',
|
|
'port': '9999',
|
|
'pathname': '/foo.bar.org',
|
|
'search': '?type=TXT'
|
|
},
|
|
{
|
|
'url': 'ldap://localhost:389/ou=People,o=JNDITutorial',
|
|
'protocol': 'ldap:',
|
|
'hostname': 'localhost',
|
|
'port': '389',
|
|
'pathname': '/ou=People,o=JNDITutorial'
|
|
},
|
|
{
|
|
'url': 'git+https://github.com/foo/bar',
|
|
'protocol': 'git+https:',
|
|
'hostname': 'github.com',
|
|
'pathname': '/foo/bar'
|
|
},
|
|
{
|
|
'url': 'urn:ietf:rfc:2648',
|
|
'protocol': 'urn:',
|
|
'pathname': 'ietf:rfc:2648'
|
|
},
|
|
{
|
|
'url': 'tag:joe@example.org,2001:foo/bar',
|
|
'protocol': 'tag:',
|
|
'pathname': 'joe@example.org,2001:foo/bar'
|
|
}
|
|
];
|
|
|
|
additional_tests.forEach((test) => {
|
|
const u = new URL(test.url);
|
|
if (test.protocol) assert.strictEqual(test.protocol, u.protocol);
|
|
if (test.username) assert.strictEqual(test.username, u.username);
|
|
if (test.password) assert.strictEqual(test.password, u.password);
|
|
if (test.hostname) assert.strictEqual(test.hostname, u.hostname);
|
|
if (test.host) assert.strictEqual(test.host, u.host);
|
|
if (test.port !== undefined) assert.strictEqual(test.port, u.port);
|
|
if (test.pathname) assert.strictEqual(test.pathname, u.pathname);
|
|
if (test.search) assert.strictEqual(test.search, u.search);
|
|
if (test.hash) assert.strictEqual(test.hash, u.hash);
|
|
});
|