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]; return this[kDomain] || this[kHost];
} }
toString(unicode = false) { // https://url.spec.whatwg.org/#dom-url-origin
toString(unicode = true) {
var result = this[kScheme]; var result = this[kScheme];
result += '://'; result += '://';
result += unicode ? domainToUnicode(this[kHost]) : this[kHost]; result += unicode ? domainToUnicode(this[kHost]) : this[kHost];
@ -321,7 +322,7 @@ Object.defineProperties(URL.prototype, {
enumerable: true, enumerable: true,
configurable: true, configurable: true,
get() { get() {
return originFor(this).toString(true); return originFor(this).toString();
} }
}, },
protocol: { 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 assert = require('assert');
const tests = require(path.join(common.fixturesDir, 'url-tests.json')); 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) { for (const test of tests) {
if (typeof test === 'string') if (typeof test === 'string')
continue; continue;
if (test.failure) { 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 { } else {
assert.doesNotThrow(() => { const url = new URL(test.input, test.base);
const url = new URL(test.input, test.base); verifyURL(url, test);
assert.strictEqual(url.href, test.href);
});
} }
} }
@ -115,18 +128,10 @@ const additional_tests = [
} }
]; ];
additional_tests.forEach((test) => { for (const test of additional_tests) {
const u = new URL(test.url); const url = new URL(test.url);
if (test.protocol) assert.strictEqual(test.protocol, u.protocol); verifyURL(url, test);
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);
});
// test inspect // test inspect
const allTests = additional_tests.slice(); const allTests = additional_tests.slice();