Permalink
Browse files

errors,url: port url errors to internal/errors

PR-URL: #13963
Reviewed-By: Refael Ackermann <refack@gmail.com>
Reviewed-By: Timothy Gu <timothygu99@gmail.com>
Reviewed-By: Michael Dawson <michael_dawson@ca.ibm.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
  • Loading branch information...
starkwang authored and refack committed Jun 28, 2017
1 parent fc46363 commit 473f0eff29c84aeb19ae1fb7898bc99321ac5754
Showing with 29 additions and 20 deletions.
  1. +4 −3 lib/url.js
  2. +7 −3 test/parallel/test-url-format-invalid-input.js
  3. +18 −14 test/parallel/test-url-parse-invalid-input.js
View
@@ -26,6 +26,8 @@ const { toASCII } = process.binding('config').hasIntl ?
const { hexTable } = require('internal/querystring');
const errors = require('internal/errors');
// WHATWG URL implementation provided by internal/url
const {
URL,
@@ -99,7 +101,7 @@ function urlParse(url, parseQueryString, slashesDenoteHost) {
Url.prototype.parse = function parse(url, parseQueryString, slashesDenoteHost) {
if (typeof url !== 'string') {
throw new TypeError('Parameter "url" must be a string, not ' + typeof url);
throw new errors.TypeError('ERR_INVALID_ARG_TYPE', 'url', 'string', url);
}
// Copy chrome, IE, opera backslash-handling behavior.
@@ -556,8 +558,7 @@ function urlFormat(obj, options) {
if (typeof obj === 'string') {
obj = urlParse(obj);
} else if (typeof obj !== 'object' || obj === null) {
throw new TypeError('Parameter "urlObj" must be an object, not ' +
(obj === null ? 'null' : typeof obj));
throw new errors.TypeError('ERR_INVALID_ARG_TYPE', 'urlObj', 'object', obj);
} else if (!(obj instanceof Url)) {
var format = obj[formatSymbol];
return format ?
@@ -1,5 +1,5 @@
'use strict';
require('../common');
const common = require('../common');
const assert = require('assert');
const url = require('url');
@@ -14,8 +14,12 @@ const throwsObjsAndReportTypes = new Map([
]);
for (const [obj, type] of throwsObjsAndReportTypes) {
const error = new RegExp(
`^TypeError: Parameter "urlObj" must be an object, not ${type}$`);
const error = common.expectsError({
code: 'ERR_INVALID_ARG_TYPE',
type: TypeError,
message: 'The "urlObj" argument must be of type object. ' +
`Received type ${type}`
});
assert.throws(function() { url.format(obj); }, error);
}
assert.strictEqual(url.format(''), '');
@@ -1,23 +1,27 @@
'use strict';
require('../common');
const common = require('../common');
const assert = require('assert');
const url = require('url');
// https://github.com/joyent/node/issues/568
const errMessage = /^TypeError: Parameter "url" must be a string, not (?:undefined|boolean|number|object|function|symbol)$/;
[
undefined,
null,
true,
false,
0.0,
0,
[],
{},
() => {},
Symbol('foo')
].forEach((val) => {
assert.throws(() => { url.parse(val); }, errMessage);
[undefined, 'undefined'],
[null, 'null'],
[true, 'boolean'],
[false, 'boolean'],
[0.0, 'number'],
[0, 'number'],
[[], 'object'],
[{}, 'object'],
[() => {}, 'function'],
[Symbol('foo'), 'symbol']
].forEach(([val, type]) => {
const error = common.expectsError({
code: 'ERR_INVALID_ARG_TYPE',
type: TypeError,
message: `The "url" argument must be of type string. Received type ${type}`
});
assert.throws(() => { url.parse(val); }, error);
});
assert.throws(() => { url.parse('http://%E0%A4%A@fail'); },

0 comments on commit 473f0ef

Please sign in to comment.