summaryrefslogtreecommitdiff
path: root/runtime/js/40_testing.js
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/js/40_testing.js')
-rw-r--r--runtime/js/40_testing.js28
1 files changed, 27 insertions, 1 deletions
diff --git a/runtime/js/40_testing.js b/runtime/js/40_testing.js
index 2258dc7b6..eec75f133 100644
--- a/runtime/js/40_testing.js
+++ b/runtime/js/40_testing.js
@@ -4,7 +4,7 @@
((window) => {
const core = window.Deno.core;
const colors = window.__bootstrap.colors;
- const { exit } = window.__bootstrap.os;
+ const { setExitHandler, exit } = window.__bootstrap.os;
const { Console, inspectArgs } = window.__bootstrap.console;
const { stdout } = window.__bootstrap.files;
const { exposeForTest } = window.__bootstrap.internals;
@@ -86,6 +86,27 @@ finishing test case.`;
};
}
+ // Wrap test function in additional assertion that makes sure
+ // that the test case does not accidentally exit prematurely.
+ function assertExit(fn) {
+ return async function exitSanitizer() {
+ setExitHandler((exitCode) => {
+ assert(
+ false,
+ `Test case attempted to exit with exit code: ${exitCode}`,
+ );
+ });
+
+ try {
+ await fn();
+ } catch (err) {
+ throw err;
+ } finally {
+ setExitHandler(null);
+ }
+ };
+ }
+
const TEST_REGISTRY = [];
// Main test function provided by Deno, as you can see it merely
@@ -100,6 +121,7 @@ finishing test case.`;
only: false,
sanitizeOps: true,
sanitizeResources: true,
+ sanitizeExit: true,
};
if (typeof t === "string") {
@@ -128,6 +150,10 @@ finishing test case.`;
testDef.fn = assertResources(testDef.fn);
}
+ if (testDef.sanitizeExit) {
+ testDef.fn = assertExit(testDef.fn);
+ }
+
TEST_REGISTRY.push(testDef);
}