File tree Expand file tree Collapse file tree 14 files changed +271
-0
lines changed
packages/svelte/tests/runtime-runes/samples Expand file tree Collapse file tree 14 files changed +271
-0
lines changed Original file line number Diff line number Diff line change
1
+ import { test } from '../../test' ;
2
+ import { flushSync , tick } from 'svelte' ;
3
+
4
+ export default test ( {
5
+ mode : [ 'client' ] ,
6
+ async test ( { target } ) {
7
+ const button = target . querySelector ( 'button' ) ;
8
+
9
+ flushSync ( ( ) => button ?. click ( ) ) ;
10
+ await tick ( ) ;
11
+
12
+ const text = target . textContent ?. trim ( ) ?? '' ;
13
+ if ( ! text . endsWith ( 'trigger' ) ) {
14
+ throw new Error ( `unexpected text: ${ text } ` ) ;
15
+ }
16
+ }
17
+ } ) ;
Original file line number Diff line number Diff line change
1
+ <script >
2
+ let value = $state ({ nested: { depth: 2 } });
3
+ let trigger = $state (false );
4
+
5
+ $effect (() => {
6
+ if (trigger) value = null ;
7
+ });
8
+
9
+ function load () {
10
+ return Promise .resolve (value);
11
+ }
12
+ </script >
13
+
14
+ {#await load () then result }
15
+ {#if result ?.nested ?.depth > 1 }
16
+ ok
17
+ {:else }
18
+ low
19
+ {/if }
20
+ {:catch }
21
+ error
22
+ {/await }
23
+
24
+ <button onclick ={() => (trigger = true )}>trigger</button >
Original file line number Diff line number Diff line change
1
+ import { test } from '../../test' ;
2
+ import { flushSync } from 'svelte' ;
3
+
4
+ export default test ( {
5
+ mode : [ 'client' ] ,
6
+ async test ( { target } ) {
7
+ const button = target . querySelector ( 'button' ) ;
8
+
9
+ flushSync ( ( ) => button ?. click ( ) ) ;
10
+
11
+ const text = target . textContent ?. trim ( ) ?? '' ;
12
+ if ( ! text . endsWith ( 'toggle' ) ) {
13
+ throw new Error ( `unexpected text: ${ text } ` ) ;
14
+ }
15
+ }
16
+ } ) ;
Original file line number Diff line number Diff line change
1
+ <script >
2
+ let items = $state ([
3
+ { nested: { value: 1 } },
4
+ { nested: { value: 2 } }
5
+ ]);
6
+ let show = $state (true );
7
+
8
+ let first = $derived (items[0 ]);
9
+
10
+ $effect (() => {
11
+ if (! show) {
12
+ items = [];
13
+ }
14
+ });
15
+ </script >
16
+
17
+ {#if first ?.nested ?.value > 1 }
18
+ big
19
+ {:else }
20
+ small
21
+ {/if }
22
+
23
+ <button onclick ={() => (show = false )}>toggle</button >
Original file line number Diff line number Diff line change
1
+ import { test } from '../../test' ;
2
+ import { flushSync } from 'svelte' ;
3
+
4
+ export default test ( {
5
+ mode : [ 'client' ] ,
6
+ async test ( { target } ) {
7
+ const button = target . querySelector ( 'button' ) ;
8
+
9
+ flushSync ( ( ) => button ?. click ( ) ) ;
10
+
11
+ const text = target . textContent ?. trim ( ) ?? '' ;
12
+ if ( ! text . endsWith ( 'advance' ) ) {
13
+ throw new Error ( `unexpected text: ${ text } ` ) ;
14
+ }
15
+ }
16
+ } ) ;
Original file line number Diff line number Diff line change
1
+ <script >
2
+ let rows = $state ([
3
+ { nested: { depth: 1 } },
4
+ { nested: { depth: 3 } }
5
+ ]);
6
+ let ptr = $state (0 );
7
+
8
+ let current = $derived (rows[ptr]);
9
+ let nested = $derived (current? .nested );
10
+
11
+ $effect (() => {
12
+ if (ptr === 1 ) {
13
+ rows = [];
14
+ }
15
+ });
16
+ < / script>
17
+
18
+ {#if nested? .depth > 2 }
19
+ deep
20
+ {: else }
21
+ shallow
22
+ {/ if }
23
+
24
+ < button onclick= {() => (ptr = 1 )}> advance< / button>
Original file line number Diff line number Diff line change
1
+ import { test } from '../../test' ;
2
+ import { flushSync } from 'svelte' ;
3
+
4
+ export default test ( {
5
+ mode : [ 'client' ] ,
6
+ async test ( { target } ) {
7
+ const button = target . querySelector ( 'button' ) ;
8
+
9
+ flushSync ( ( ) => button ?. click ( ) ) ;
10
+
11
+ const text = target . textContent ?. trim ( ) ?? '' ;
12
+ if ( ! text . endsWith ( 'clear' ) ) {
13
+ throw new Error ( `unexpected text: ${ text } ` ) ;
14
+ }
15
+ }
16
+ } ) ;
Original file line number Diff line number Diff line change
1
+ <script >
2
+ let items = $state ([
3
+ { nested: { ok: true } },
4
+ { nested: { ok: false } }
5
+ ]);
6
+ let clear = $state (false );
7
+
8
+ $effect (() => {
9
+ if (clear) items = [];
10
+ });
11
+ </script >
12
+
13
+ {#each items as item (item .nested )}
14
+ {#if item ?.nested ?.ok }
15
+ ok
16
+ {:else }
17
+ fail
18
+ {/if }
19
+ {/each }
20
+
21
+ <button onclick ={() => (clear = true )}>clear</button >
Original file line number Diff line number Diff line change
1
+ import { test } from '../../test' ;
2
+ import { flushSync } from 'svelte' ;
3
+
4
+ export default test ( {
5
+ mode : [ 'client' ] ,
6
+ async test ( { target } ) {
7
+ const button = target . querySelector ( 'button' ) ;
8
+
9
+ flushSync ( ( ) => button ?. click ( ) ) ;
10
+
11
+ const text = target . textContent ?. trim ( ) ?? '' ;
12
+ if ( ! text . endsWith ( 'switch' ) ) {
13
+ throw new Error ( `unexpected text: ${ text } ` ) ;
14
+ }
15
+ }
16
+ } ) ;
Original file line number Diff line number Diff line change
1
+ <script >
2
+ let centerRows = $state ([
3
+ { depth: 0 , nested: { optional: 1 } },
4
+ { depth: 2 , nested: { optional: 3 } }
5
+ ]);
6
+ let index = $state (0 );
7
+
8
+ let centerRow = $derived (centerRows[index]);
9
+
10
+ $effect (() => {
11
+ if (index) {
12
+ centerRows = [];
13
+ }
14
+ });
15
+ </script >
16
+
17
+ {#if centerRow ?.nested ?.optional > 2 }
18
+ A
19
+ {:else if centerRow ?.nested ?.optional > 1 }
20
+ B
21
+ {:else }
22
+ C
23
+ {/if }
24
+
25
+ <button onclick ={() => (index = 1 )}>switch</button >
You can’t perform that action at this time.
0 commit comments