1// META: global=window,dedicatedworker,jsshell
2// META: script=/wasm/jsapi/wasm-module-builder.js
3
4function getExports() {
5  const builder = new WasmModuleBuilder();
6  builder
7    .addFunction("fn", kSig_v_d)
8    .addBody([])
9    .exportFunc();
10
11  builder.setTableBounds(1);
12  builder.addExportOfKind("table", kExternalTable, 0);
13  builder.addGlobal(kWasmI32, false).exportAs("global");
14  builder.addMemory(4, 8, true);
15
16  const buffer = builder.toBuffer();
17  const module = new WebAssembly.Module(buffer);
18  const instance = new WebAssembly.Instance(module);
19  return instance.exports;
20}
21
22test(() => {
23  const exports = getExports();
24
25  const builder = new WasmModuleBuilder();
26  const functionIndex = builder.addImport("module", "imported", kSig_v_d);
27  builder.addExport("exportedFunction", functionIndex);
28
29  const globalIndex = builder.addImportedGlobal("module", "global", kWasmI32);
30  builder.addExportOfKind("exportedGlobal", kExternalGlobal, globalIndex);
31
32  builder.addImportedMemory("module", "memory", 4);
33  builder.exportMemoryAs("exportedMemory");
34
35  const tableIndex = builder.addImportedTable("module", "table", 1);
36  builder.addExportOfKind("exportedTable", kExternalTable, tableIndex);
37
38  const buffer = builder.toBuffer();
39
40  const module = new WebAssembly.Module(buffer);
41  const instance = new WebAssembly.Instance(module, {
42    "module": {
43      "imported": exports.fn,
44      "global": exports.global,
45      "memory": exports.memory,
46      "table": exports.table,
47    }
48  });
49
50  assert_equals(instance.exports.exportedFunction, exports.fn);
51  assert_equals(instance.exports.exportedGlobal, exports.global);
52  assert_equals(instance.exports.exportedMemory, exports.memory);
53  assert_equals(instance.exports.exportedTable, exports.table);
54});
55