summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorRuben Bridgewater <ruben@bridgewater.de>2019-06-14 16:29:25 +0200
committerRuben Bridgewater <ruben@bridgewater.de>2019-10-01 22:55:40 +0200
commit5700cd17dd167f6835131b42809476e5f30762ba (patch)
treeac59894b4b7518ea1b840ff689fc491380f18c0f /lib
parentd47b6786c91908e2601400f4e3e381143049beed (diff)
downloadandroid-node-v8-5700cd17dd167f6835131b42809476e5f30762ba.tar.gz
android-node-v8-5700cd17dd167f6835131b42809476e5f30762ba.tar.bz2
android-node-v8-5700cd17dd167f6835131b42809476e5f30762ba.zip
assert: do not repeat .throws() code
This refactors some code for less duplication. PR-URL: https://github.com/nodejs/node/pull/28263 Reviewed-By: Rich Trott <rtrott@gmail.com> Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com>
Diffstat (limited to 'lib')
-rw-r--r--lib/assert.js97
1 files changed, 40 insertions, 57 deletions
diff --git a/lib/assert.js b/lib/assert.js
index 3d54dcd63f..50ab6b39b1 100644
--- a/lib/assert.js
+++ b/lib/assert.js
@@ -563,6 +563,7 @@ function compareExceptionKey(actual, expected, key, message, keys, fn) {
function expectedException(actual, expected, message, fn) {
let generatedMessage = false;
+ let throwError = false;
if (typeof expected !== 'function') {
// Handle regular expressions.
@@ -576,20 +577,9 @@ function expectedException(actual, expected, message, fn) {
message = 'The input did not match the regular expression ' +
`${inspect(expected)}. Input:\n\n${inspect(str)}\n`;
}
-
- const err = new AssertionError({
- actual,
- expected,
- message,
- operator: fn.name,
- stackStartFn: fn
- });
- err.generatedMessage = generatedMessage;
- throw err;
- }
-
- // Handle primitives properly.
- if (typeof actual !== 'object' || actual === null) {
+ throwError = true;
+ // Handle primitives properly.
+ } else if (typeof actual !== 'object' || actual === null) {
const err = new AssertionError({
actual,
expected,
@@ -599,36 +589,33 @@ function expectedException(actual, expected, message, fn) {
});
err.operator = fn.name;
throw err;
- }
-
- // Handle validation objects.
- const keys = Object.keys(expected);
- // Special handle errors to make sure the name and the message are compared
- // as well.
- if (expected instanceof Error) {
- keys.push('name', 'message');
- } else if (keys.length === 0) {
- throw new ERR_INVALID_ARG_VALUE('error',
- expected, 'may not be an empty object');
- }
- if (isDeepEqual === undefined) lazyLoadComparison();
- for (const key of keys) {
- if (typeof actual[key] === 'string' &&
- isRegExp(expected[key]) &&
- expected[key].test(actual[key])) {
- continue;
+ } else {
+ // Handle validation objects.
+ const keys = Object.keys(expected);
+ // Special handle errors to make sure the name and the message are
+ // compared as well.
+ if (expected instanceof Error) {
+ keys.push('name', 'message');
+ } else if (keys.length === 0) {
+ throw new ERR_INVALID_ARG_VALUE('error',
+ expected, 'may not be an empty object');
}
- compareExceptionKey(actual, expected, key, message, keys, fn);
+ if (isDeepEqual === undefined) lazyLoadComparison();
+ for (const key of keys) {
+ if (typeof actual[key] === 'string' &&
+ isRegExp(expected[key]) &&
+ expected[key].test(actual[key])) {
+ continue;
+ }
+ compareExceptionKey(actual, expected, key, message, keys, fn);
+ }
+ return;
}
- return;
- }
-
// Guard instanceof against arrow functions as they don't have a prototype.
// Check for matching Error classes.
- if (expected.prototype !== undefined && actual instanceof expected) {
+ } else if (expected.prototype !== undefined && actual instanceof expected) {
return;
- }
- if (ObjectPrototype.isPrototypeOf(Error, expected)) {
+ } else if (ObjectPrototype.isPrototypeOf(Error, expected)) {
if (!message) {
generatedMessage = true;
message = 'The error is expected to be an instance of ' +
@@ -639,26 +626,22 @@ function expectedException(actual, expected, message, fn) {
message += `"${inspect(actual, { depth: -1 })}"`;
}
}
- const err = new AssertionError({
- actual,
- expected,
- message,
- operator: fn.name,
- stackStartFn: fn
- });
- err.generatedMessage = generatedMessage;
- throw err;
+ throwError = true;
+ } else {
+ // Check validation functions return value.
+ const res = expected.call({}, actual);
+ if (res !== true) {
+ if (!message) {
+ generatedMessage = true;
+ const name = expected.name ? `"${expected.name}" ` : '';
+ message = `The ${name}validation function is expected to return` +
+ ` "true". Received ${inspect(res)}`;
+ }
+ throwError = true;
+ }
}
- // Check validation functions return value.
- const res = expected.call({}, actual);
- if (res !== true) {
- if (!message) {
- generatedMessage = true;
- const name = expected.name ? `"${expected.name}" ` : '';
- message = `The ${name}validation function is expected to return "true".` +
- ` Received ${inspect(res)}`;
- }
+ if (throwError) {
const err = new AssertionError({
actual,
expected,