1// META: global=window,dedicatedworker,jsshell 2// META: script=/wasm/jsapi/wasm-module-builder.js 3// META: script=/wasm/jsapi/assertions.js 4// META: script=/wasm/jsapi/instanceTestFactory.js 5 6let emptyModuleBinary; 7setup(() => { 8 emptyModuleBinary = new WasmModuleBuilder().toBuffer(); 9}); 10 11test(() => { 12 assert_function_name(WebAssembly.Instance, "Instance", "WebAssembly.Instance"); 13}, "name"); 14 15test(() => { 16 assert_function_length(WebAssembly.Instance, 1, "WebAssembly.Instance"); 17}, "length"); 18 19test(() => { 20 assert_throws_js(TypeError, () => new WebAssembly.Instance()); 21}, "No arguments"); 22 23test(() => { 24 const invalidArguments = [ 25 undefined, 26 null, 27 true, 28 "", 29 Symbol(), 30 1, 31 {}, 32 WebAssembly.Module, 33 WebAssembly.Module.prototype, 34 ]; 35 for (const argument of invalidArguments) { 36 assert_throws_js(TypeError, () => new WebAssembly.Instance(argument), 37 `new Instance(${format_value(argument)})`); 38 } 39}, "Non-Module arguments"); 40 41test(() => { 42 const module = new WebAssembly.Module(emptyModuleBinary); 43 assert_throws_js(TypeError, () => WebAssembly.Instance(module)); 44}, "Calling"); 45 46for (const [name, fn] of instanceTestFactory) { 47 test(() => { 48 const { buffer, args, exports, verify } = fn(); 49 const module = new WebAssembly.Module(buffer); 50 const instance = new WebAssembly.Instance(module, ...args); 51 assert_Instance(instance, exports); 52 verify(instance); 53 }, name); 54} 55