1
1
import { setupRerender , act } from 'preact/test-utils' ;
2
2
import { createElement , render , createContext , Component } from 'preact' ;
3
- import { vi } from 'vitest' ;
3
+ import { afterAll , beforeAll , expect , vi } from 'vitest' ;
4
4
import {
5
5
useState ,
6
6
useContext ,
@@ -380,7 +380,7 @@ describe('useState', () => {
380
380
expect ( scratch . innerHTML ) . to . equal ( '<p>hello world!!!</p>' ) ;
381
381
} ) ;
382
382
383
- it ( 'should limit rerenders when setting state to NaN ' , ( ) => {
383
+ it ( 'should exhaust renders when NaN state is set as a result of a props update ' , ( ) => {
384
384
const calls = [ ] ;
385
385
const App = ( { i } ) => {
386
386
calls . push ( 'rendering' + i ) ;
@@ -402,10 +402,57 @@ describe('useState', () => {
402
402
act ( ( ) => {
403
403
render ( < App i = { 2 } /> , scratch ) ;
404
404
} ) ;
405
- expect ( calls . length ) . to . equal ( 3 ) ;
405
+ expect ( calls . length ) . to . equal ( 27 ) ;
406
406
expect ( calls . slice ( 1 ) . every ( c => c === 'rendering2' ) ) . to . equal ( true ) ;
407
407
} ) ;
408
408
409
+ it ( 'should bail correctly when setting NaN twice' , ( ) => {
410
+ const calls = [ ] ;
411
+ let set ;
412
+ const Greeting = ( { greeting } ) => {
413
+ calls . push ( 'rendering ' + greeting ) ;
414
+ return < p > { greeting } </ p > ;
415
+ } ;
416
+ const App = ( ) => {
417
+ const [ greeting , setGreeting ] = useState ( 0 ) ;
418
+ set = setGreeting ;
419
+
420
+ return < Greeting greeting = { greeting } /> ;
421
+ } ;
422
+
423
+ act ( ( ) => {
424
+ render ( < App /> , scratch ) ;
425
+ } ) ;
426
+ expect ( calls . length ) . to . equal ( 1 ) ;
427
+ expect ( calls ) . to . deep . equal ( [ 'rendering 0' ] ) ;
428
+
429
+ act ( ( ) => {
430
+ set ( 1 ) ;
431
+ } ) ;
432
+ expect ( calls . length ) . to . equal ( 2 ) ;
433
+ expect ( calls ) . to . deep . equal ( [ 'rendering 0' , 'rendering 1' ] ) ;
434
+
435
+ act ( ( ) => {
436
+ set ( NaN ) ;
437
+ } ) ;
438
+ expect ( calls . length ) . to . equal ( 3 ) ;
439
+ expect ( calls ) . to . deep . equal ( [
440
+ 'rendering 0' ,
441
+ 'rendering 1' ,
442
+ 'rendering NaN'
443
+ ] ) ;
444
+
445
+ act ( ( ) => {
446
+ set ( NaN ) ;
447
+ } ) ;
448
+ expect ( calls . length ) . to . equal ( 3 ) ;
449
+ expect ( calls ) . to . deep . equal ( [
450
+ 'rendering 0' ,
451
+ 'rendering 1' ,
452
+ 'rendering NaN'
453
+ ] ) ;
454
+ } ) ;
455
+
409
456
describe ( 'Global sCU' , ( ) => {
410
457
let prevScu ;
411
458
beforeAll ( ( ) => {
0 commit comments