| // META: global=jsshell | |
| // META: script=/wasm/jsapi/wasm-module-builder.js | |
| function assert_Module(module) { | |
| assert_equals(Object.getPrototypeOf(module), WebAssembly.Module.prototype, | |
| "Prototype"); | |
| assert_true(Object.isExtensible(module), "Extensibility"); | |
| } | |
| let emptyModuleBinary; | |
| setup(() => { | |
| emptyModuleBinary = new WasmModuleBuilder().toBuffer(); | |
| }); | |
| promise_test(t => { | |
| return promise_rejects(t, new TypeError(), WebAssembly.compile()); | |
| }, "Missing argument"); | |
| promise_test(t => { | |
| const invalidArguments = [ | |
| undefined, | |
| null, | |
| true, | |
| "", | |
| Symbol(), | |
| 1, | |
| {}, | |
| ArrayBuffer, | |
| ArrayBuffer.prototype, | |
| Array.from(emptyModuleBinary), | |
| ]; | |
| return Promise.all(invalidArguments.map(argument => { | |
| return promise_rejects(t, new TypeError(), WebAssembly.compile(argument), | |
| `compile(${format_value(argument)})`); | |
| })); | |
| }, "Invalid arguments"); | |
| promise_test(() => { | |
| const fn = WebAssembly.compile; | |
| const thisValues = [ | |
| undefined, | |
| null, | |
| true, | |
| "", | |
| Symbol(), | |
| 1, | |
| {}, | |
| WebAssembly, | |
| ]; | |
| return Promise.all(thisValues.map(thisValue => { | |
| return fn.call(thisValue, emptyModuleBinary).then(assert_Module); | |
| })); | |
| }, "Branding"); | |
| test(() => { | |
| const promise = WebAssembly.compile(emptyModuleBinary); | |
| assert_equals(Object.getPrototypeOf(promise), Promise.prototype, "prototype"); | |
| assert_true(Object.isExtensible(promise), "extensibility"); | |
| }, "Promise type"); | |
| promise_test(t => { | |
| const buffer = new Uint8Array(); | |
| return promise_rejects(t, new WebAssembly.CompileError(), WebAssembly.compile(buffer)); | |
| }, "Invalid code"); | |
| promise_test(() => { | |
| return WebAssembly.compile(emptyModuleBinary).then(assert_Module); | |
| }, "Result type"); | |
| promise_test(() => { | |
| return WebAssembly.compile(emptyModuleBinary, {}).then(assert_Module); | |
| }, "Stray argument"); | |
| promise_test(() => { | |
| const buffer = new WasmModuleBuilder().toBuffer(); | |
| assert_equals(buffer[0], 0); | |
| const promise = WebAssembly.compile(buffer); | |
| buffer[0] = 1; | |
| return promise.then(assert_Module); | |
| }, "Changing the buffer"); |