48 lines
2 KiB
JavaScript
48 lines
2 KiB
JavaScript
promise_test(async t => {
|
|
const fragmentWithTwoScripts = new DocumentFragment();
|
|
const script0 = document.createElement('script');
|
|
const script1 = fragmentWithTwoScripts.appendChild(document.createElement('script'));
|
|
const script2 = fragmentWithTwoScripts.appendChild(document.createElement('script'));
|
|
|
|
window.kBaselineNumberOfScripts = document.scripts.length;
|
|
assert_equals(document.scripts.length, kBaselineNumberOfScripts,
|
|
"The WPT infra starts out with exactly 3 scripts");
|
|
|
|
window.script0Executed = false;
|
|
script0.innerText = `
|
|
script0Executed = true;
|
|
assert_equals(document.scripts.length, kBaselineNumberOfScripts + 1,
|
|
'script0 can observe itself and no other scripts');
|
|
`;
|
|
|
|
window.script1Executed = false;
|
|
script1.innerText = `
|
|
script1Executed = true;
|
|
assert_equals(document.scripts.length, kBaselineNumberOfScripts + 2,
|
|
"script1 executes synchronously, and thus observes only itself and " +
|
|
"previous scripts");
|
|
`;
|
|
|
|
window.script2Executed = false;
|
|
script2.innerText = `
|
|
script2Executed = true;
|
|
assert_equals(document.scripts.length, kBaselineNumberOfScripts + 3,
|
|
"script2 executes synchronously, and thus observes itself and all " +
|
|
"previous scripts");
|
|
`;
|
|
|
|
assert_false(script0Executed, "Script0 does not execute before append()");
|
|
document.body.append(script0);
|
|
assert_true(script0Executed,
|
|
"Script0 executes synchronously during append()");
|
|
|
|
assert_false(script1Executed, "Script1 does not execute before append()");
|
|
assert_false(script2Executed, "Script2 does not execute before append()");
|
|
document.body.append(fragmentWithTwoScripts);
|
|
assert_true(script1Executed,
|
|
"Script1 executes synchronously during fragment append()");
|
|
assert_true(script2Executed,
|
|
"Script2 executes synchronously during fragment append()");
|
|
}, "Script node insertion is not atomic with regard to execution. Each " +
|
|
"script is synchronously executed during the HTML element insertion " +
|
|
"steps hook");
|