diff --git a/packages/svelte/tests/custom-renderers/samples/boundary-pending/Inner.svelte b/packages/svelte/tests/custom-renderers/samples/boundary-pending/Inner.svelte new file mode 100644 index 0000000000..a05bc7dd5a --- /dev/null +++ b/packages/svelte/tests/custom-renderers/samples/boundary-pending/Inner.svelte @@ -0,0 +1,6 @@ + + +

{value}

diff --git a/packages/svelte/tests/custom-renderers/samples/boundary-pending/_config.js b/packages/svelte/tests/custom-renderers/samples/boundary-pending/_config.js new file mode 100644 index 0000000000..cd30fba5f2 --- /dev/null +++ b/packages/svelte/tests/custom-renderers/samples/boundary-pending/_config.js @@ -0,0 +1,33 @@ +import { flushSync } from 'svelte'; +import { test } from '../../test'; + +/** @type {(value: string) => void} */ +let resolve; + +const promise = new Promise((r) => { + resolve = r; +}); + +export default test({ + props: { promise }, + compileOptions: { + experimental: { + async: true + } + }, + html: '

loading...

Something outside

', + async test({ assert, target, serialize }) { + resolve('hello'); + + // wait enough microtasks for the async chain to fully resolve: + // promise.then(() => Promise.resolve()).finally(() => decrement_pending()) + await new Promise((r) => setTimeout(r, 0)); + flushSync(); + + const html = serialize(target); + assert.equal( + html, + '

hello

Something inside

Something outside

' + ); + } +}); diff --git a/packages/svelte/tests/custom-renderers/samples/boundary-pending/main.svelte b/packages/svelte/tests/custom-renderers/samples/boundary-pending/main.svelte new file mode 100644 index 0000000000..c64bf160e5 --- /dev/null +++ b/packages/svelte/tests/custom-renderers/samples/boundary-pending/main.svelte @@ -0,0 +1,14 @@ + + + + +

Something inside

+ + {#snippet pending()} +

loading...

+ {/snippet} +
+

Something outside