From b630e4731f01f52892c4d65212dbe24c9fd847de Mon Sep 17 00:00:00 2001 From: starkwang <381152119@qq.com> Date: Thu, 29 Jun 2017 00:12:12 +0800 Subject: [PATCH] errors, url: port url errors to internal/errors --- lib/url.js | 7 ++-- .../parallel/test-url-format-invalid-input.js | 10 ++++-- test/parallel/test-url-parse-invalid-input.js | 32 +++++++++++-------- 3 files changed, 29 insertions(+), 20 deletions(-) diff --git a/lib/url.js b/lib/url.js index 2c9bc58ab53f1e..fcddd4afaf2ba7 100644 --- a/lib/url.js +++ b/lib/url.js @@ -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 ? diff --git a/test/parallel/test-url-format-invalid-input.js b/test/parallel/test-url-format-invalid-input.js index 0f800496307921..a80cd9058627db 100644 --- a/test/parallel/test-url-format-invalid-input.js +++ b/test/parallel/test-url-format-invalid-input.js @@ -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(''), ''); diff --git a/test/parallel/test-url-parse-invalid-input.js b/test/parallel/test-url-parse-invalid-input.js index a2591123324301..86751a2935a7bf 100644 --- a/test/parallel/test-url-parse-invalid-input.js +++ b/test/parallel/test-url-parse-invalid-input.js @@ -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'); },