aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorfeugy <damien.feugas@gmail.com>2018-01-12 00:16:41 +0100
committerRuben Bridgewater <ruben@bridgewater.de>2018-03-11 04:58:32 +0100
commit599337f43e0e0d66263e69d70edab26b61d3038a (patch)
tree72211965a669694de7e4b148f14e4abf6460d510 /lib
parent580ad0157a4dcb21a8ed6b288defdd959711f364 (diff)
downloadandroid-node-v8-599337f43e0e0d66263e69d70edab26b61d3038a.tar.gz
android-node-v8-599337f43e0e0d66263e69d70edab26b61d3038a.tar.bz2
android-node-v8-599337f43e0e0d66263e69d70edab26b61d3038a.zip
assert: add rejects() and doesNotReject()
Implement asynchronous equivalent for assert.throws() and assert.doesNotThrow(). PR-URL: https://github.com/nodejs/node/pull/18023 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Shingo Inoue <leko.noor@gmail.com> Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com> Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
Diffstat (limited to 'lib')
-rw-r--r--lib/assert.js64
1 files changed, 49 insertions, 15 deletions
diff --git a/lib/assert.js b/lib/assert.js
index f8eeba7222..b0d0d9ab4c 100644
--- a/lib/assert.js
+++ b/lib/assert.js
@@ -425,14 +425,23 @@ function getActual(block) {
return NO_EXCEPTION_SENTINEL;
}
-// Expected to throw an error.
-assert.throws = function throws(block, error, message) {
- const actual = getActual(block);
+async function waitForActual(block) {
+ if (typeof block !== 'function') {
+ throw new ERR_INVALID_ARG_TYPE('block', 'Function', block);
+ }
+ try {
+ await block();
+ } catch (e) {
+ return e;
+ }
+ return NO_EXCEPTION_SENTINEL;
+}
+function expectsError(stackStartFn, actual, error, message) {
if (typeof error === 'string') {
- if (arguments.length === 3)
+ if (arguments.length === 4) {
throw new ERR_INVALID_ARG_TYPE('error', ['Function', 'RegExp'], error);
-
+ }
message = error;
error = null;
}
@@ -443,21 +452,21 @@ assert.throws = function throws(block, error, message) {
details += ` (${error.name})`;
}
details += message ? `: ${message}` : '.';
+ const fnType = stackStartFn === rejects ? 'rejection' : 'exception';
innerFail({
actual,
expected: error,
- operator: 'throws',
- message: `Missing expected exception${details}`,
- stackStartFn: throws
+ operator: stackStartFn.name,
+ message: `Missing expected ${fnType}${details}`,
+ stackStartFn
});
}
if (error && expectedException(actual, error, message) === false) {
throw actual;
}
-};
+}
-assert.doesNotThrow = function doesNotThrow(block, error, message) {
- const actual = getActual(block);
+function expectsNoError(stackStartFn, actual, error, message) {
if (actual === NO_EXCEPTION_SENTINEL)
return;
@@ -468,16 +477,41 @@ assert.doesNotThrow = function doesNotThrow(block, error, message) {
if (!error || expectedException(actual, error)) {
const details = message ? `: ${message}` : '.';
+ const fnType = stackStartFn === doesNotReject ? 'rejection' : 'exception';
innerFail({
actual,
expected: error,
- operator: 'doesNotThrow',
- message: `Got unwanted exception${details}\n${actual && actual.message}`,
- stackStartFn: doesNotThrow
+ operator: stackStartFn.name,
+ message: `Got unwanted ${fnType}${details}\n${actual && actual.message}`,
+ stackStartFn
});
}
throw actual;
-};
+}
+
+function throws(block, ...args) {
+ expectsError(throws, getActual(block), ...args);
+}
+
+assert.throws = throws;
+
+async function rejects(block, ...args) {
+ expectsError(rejects, await waitForActual(block), ...args);
+}
+
+assert.rejects = rejects;
+
+function doesNotThrow(block, ...args) {
+ expectsNoError(doesNotThrow, getActual(block), ...args);
+}
+
+assert.doesNotThrow = doesNotThrow;
+
+async function doesNotReject(block, ...args) {
+ expectsNoError(doesNotReject, await waitForActual(block), ...args);
+}
+
+assert.doesNotReject = doesNotReject;
assert.ifError = function ifError(err) {
if (err !== null && err !== undefined) {