Source code
Revision control
Copy as Markdown
Other Tools
// |jit-test| skip-if: getBuildConfiguration("release_or_beta"); --enable-import-bytes; --enable-arraybuffer-immutable
// Same test as "modules/bytes-module.js", but this time using a CCW Uint8Array.
let g = newGlobal({
newCompartment: true,
});
let buf = new g.ArrayBuffer(4);
let view = new g.Uint8Array(buf);
view[0] = 0x41;
view[1] = 0x42;
view[2] = 0x43;
view[3] = 0x44;
let immutable = new g.Uint8Array(buf.sliceToImmutable());
let m = parseModule(immutable, "bytes-module.js", "bytes");
let a = registerModule("bytes-module", m);
let importer = parseModule(`
import uint8 from 'bytes-module' with { type: 'bytes' };
globalThis.importedUint8 = uint8;
`);
let b = registerModule("importer", importer);
moduleLink(b);
moduleEvaluate(b);
assertEq(importedUint8 === immutable, true);
assertEq(importedUint8 instanceof g.Uint8Array, true);
assertEq(importedUint8.length, view.length);
assertEq(importedUint8.buffer.immutable, true);
for (let i = 0; i < view.length; i++) {
assertEq(importedUint8[i], view[i]);
}
// Test dynamic import
let result = null;
let error = null;
let promise = import('./bytes-module.txt', { with: { type: 'bytes' } });
promise.then((ns) => {
result = ns.default;
}).catch((e) => {
error = e;
});
drainJobQueue();
assertEq(error, null);
assertEq(result instanceof Uint8Array, true);
assertEq(result.length, view.length);
assertEq(result.buffer.immutable, true);
for (let i = 0; i < view.length; i++) {
assertEq(result[i], view[i]);
}