1
1
import { describe , assert , it } from 'vitest' ;
2
2
import * as $ from '../../src/internal/client/runtime' ;
3
3
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 ) {
5
10
return ( ) => {
6
11
// Create a component context to test runes vs legacy mode
7
12
$ . push ( { } , runes ) ;
8
13
// 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
+ ) ;
11
23
$ . pop ( ) ;
24
+ execute ( ) ;
25
+ $ . destroy_signal ( signal ) ;
12
26
} ;
13
27
}
14
28
@@ -23,14 +37,16 @@ describe('signals', () => {
23
37
24
38
let count = $ . source ( 0 ) ;
25
39
let double = $ . derived ( ( ) => $ . get ( count ) * 2 ) ;
26
-
27
40
$ . effect ( ( ) => {
28
41
log . push ( `${ $ . get ( count ) } :${ $ . get ( double ) } ` ) ;
29
42
} ) ;
30
- $ . flushSync ( ( ) => $ . set ( count , 1 ) ) ;
31
- $ . flushSync ( ( ) => $ . set ( count , 2 ) ) ;
32
43
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
+ } ;
34
50
} ) ;
35
51
36
52
test ( 'multiple effects with state and derived in it#1' , ( ) => {
@@ -46,10 +62,12 @@ describe('signals', () => {
46
62
log . push ( `B:${ $ . get ( double ) } ` ) ;
47
63
} ) ;
48
64
49
- $ . flushSync ( ( ) => $ . set ( count , 1 ) ) ;
50
- $ . flushSync ( ( ) => $ . set ( count , 2 ) ) ;
65
+ return ( ) => {
66
+ $ . flushSync ( ( ) => $ . set ( count , 1 ) ) ;
67
+ $ . flushSync ( ( ) => $ . set ( count , 2 ) ) ;
51
68
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
+ } ;
53
71
} ) ;
54
72
55
73
test ( 'multiple effects with state and derived in it#2' , ( ) => {
@@ -65,10 +83,12 @@ describe('signals', () => {
65
83
log . push ( `B:${ $ . get ( count ) } :${ $ . get ( double ) } ` ) ;
66
84
} ) ;
67
85
68
- $ . flushSync ( ( ) => $ . set ( count , 1 ) ) ;
69
- $ . flushSync ( ( ) => $ . set ( count , 2 ) ) ;
86
+ return ( ) => {
87
+ $ . flushSync ( ( ) => $ . set ( count , 1 ) ) ;
88
+ $ . flushSync ( ( ) => $ . set ( count , 2 ) ) ;
70
89
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
+ } ;
72
92
} ) ;
73
93
74
94
test ( 'derived from state' , ( ) => {
@@ -80,10 +100,13 @@ describe('signals', () => {
80
100
$ . effect ( ( ) => {
81
101
log . push ( $ . get ( double ) ) ;
82
102
} ) ;
83
- $ . flushSync ( ( ) => $ . set ( count , 1 ) ) ;
84
- $ . flushSync ( ( ) => $ . set ( count , 2 ) ) ;
85
103
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
+ } ;
87
110
} ) ;
88
111
89
112
test ( 'derived from derived' , ( ) => {
@@ -96,10 +119,13 @@ describe('signals', () => {
96
119
$ . effect ( ( ) => {
97
120
log . push ( $ . get ( quadruple ) ) ;
98
121
} ) ;
99
- $ . flushSync ( ( ) => $ . set ( count , 1 ) ) ;
100
- $ . flushSync ( ( ) => $ . set ( count , 2 ) ) ;
101
122
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
+ } ;
103
129
} ) ;
104
130
105
131
test ( 'https://perf.js.hyoo.ru/#!bench=9h2as6_u0mfnn' , ( ) => {
@@ -116,31 +142,33 @@ describe('signals', () => {
116
142
const E = $ . derived ( ( ) => hard ( $ . get ( C ) + $ . get ( A ) + $ . get ( D ) [ 0 ] ! , 'E' ) ) ;
117
143
const F = $ . derived ( ( ) => hard ( $ . get ( D ) [ 0 ] ! && $ . get ( B ) , 'F' ) ) ;
118
144
const G = $ . derived ( ( ) => $ . get ( C ) + ( $ . get ( C ) || $ . get ( E ) % 2 ) + $ . get ( D ) [ 0 ] ! + $ . get ( F ) ) ;
119
- let H = $ . effect ( ( ) => {
145
+ $ . effect ( ( ) => {
120
146
res . push ( hard ( $ . get ( G ) , 'H' ) ) ;
121
147
} ) ;
122
- let I = $ . effect ( ( ) => {
148
+ $ . effect ( ( ) => {
123
149
res . push ( $ . get ( G ) ) ;
124
150
} ) ;
125
- let J = $ . effect ( ( ) => {
151
+ $ . effect ( ( ) => {
126
152
res . push ( hard ( $ . get ( F ) , 'J' ) ) ;
127
153
} ) ;
128
154
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 ( ) => {
140
156
$ . flushSync ( ) ;
141
157
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
+ } ;
145
173
} ) ;
146
174
} ) ;
0 commit comments