WebAssembly: implement Module imports/exports
[WebKit-https.git] / JSTests / wasm / js-api / Module.imports.js
1 import Builder from '../Builder.js';
2 import * as assert from '../assert.js';
3
4 assert.throws(() => WebAssembly.Module.prototype.imports(undefined, ""), TypeError, `WebAssembly.Module.prototype.imports called with non WebAssembly.Module |this| value`);
5
6 {
7     const m = new WebAssembly.Module((new Builder()).WebAssembly().get());
8     assert.isArray(m.imports);
9     assert.eq(m.imports.length, 0);
10     assert.truthy(m.exports !== m.exports);
11 }
12
13 {
14     const m = new WebAssembly.Module(
15         (new Builder())
16             .Type().End()
17             .Import()
18                 .Function("fooFunction", "barFunction", { params: [] })
19                 .Table("fooTable", "barTable", {initial: 20, element: "anyfunc"})
20                 .Memory("fooMemory", "barMemory", {initial: 20})
21                 .Global().I32("fooGlobal", "barGlobal", "immutable").End()
22             .End()
23             .WebAssembly().get());
24     assert.eq(m.imports.length, 4);
25     assert.eq(m.imports[0].module, "fooFunction");
26     assert.eq(m.imports[0].name, "barFunction");
27     assert.eq(m.imports[0].kind, "function");
28     assert.eq(m.imports[1].module, "fooTable");
29     assert.eq(m.imports[1].name, "barTable");
30     assert.eq(m.imports[1].kind, "table");
31     assert.eq(m.imports[2].module, "fooMemory");
32     assert.eq(m.imports[2].name, "barMemory");
33     assert.eq(m.imports[2].kind, "memory");
34     assert.eq(m.imports[3].module, "fooGlobal");
35     assert.eq(m.imports[3].name, "barGlobal");
36     assert.eq(m.imports[3].kind, "global");
37 }