test(wasi-runtime): exit and park, under node
runtime.js had no test that runs it. WasiBrowserRuntimeExit runs the real file under node, once per scenario, against a module assembled in the harness. Between _start and the call that ends it the module has the frames that caught the old exit: a destructor (catch_all_ref, then throw_ref), a catch (...) and a noexcept function, each reporting when it runs. An exit has to run none of them and record its status; a park has to run none of them, nor the code after it, and leave the program callable with its state intact; an exit from a later call has to end the program too, a return from main has to give status 0, and a crash or an exception nothing caught has to stay an error. With the JS throw put back into proc_exit, the exit from main and the exit from a later call both end in the noexcept frame's terminate. It skips without node, or with a node whose engine lacks the standardized exception handling. The Flatpak has no node, so CI does not run it; the native loop does. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
0dabce0b74
commit
fec206839e
3 changed files with 243 additions and 0 deletions
|
|
@ -266,6 +266,7 @@ extern "C" Configuration CrafterBuildProject(std::span<const std::string_view> a
|
|||
cfg.AddTest("SysrootCompileFlags").Dependencies({ CrafterBuildLib.get() });
|
||||
cfg.AddTest("VersionFlag").Dependencies({ CrafterBuildLib.get() });
|
||||
cfg.AddTest("WasiBrowserRuntime").Dependencies({ CrafterBuildLib.get() });
|
||||
cfg.AddTest("WasiBrowserRuntimeExit").Dependencies({ CrafterBuildLib.get() });
|
||||
cfg.AddTest("WasmVariants").Dependencies({ CrafterBuildLib.get() });
|
||||
cfg.AddTest("WasmHelloRuns").Dependencies({ CrafterBuildLib.get() });
|
||||
cfg.AddTest("WasmExceptions").Dependencies({ CrafterBuildLib.get() });
|
||||
|
|
|
|||
Loading…
Reference in a new issue