1// META: global=window,dedicatedworker,jsshell 2// META: script=/wasm/jsapi/wasm-module-builder.js 3 4function assert_Module(module) { 5 assert_equals(Object.getPrototypeOf(module), WebAssembly.Module.prototype, 6 "Prototype"); 7 assert_true(Object.isExtensible(module), "Extensibility"); 8} 9 10let emptyModuleBinary; 11setup(() => { 12 emptyModuleBinary = new WasmModuleBuilder().toBuffer(); 13}); 14 15promise_test(t => { 16 return promise_rejects_js(t, TypeError, WebAssembly.compile()); 17}, "Missing argument"); 18 19promise_test(t => { 20 const invalidArguments = [ 21 undefined, 22 null, 23 true, 24 "", 25 Symbol(), 26 1, 27 {}, 28 ArrayBuffer, 29 ArrayBuffer.prototype, 30 Array.from(emptyModuleBinary), 31 ]; 32 return Promise.all(invalidArguments.map(argument => { 33 return promise_rejects_js(t, TypeError, WebAssembly.compile(argument), 34 `compile(${format_value(argument)})`); 35 })); 36}, "Invalid arguments"); 37 38promise_test(() => { 39 const fn = WebAssembly.compile; 40 const thisValues = [ 41 undefined, 42 null, 43 true, 44 "", 45 Symbol(), 46 1, 47 {}, 48 WebAssembly, 49 ]; 50 return Promise.all(thisValues.map(thisValue => { 51 return fn.call(thisValue, emptyModuleBinary).then(assert_Module); 52 })); 53}, "Branding"); 54 55test(() => { 56 const promise = WebAssembly.compile(emptyModuleBinary); 57 assert_equals(Object.getPrototypeOf(promise), Promise.prototype, "prototype"); 58 assert_true(Object.isExtensible(promise), "extensibility"); 59}, "Promise type"); 60 61promise_test(t => { 62 const buffer = new Uint8Array(); 63 return promise_rejects_js(t, WebAssembly.CompileError, WebAssembly.compile(buffer)); 64}, "Empty buffer"); 65 66promise_test(t => { 67 const buffer = new Uint8Array(Array.from(emptyModuleBinary).concat([0, 0])); 68 return promise_rejects_js(t, WebAssembly.CompileError, WebAssembly.compile(buffer)); 69}, "Invalid code"); 70 71promise_test(() => { 72 return WebAssembly.compile(emptyModuleBinary).then(assert_Module); 73}, "Result type"); 74 75promise_test(() => { 76 return WebAssembly.compile(emptyModuleBinary, {}).then(assert_Module); 77}, "Stray argument"); 78 79promise_test(() => { 80 const buffer = new WasmModuleBuilder().toBuffer(); 81 assert_equals(buffer[0], 0); 82 const promise = WebAssembly.compile(buffer); 83 buffer[0] = 1; 84 return promise.then(assert_Module); 85}, "Changing the buffer"); 86