Skip to content

Commit a758384

Browse files
committed
test: add guard-derived regression samples
1 parent 5e4fbea commit a758384

File tree

14 files changed

+271
-0
lines changed

14 files changed

+271
-0
lines changed
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
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+
});
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
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>
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
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+
});
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
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>
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
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+
});
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
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>
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
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+
});
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
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>
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
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+
});
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
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>

0 commit comments

Comments
 (0)