File tree Expand file tree Collapse file tree 2 files changed +100
-0
lines changed
packages/svelte/tests/runtime-runes/samples/async-child-effect Expand file tree Collapse file tree 2 files changed +100
-0
lines changed Original file line number Diff line number Diff line change 1+ import { flushSync , tick } from 'svelte' ;
2+ import { ok , test } from '../../test' ;
3+
4+ export default test ( {
5+ html : `
6+ <button>shift</button>
7+ <p>loading</p>
8+ ` ,
9+
10+ async test ( { assert, target, variant } ) {
11+ if ( variant === 'hydrate' ) {
12+ await Promise . resolve ( ) ;
13+ }
14+
15+ flushSync ( ( ) => {
16+ target . querySelector ( 'button' ) ?. click ( ) ;
17+ } ) ;
18+
19+ await Promise . resolve ( ) ;
20+ await Promise . resolve ( ) ;
21+ await Promise . resolve ( ) ;
22+ await tick ( ) ;
23+ flushSync ( ) ;
24+
25+ const [ button1 , button2 ] = target . querySelectorAll ( 'button' ) ;
26+
27+ assert . htmlEqual (
28+ target . innerHTML ,
29+ `
30+ <button>shift</button>
31+ <button>+</button>
32+ <p>A</p>
33+ <p>a</p>
34+ `
35+ ) ;
36+
37+ flushSync ( ( ) => button2 . click ( ) ) ;
38+ flushSync ( ( ) => button2 . click ( ) ) ;
39+
40+ flushSync ( ( ) => button1 . click ( ) ) ;
41+ await Promise . resolve ( ) ;
42+ await Promise . resolve ( ) ;
43+ await Promise . resolve ( ) ;
44+ await tick ( ) ;
45+ flushSync ( ) ;
46+
47+ assert . htmlEqual (
48+ target . innerHTML ,
49+ `
50+ <button>shift</button>
51+ <button>+</button>
52+ <p>AA</p>
53+ <p>aa</p>
54+ `
55+ ) ;
56+
57+ flushSync ( ( ) => button1 . click ( ) ) ;
58+ await Promise . resolve ( ) ;
59+ await Promise . resolve ( ) ;
60+ await Promise . resolve ( ) ;
61+ await tick ( ) ;
62+ flushSync ( ) ;
63+
64+ assert . htmlEqual (
65+ target . innerHTML ,
66+ `
67+ <button>shift</button>
68+ <button>+</button>
69+ <p>AAA</p>
70+ <p>aaa</p>
71+ `
72+ ) ;
73+ }
74+ } ) ;
Original file line number Diff line number Diff line change 1+ <script >
2+ let input = $state (' a' );
3+
4+ let queue = [];
5+
6+ function push (value ) {
7+ const deferred = Promise .withResolvers ();
8+ queue .push (() => deferred .resolve (value));
9+ return deferred .promise ;
10+ }
11+ </script >
12+
13+ <button onclick ={() => queue .shift ()()}>shift</button >
14+
15+ <svelte:boundary >
16+ <button onclick ={() => input += ' a' }>+</button >
17+ <p >{await push (input .toUpperCase ())}</p >
18+
19+ {#if true }
20+ <p >{input }</p >
21+ {/if }
22+
23+ {#snippet pending ()}
24+ <p >loading</p >
25+ {/ snippet }
26+ </svelte:boundary >
You can’t perform that action at this time.
0 commit comments