Skip to content

Commit 6df1839

Browse files
committed
update tests
1 parent 1ab235d commit 6df1839

File tree

12 files changed

+92
-36
lines changed

12 files changed

+92
-36
lines changed

packages/svelte/tests/runtime-legacy/shared.ts

Lines changed: 40 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { setImmediate } from 'node:timers/promises';
33
import glob from 'tiny-glob/sync.js';
44
import * as $ from 'svelte/internal/client';
55
import { createClassComponent } from 'svelte/legacy';
6-
import { flushSync } from 'svelte';
6+
import { flushSync, hydrate, mount, unmount } from 'svelte';
77
import { render } from 'svelte/server';
88
import { afterAll, assert, beforeAll } from 'vitest';
99
import { compile_directory } from '../helpers.js';
@@ -119,7 +119,7 @@ export function runtime_suite(runes: boolean) {
119119
return common_setup(cwd, runes, config);
120120
},
121121
async (config, cwd, variant, common) => {
122-
await run_test_variant(cwd, config, variant, common);
122+
await run_test_variant(cwd, config, variant, common, runes);
123123
}
124124
);
125125
}
@@ -147,7 +147,8 @@ async function run_test_variant(
147147
cwd: string,
148148
config: RuntimeTest,
149149
variant: 'dom' | 'hydrate' | 'ssr',
150-
compileOptions: CompileOptions
150+
compileOptions: CompileOptions,
151+
runes: boolean
151152
) {
152153
let unintended_error = false;
153154

@@ -256,15 +257,35 @@ async function run_test_variant(
256257
}
257258
};
258259

259-
const instance = createClassComponent({
260-
component: mod.default,
261-
props: config.props,
262-
target,
263-
immutable: config.immutable,
264-
intro: config.intro,
265-
recover: config.recover ?? false,
266-
hydrate: variant === 'hydrate'
267-
});
260+
let instance: any;
261+
let props: any;
262+
263+
if (runes) {
264+
props = $.proxy({ ...(config.props || {}) });
265+
266+
// TODO get rid
267+
props.$set = (new_props: Record<string, any>) => {
268+
Object.assign(props, new_props);
269+
};
270+
271+
const render = variant === 'hydrate' ? hydrate : mount;
272+
instance = render(mod.default, {
273+
target,
274+
props,
275+
intro: config.intro,
276+
recover: config.recover ?? false
277+
});
278+
} else {
279+
instance = createClassComponent({
280+
component: mod.default,
281+
props: config.props,
282+
target,
283+
immutable: config.immutable,
284+
intro: config.intro,
285+
recover: config.recover ?? false,
286+
hydrate: variant === 'hydrate'
287+
});
288+
}
268289

