From add1fcd301e56528c8974c8f366380f2c239fa92 Mon Sep 17 00:00:00 2001 From: Ruben Bridgewater Date: Tue, 4 Sep 2018 15:18:44 +0200 Subject: [PATCH] assert: add default operator to `assert.fail()` This makes sure `assert.fail()` contains an operator instead of being undefined. On top of that it also fixes the `err.generatedMessage` property. Before, it was not always set correct. PR-URL: https://github.com/nodejs/node/pull/22694 Reviewed-By: John-David Dalton Reviewed-By: Matteo Collina --- lib/assert.js | 21 ++++++++++++++----- test/parallel/test-assert-fail-deprecation.js | 8 ++++--- test/parallel/test-assert-fail.js | 10 +++++---- 3 files changed, 27 insertions(+), 12 deletions(-) diff --git a/lib/assert.js b/lib/assert.js index 2b7628a8a32500..69618862f2182c 100644 --- a/lib/assert.js +++ b/lib/assert.js @@ -86,8 +86,9 @@ function innerFail(obj) { function fail(actual, expected, message, operator, stackStartFn) { const argsLen = arguments.length; + let internalMessage; if (argsLen === 0) { - message = 'Failed'; + internalMessage = 'Failed'; } else if (argsLen === 1) { message = actual; actual = undefined; @@ -105,13 +106,23 @@ function fail(actual, expected, message, operator, stackStartFn) { operator = '!='; } - innerFail({ + if (message instanceof Error) throw message; + + const errArgs = { actual, expected, - message, - operator, + operator: operator === undefined ? 'fail' : operator, stackStartFn: stackStartFn || fail - }); + }; + if (message !== undefined) { + errArgs.message = message; + } + const err = new AssertionError(errArgs); + if (internalMessage) { + err.message = internalMessage; + err.generatedMessage = true; + } + throw err; } assert.fail = fail; diff --git a/test/parallel/test-assert-fail-deprecation.js b/test/parallel/test-assert-fail-deprecation.js index 68ebcd612d31df..97cba760e03836 100644 --- a/test/parallel/test-assert-fail-deprecation.js +++ b/test/parallel/test-assert-fail-deprecation.js @@ -19,7 +19,8 @@ assert.throws(() => { message: '\'first\' != \'second\'', operator: '!=', actual: 'first', - expected: 'second' + expected: 'second', + generatedMessage: true }); // Three args @@ -29,9 +30,10 @@ assert.throws(() => { code: 'ERR_ASSERTION', name: 'AssertionError [ERR_ASSERTION]', message: 'another custom message', - operator: undefined, + operator: 'fail', actual: 'ignored', - expected: 'ignored' + expected: 'ignored', + generatedMessage: false }); // Three args with custom Error diff --git a/test/parallel/test-assert-fail.js b/test/parallel/test-assert-fail.js index e8336e8f2169ef..4410cc85442707 100644 --- a/test/parallel/test-assert-fail.js +++ b/test/parallel/test-assert-fail.js @@ -10,9 +10,10 @@ assert.throws( code: 'ERR_ASSERTION', name: 'AssertionError [ERR_ASSERTION]', message: 'Failed', - operator: undefined, + operator: 'fail', actual: undefined, - expected: undefined + expected: undefined, + generatedMessage: true } ); @@ -23,9 +24,10 @@ assert.throws(() => { code: 'ERR_ASSERTION', name: 'AssertionError [ERR_ASSERTION]', message: 'custom message', - operator: undefined, + operator: 'fail', actual: undefined, - expected: undefined + expected: undefined, + generatedMessage: false }); // One arg = Error