Skip to content

Commit 1798e58

Browse files
committed
chore: fix signals test suite
now simulates a component environment more correctly
1 parent c7a7725 commit 1798e58

File tree

1 file changed

+64
-36
lines changed
  • packages/svelte/tests/signals

1 file changed

+64
-36
lines changed

packages/svelte/tests/signals/test.ts

Lines changed: 64 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,28 @@
11
import { describe, assert, it } from 'vitest';
22
import * as $ from '../../src/internal/client/runtime';
33

4-
function run_test(runes: boolean, fn: () => void) {
4+
/**
5+
* @param runes runes mode
6+
* @param fn A function that returns a function because we first need to setup all the signals
7+
* and then execute the test in order to simulate a real component
8+
*/
9+
function run_test(runes: boolean, fn: () => () => void) {
510
return () => {
611
// Create a component context to test runes vs legacy mode
712
$.push({}, runes);
813
// Create a render context so that effect validations etc don't fail
9-
const signal = $.render_effect(fn, null, true, true);
10-
$.destroy_signal(signal);
14+
let execute: any;
15+
const signal = $.render_effect(
16+
() => {
17+
execute = fn();
18+
},
19+
null,
20+
true,
21+
true
22+
);
1123
$.pop();
24+
execute();
25+
$.destroy_signal(signal);
1226
};
1327
}
1428

@@ -23,14 +37,16 @@ describe('signals', () => {
2337

2438
let count = $.source(0);
2539
let double = $.derived(() => $.get(count) * 2);
26-
2740
$.effect(() => {
2841
log.push(`${$.get(count)}:${$.get(double)}`);
2942
});
30-
$.flushSync(() => $.set(count, 1));
31-
$.flushSync(() => $.set(count, 2));
3243

33-
assert.deepEqual(log, ['0:0', '1:2', '2:4']);
44+
return () => {
45+
$.flushSync(() => $.set(count, 1));
46+
$.flushSync(() => $.set(count, 2));
47+
48+
assert.deepEqual(log, ['0:0', '1:2', '2:4']);
49+
};
3450
});
3551

3652
test('multiple effects with state and derived in it#1', () => {
@@ -46,10 +62,12 @@ describe('signals', () => {
4662
log.push(`B:${$.get(double)}`);
4763
});
4864

49-
$.flushSync(() => $.set(count, 1));
50-
$.flushSync(() => $.set(count, 2));
65+
return () => {
66+
$.flushSync(() => $.set(count, 1));
67+
$.flushSync(() => $.set(count, 2));
5168

52-
assert.deepEqual(log, ['A:0:0', 'B:0', 'A:1:2', 'B:2', 'A:2:4', 'B:4']);
69+
assert.deepEqual(log, ['A:0:0', 'B:0', 'A:1:2', 'B:2', 'A:2:4', 'B:4']);
70+
};
5371
});
5472

5573
test('multiple effects with state and derived in it#2', () => {
@@ -65,10 +83,12 @@ describe('signals', () => {
6583
log.push(`B:${$.get(count)}:${$.get(double)}`);
6684
});
6785

68-
$.flushSync(() => $.set(count, 1));
69-
$.flushSync(() => $.set(count, 2));
86+
return () => {
87+
$.flushSync(() => $.set(count, 1));
88+
$.flushSync(() => $.set(count, 2));
7089

71-
assert.deepEqual(log, ['A:0', 'B:0:0', 'A:2', 'B:1:2', 'A:4', 'B:2:4']);
90+
assert.deepEqual(log, ['A:0', 'B:0:0', 'A:2', 'B:1:2', 'A:4', 'B:2:4']);
91+
};
7292
});
7393

7494
test('derived from state', () => {
@@ -80,10 +100,13 @@ describe('signals', () => {
80100
$.effect(() => {
81101
log.push($.get(double));
82102
});
83-
$.flushSync(() => $.set(count, 1));
84-
$.flushSync(() => $.set(count, 2));
85103

86-
assert.deepEqual(log, [0, 2, 4]);
104+
return () => {
105+
$.flushSync(() => $.set(count, 1));
106+
$.flushSync(() => $.set(count, 2));
107+
108+
assert.deepEqual(log, [0, 2, 4]);
109+
};
87110
});
88111

89112
test('derived from derived', () => {
@@ -96,10 +119,13 @@ describe('signals', () => {
96119
$.effect(() => {
97120
log.push($.get(quadruple));
98121
});
99-
$.flushSync(() => $.set(count, 1));
100-
$.flushSync(() => $.set(count, 2));
101122

102-
assert.deepEqual(log, [0, 4, 8]);
123+
return () => {
124+
$.flushSync(() => $.set(count, 1));
125+
$.flushSync(() => $.set(count, 2));
126+
127+
assert.deepEqual(log, [0, 4, 8]);
128+
};
103129
});
104130

105131
test('https://perf.js.hyoo.ru/#!bench=9h2as6_u0mfnn', () => {
@@ -116,31 +142,33 @@ describe('signals', () => {
116142
const E = $.derived(() => hard($.get(C) + $.get(A) + $.get(D)[0]!, 'E'));
117143
const F = $.derived(() => hard($.get(D)[0]! && $.get(B), 'F'));
118144
const G = $.derived(() => $.get(C) + ($.get(C) || $.get(E) % 2) + $.get(D)[0]! + $.get(F));
119-
let H = $.effect(() => {
145+
$.effect(() => {
120146
res.push(hard($.get(G), 'H'));
121147
});
122-
let I = $.effect(() => {
148+
$.effect(() => {
123149
res.push($.get(G));
124150
});
125-
let J = $.effect(() => {
151+
$.effect(() => {
126152
res.push(hard($.get(F), 'J'));
127153
});
128154

129-
$.flushSync();
130-
131-
let i = 2;
132-
while (--i) {
133-
res.length = 0;
134-
$.set(B, 1);
135-
$.set(A, 1 + i * 2);
136-
$.flushSync();
137-
138-
$.set(A, 2 + i * 2);
139-
$.set(B, 2);
155+
return () => {
140156
$.flushSync();
141157

142-
assert.equal(res.length, 4);
143-
assert.deepEqual(res, [3198, 1601, 3195, 1598]);
144-
}
158+
let i = 2;
159+
while (--i) {
160+
res.length = 0;
161+
$.set(B, 1);
162+
$.set(A, 1 + i * 2);
163+
$.flushSync();
164+
165+
$.set(A, 2 + i * 2);
166+
$.set(B, 2);
167+
$.flushSync();
168+
169+
assert.equal(res.length, 4);
170+
assert.deepEqual(res, [3198, 1601, 3195, 1598]);
171+
}
172+
};
145173
});
146174
});

0 commit comments

Comments
 (0)