url: TupleOrigin#toString use unicode by default

See: https://url.spec.whatwg.org/#dom-url-origin

Also moves the tests for origins to the parsing tests
since now URL#origin matches the test cases by default.

PR-URL: https://github.com/nodejs/node/pull/10552
Reviewed-By: James M Snell <jasnell@gmail.com>
This commit is contained in:
Joyee Cheung 2016-12-31 14:20:10 +08:00 committed by James M Snell
parent ac90d298d4
commit 2177a38178
3 changed files with 25 additions and 38 deletions

View File

@ -66,7 +66,8 @@ class TupleOrigin {
return this[kDomain] || this[kHost];
}
toString(unicode = false) {
// https://url.spec.whatwg.org/#dom-url-origin
toString(unicode = true) {
var result = this[kScheme];
result += '://';
result += unicode ? domainToUnicode(this[kHost]) : this[kHost];
@ -321,7 +322,7 @@ Object.defineProperties(URL.prototype, {
enumerable: true,
configurable: true,
get() {
return originFor(this).toString(true);
return originFor(this).toString();
}
},
protocol: {

View File

@ -1,19 +0,0 @@
'use strict';
const common = require('../common');
const originFor = require('url').originFor;
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.origin) {
const origin = originFor(test.input, test.base);
// Pass true to origin.toString() to enable unicode serialization.
assert.strictEqual(origin.toString(true), test.origin);
}
}

View File

@ -13,17 +13,30 @@ const path = require('path');
const assert = require('assert');
const tests = require(path.join(common.fixturesDir, 'url-tests.json'));
function verifyURL(url, test) {
if (test.href) assert.strictEqual(url.href, test.href);
if (test.origin) assert.strictEqual(url.origin, test.origin);
if (test.protocol) assert.strictEqual(url.protocol, test.protocol);
if (test.username) assert.strictEqual(url.username, test.username);
if (test.password) assert.strictEqual(url.password, test.password);
if (test.hostname) assert.strictEqual(url.hostname, test.hostname);
if (test.host) assert.strictEqual(url.host, test.host);
if (test.port !== undefined) assert.strictEqual(url.port, test.port);
if (test.pathname) assert.strictEqual(url.pathname, test.pathname);
if (test.search) assert.strictEqual(url.search, test.search);
if (test.hash) assert.strictEqual(url.hash, test.hash);
}
for (const test of tests) {
if (typeof test === 'string')
continue;
if (test.failure) {
assert.throws(() => new URL(test.input, test.base), /Invalid URL/);
assert.throws(() => new URL(test.input, test.base),
/^TypeError: Invalid URL$/);
} else {
assert.doesNotThrow(() => {
const url = new URL(test.input, test.base);
assert.strictEqual(url.href, test.href);
});
verifyURL(url, test);
}
}
@ -115,18 +128,10 @@ const additional_tests = [
}
];
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);
});
for (const test of additional_tests) {
const url = new URL(test.url);
verifyURL(url, test);
}
// test inspect
const allTests = additional_tests.slice();