diff --git a/packages/svelte/tests/runtime-runes/samples/async-merge-blocking-pending/_config.js b/packages/svelte/tests/runtime-runes/samples/async-merge-blocking-pending/_config.js new file mode 100644 index 0000000000..9cd8eba0b3 --- /dev/null +++ b/packages/svelte/tests/runtime-runes/samples/async-merge-blocking-pending/_config.js @@ -0,0 +1,34 @@ +import { tick } from 'svelte'; +import { test } from '../../test'; + +const buttons = ''; + +export default test({ + async test({ assert, target }) { + await tick(); + const [x, toggle, pop] = target.querySelectorAll('button'); + + // X is deferred on its own await + x.click(); + await tick(); + // Y is deferred on the await inside the new branch + toggle.click(); + await tick(); + // Z hides that branch again, merges into Y, which merges into X + toggle.click(); + await tick(); + assert.htmlEqual(target.innerHTML, `
n = 0
x = 0
${buttons}`); + + // the branch's await resolves while it is hidden + pop.click(); + await tick(); + // W shows the branch again and merges into X + toggle.click(); + await tick(); + + // nothing is pending any more, so X commits + pop.click(); + await tick(); + assert.htmlEqual(target.innerHTML, `n = 4
x = 1
cond: e
${buttons}`); + } +}); diff --git a/packages/svelte/tests/runtime-runes/samples/async-merge-blocking-pending/main.svelte b/packages/svelte/tests/runtime-runes/samples/async-merge-blocking-pending/main.svelte new file mode 100644 index 0000000000..d4cbd8c5b6 --- /dev/null +++ b/packages/svelte/tests/runtime-runes/samples/async-merge-blocking-pending/main.svelte @@ -0,0 +1,29 @@ + + +n = {n}
+x = {await delay(x)}
+ {#if cond} +cond: {await delay('e')}
+ {/if} + + {#snippet pending()} +loading
+ {/snippet} +