Source code
Revision control
Copy as Markdown
Other Tools
Test Info:
- Manifest: js/xpconnect/tests/unit/xpcshell.toml
/* Any copyright is dedicated to the Public Domain.
add_task(async function testJsonImportAttribute() {
Assert.equal(ns.data.value, 42);
});
add_task(async function testJsonImportAttributeInCurrentGlobal() {
const win = createChromeWindow();
win.eval(`
global: "current",
});
`);
Assert.equal(win.eval(`ns.data.value`), 42);
});
add_task(async function testJsonImportAttributeAsyncThenSyncCurrentGlobal() {
// Import via dynamic import (async, uses window's module loader), then
// import via ChromeUtils.importESModule (sync). The modules are shared
// between both loaders via JS::loader::ModuleLoaderBase::CopyModulesTo.
const win = createChromeWindow();
win.eval(`
var ns = null;
`);
Services.tm.spinEventLoopUntil(
"Wait until dynamic import finishes",
() => win.eval(`ns !== null`)
);
Assert.equal(win.eval(`ns.data.value`), 42);
win.eval(`
global: "current",
});
`);
Assert.equal(win.eval(`ns2.data.value`), 42);
});
add_task(async function testJsonImportAttributeSyncThenAsyncCurrentGlobal() {
// Import via ChromeUtils.importESModule (sync), then import via dynamic
// import (async). The modules are shared between both loaders via
// JS::loader::ModuleLoaderBase::MoveModulesTo.
const win = createChromeWindow();
win.eval(`
global: "current",
});
`);
Assert.equal(win.eval(`ns.data.value`), 42);
win.eval(`
var ns2 = null;
`);
Services.tm.spinEventLoopUntil(
"Wait until dynamic import finishes",
() => win.eval(`ns2 !== null`)
);
Assert.equal(win.eval(`ns2.data.value`), 42);
});
add_task(async function testCssImportAttribute() {
const win = createChromeWindow();
const ns = win.eval(
);
Assert.ok(ns.sheet instanceof win.CSSStyleSheet);
Assert.equal(ns.sheet.cssRules.length, 1);
});
add_task(async function testCssImportAttributeAsyncThenSyncCurrentGlobal() {
// Import via dynamic import (async, uses window's module loader), then
// import via ChromeUtils.importESModule (sync). The modules are shared
// between both loaders via JS::loader::ModuleLoaderBase::CopyModulesTo.
const win = createChromeWindow();
win.eval(`
var ns = null;
`);
Services.tm.spinEventLoopUntil(
"Wait until dynamic import finishes",
() => win.eval(`ns !== null`)
);
Assert.ok(win.eval(`ns.sheet instanceof CSSStyleSheet`));
Assert.equal(win.eval(`ns.sheet.cssRules.length`), 1);
win.eval(`
global: "current",
});
`);
Assert.ok(win.eval(`ns2.sheet instanceof CSSStyleSheet`));
Assert.equal(win.eval(`ns2.sheet.cssRules.length`), 1);
});
add_task(async function testCssImportAttributeSyncThenAsyncCurrentGlobal() {
// Import via ChromeUtils.importESModule (sync), then import via dynamic
// import (async). The modules are shared between both loaders via
// JS::loader::ModuleLoaderBase::MoveModulesTo.
const win = createChromeWindow();
win.eval(`
global: "current",
});
`);
Assert.ok(win.eval(`ns.sheet instanceof CSSStyleSheet`));
Assert.equal(win.eval(`ns.sheet.cssRules.length`), 1);
win.eval(`
var ns2 = null;
`);
Services.tm.spinEventLoopUntil(
"Wait until dynamic import finishes",
() => win.eval(`ns2 !== null`)
);
Assert.ok(win.eval(`ns2.sheet instanceof CSSStyleSheet`));
Assert.equal(win.eval(`ns2.sheet.cssRules.length`), 1);
});