| // META: global=window,dedicatedworker,jsshell,shadowrealm |
| // META: script=/wasm/jsapi/assertions.js |
| |
| function addxy(x, y) { |
| return x + y |
| } |
| |
| test(() => { |
| assert_implements(WebAssembly.Function, "WebAssembly.Function is not implemented"); |
| assert_function_name(WebAssembly.Function, "Function", "WebAssembly.Function"); |
| }, "name"); |
| |
| test(() => { |
| assert_implements(WebAssembly.Function, "WebAssembly.Function is not implemented"); |
| assert_function_length(WebAssembly.Function, 2, "WebAssembly.Function"); |
| }, "length"); |
| |
| test(() => { |
| assert_implements(WebAssembly.Function, "WebAssembly.Function is not implemented"); |
| assert_throws_js(TypeError, () => new WebAssembly.Function()); |
| const argument = {parameters: [], results: []}; |
| assert_throws_js(TypeError, () => new WebAssembly.Function(argument)); |
| }, "Too few arguments"); |
| |
| test(() => { |
| assert_implements(WebAssembly.Function, "WebAssembly.Function is not implemented"); |
| const arguments = [{parameters: ["i32", "i32"], results: ["i32"]}, addxy]; |
| assert_throws_js(TypeError, () => WebAssembly.Function(...arguments)); |
| }, "Calling"); |
| |
| test(() => { |
| assert_implements(WebAssembly.Function, "WebAssembly.Function is not implemented"); |
| var fun = new WebAssembly.Function({parameters: ["i32", "i32"], results: ["i32"]}, addxy); |
| assert_true(fun instanceof WebAssembly.Function) |
| }, "construct with JS function") |
| |
| test(() => { |
| assert_implements(WebAssembly.Function, "WebAssembly.Function is not implemented"); |
| assert_throws_js(TypeError, () => new WebAssembly.Function({parameters: []}, addxy)) |
| }, "fail with missing results") |
| |
| test(() => { |
| assert_implements(WebAssembly.Function, "WebAssembly.Function is not implemented"); |
| assert_throws_js(TypeError, () => new WebAssembly.Function({results: []}, addxy)) |
| }, "fail with missing parameters") |
| |
| test(() => { |
| assert_implements(WebAssembly.Function, "WebAssembly.Function is not implemented"); |
| assert_throws_js(TypeError, () => new WebAssembly.Function({parameters: [1], results: [true]}, addxy)) |
| }, "fail with non-string parameters & results") |
| |
| test(() => { |
| assert_implements(WebAssembly.Function, "WebAssembly.Function is not implemented"); |
| assert_throws_js(TypeError, () => new WebAssembly.Function({parameters: ["invalid"], results: ["invalid"]}, addxy)) |
| }, "fail with non-existent parameter and result type") |
| |
| test(() => { |
| assert_implements(WebAssembly.Function, "WebAssembly.Function is not implemented"); |
| assert_throws_js(TypeError, () => new WebAssembly.Function({parameters: [], results: []}, 72)) |
| }, "fail with non-function object") |
| |
| test(() => { |
| assert_implements(WebAssembly.Function, "WebAssembly.Function is not implemented"); |
| assert_throws_js(TypeError, () => new WebAssembly.Function({parameters: [], results: []}, {})) |
| }, "fail to construct with non-callable object") |