269290
// eslint-disable-next-line no-console
270291
console.warn = warn;
@@ -303,7 +324,7 @@ async function run_test_variant(
303324
htmlEqualWithOptions: assert_html_equal_with_options
304325
},
305326
variant,
306-
component: instance,
327+
component: runes ? props : instance,
307328
mod,
308329
target,
309330
snapshot,
@@ -318,7 +339,12 @@ async function run_test_variant(
318339
assert.fail('Expected a runtime error');
319340
}
320341
} finally {
321-
instance.$destroy();
342+
if (runes) {
343+
unmount(instance);
344+
} else {
345+
instance.$destroy();
346+
}
347+
322348
assert_html_equal(
323349
target.innerHTML,
324350
'',

packages/svelte/tests/runtime-runes/samples/each-bind-this-member/_config.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
import { test } from '../../test';
22

33
export default test({
4+
get props() {
5+
return {
6+
items: [{ src: 'https://ds' }]
7+
};
8+
},
9+
410
async test({ assert, target, component }) {
511
assert.equal(target.querySelector('img'), component.items[0].img);
612
}

packages/svelte/tests/runtime-runes/samples/each-bind-this-member/main.svelte

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<script>
2-
let { items = $bindable([{ src: 'https://ds' }]) } = $props();
2+
let { items } = $props();
33
</script>
44

55
{#each items as item, i}

packages/svelte/tests/runtime-runes/samples/lifecycle-render-order-for-children-2/_config.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { flushSync } from 'svelte';
12
import { test } from '../../test';
23
import { log } from './log.js';
34

@@ -32,7 +33,7 @@ export default test({
3233

3334
log.length = 0;
3435

35-
component.n += 1;
36+
flushSync(() => (component.n += 1));
3637

3738
assert.deepEqual(log, [
3839
'parent: $effect.pre 1',

packages/svelte/tests/runtime-runes/samples/lifecycle-render-order-for-children-3/_config.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { flushSync } from 'svelte';
12
import { test } from '../../test';
23
import { log } from './log.js';
34

@@ -27,7 +28,7 @@ export default test({
2728

2829
log.length = 0;
2930

30-
component.n += 1;
31+
flushSync(() => (component.n += 1));
3132

3233
assert.deepEqual(log, [
3334
'parent: render 1',

packages/svelte/tests/runtime-runes/samples/lifecycle-render-order-for-children-4/_config.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { flushSync } from 'svelte';
12
import { test } from '../../test';
23
import { log } from './log.js';
34

@@ -32,7 +33,7 @@ export default test({
3233

3334
log.length = 0;
3435

35-
component.n += 1;
36+
flushSync(() => (component.n += 1));
3637

3738
assert.deepEqual(log, [
3839
'parent: $effect.pre 1',

packages/svelte/tests/runtime-runes/samples/lifecycle-render-order-for-children-5/_config.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { flushSync } from 'svelte';
12
import { test } from '../../test';
23
import { log } from './log.js';
34

@@ -14,7 +15,7 @@ export default test({
1415
assert.deepEqual(log, ['$effect.pre 0', 'another $effect.pre 1', 'render n0', 'render i1']);
1516

1617
log.length = 0;
17-
component.n += 1;
18+
flushSync(() => (component.n += 1));
1819

1920
assert.deepEqual(log, ['$effect.pre 1', 'another $effect.pre 2', 'render n1', 'render i2']);
2021
}

packages/svelte/tests/runtime-runes/samples/lifecycle-render-order-for-children/_config.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { flushSync } from 'svelte';
12
import { test } from '../../test';
23
import { log } from './log.js';
34

@@ -28,7 +29,7 @@ export default test({
2829

2930
log.length = 0;
3031

31-
component.n += 1;
32+
flushSync(() => (component.n += 1));
3233

3334
assert.deepEqual(log, [
3435
'parent: $effect.pre 1',
Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { flushSync } from '../../../../src/index-client.js';
12
import { test } from '../../test';
23

34
// Tests that default values only fire lazily when the prop is undefined, and every time
@@ -8,22 +9,32 @@ export default test({
89
p2: 0,
910
p3: 0
1011
},
12+
1113
html: `<p>props: 0 0 0 0 1 1 1 1</p><p>log: nested.fallback_value,fallback_fn`,
14+
1215
async test({ assert, target, component }) {
13-
component.p0 = undefined;
14-
component.p1 = undefined;
15-
component.p2 = undefined;
16-
component.p3 = undefined;
17-
// Nuance: these are already undefined in the props, but we're setting them to undefined again,
18-
// which calls the fallback value again, even if it will result in the same value. There's no way
19-
// to prevent this, and in practise it won't matter - and you shouldn't use accessors in runes mode anyway.
20-
component.p4 = undefined;
21-
component.p5 = undefined;
22-
component.p6 = undefined;
23-
component.p7 = undefined;
16+
flushSync(() => {
17+
component.p0 = undefined;
18+
component.p1 = undefined;
19+
component.p2 = undefined;
20+
component.p3 = undefined;
21+
});
22+
23+
assert.htmlEqual(
24+
target.innerHTML,
25+
`<p>props: 1 1 1 1 1 1 1 1</p><p>log: nested.fallback_value,fallback_fn,nested.fallback_value,fallback_fn`
26+
);
27+
28+
flushSync(() => {
29+
component.p4 = undefined;
30+
component.p5 = undefined;
31+
component.p6 = undefined;
32+
component.p7 = undefined;
33+
});
34+
2435
assert.htmlEqual(
2536
target.innerHTML,
26-
`<p>props: 1 1 1 1 1 1 1 1</p><p>log: nested.fallback_value,fallback_fn,nested.fallback_value,fallback_fn,nested.fallback_value,fallback_fn`
37+
`<p>props: 1 1 1 1 1 1 1 1</p><p>log: nested.fallback_value,fallback_fn,nested.fallback_value,fallback_fn`
2738
);
2839
}
2940
});

packages/svelte/tests/runtime-runes/samples/props-quoted/_config.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { flushSync } from 'svelte';
12
import { test } from '../../test';
23

34
export default test({
@@ -8,7 +9,7 @@ export default test({
89
html: `hello`,
910

1011
async test({ assert, target, component }) {
11-
component['kebab-case'] = 'goodbye';
12+
flushSync(() => (component['kebab-case'] = 'goodbye'));
1213
assert.htmlEqual(target.innerHTML, `goodbye`);
1314
}
1415
});

packages/svelte/tests/runtime-runes/samples/props/_config.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { flushSync } from '../../../../src/index-client.js';
12
import { test } from '../../test';
23

34
export default test({
@@ -9,10 +10,13 @@ export default test({
910
default2: undefined
1011
};
1112
},
13+
1214
html: `x 1 2 3 z`,
1315

1416
async test({ assert, target, component }) {
15-
component.foo = 'y';
17+
flushSync(() => {
18+
component.foo = 'y';
19+
});
1620
assert.htmlEqual(target.innerHTML, `y 1 2 3 z`);
1721

1822
// rest props don't generate accessors, so we need to use $set
Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
1+
import { flushSync } from '../../../../src/index-client.js';
12
import { test } from '../../test';
23

34
export default test({
45
test({ assert, component, target }) {
56
const div = /** @type {HTMLDivElement & { foo?: number }} */ (target.querySelector('div'));
67

78
assert.equal(div.foo, undefined);
8-
component.foo = 2;
9-
component.visible = false;
9+
flushSync(() => {
10+
component.foo = 2;
11+
component.visible = false;
12+
});
1013
assert.equal(div.foo, 2);
1114
}
1215
});

0 commit comments

Comments
 (0)