// META: global=window,dedicatedworker,jsshell // META: script=/wasm/jsapi/wasm-module-builder.js // META: script=/wasm/jsapi/assertions.js let emptyModuleBinary; setup(() => { emptyModuleBinary = new WasmModuleBuilder().toBuffer(); }); test(() => { assert_function_name(WebAssembly.Module, "Module", "WebAssembly.Module"); }, "name"); test(() => { assert_function_length(WebAssembly.Module, 1, "WebAssembly.Module"); }, "length"); test(() => { assert_throws_js(TypeError, () => new WebAssembly.Module()); }, "No arguments"); test(() => { assert_throws_js(TypeError, () => WebAssembly.Module(emptyModuleBinary)); }, "Calling"); test(() => { const invalidArguments = [ undefined, null, true, "test", Symbol(), 7, NaN, {}, ArrayBuffer, ArrayBuffer.prototype, Array.from(emptyModuleBinary), ]; for (const argument of invalidArguments) { assert_throws_js(TypeError, () => new WebAssembly.Module(argument), `new Module(${format_value(argument)})`); } }, "Invalid arguments"); test(() => { const buffer = new Uint8Array(); assert_throws_js(WebAssembly.CompileError, () => new WebAssembly.Module(buffer)); }, "Empty buffer"); test(() => { const buffer = new Uint8Array(Array.from(emptyModuleBinary).concat([0, 0])); assert_throws_js(WebAssembly.CompileError, () => new WebAssembly.Module(buffer)); }, "Invalid code"); test(() => { const module = new WebAssembly.Module(emptyModuleBinary); assert_equals(Object.getPrototypeOf(module), WebAssembly.Module.prototype); }, "Prototype"); test(() => { const module = new WebAssembly.Module(emptyModuleBinary); assert_true(Object.isExtensible(module)); }, "Extensibility"); test(() => { const module = new WebAssembly.Module(emptyModuleBinary, {}); assert_equals(Object.getPrototypeOf(module), WebAssembly.Module.prototype); }, "Stray argument");