diff options
author | Casper Beyer <caspervonb@pm.me> | 2021-02-24 20:55:50 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-02-24 13:55:50 +0100 |
commit | 9cc7e32e37e6708980abc051f2cb71526c175d88 (patch) | |
tree | 42728035073e98745ebd022c6788ba4d4ba520fd /runtime/js/30_os.js | |
parent | dc3683c7a433bf44656063c9eee87709fbe1e7d4 (diff) |
feat: add exit sanitizer to Deno.test (#9529)
This adds an exit sanitizer to ensure that code being tested or
dependencies of that code can't accidentally call "Deno.exit"
leading to partial test runs and false results.
Diffstat (limited to 'runtime/js/30_os.js')
-rw-r--r-- | runtime/js/30_os.js | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/runtime/js/30_os.js b/runtime/js/30_os.js index 236131432..23c3d8de6 100644 --- a/runtime/js/30_os.js +++ b/runtime/js/30_os.js @@ -24,6 +24,13 @@ return core.jsonOpSync("op_system_cpu_info"); } + // This is an internal only method used by the test harness to override the + // behavior of exit when the exit sanitizer is enabled. + let exitHandler = null; + function setExitHandler(fn) { + exitHandler = fn; + } + function exit(code = 0) { // Dispatches `unload` only when it's not dispatched yet. if (!window[Symbol.for("isUnloadDispatched")]) { @@ -31,6 +38,12 @@ // ref: https://github.com/denoland/deno/issues/3603 window.dispatchEvent(new Event("unload")); } + + if (exitHandler) { + exitHandler(code); + return; + } + core.jsonOpSync("op_exit", { code }); throw new Error("Code not reachable"); } @@ -63,6 +76,7 @@ window.__bootstrap.os = { env, execPath, + setExitHandler, exit, osRelease, systemMemoryInfo, |