diff --git a/Tests/LibWeb/Text/expected/wpt-import/wasm/jsapi/constructor/instantiate-bad-imports.any.txt b/Tests/LibWeb/Text/expected/wpt-import/wasm/jsapi/constructor/instantiate-bad-imports.any.txt new file mode 100644 index 00000000000..1e3c9726fc4 --- /dev/null +++ b/Tests/LibWeb/Text/expected/wpt-import/wasm/jsapi/constructor/instantiate-bad-imports.any.txt @@ -0,0 +1,218 @@ +Harness status: OK + +Found 212 tests + +6 Pass +206 Fail +Pass WebAssembly.instantiate(module): Non-object imports argument: null +Fail WebAssembly.instantiate(module): Non-object imports argument: true +Fail WebAssembly.instantiate(module): Non-object imports argument: "" +Fail WebAssembly.instantiate(module): Non-object imports argument: symbol "Symbol()" +Fail WebAssembly.instantiate(module): Non-object imports argument: 1 +Fail WebAssembly.instantiate(module): Non-object imports argument: 0.1 +Fail WebAssembly.instantiate(module): Non-object imports argument: NaN +Fail WebAssembly.instantiate(module): Non-object module: undefined +Fail WebAssembly.instantiate(module): Non-object module: null +Fail WebAssembly.instantiate(module): Non-object module: true +Fail WebAssembly.instantiate(module): Non-object module: "" +Fail WebAssembly.instantiate(module): Non-object module: symbol "Symbol()" +Fail WebAssembly.instantiate(module): Non-object module: 1 +Fail WebAssembly.instantiate(module): Non-object module: 0.1 +Fail WebAssembly.instantiate(module): Non-object module: NaN +Pass WebAssembly.instantiate(module): Missing imports argument +Pass WebAssembly.instantiate(module): Imports argument with missing property: undefined +Fail WebAssembly.instantiate(module): Imports argument with missing property: empty object +Fail WebAssembly.instantiate(module): Imports argument with missing property: wrong property +Fail WebAssembly.instantiate(module): Importing a function with an incorrectly-typed value: undefined +Fail WebAssembly.instantiate(module): Importing a function with an incorrectly-typed value: null +Fail WebAssembly.instantiate(module): Importing a function with an incorrectly-typed value: true +Fail WebAssembly.instantiate(module): Importing a function with an incorrectly-typed value: "" +Fail WebAssembly.instantiate(module): Importing a function with an incorrectly-typed value: symbol "Symbol()" +Fail WebAssembly.instantiate(module): Importing a function with an incorrectly-typed value: 1 +Fail WebAssembly.instantiate(module): Importing a function with an incorrectly-typed value: 0.1 +Fail WebAssembly.instantiate(module): Importing a function with an incorrectly-typed value: NaN +Fail WebAssembly.instantiate(module): Importing a function with an incorrectly-typed value: object "[object Object]" +Fail WebAssembly.instantiate(module): Importing an i32 global with an incorrectly-typed value: undefined +Fail WebAssembly.instantiate(module): Importing an i32 global with an incorrectly-typed value: null +Fail WebAssembly.instantiate(module): Importing an i32 global with an incorrectly-typed value: true +Fail WebAssembly.instantiate(module): Importing an i32 global with an incorrectly-typed value: "" +Fail WebAssembly.instantiate(module): Importing an i32 global with an incorrectly-typed value: symbol "Symbol()" +Fail WebAssembly.instantiate(module): Importing an i32 global with an incorrectly-typed value: plain object +Fail WebAssembly.instantiate(module): Importing an i32 global with an incorrectly-typed value: WebAssembly.Global +Fail WebAssembly.instantiate(module): Importing an i32 global with an incorrectly-typed value: WebAssembly.Global.prototype +Fail WebAssembly.instantiate(module): Importing an i32 global with an incorrectly-typed value: Object.create(WebAssembly.Global.prototype) +Fail WebAssembly.instantiate(module): Importing an i32 global with an incorrectly-typed value: BigInt +Fail WebAssembly.instantiate(module): Importing an i32 global with an incorrectly-typed value: WebAssembly.Global object (wrong value type) +Fail WebAssembly.instantiate(module): Importing an i64 global with an incorrectly-typed value: undefined +Fail WebAssembly.instantiate(module): Importing an i64 global with an incorrectly-typed value: null +Fail WebAssembly.instantiate(module): Importing an i64 global with an incorrectly-typed value: true +Fail WebAssembly.instantiate(module): Importing an i64 global with an incorrectly-typed value: "" +Fail WebAssembly.instantiate(module): Importing an i64 global with an incorrectly-typed value: symbol "Symbol()" +Fail WebAssembly.instantiate(module): Importing an i64 global with an incorrectly-typed value: plain object +Fail WebAssembly.instantiate(module): Importing an i64 global with an incorrectly-typed value: WebAssembly.Global +Fail WebAssembly.instantiate(module): Importing an i64 global with an incorrectly-typed value: WebAssembly.Global.prototype +Fail WebAssembly.instantiate(module): Importing an i64 global with an incorrectly-typed value: Object.create(WebAssembly.Global.prototype) +Fail WebAssembly.instantiate(module): Importing an i64 global with an incorrectly-typed value: Number +Fail WebAssembly.instantiate(module): Importing an i64 global with an incorrectly-typed value: WebAssembly.Global object (wrong value type) +Fail WebAssembly.instantiate(module): Importing an f32 global with an incorrectly-typed value: undefined +Fail WebAssembly.instantiate(module): Importing an f32 global with an incorrectly-typed value: null +Fail WebAssembly.instantiate(module): Importing an f32 global with an incorrectly-typed value: true +Fail WebAssembly.instantiate(module): Importing an f32 global with an incorrectly-typed value: "" +Fail WebAssembly.instantiate(module): Importing an f32 global with an incorrectly-typed value: symbol "Symbol()" +Fail WebAssembly.instantiate(module): Importing an f32 global with an incorrectly-typed value: plain object +Fail WebAssembly.instantiate(module): Importing an f32 global with an incorrectly-typed value: WebAssembly.Global +Fail WebAssembly.instantiate(module): Importing an f32 global with an incorrectly-typed value: WebAssembly.Global.prototype +Fail WebAssembly.instantiate(module): Importing an f32 global with an incorrectly-typed value: Object.create(WebAssembly.Global.prototype) +Fail WebAssembly.instantiate(module): Importing an f32 global with an incorrectly-typed value: BigInt +Fail WebAssembly.instantiate(module): Importing an f32 global with an incorrectly-typed value: WebAssembly.Global object (wrong value type) +Fail WebAssembly.instantiate(module): Importing an f64 global with an incorrectly-typed value: undefined +Fail WebAssembly.instantiate(module): Importing an f64 global with an incorrectly-typed value: null +Fail WebAssembly.instantiate(module): Importing an f64 global with an incorrectly-typed value: true +Fail WebAssembly.instantiate(module): Importing an f64 global with an incorrectly-typed value: "" +Fail WebAssembly.instantiate(module): Importing an f64 global with an incorrectly-typed value: symbol "Symbol()" +Fail WebAssembly.instantiate(module): Importing an f64 global with an incorrectly-typed value: plain object +Fail WebAssembly.instantiate(module): Importing an f64 global with an incorrectly-typed value: WebAssembly.Global +Fail WebAssembly.instantiate(module): Importing an f64 global with an incorrectly-typed value: WebAssembly.Global.prototype +Fail WebAssembly.instantiate(module): Importing an f64 global with an incorrectly-typed value: Object.create(WebAssembly.Global.prototype) +Fail WebAssembly.instantiate(module): Importing an f64 global with an incorrectly-typed value: BigInt +Fail WebAssembly.instantiate(module): Importing an f64 global with an incorrectly-typed value: WebAssembly.Global object (wrong value type) +Fail WebAssembly.instantiate(module): Importing an i32 mutable global with a primitive value +Fail WebAssembly.instantiate(module): Importing an i32 mutable global with an immutable Global object +Fail WebAssembly.instantiate(module): Importing an i64 mutable global with a primitive value +Fail WebAssembly.instantiate(module): Importing an i64 mutable global with an immutable Global object +Fail WebAssembly.instantiate(module): Importing an f32 mutable global with a primitive value +Fail WebAssembly.instantiate(module): Importing an f32 mutable global with an immutable Global object +Fail WebAssembly.instantiate(module): Importing an f64 mutable global with a primitive value +Fail WebAssembly.instantiate(module): Importing an f64 mutable global with an immutable Global object +Fail WebAssembly.instantiate(module): Importing memory with an incorrectly-typed value: undefined +Fail WebAssembly.instantiate(module): Importing memory with an incorrectly-typed value: null +Fail WebAssembly.instantiate(module): Importing memory with an incorrectly-typed value: true +Fail WebAssembly.instantiate(module): Importing memory with an incorrectly-typed value: "" +Fail WebAssembly.instantiate(module): Importing memory with an incorrectly-typed value: symbol "Symbol()" +Fail WebAssembly.instantiate(module): Importing memory with an incorrectly-typed value: 1 +Fail WebAssembly.instantiate(module): Importing memory with an incorrectly-typed value: 0.1 +Fail WebAssembly.instantiate(module): Importing memory with an incorrectly-typed value: NaN +Fail WebAssembly.instantiate(module): Importing memory with an incorrectly-typed value: plain object +Fail WebAssembly.instantiate(module): Importing memory with an incorrectly-typed value: WebAssembly.Memory +Fail WebAssembly.instantiate(module): Importing memory with an incorrectly-typed value: WebAssembly.Memory.prototype +Fail WebAssembly.instantiate(module): Importing memory with an incorrectly-typed value: Object.create(WebAssembly.Memory.prototype) +Fail WebAssembly.instantiate(module): Importing memory with an incorrectly-typed value: WebAssembly.Memory object (too large) +Fail WebAssembly.instantiate(module): Importing table with an incorrectly-typed value: undefined +Fail WebAssembly.instantiate(module): Importing table with an incorrectly-typed value: null +Fail WebAssembly.instantiate(module): Importing table with an incorrectly-typed value: true +Fail WebAssembly.instantiate(module): Importing table with an incorrectly-typed value: "" +Fail WebAssembly.instantiate(module): Importing table with an incorrectly-typed value: symbol "Symbol()" +Fail WebAssembly.instantiate(module): Importing table with an incorrectly-typed value: 1 +Fail WebAssembly.instantiate(module): Importing table with an incorrectly-typed value: 0.1 +Fail WebAssembly.instantiate(module): Importing table with an incorrectly-typed value: NaN +Fail WebAssembly.instantiate(module): Importing table with an incorrectly-typed value: plain object +Fail WebAssembly.instantiate(module): Importing table with an incorrectly-typed value: WebAssembly.Table +Fail WebAssembly.instantiate(module): Importing table with an incorrectly-typed value: WebAssembly.Table.prototype +Fail WebAssembly.instantiate(module): Importing table with an incorrectly-typed value: Object.create(WebAssembly.Table.prototype) +Fail WebAssembly.instantiate(module): Importing table with an incorrectly-typed value: WebAssembly.Table object (too large) +Pass WebAssembly.instantiate(buffer): Non-object imports argument: null +Fail WebAssembly.instantiate(buffer): Non-object imports argument: true +Fail WebAssembly.instantiate(buffer): Non-object imports argument: "" +Fail WebAssembly.instantiate(buffer): Non-object imports argument: symbol "Symbol()" +Fail WebAssembly.instantiate(buffer): Non-object imports argument: 1 +Fail WebAssembly.instantiate(buffer): Non-object imports argument: 0.1 +Fail WebAssembly.instantiate(buffer): Non-object imports argument: NaN +Fail WebAssembly.instantiate(buffer): Non-object module: undefined +Fail WebAssembly.instantiate(buffer): Non-object module: null +Fail WebAssembly.instantiate(buffer): Non-object module: true +Fail WebAssembly.instantiate(buffer): Non-object module: "" +Fail WebAssembly.instantiate(buffer): Non-object module: symbol "Symbol()" +Fail WebAssembly.instantiate(buffer): Non-object module: 1 +Fail WebAssembly.instantiate(buffer): Non-object module: 0.1 +Fail WebAssembly.instantiate(buffer): Non-object module: NaN +Pass WebAssembly.instantiate(buffer): Missing imports argument +Pass WebAssembly.instantiate(buffer): Imports argument with missing property: undefined +Fail WebAssembly.instantiate(buffer): Imports argument with missing property: empty object +Fail WebAssembly.instantiate(buffer): Imports argument with missing property: wrong property +Fail WebAssembly.instantiate(buffer): Importing a function with an incorrectly-typed value: undefined +Fail WebAssembly.instantiate(buffer): Importing a function with an incorrectly-typed value: null +Fail WebAssembly.instantiate(buffer): Importing a function with an incorrectly-typed value: true +Fail WebAssembly.instantiate(buffer): Importing a function with an incorrectly-typed value: "" +Fail WebAssembly.instantiate(buffer): Importing a function with an incorrectly-typed value: symbol "Symbol()" +Fail WebAssembly.instantiate(buffer): Importing a function with an incorrectly-typed value: 1 +Fail WebAssembly.instantiate(buffer): Importing a function with an incorrectly-typed value: 0.1 +Fail WebAssembly.instantiate(buffer): Importing a function with an incorrectly-typed value: NaN +Fail WebAssembly.instantiate(buffer): Importing a function with an incorrectly-typed value: object "[object Object]" +Fail WebAssembly.instantiate(buffer): Importing an i32 global with an incorrectly-typed value: undefined +Fail WebAssembly.instantiate(buffer): Importing an i32 global with an incorrectly-typed value: null +Fail WebAssembly.instantiate(buffer): Importing an i32 global with an incorrectly-typed value: true +Fail WebAssembly.instantiate(buffer): Importing an i32 global with an incorrectly-typed value: "" +Fail WebAssembly.instantiate(buffer): Importing an i32 global with an incorrectly-typed value: symbol "Symbol()" +Fail WebAssembly.instantiate(buffer): Importing an i32 global with an incorrectly-typed value: plain object +Fail WebAssembly.instantiate(buffer): Importing an i32 global with an incorrectly-typed value: WebAssembly.Global +Fail WebAssembly.instantiate(buffer): Importing an i32 global with an incorrectly-typed value: WebAssembly.Global.prototype +Fail WebAssembly.instantiate(buffer): Importing an i32 global with an incorrectly-typed value: Object.create(WebAssembly.Global.prototype) +Fail WebAssembly.instantiate(buffer): Importing an i32 global with an incorrectly-typed value: BigInt +Fail WebAssembly.instantiate(buffer): Importing an i32 global with an incorrectly-typed value: WebAssembly.Global object (wrong value type) +Fail WebAssembly.instantiate(buffer): Importing an i64 global with an incorrectly-typed value: undefined +Fail WebAssembly.instantiate(buffer): Importing an i64 global with an incorrectly-typed value: null +Fail WebAssembly.instantiate(buffer): Importing an i64 global with an incorrectly-typed value: true +Fail WebAssembly.instantiate(buffer): Importing an i64 global with an incorrectly-typed value: "" +Fail WebAssembly.instantiate(buffer): Importing an i64 global with an incorrectly-typed value: symbol "Symbol()" +Fail WebAssembly.instantiate(buffer): Importing an i64 global with an incorrectly-typed value: plain object +Fail WebAssembly.instantiate(buffer): Importing an i64 global with an incorrectly-typed value: WebAssembly.Global +Fail WebAssembly.instantiate(buffer): Importing an i64 global with an incorrectly-typed value: WebAssembly.Global.prototype +Fail WebAssembly.instantiate(buffer): Importing an i64 global with an incorrectly-typed value: Object.create(WebAssembly.Global.prototype) +Fail WebAssembly.instantiate(buffer): Importing an i64 global with an incorrectly-typed value: Number +Fail WebAssembly.instantiate(buffer): Importing an i64 global with an incorrectly-typed value: WebAssembly.Global object (wrong value type) +Fail WebAssembly.instantiate(buffer): Importing an f32 global with an incorrectly-typed value: undefined +Fail WebAssembly.instantiate(buffer): Importing an f32 global with an incorrectly-typed value: null +Fail WebAssembly.instantiate(buffer): Importing an f32 global with an incorrectly-typed value: true +Fail WebAssembly.instantiate(buffer): Importing an f32 global with an incorrectly-typed value: "" +Fail WebAssembly.instantiate(buffer): Importing an f32 global with an incorrectly-typed value: symbol "Symbol()" +Fail WebAssembly.instantiate(buffer): Importing an f32 global with an incorrectly-typed value: plain object +Fail WebAssembly.instantiate(buffer): Importing an f32 global with an incorrectly-typed value: WebAssembly.Global +Fail WebAssembly.instantiate(buffer): Importing an f32 global with an incorrectly-typed value: WebAssembly.Global.prototype +Fail WebAssembly.instantiate(buffer): Importing an f32 global with an incorrectly-typed value: Object.create(WebAssembly.Global.prototype) +Fail WebAssembly.instantiate(buffer): Importing an f32 global with an incorrectly-typed value: BigInt +Fail WebAssembly.instantiate(buffer): Importing an f32 global with an incorrectly-typed value: WebAssembly.Global object (wrong value type) +Fail WebAssembly.instantiate(buffer): Importing an f64 global with an incorrectly-typed value: undefined +Fail WebAssembly.instantiate(buffer): Importing an f64 global with an incorrectly-typed value: null +Fail WebAssembly.instantiate(buffer): Importing an f64 global with an incorrectly-typed value: true +Fail WebAssembly.instantiate(buffer): Importing an f64 global with an incorrectly-typed value: "" +Fail WebAssembly.instantiate(buffer): Importing an f64 global with an incorrectly-typed value: symbol "Symbol()" +Fail WebAssembly.instantiate(buffer): Importing an f64 global with an incorrectly-typed value: plain object +Fail WebAssembly.instantiate(buffer): Importing an f64 global with an incorrectly-typed value: WebAssembly.Global +Fail WebAssembly.instantiate(buffer): Importing an f64 global with an incorrectly-typed value: WebAssembly.Global.prototype +Fail WebAssembly.instantiate(buffer): Importing an f64 global with an incorrectly-typed value: Object.create(WebAssembly.Global.prototype) +Fail WebAssembly.instantiate(buffer): Importing an f64 global with an incorrectly-typed value: BigInt +Fail WebAssembly.instantiate(buffer): Importing an f64 global with an incorrectly-typed value: WebAssembly.Global object (wrong value type) +Fail WebAssembly.instantiate(buffer): Importing an i32 mutable global with a primitive value +Fail WebAssembly.instantiate(buffer): Importing an i32 mutable global with an immutable Global object +Fail WebAssembly.instantiate(buffer): Importing an i64 mutable global with a primitive value +Fail WebAssembly.instantiate(buffer): Importing an i64 mutable global with an immutable Global object +Fail WebAssembly.instantiate(buffer): Importing an f32 mutable global with a primitive value +Fail WebAssembly.instantiate(buffer): Importing an f32 mutable global with an immutable Global object +Fail WebAssembly.instantiate(buffer): Importing an f64 mutable global with a primitive value +Fail WebAssembly.instantiate(buffer): Importing an f64 mutable global with an immutable Global object +Fail WebAssembly.instantiate(buffer): Importing memory with an incorrectly-typed value: undefined +Fail WebAssembly.instantiate(buffer): Importing memory with an incorrectly-typed value: null +Fail WebAssembly.instantiate(buffer): Importing memory with an incorrectly-typed value: true +Fail WebAssembly.instantiate(buffer): Importing memory with an incorrectly-typed value: "" +Fail WebAssembly.instantiate(buffer): Importing memory with an incorrectly-typed value: symbol "Symbol()" +Fail WebAssembly.instantiate(buffer): Importing memory with an incorrectly-typed value: 1 +Fail WebAssembly.instantiate(buffer): Importing memory with an incorrectly-typed value: 0.1 +Fail WebAssembly.instantiate(buffer): Importing memory with an incorrectly-typed value: NaN +Fail WebAssembly.instantiate(buffer): Importing memory with an incorrectly-typed value: plain object +Fail WebAssembly.instantiate(buffer): Importing memory with an incorrectly-typed value: WebAssembly.Memory +Fail WebAssembly.instantiate(buffer): Importing memory with an incorrectly-typed value: WebAssembly.Memory.prototype +Fail WebAssembly.instantiate(buffer): Importing memory with an incorrectly-typed value: Object.create(WebAssembly.Memory.prototype) +Fail WebAssembly.instantiate(buffer): Importing memory with an incorrectly-typed value: WebAssembly.Memory object (too large) +Fail WebAssembly.instantiate(buffer): Importing table with an incorrectly-typed value: undefined +Fail WebAssembly.instantiate(buffer): Importing table with an incorrectly-typed value: null +Fail WebAssembly.instantiate(buffer): Importing table with an incorrectly-typed value: true +Fail WebAssembly.instantiate(buffer): Importing table with an incorrectly-typed value: "" +Fail WebAssembly.instantiate(buffer): Importing table with an incorrectly-typed value: symbol "Symbol()" +Fail WebAssembly.instantiate(buffer): Importing table with an incorrectly-typed value: 1 +Fail WebAssembly.instantiate(buffer): Importing table with an incorrectly-typed value: 0.1 +Fail WebAssembly.instantiate(buffer): Importing table with an incorrectly-typed value: NaN +Fail WebAssembly.instantiate(buffer): Importing table with an incorrectly-typed value: plain object +Fail WebAssembly.instantiate(buffer): Importing table with an incorrectly-typed value: WebAssembly.Table +Fail WebAssembly.instantiate(buffer): Importing table with an incorrectly-typed value: WebAssembly.Table.prototype +Fail WebAssembly.instantiate(buffer): Importing table with an incorrectly-typed value: Object.create(WebAssembly.Table.prototype) +Fail WebAssembly.instantiate(buffer): Importing table with an incorrectly-typed value: WebAssembly.Table object (too large) \ No newline at end of file diff --git a/Tests/LibWeb/Text/input/wpt-import/wasm/jsapi/bad-imports.js b/Tests/LibWeb/Text/input/wpt-import/wasm/jsapi/bad-imports.js new file mode 100644 index 00000000000..c7c9c6b6cdd --- /dev/null +++ b/Tests/LibWeb/Text/input/wpt-import/wasm/jsapi/bad-imports.js @@ -0,0 +1,186 @@ +/** + * `t` should be a function that takes at least three arguments: + * + * - the name of the test; + * - the expected error (to be passed to `assert_throws_js`); + * - a function that takes a `WasmModuleBuilder` and initializes it; + * - (optionally) an options object. + * + * The function is expected to create a test that checks if instantiating a + * module with the result of the `WasmModuleBuilder` and the options object + * (if any) yields the correct error. + */ +function test_bad_imports(t) { + function value_type(type) { + switch (type) { + case "i32": return kWasmI32; + case "i64": return kWasmI64; + case "f32": return kWasmF32; + case "f64": return kWasmF64; + default: throw new TypeError(`Unexpected type ${type}`); + } + } + + for (const value of [null, true, "", Symbol(), 1, 0.1, NaN]) { + t(`Non-object imports argument: ${format_value(value)}`, + TypeError, + builder => {}, + value); + } + + for (const value of [undefined, null, true, "", Symbol(), 1, 0.1, NaN]) { + const imports = { + "module": value, + }; + t(`Non-object module: ${format_value(value)}`, + TypeError, + builder => { + builder.addImport("module", "fn", kSig_v_v); + }, + imports); + } + + t(`Missing imports argument`, + TypeError, + builder => { + builder.addImport("module", "fn", kSig_v_v); + }); + + for (const [value, name] of [[undefined, "undefined"], [{}, "empty object"], [{ "module\0": null }, "wrong property"]]) { + t(`Imports argument with missing property: ${name}`, + TypeError, + builder => { + builder.addImport("module", "fn", kSig_v_v); + }, + value); + } + + for (const value of [undefined, null, true, "", Symbol(), 1, 0.1, NaN, {}]) { + t(`Importing a function with an incorrectly-typed value: ${format_value(value)}`, + WebAssembly.LinkError, + builder => { + builder.addImport("module", "fn", kSig_v_v); + }, + { + "module": { + "fn": value, + }, + }); + } + + const nonGlobals = [ + [undefined], + [null], + [true], + [""], + [Symbol()], + [{}, "plain object"], + [WebAssembly.Global, "WebAssembly.Global"], + [WebAssembly.Global.prototype, "WebAssembly.Global.prototype"], + [Object.create(WebAssembly.Global.prototype), "Object.create(WebAssembly.Global.prototype)"], + ]; + + for (const type of ["i32", "i64", "f32", "f64"]) { + const extendedNonGlobals = nonGlobals.concat([ + type === "i64" ? [0, "Number"] : [0n, "BigInt"], + [new WebAssembly.Global({value: type === "f32" ? "f64" : "f32"}), "WebAssembly.Global object (wrong value type)"], + ]); + for (const [value, name = format_value(value)] of extendedNonGlobals) { + t(`Importing an ${type} global with an incorrectly-typed value: ${name}`, + WebAssembly.LinkError, + builder => { + builder.addImportedGlobal("module", "global", value_type(type)); + }, + { + "module": { + "global": value, + }, + }); + } + } + + for (const type of ["i32", "i64", "f32", "f64"]) { + const value = type === "i64" ? 0n : 0; + t(`Importing an ${type} mutable global with a primitive value`, + WebAssembly.LinkError, + builder => { + builder.addImportedGlobal("module", "global", value_type(type), true); + }, + { + "module": { + "global": value, + }, + }); + + const global = new WebAssembly.Global({ "value": type }, value); + t(`Importing an ${type} mutable global with an immutable Global object`, + WebAssembly.LinkError, + builder => { + builder.addImportedGlobal("module", "global", value_type(type), true); + }, + { + "module": { + "global": global, + }, + }); + } + + const nonMemories = [ + [undefined], + [null], + [true], + [""], + [Symbol()], + [1], + [0.1], + [NaN], + [{}, "plain object"], + [WebAssembly.Memory, "WebAssembly.Memory"], + [WebAssembly.Memory.prototype, "WebAssembly.Memory.prototype"], + [Object.create(WebAssembly.Memory.prototype), "Object.create(WebAssembly.Memory.prototype)"], + [new WebAssembly.Memory({"initial": 256}), "WebAssembly.Memory object (too large)"], + ]; + + for (const [value, name = format_value(value)] of nonMemories) { + t(`Importing memory with an incorrectly-typed value: ${name}`, + WebAssembly.LinkError, + builder => { + builder.addImportedMemory("module", "memory", 0, 128); + }, + { + "module": { + "memory": value, + }, + }); + } + + const nonTables = [ + [undefined], + [null], + [true], + [""], + [Symbol()], + [1], + [0.1], + [NaN], + [{}, "plain object"], + [WebAssembly.Table, "WebAssembly.Table"], + [WebAssembly.Table.prototype, "WebAssembly.Table.prototype"], + [Object.create(WebAssembly.Table.prototype), "Object.create(WebAssembly.Table.prototype)"], + [new WebAssembly.Table({"element": "anyfunc", "initial": 256}), "WebAssembly.Table object (too large)"], + ]; + + for (const [value, name = format_value(value)] of nonTables) { + t(`Importing table with an incorrectly-typed value: ${name}`, + WebAssembly.LinkError, + builder => { + builder.addImportedTable("module", "table", 0, 128); + }, + { + "module": { + "table": value, + }, + }); + } +} +globalThis.test_bad_imports = test_bad_imports; diff --git a/Tests/LibWeb/Text/input/wpt-import/wasm/jsapi/constructor/instantiate-bad-imports.any.html b/Tests/LibWeb/Text/input/wpt-import/wasm/jsapi/constructor/instantiate-bad-imports.any.html new file mode 100644 index 00000000000..ab1243875ab --- /dev/null +++ b/Tests/LibWeb/Text/input/wpt-import/wasm/jsapi/constructor/instantiate-bad-imports.any.html @@ -0,0 +1,16 @@ + + + + + + + + +
+ diff --git a/Tests/LibWeb/Text/input/wpt-import/wasm/jsapi/constructor/instantiate-bad-imports.any.js b/Tests/LibWeb/Text/input/wpt-import/wasm/jsapi/constructor/instantiate-bad-imports.any.js new file mode 100644 index 00000000000..e4926c8d70a --- /dev/null +++ b/Tests/LibWeb/Text/input/wpt-import/wasm/jsapi/constructor/instantiate-bad-imports.any.js @@ -0,0 +1,22 @@ +// META: global=window,dedicatedworker,jsshell,shadowrealm +// META: script=/wasm/jsapi/wasm-module-builder.js +// META: script=/wasm/jsapi/bad-imports.js + +test_bad_imports((name, error, build, ...arguments) => { + promise_test(t => { + const builder = new WasmModuleBuilder(); + build(builder); + const buffer = builder.toBuffer(); + const module = new WebAssembly.Module(buffer); + return promise_rejects_js(t, error, WebAssembly.instantiate(module, ...arguments)); + }, `WebAssembly.instantiate(module): ${name}`); +}); + +test_bad_imports((name, error, build, ...arguments) => { + promise_test(t => { + const builder = new WasmModuleBuilder(); + build(builder); + const buffer = builder.toBuffer(); + return promise_rejects_js(t, error, WebAssembly.instantiate(buffer, ...arguments)); + }, `WebAssembly.instantiate(buffer): ${name}`); +});