11import { describe , expect , test , beforeEach , afterEach } from '@jest/globals' ;
22import { Wrapper } from '../../src/api/wrappers.ts' ;
33import { TAG_EXCEPTION , TAG_UNDEFINED } from '../../src/api/clone.ts' ;
4+ import {
5+ DEFAULT_SETTINGS ,
6+ panelsArrayToVisibilityMap ,
7+ } from '../../src/api/settings.ts' ;
48
59describe ( 'wrappers' , ( ) => {
610 let wrapper : Wrapper ;
@@ -12,23 +16,19 @@ describe('wrappers', () => {
1216
1317 afterEach ( ( ) => {
1418 wrapper . unwrapApis ( ) ;
15- wrapper . cleanHistory ( ) ;
1619 } ) ;
1720
18- test ( 'onlineTimers emptied after setTimeout expires' , ( ) => {
19- return new Promise < void > ( ( resolve ) => {
20- const DELAY = 5 ;
21- const handler = setTimeout ( ( ) => { } , DELAY ) ;
21+ test ( 'onlineTimers emptied after setTimeout expires' , async ( ) => {
22+ const DELAY = 5 ;
23+ const handler = setTimeout ( ( ) => { } , DELAY ) ;
24+
25+ // typecasting handler to number since here its having NodeJS.Timeout type
26+ expect ( wrapper . onlineTimers . size ) . toBe ( 1 ) ;
27+ expect ( wrapper . onlineTimers . has ( Number ( handler ) ) ) . toBe ( true ) ;
2228
23- // typecasting handler to number since here its having NodeJS.Timeout type
24- expect ( wrapper . onlineTimers . size ) . toBe ( 1 ) ;
25- expect ( wrapper . onlineTimers . has ( Number ( handler ) ) ) . toBe ( true ) ;
29+ await new Promise ( ( resolve ) => setTimeout ( resolve , 2 * DELAY ) ) ;
2630
27- setTimeout ( ( ) => {
28- expect ( wrapper . onlineTimers . size ) . toBe ( 0 ) ;
29- resolve ( ) ;
30- } , 2 * DELAY ) ;
31- } ) ;
31+ expect ( wrapper . onlineTimers . size ) . toBe ( 0 ) ;
3232 } ) ;
3333
3434 test ( 'setTimeoutHistory & clearTimeoutHistory - recorded' , ( ) => {
@@ -47,7 +47,7 @@ describe('wrappers', () => {
4747 test ( 'setTimeoutHistory - valid delay' , ( ) => {
4848 const DELAY = 123 ;
4949 const handler = setTimeout ( ( ) => { } , DELAY ) ;
50- const rec = [ ... wrapper . setTimeoutHistory . values ( ) ] [ 0 ] ;
50+ const rec = Array . from ( wrapper . setTimeoutHistory . values ( ) ) [ 0 ] ;
5151
5252 expect ( rec . individualInvocations ) . toBe ( 1 ) ;
5353 expect ( rec . handlerDelay ) . toBe ( DELAY ) ;
@@ -61,7 +61,8 @@ describe('wrappers', () => {
6161
6262 test ( 'setTimeoutHistory - invalid delay' , ( ) => {
6363 setTimeout ( ( ) => { } , - 1 ) ;
64- const rec = [ ...wrapper . setTimeoutHistory . values ( ) ] [ 0 ] ;
64+
65+ const rec = Array . from ( wrapper . setTimeoutHistory . values ( ) ) [ 0 ] ;
6566
6667 expect ( rec . individualInvocations ) . toBe ( 1 ) ;
6768 expect ( rec . handlerDelay ) . toBe ( TAG_EXCEPTION ( '-1' ) ) ;
@@ -72,13 +73,16 @@ describe('wrappers', () => {
7273 test ( 'clearTimeoutHistory - valid handler' , ( ) => {
7374 const handler = setTimeout ( ( ) => { } , 1e3 ) ;
7475 clearTimeout ( handler ) ;
75- const rec = [ ...wrapper . clearTimeoutHistory . values ( ) ] [ 0 ] ;
76+
77+ const rec = Array . from ( wrapper . clearTimeoutHistory . values ( ) ) [ 0 ] ;
78+
7679 expect ( rec . handlerDelay ) . toBe ( 1e3 ) ;
7780 } ) ;
7881
7982 test ( 'clearTimeoutHistory - non existent handler' , ( ) => {
80- clearTimeout ( 1000 ) ;
81- const rec = [ ...wrapper . clearTimeoutHistory . values ( ) ] [ 0 ] ;
83+ clearTimeout ( Number . MAX_SAFE_INTEGER ) ;
84+
85+ const rec = Array . from ( wrapper . clearTimeoutHistory . values ( ) ) [ 0 ] ;
8286
8387 expect ( rec . handlerDelay ) . toBe ( 'N/A' ) ;
8488 expect ( rec . hasError ) . toBe ( false ) ;
@@ -87,9 +91,10 @@ describe('wrappers', () => {
8791 test ( 'clearTimeoutHistory - invalid handler' , ( ) => {
8892 clearTimeout ( 0 ) ;
8993
90- const rec = [ ... wrapper . clearTimeoutHistory . values ( ) ] [ 0 ] ;
94+ const rec = Array . from ( wrapper . clearTimeoutHistory . values ( ) ) [ 0 ] ;
9195
9296 expect ( rec . handlerDelay ) . toBe ( 'N/A' ) ;
97+ expect ( rec . recentHandler ) . toBe ( TAG_EXCEPTION ( 0 ) ) ;
9398 expect ( rec . hasError ) . toBe ( true ) ;
9499 } ) ;
95100
@@ -109,7 +114,7 @@ describe('wrappers', () => {
109114 test ( 'setIntervalHistory - valid delay' , ( ) => {
110115 const DELAY = 123 ;
111116 const handler = setInterval ( ( ) => { } , DELAY ) ;
112- const rec = [ ... wrapper . setIntervalHistory . values ( ) ] [ 0 ] ;
117+ const rec = Array . from ( wrapper . setIntervalHistory . values ( ) ) [ 0 ] ;
113118
114119 expect ( rec . individualInvocations ) . toBe ( 1 ) ;
115120 expect ( rec . handlerDelay ) . toBe ( DELAY ) ;
@@ -123,7 +128,7 @@ describe('wrappers', () => {
123128
124129 test ( 'setIntervalHistory - invalid delay' , ( ) => {
125130 const handler = setInterval ( ( ) => { } , - 1 ) ;
126- const rec = [ ... wrapper . setIntervalHistory . values ( ) ] [ 0 ] ;
131+ const rec = Array . from ( wrapper . setIntervalHistory . values ( ) ) [ 0 ] ;
127132
128133 expect ( rec . individualInvocations ) . toBe ( 1 ) ;
129134 expect ( rec . handlerDelay ) . toBe ( TAG_EXCEPTION ( '-1' ) ) ;
@@ -136,23 +141,26 @@ describe('wrappers', () => {
136141 test ( 'clearIntervalHistory - valid handler' , ( ) => {
137142 const handler = setInterval ( ( ) => { } , 1e3 ) ;
138143 clearInterval ( handler ) ;
139- const rec = [ ...wrapper . clearIntervalHistory . values ( ) ] [ 0 ] ;
144+
145+ const rec = Array . from ( wrapper . clearIntervalHistory . values ( ) ) [ 0 ] ;
140146
141147 expect ( rec . handlerDelay ) . toBe ( 1e3 ) ;
142148 } ) ;
143149
144150 test ( 'clearIntervalHistory - non existent handler' , ( ) => {
145151 clearInterval ( 1000 ) ;
146152
147- const rec = [ ...wrapper . clearIntervalHistory . values ( ) ] [ 0 ] ;
153+ const rec = Array . from ( wrapper . clearIntervalHistory . values ( ) ) [ 0 ] ;
154+
148155 expect ( rec . handlerDelay ) . toBe ( 'N/A' ) ;
149156 expect ( rec . hasError ) . toBe ( false ) ;
150157 } ) ;
151158
152159 test ( 'clearIntervalHistory - invalid handler' , ( ) => {
153160 clearInterval ( 0 ) ;
154161
155- const rec = [ ...wrapper . clearIntervalHistory . values ( ) ] [ 0 ] ;
162+ const rec = Array . from ( wrapper . clearIntervalHistory . values ( ) ) [ 0 ] ;
163+
156164 expect ( rec . handlerDelay ) . toBe ( 'N/A' ) ;
157165 expect ( rec . hasError ) . toBe ( true ) ;
158166 } ) ;
@@ -167,7 +175,8 @@ describe('wrappers', () => {
167175 }
168176 expect ( wrapper . evalHistory . size ) . toBe ( 1 ) ;
169177
170- const rec = [ ...wrapper . evalHistory . values ( ) ] [ 0 ] ;
178+ const rec = Array . from ( wrapper . evalHistory . values ( ) ) [ 0 ] ;
179+
171180 expect ( rec . individualInvocations ) . toBe ( NUMBER_OF_INVOCATIONS ) ;
172181 expect ( rec . usesLocalScope ) . toBe ( false ) ;
173182 expect ( rec . code ) . toBe ( CODE ) ;
@@ -180,10 +189,59 @@ describe('wrappers', () => {
180189 const local_variable = 0 ;
181190 window . eval ( '(local_variable++)' ) ;
182191
183- const rec = [ ...wrapper . evalHistory . values ( ) ] [ 0 ] ;
192+ const rec = Array . from ( wrapper . evalHistory . values ( ) ) [ 0 ] ;
193+
184194 expect ( rec . individualInvocations ) . toBe ( 1 ) ;
185195 expect ( local_variable ) . toBe ( 0 ) ;
186196 expect ( rec . usesLocalScope ) . toBe ( true ) ;
187197 expect ( rec . returnedValue ) . toBe ( TAG_UNDEFINED ) ;
188198 } ) ;
199+
200+ test ( 'rafHistory - recorded' , async ( ) => {
201+ let typeOfArgument = '' ;
202+ const handler = await new Promise ( ( resolve ) => {
203+ const handler = requestAnimationFrame ( ( time ) => {
204+ typeOfArgument = typeof time ;
205+ resolve ( handler ) ;
206+ } ) ;
207+ } ) ;
208+ const rec = Array . from ( wrapper . rafHistory . values ( ) ) [ 0 ] ;
209+
210+ expect ( typeOfArgument ) . toBe ( 'number' ) ;
211+ expect ( wrapper . rafHistory . size ) . toBe ( 1 ) ;
212+ expect ( rec . recentHandler ) . toBe ( handler ) ;
213+ expect ( rec . individualInvocations ) . toBe ( 1 ) ;
214+ expect ( rec . trace . length ) . toBeGreaterThan ( 1 ) ;
215+ expect ( rec . traceId . length ) . toBeGreaterThan ( 1 ) ;
216+ expect ( wrapper . callCounter . requestAnimationFrame ) . toBe ( 1 ) ;
217+ } ) ;
218+
219+ test ( 'cafHistory - recorded' , async ( ) => {
220+ const unchanged = 0 ,
221+ changed = 1 ;
222+ let changeable = unchanged ;
223+ const handler = requestAnimationFrame ( ( ) => {
224+ changeable = changed ;
225+ } ) ;
226+ cancelAnimationFrame ( handler ) ;
227+
228+ const rec = Array . from ( wrapper . cafHistory . values ( ) ) [ 0 ] ;
229+
230+ expect ( changeable ) . toBe ( unchanged ) ;
231+ expect ( wrapper . rafHistory . size ) . toBe ( 1 ) ;
232+ expect ( wrapper . cafHistory . size ) . toBe ( 1 ) ;
233+ expect ( rec . recentHandler ) . toBe ( handler ) ;
234+ expect ( rec . individualInvocations ) . toBe ( 1 ) ;
235+ expect ( rec . trace . length ) . toBeGreaterThan ( 1 ) ;
236+ expect ( rec . traceId . length ) . toBeGreaterThan ( 1 ) ;
237+ expect ( wrapper . callCounter . cancelAnimationFrame ) . toBe ( 1 ) ;
238+ } ) ;
239+
240+ test ( 'cafHistory - invalid handler' , ( ) => {
241+ cancelAnimationFrame ( 0 ) ;
242+
243+ const rec = Array . from ( wrapper . cafHistory ?. values ( ) ) [ 0 ] ;
244+
245+ expect ( rec . recentHandler ) . toBe ( TAG_EXCEPTION ( 0 ) ) ;
246+ } ) ;
189247} ) ;
0 commit comments