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");