40 lines
1 KiB
JavaScript
40 lines
1 KiB
JavaScript
import { compileWat, WasmRunner } from "@exercism/wasm-lib";
|
|
|
|
let wasmModule;
|
|
let currentInstance;
|
|
|
|
beforeAll(async () => {
|
|
try {
|
|
const watPath = new URL("./hello-world.wat", import.meta.url);
|
|
const { buffer } = await compileWat(watPath);
|
|
wasmModule = await WebAssembly.compile(buffer);
|
|
} catch (err) {
|
|
console.log(`Error compiling *.wat: \n${err}`);
|
|
process.exit(1);
|
|
}
|
|
});
|
|
|
|
describe("Hello World", () => {
|
|
beforeEach(async () => {
|
|
currentInstance = null;
|
|
|
|
if (!wasmModule) {
|
|
return Promise.reject();
|
|
}
|
|
try {
|
|
currentInstance = await new WasmRunner(wasmModule);
|
|
return Promise.resolve();
|
|
} catch (err) {
|
|
console.log(`Error instantiating WebAssembly module: ${err}`);
|
|
return Promise.reject();
|
|
}
|
|
});
|
|
|
|
test("Say Hi!", () => {
|
|
expect(currentInstance).toBeTruthy();
|
|
const [offset, length] = currentInstance.exports.hello();
|
|
expect(length).toBe(13);
|
|
const greeting = currentInstance.get_mem_as_utf8(offset, length);
|
|
expect(greeting).toBe("Hello, World!");
|
|
});
|
|
});
|