11import React from 'react' ;
2+ import { act } from 'react-dom/test-utils' ;
23import Overflow from '../src' ;
34import { mount } from './wrapper' ;
45
@@ -39,17 +40,27 @@ describe('Overflow.Responsive', () => {
3940 wrapper . initSize ( 100 , 20 ) ; // [0][1][2][3][4][+2](5)(6)
4041 expect ( wrapper . findItems ( ) ) . toHaveLength ( 6 ) ;
4142 [ true , true , true , true , false , false ] . forEach ( ( display , i ) => {
42- expect (
43- wrapper
44- . findItems ( )
45- . at ( i )
46- . props ( ) . display ,
47- ) . toBe ( display ) ;
43+ expect ( wrapper . findItems ( ) . at ( i ) . props ( ) . display ) . toBe ( display ) ;
4844 } ) ;
4945 expect ( wrapper . findRest ( ) ) . toHaveLength ( 1 ) ;
5046 expect ( wrapper . findRest ( ) . text ( ) ) . toEqual ( '+ 2 ...' ) ;
5147 } ) ;
5248
49+ it ( 'only one' , ( ) => {
50+ const wrapper = mount (
51+ < Overflow < ItemType >
52+ data = { getData ( 1 ) }
53+ itemKey = "key"
54+ renderItem = { renderItem }
55+ maxCount = "responsive"
56+ /> ,
57+ ) ;
58+ wrapper . initSize ( 100 , 20 ) ;
59+
60+ expect ( wrapper . findItems ( ) ) . toHaveLength ( 1 ) ;
61+ expect ( wrapper . findRest ( ) . props ( ) . display ) . toBeFalsy ( ) ;
62+ } ) ;
63+
5364 it ( 'remove to clean up' , ( ) => {
5465 const data = getData ( 6 ) ;
5566
@@ -63,19 +74,35 @@ describe('Overflow.Responsive', () => {
6374 ) ;
6475 wrapper . initSize ( 100 , 20 ) ;
6576
66- // Remove one
77+ // Remove one (Just fit the container width)
6778 const newData = [ ...data ] ;
6879 newData . splice ( 1 , 1 ) ;
6980 wrapper . setProps ( { data : newData } ) ;
81+ wrapper . update ( ) ;
7082
7183 expect ( wrapper . findItems ( ) ) . toHaveLength ( 5 ) ;
72- expect ( wrapper . findRest ( ) . text ( ) ) . toEqual ( '+ 1 ...' ) ;
84+ expect ( wrapper . findRest ( ) . props ( ) . display ) . toBeFalsy ( ) ;
85+
86+ // Remove one (More place for container)
87+ const restData = [ ...newData ] ;
88+ restData . splice ( 1 , 2 ) ;
89+ restData . push ( {
90+ label : 'Additional' ,
91+ key : 'additional' ,
92+ } ) ;
93+ wrapper . setProps ( { data : restData } ) ;
94+ wrapper . update ( ) ;
95+
96+ expect ( wrapper . findItems ( ) ) . toHaveLength ( 4 ) ;
97+ expect ( wrapper . findRest ( ) . props ( ) . display ) . toBeFalsy ( ) ;
7398 } ) ;
7499
75100 it ( 'none to overflow' , ( ) => {
101+ const data = getData ( 5 ) ;
102+
76103 const wrapper = mount (
77104 < Overflow < ItemType >
78- data = { getData ( 5 ) }
105+ data = { data }
79106 itemKey = "key"
80107 renderItem = { renderItem }
81108 maxCount = "responsive"
@@ -85,5 +112,44 @@ describe('Overflow.Responsive', () => {
85112 wrapper . initSize ( 100 , 20 ) ;
86113 expect ( wrapper . findItems ( ) ) . toHaveLength ( 5 ) ;
87114 expect ( wrapper . findRest ( ) . props ( ) . display ) . toBeFalsy ( ) ;
115+
116+ // Add one
117+ const newData : ItemType [ ] = [
118+ {
119+ label : 'Additional' ,
120+ key : 'additional' ,
121+ } ,
122+ ...data ,
123+ ] ;
124+ wrapper . setProps ( { data : newData } ) ;
125+ wrapper . update ( ) ;
126+
127+ // Currently resize observer not trigger, rest node is not ready
128+ expect ( wrapper . findItems ( ) ) . toHaveLength ( 6 ) ;
129+ expect ( wrapper . findRest ( ) . props ( ) . display ) . toBeFalsy ( ) ;
130+
131+ // Trigger resize, node ready
132+ wrapper . triggerItemResize ( 0 , 20 ) ;
133+ expect ( wrapper . findItems ( ) ) . toHaveLength ( 6 ) ;
134+ expect ( wrapper . findRest ( ) . props ( ) . display ) . toBeTruthy ( ) ;
135+ } ) ;
136+
137+ it ( 'unmount no error' , ( ) => {
138+ const wrapper = mount (
139+ < Overflow < ItemType >
140+ data = { getData ( 1 ) }
141+ itemKey = "key"
142+ renderItem = { renderItem }
143+ maxCount = "responsive"
144+ /> ,
145+ ) ;
146+
147+ wrapper . initSize ( 100 , 20 ) ;
148+
149+ wrapper . unmount ( ) ;
150+
151+ act ( ( ) => {
152+ jest . runAllTimers ( ) ;
153+ } ) ;
88154 } ) ;
89155} ) ;
0 commit comments