1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
|
function test_bad_imports(t) {
for (const value of [null, true, "", Symbol(), 1, 0.1, NaN]) {
t(`Non-object imports argument: ${format_value(value)}`,
new 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)}`,
new TypeError(),
builder => {
builder.addImport("module", "fn", kSig_v_v);
},
value);
}
t(`Missing imports argument`,
new 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}`,
new TypeError(),
builder => {
builder.addImport("module", "fn", kSig_v_v);
},
value);
}
t(`Importing an i64 global`,
new WebAssembly.LinkError(),
builder => {
builder.addImportedGlobal("module", "global", kWasmI64);
},
{
"module": {
"global": 0,
},
});
for (const value of [undefined, null, true, "", Symbol(), 1, 0.1, NaN, {}]) {
t(`Importing a function with an incorrectly-typed value: ${format_value(value)}`,
new 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 [value, name = format_value(value)] of nonGlobals) {
t(`Importing a global with an incorrectly-typed value: ${name}`,
new WebAssembly.LinkError(),
builder => {
builder.addImportedGlobal("module", "global", kWasmI32);
},
{
"module": {
"global": value,
},
});
}
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)"],
];
for (const [value, name = format_value(value)] of nonMemories) {
t(`Importing memory with an incorrectly-typed value: ${name}`,
new 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)"],
];
for (const [value, name = format_value(value)] of nonTables) {
t(`Importing table with an incorrectly-typed value: ${name}`,
new WebAssembly.LinkError(),
builder => {
builder.addImportedTable("module", "table", 0, 128);
},
{
"module": {
"table": value,
},
});
}
}
|