40 lines
1.6 KiB
TypeScript
40 lines
1.6 KiB
TypeScript
import { addImportsToImports, Imports } from "./imports.js";
|
|
import { Exports } from "./exports.js";
|
|
import { getWasm, addWasiToImports } from "./helpers.js";
|
|
// @ts-ignore
|
|
import * as assert from 'assert';
|
|
|
|
async function run() {
|
|
const importObj = {};
|
|
const imports: Imports = {
|
|
roundtripU8(x) { throw new Error('unreachable'); },
|
|
roundtripS8(x) { throw new Error('unreachable'); },
|
|
roundtripU16(x) { throw new Error('unreachable'); },
|
|
roundtripS16(x) { throw new Error('unreachable'); },
|
|
roundtripBool(x) { throw new Error('unreachable'); },
|
|
roundtripChar(x) { throw new Error('unreachable'); },
|
|
roundtripEnum(x) { throw new Error('unreachable'); },
|
|
getInternal(x) { throw new Error('unreachable'); },
|
|
};
|
|
let instance: WebAssembly.Instance;
|
|
addImportsToImports(importObj, imports);
|
|
const wasi = addWasiToImports(importObj);
|
|
|
|
const wasm = new Exports();
|
|
await wasm.instantiate(getWasm(), importObj);
|
|
wasi.start(wasm.instance);
|
|
instance = wasm.instance;
|
|
|
|
assert.throws(() => wasm.invalidBool(), /invalid variant discriminant for bool/);
|
|
assert.throws(() => wasm.invalidU8(), /must be between/);
|
|
assert.throws(() => wasm.invalidS8(), /must be between/);
|
|
assert.throws(() => wasm.invalidU16(), /must be between/);
|
|
assert.throws(() => wasm.invalidS16(), /must be between/);
|
|
assert.throws(() => wasm.invalidChar(), /not a valid char/);
|
|
assert.throws(() => wasm.invalidEnum(), /invalid discriminant specified for E/);
|
|
assert.throws(() => wasm.invalidHandle(), /handle index not valid/);
|
|
assert.throws(() => wasm.invalidHandleClose(), /handle index not valid/);
|
|
}
|
|
|
|
await run()
|