summaryrefslogtreecommitdiff
path: root/test/js-native-api/test_exception/test.js
diff options
context:
space:
mode:
Diffstat (limited to 'test/js-native-api/test_exception/test.js')
-rw-r--r--test/js-native-api/test_exception/test.js47
1 files changed, 47 insertions, 0 deletions
diff --git a/test/js-native-api/test_exception/test.js b/test/js-native-api/test_exception/test.js
index ff11b70219..38e8fd1d6b 100644
--- a/test/js-native-api/test_exception/test.js
+++ b/test/js-native-api/test_exception/test.js
@@ -48,6 +48,34 @@ const test_exception = (function() {
` thrown, but ${returnedError} was passed`);
}
+
+{
+ const throwTheError = class { constructor() { throw theError; } };
+
+ // Test that the native side successfully captures the exception
+ let returnedError = test_exception.constructReturnException(throwTheError);
+ assert.strictEqual(returnedError, theError);
+
+ // Test that the native side passes the exception through
+ assert.throws(
+ () => { test_exception.constructAllowException(throwTheError); },
+ (err) => err === theError
+ );
+
+ // Test that the exception thrown above was marked as pending
+ // before it was handled on the JS side
+ const exception_pending = test_exception.wasPending();
+ assert.strictEqual(exception_pending, true,
+ 'Exception not pending as expected,' +
+ ` .wasPending() returned ${exception_pending}`);
+
+ // Test that the native side does not capture a non-existing exception
+ returnedError = test_exception.constructReturnException(common.mustCall());
+ assert.strictEqual(returnedError, undefined,
+ 'Returned error should be undefined when no exception is' +
+ ` thrown, but ${returnedError} was passed`);
+}
+
{
// Test that no exception appears that was not thrown by us
let caughtError;
@@ -66,3 +94,22 @@ const test_exception = (function() {
'Exception state did not remain clear as expected,' +
` .wasPending() returned ${exception_pending}`);
}
+
+{
+ // Test that no exception appears that was not thrown by us
+ let caughtError;
+ try {
+ test_exception.constructAllowException(common.mustCall());
+ } catch (anError) {
+ caughtError = anError;
+ }
+ assert.strictEqual(caughtError, undefined,
+ 'No exception originated on the native side, but' +
+ ` ${caughtError} was passed`);
+
+ // Test that the exception state remains clear when no exception is thrown
+ const exception_pending = test_exception.wasPending();
+ assert.strictEqual(exception_pending, false,
+ 'Exception state did not remain clear as expected,' +
+ ` .wasPending() returned ${exception_pending}`);
+}