11import { describe , assert , it } from 'vitest' ;
22import * 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