summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Noordhuis <info@bnoordhuis.nl>2015-10-08 12:25:03 +0200
committerJames M Snell <jasnell@gmail.com>2015-10-10 10:49:54 -0700
commit8383c4fe00e05bb139a3315eefe08b8d1020dfbd (patch)
treee7fd0294abf34cabd0d9ccdb2fe5bf995de7cdae
parentf0f8afd8795ae6e86129ab5ad1b15b9069454db4 (diff)
downloadnodejs-8383c4fe00e05bb139a3315eefe08b8d1020dfbd.tar.gz
nodejs-8383c4fe00e05bb139a3315eefe08b8d1020dfbd.tar.bz2
nodejs-8383c4fe00e05bb139a3315eefe08b8d1020dfbd.zip
assert: support arrow functions in .throws()
`x instanceof f` where f is an arrow function throws a (spec-conforming) "Function has non-object prototype 'undefined' in instanceof check" exception. Add a workaround so that it's possible to pass arrow functions as the second argument to assert.throws(). The try/catch block is a little jarring but swapping around the clauses in the if statements changes the semantics too much. Fixes: https://github.com/nodejs/node/issues/3275 PR-URL: https://github.com/nodejs/node/pull/3276 Reviewed-By: Michaƫl Zasso <mic.besace@gmail.com> Reviewed-By: Sakthipriyan Vairamani <thechargingvolcano@gmail.com>
-rw-r--r--lib/assert.js14
-rw-r--r--test/parallel/test-assert.js4
2 files changed, 13 insertions, 5 deletions
diff --git a/lib/assert.js b/lib/assert.js
index ea142ed01..6b99098c5 100644
--- a/lib/assert.js
+++ b/lib/assert.js
@@ -268,13 +268,17 @@ function expectedException(actual, expected) {
if (Object.prototype.toString.call(expected) == '[object RegExp]') {
return expected.test(actual);
- } else if (actual instanceof expected) {
- return true;
- } else if (expected.call({}, actual) === true) {
- return true;
}
- return false;
+ try {
+ if (actual instanceof expected) {
+ return true;
+ }
+ } catch (e) {
+ // Ignore. The instanceof check doesn't work for arrow functions.
+ }
+
+ return expected.call({}, actual) === true;
}
function _throws(shouldThrow, block, expected, message) {
diff --git a/test/parallel/test-assert.js b/test/parallel/test-assert.js
index ce84eabc3..ce19462a6 100644
--- a/test/parallel/test-assert.js
+++ b/test/parallel/test-assert.js
@@ -465,4 +465,8 @@ testBlockTypeError(assert.doesNotThrow, null);
testBlockTypeError(assert.throws, undefined);
testBlockTypeError(assert.doesNotThrow, undefined);
+// https://github.com/nodejs/node/issues/3275
+assert.throws(() => { throw 'error'; }, err => err === 'error');
+assert.throws(() => { throw Error(); }, err => err instanceof Error);
+
console.log('All OK');