summaryrefslogtreecommitdiffstats
path: root/tests/run-make/wasm-exceptions-nostd/verify.mjs
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--tests/run-make/wasm-exceptions-nostd/verify.mjs75
1 files changed, 75 insertions, 0 deletions
diff --git a/tests/run-make/wasm-exceptions-nostd/verify.mjs b/tests/run-make/wasm-exceptions-nostd/verify.mjs
new file mode 100644
index 000000000..e6c44d89d
--- /dev/null
+++ b/tests/run-make/wasm-exceptions-nostd/verify.mjs
@@ -0,0 +1,75 @@
+import fs from 'fs';
+
+const dec = new TextDecoder("utf-8");
+
+if (process.argv.length != 3) {
+ console.log("Usage: node verify.mjs <wasm-file>");
+ process.exit(0);
+}
+
+const wasmfile = process.argv[2];
+if (!fs.existsSync(wasmfile)) {
+ console.log("Error: File not found:", wasmfile);
+ process.exit(1);
+}
+
+const wasmBuffer = fs.readFileSync(wasmfile);
+
+async function main() {
+
+ let memory = new ArrayBuffer(0) // will be changed after instantiate
+
+ const captured_output = [];
+
+ const imports = {
+ env: {
+ __log_utf8: (ptr, size) => {
+ const str = dec.decode(new DataView(memory, ptr, size));
+ captured_output.push(str);
+ console.log(str);
+ }
+ }
+ };
+
+ const wasmModule = await WebAssembly.instantiate(wasmBuffer, imports);
+ memory = wasmModule.instance.exports.memory.buffer;
+
+ const start = wasmModule.instance.exports.start;
+ const return_code = start();
+
+ console.log("Return-Code:", return_code);
+
+ if (return_code !== 0) {
+ console.error("Expected return code 0");
+ process.exit(return_code);
+ }
+
+ const expected_output = [
+ '`r#try` called with ptr 0x1234',
+ 'Dropped',
+ 'Caught something!',
+ ' data : 0x1234',
+ ' exception: "index out of bounds: the len is 1 but the index is 4"',
+ 'This program terminates correctly.',
+ ];
+
+ assert_equal(captured_output, expected_output);
+}
+
+function assert_equal(captured_output, expected_output) {
+ if (captured_output.length != expected_output.length) {
+ console.error("Unexpected number of output lines. Got", captured_output.length, "but expected", expected_output.length);
+ process.exit(1); // exit with error
+ }
+
+ for (let idx = 0; idx < expected_output.length; ++idx) {
+ if (captured_output[idx] !== expected_output[idx]) {
+ console.error("Unexpected output");
+ console.error("[got] ", captured_output[idx]);
+ console.error("[expected]", expected_output[idx]);
+ process.exit(2); // exit with error
+ }
+ }
+}
+
+await main(); \ No newline at end of file