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
100 lines
2.5 KiB
JavaScript
100 lines
2.5 KiB
JavaScript
// META: global=window,dedicatedworker,jsshell
|
|
// META: script=/wasm/jsapi/wasm-module-builder.js
|
|
|
|
let emptyModuleBinary;
|
|
setup(() => {
|
|
emptyModuleBinary = new WasmModuleBuilder().toBuffer();
|
|
});
|
|
|
|
test(() => {
|
|
assert_throws_js(TypeError, () => WebAssembly.validate());
|
|
}, "Missing argument");
|
|
|
|
test(() => {
|
|
const invalidArguments = [
|
|
undefined,
|
|
null,
|
|
true,
|
|
"",
|
|
Symbol(),
|
|
1,
|
|
{},
|
|
ArrayBuffer,
|
|
ArrayBuffer.prototype,
|
|
Array.from(emptyModuleBinary),
|
|
];
|
|
for (const argument of invalidArguments) {
|
|
assert_throws_js(TypeError, () => WebAssembly.validate(argument),
|
|
`validate(${format_value(argument)})`);
|
|
}
|
|
}, "Invalid arguments");
|
|
|
|
test(() => {
|
|
const fn = WebAssembly.validate;
|
|
const thisValues = [
|
|
undefined,
|
|
null,
|
|
true,
|
|
"",
|
|
Symbol(),
|
|
1,
|
|
{},
|
|
WebAssembly,
|
|
];
|
|
for (const thisValue of thisValues) {
|
|
assert_true(fn.call(thisValue, emptyModuleBinary), `this=${format_value(thisValue)}`);
|
|
}
|
|
}, "Branding");
|
|
|
|
const modules = [
|
|
// Incomplete header.
|
|
[[], false],
|
|
[[0x00], false],
|
|
[[0x00, 0x61], false],
|
|
[[0x00, 0x61, 0x73], false],
|
|
[[0x00, 0x61, 0x73, 0x6d], false],
|
|
[[0x00, 0x61, 0x73, 0x6d, 0x01], false],
|
|
[[0x00, 0x61, 0x73, 0x6d, 0x01, 0x00], false],
|
|
[[0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00], false],
|
|
|
|
// Complete header.
|
|
[[0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00], true],
|
|
|
|
// Invalid version.
|
|
[[0x00, 0x61, 0x73, 0x6d, 0x00, 0x00, 0x00, 0x00], false],
|
|
[[0x00, 0x61, 0x73, 0x6d, 0x02, 0x00, 0x00, 0x00], false],
|
|
|
|
// Nameless custom section.
|
|
[[0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00], false],
|
|
|
|
// Custom section with empty name.
|
|
[[0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00], true],
|
|
|
|
// Custom section with name "a".
|
|
[[0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x61], true],
|
|
];
|
|
const bufferTypes = [
|
|
Uint8Array,
|
|
Int8Array,
|
|
Uint16Array,
|
|
Int16Array,
|
|
Uint32Array,
|
|
Int32Array,
|
|
];
|
|
for (const [module, expected] of modules) {
|
|
const name = module.map(n => n.toString(16)).join(" ");
|
|
for (const bufferType of bufferTypes) {
|
|
if (module.length % bufferType.BYTES_PER_ELEMENT === 0) {
|
|
test(() => {
|
|
const bytes = new Uint8Array(module);
|
|
const moduleBuffer = new bufferType(bytes.buffer);
|
|
assert_equals(WebAssembly.validate(moduleBuffer), expected);
|
|
}, `Validating module [${name}] in ${bufferType.name}`);
|
|
}
|
|
}
|
|
}
|
|
|
|
test(() => {
|
|
assert_true(WebAssembly.validate(emptyModuleBinary, {}));
|
|
}, "Stray argument");
|