blob: ccd1a724a9a2f146c6b26950395d4a7c856ea6a9 [file] [log] [blame]
import Builder from '../Builder.js';
import * as assert from '../assert.js';
assert.throws(() => WebAssembly.Module.customSections(undefined, ""), TypeError, `WebAssembly.Module.customSections called with non WebAssembly.Module argument`);
assert.eq(WebAssembly.Module.customSections.length, 2);
{
const empty = new WebAssembly.Module((new Builder()).WebAssembly().get());
assert.isArray(WebAssembly.Module.customSections(empty, ""));
assert.eq(WebAssembly.Module.customSections(empty, "").length, 0);
}
{
const single = new WebAssembly.Module((new Builder())
.Unknown("hello").Byte(0x00).Byte(0x42).Byte(0xFF).End()
.WebAssembly().get());
assert.eq(WebAssembly.Module.customSections(single, "").length, 0);
const hello = WebAssembly.Module.customSections(single, "hello");
assert.eq(hello.length, 1);
assert.eq(hello[0].byteLength, 3);
const helloI8 = new Int8Array(hello[0]);
assert.eq(helloI8[0], 0x00);
assert.eq(helloI8[1], 0x42);
assert.eq(helloI8[2], -1);
}
{
const unicode = new WebAssembly.Module((new Builder())
.Unknown("👨‍❤️‍💋‍👨").Byte(42).End()
.WebAssembly().get());
const family = WebAssembly.Module.customSections(unicode, "👨‍❤️‍💋‍👨");
assert.eq(family.length, 1);
assert.eq(family[0].byteLength, 1);
const familyI8 = new Int8Array(family[0]);
assert.eq(familyI8[0], 42);
}
{
const many = new WebAssembly.Module((new Builder())
.Unknown("zero").Byte(0).End()
.Unknown("one").Byte(1).Byte(1).End()
.Unknown("one").Byte(2).Byte(2).Byte(2).End()
.Unknown("two").Byte(3).Byte(3).Byte(3).Byte(3).End()
.Unknown("one").Byte(4).Byte(4).Byte(4).Byte(4).Byte(4).End()
.WebAssembly().get());
const zero = WebAssembly.Module.customSections(many, "zero");
assert.eq(zero.length, 1);
assert.eq(zero[0].byteLength, 1);
const zeroI8 = new Int8Array(zero[0]);
assert.eq(zeroI8[0], 0);
const two = WebAssembly.Module.customSections(many, "two");
assert.eq(two.length, 1);
assert.eq(two[0].byteLength, 4);
const twoI8 = new Int8Array(two[0]);
assert.eq(twoI8[0], 3);
assert.eq(twoI8[1], 3);
assert.eq(twoI8[2], 3);
assert.eq(twoI8[3], 3);
const one = WebAssembly.Module.customSections(many, "one");
assert.eq(one.length, 3);
let seen = 0;
const expect = [
[1, 1],
[2, 2, 2],
[4, 4, 4, 4, 4],
];
for (const section of one) {
assert.eq(section.byteLength, expect[seen].length);
const I8 = new Int8Array(section);
for (let i = 0; i < expect[seen].length; ++i)
assert.eq(I8[i], expect[seen][i]);
++seen;
}
}