Files
sousa-gecko/testing/web-platform/tests/wasm/jsapi/module/customSections.any.js
T
Anne van Kesteren 47a27e9af8 Bug 2038779 [wpt PR 59794] - Remove ShadowRealm test coverage, a=testonly
Automatic update from web-platform-tests
Remove ShadowRealm test coverage

This intentionally does not make infrastructure or documentation changes, but without implementer support all the ShadowRealm tests add significant noise. Once there is implementer support this can be reverted.

--

wpt-commits: e4a4672e9e607fc2b28e7173b83ce4e38ef53071
wpt-pr: 59794
2026-05-13 04:24:16 +00:00

141 lines
4.4 KiB
JavaScript

// META: global=window,dedicatedworker,jsshell
// META: script=/wasm/jsapi/wasm-module-builder.js
function assert_ArrayBuffer(buffer, expected) {
assert_equals(Object.getPrototypeOf(buffer), ArrayBuffer.prototype, "Prototype");
assert_true(Object.isExtensible(buffer), "isExtensible");
assert_array_equals(new Uint8Array(buffer), expected);
}
function assert_sections(sections, expected) {
assert_true(Array.isArray(sections), "Should be array");
assert_equals(Object.getPrototypeOf(sections), Array.prototype, "Prototype");
assert_true(Object.isExtensible(sections), "isExtensible");
assert_equals(sections.length, expected.length);
for (let i = 0; i < expected.length; ++i) {
assert_ArrayBuffer(sections[i], expected[i]);
}
}
let emptyModuleBinary;
setup(() => {
emptyModuleBinary = new WasmModuleBuilder().toBuffer();
});
test(() => {
assert_throws_js(TypeError, () => WebAssembly.Module.customSections());
const module = new WebAssembly.Module(emptyModuleBinary);
assert_throws_js(TypeError, () => WebAssembly.Module.customSections(module));
}, "Missing arguments");
test(() => {
const invalidArguments = [
undefined,
null,
true,
"",
Symbol(),
1,
{},
WebAssembly.Module,
WebAssembly.Module.prototype,
];
for (const argument of invalidArguments) {
assert_throws_js(TypeError, () => WebAssembly.Module.customSections(argument, ""),
`customSections(${format_value(argument)})`);
}
}, "Non-Module arguments");
test(() => {
const module = new WebAssembly.Module(emptyModuleBinary);
const fn = WebAssembly.Module.customSections;
const thisValues = [
undefined,
null,
true,
"",
Symbol(),
1,
{},
WebAssembly.Module,
WebAssembly.Module.prototype,
];
for (const thisValue of thisValues) {
assert_sections(fn.call(thisValue, module, ""), []);
}
}, "Branding");
test(() => {
const module = new WebAssembly.Module(emptyModuleBinary);
assert_sections(WebAssembly.Module.customSections(module, ""), []);
}, "Empty module");
test(() => {
const module = new WebAssembly.Module(emptyModuleBinary);
assert_not_equals(WebAssembly.Module.customSections(module, ""),
WebAssembly.Module.customSections(module, ""));
}, "Empty module: array caching");
test(() => {
const bytes1 = [87, 101, 98, 65, 115, 115, 101, 109, 98, 108, 121];
const bytes2 = [74, 83, 65, 80, 73];
const builder = new WasmModuleBuilder();
builder.addCustomSection("name", bytes1);
builder.addCustomSection("name", bytes2);
builder.addCustomSection("foo", bytes1);
const buffer = builder.toBuffer()
const module = new WebAssembly.Module(buffer);
assert_sections(WebAssembly.Module.customSections(module, "name"), [
bytes1,
bytes2,
])
assert_sections(WebAssembly.Module.customSections(module, "foo"), [
bytes1,
])
assert_sections(WebAssembly.Module.customSections(module, ""), [])
assert_sections(WebAssembly.Module.customSections(module, "\0"), [])
assert_sections(WebAssembly.Module.customSections(module, "name\0"), [])
assert_sections(WebAssembly.Module.customSections(module, "foo\0"), [])
}, "Custom sections");
test(() => {
const bytes = [87, 101, 98, 65, 115, 115, 101, 109, 98, 108, 121];
const name = "yee\uD801\uDC37eey"
const builder = new WasmModuleBuilder();
builder.addCustomSection(name, bytes);
const buffer = builder.toBuffer();
const module = new WebAssembly.Module(buffer);
assert_sections(WebAssembly.Module.customSections(module, name), [
bytes,
]);
assert_sections(WebAssembly.Module.customSections(module, "yee\uFFFDeey"), []);
assert_sections(WebAssembly.Module.customSections(module, "yee\uFFFD\uFFFDeey"), []);
}, "Custom sections with surrogate pairs");
test(() => {
const bytes = [87, 101, 98, 65, 115, 115, 101, 109, 98, 108, 121];
const builder = new WasmModuleBuilder();
builder.addCustomSection("na\uFFFDme", bytes);
const buffer = builder.toBuffer();
const module = new WebAssembly.Module(buffer);
assert_sections(WebAssembly.Module.customSections(module, "name"), []);
assert_sections(WebAssembly.Module.customSections(module, "na\uFFFDme"), [
bytes,
]);
assert_sections(WebAssembly.Module.customSections(module, "na\uDC01me"), []);
}, "Custom sections with U+FFFD");
test(() => {
const module = new WebAssembly.Module(emptyModuleBinary);
assert_sections(WebAssembly.Module.customSections(module, "", {}), []);
}, "Stray argument");