@@ -54,220 +54,176 @@ describe("Popover", () => {
54
54
expect ( popperHover ) . toEqual ( wrapperElement . childAt ( 1 ) ) ;
55
55
} ) ;
56
56
57
- describe ( "Popper hover type" , ( ) => {
58
- beforeEach ( ( ) => {
59
- defaultProps = {
60
- ...defaultProps ,
61
- popperType : "hover"
62
- } ;
63
- } ) ;
64
-
65
- it ( "Renders closed by default" , ( ) => {
66
- let wrapper = shallow ( < Popover { ...defaultProps } /> ) ;
67
-
68
- let popperHover = wrapper . find ( PopperHover ) ;
69
- expect ( popperHover ) . toHaveLength ( 1 ) ;
70
- expect ( popperHover . hasClass ( "visible" ) ) . toBe ( false ) ;
71
- } ) ;
72
-
73
- it ( "Renders open when being hovered" , ( ) => {
74
- let wrapper = shallow ( < Popover { ...defaultProps } /> ) ;
75
-
76
- let popperHover = wrapper . find ( PopperHover ) ;
77
- popperHover . props ( ) . onHoverChange ( true ) ;
78
-
79
- popperHover = wrapper . find ( PopperHover ) ;
80
- expect ( popperHover ) . toHaveLength ( 1 ) ;
81
- expect ( popperHover . hasClass ( "visible" ) ) . toBe ( true ) ;
82
- } ) ;
83
- } ) ;
84
-
85
- describe ( "Popper none type" , ( ) => {
86
- beforeEach ( ( ) => {
87
- defaultProps = {
88
- ...defaultProps ,
89
- popperType : "none"
90
- } ;
91
- } ) ;
92
-
93
- it ( "Renders closed by default" , ( ) => {
94
- let wrapper = shallow ( < Popover { ...defaultProps } /> ) ;
95
-
96
- let popperHover = wrapper . find ( PopperHover ) ;
97
- expect ( popperHover ) . toHaveLength ( 1 ) ;
98
- expect ( popperHover . hasClass ( "visible" ) ) . toBe ( false ) ;
99
- } ) ;
100
-
101
- it ( "Renders closed even if hovered on" , ( ) => {
102
- let wrapper = shallow ( < Popover { ...defaultProps } /> ) ;
103
-
104
- let popperHover = wrapper . find ( PopperHover ) ;
105
- popperHover . props ( ) . onHoverChange ( true ) ;
106
-
107
- popperHover = wrapper . find ( PopperHover ) ;
108
- expect ( popperHover ) . toHaveLength ( 1 ) ;
109
- expect ( popperHover . hasClass ( "visible" ) ) . toBe ( false ) ;
110
- } ) ;
111
- } ) ;
112
-
113
- describe ( "Popper click type" , ( ) => {
114
- beforeEach ( ( ) => {
115
- defaultProps = {
116
- ...defaultProps ,
117
- popperType : "click"
118
- } ;
119
- } ) ;
120
-
121
- it ( "Renders closed by default" , ( ) => {
122
- let wrapper = shallow ( < Popover { ...defaultProps } /> ) ;
123
-
124
- let popperClick = wrapper . find ( PopperClick ) ;
125
- expect ( popperClick ) . toHaveLength ( 1 ) ;
126
- expect ( popperClick . hasClass ( "visible" ) ) . toBe ( false ) ;
127
- } ) ;
128
-
129
- it ( "Renders closed when dismissed" , ( ) => {
130
- let wrapper = shallow ( < Popover { ...defaultProps } /> ) ;
131
-
132
- // Hover on the target to open the popper
133
- let targetHover = wrapper . find ( TargetHover ) ;
134
- targetHover . props ( ) . onHoverChange ( true ) ;
135
-
136
- // Verify the popper is open
137
- let popperClick = wrapper . find ( PopperClick ) ;
138
- expect ( popperClick ) . toHaveLength ( 1 ) ;
139
- expect ( popperClick . hasClass ( "visible" ) ) . toBe ( true ) ;
140
-
141
- // Now close and verify the popper
142
- popperClick . props ( ) . onDismiss ( { } as any ) ;
143
- popperClick = wrapper . find ( PopperClick ) ;
144
- expect ( popperClick ) . toHaveLength ( 1 ) ;
145
- expect ( popperClick . hasClass ( "visible" ) ) . toBe ( false ) ;
146
- } ) ;
147
- } ) ;
148
-
149
- describe ( "Popper blur type" , ( ) => {
150
- beforeEach ( ( ) => {
151
- defaultProps = {
152
- ...defaultProps ,
153
- popperType : "blur"
154
- } ;
155
- } ) ;
156
-
157
- it ( "Renders closed by default" , ( ) => {
158
- let wrapper = shallow ( < Popover { ...defaultProps } /> ) ;
159
-
160
- let popper = wrapper . find ( PopperBlur ) ;
161
- expect ( popper ) . toHaveLength ( 1 ) ;
162
- expect ( popper . hasClass ( "visible" ) ) . toBe ( false ) ;
163
- } ) ;
164
-
165
- it ( "Renders closed when dismissed" , ( ) => {
166
- let wrapper = shallow ( < Popover { ...defaultProps } /> ) ;
167
-
168
- // Hover on the target to open the popper
169
- let targetHover = wrapper . find ( TargetHover ) ;
170
- targetHover . props ( ) . onHoverChange ( true ) ;
171
-
172
- // Verify the popper is open
173
- let popper = wrapper . find ( PopperBlur ) ;
174
- expect ( popper ) . toHaveLength ( 1 ) ;
175
- expect ( popper . hasClass ( "visible" ) ) . toBe ( true ) ;
176
-
177
- // Now close and verify the popper
178
- popper . props ( ) . onDismiss ( { } as any ) ;
179
- popper = wrapper . find ( PopperBlur ) ;
180
- expect ( popper ) . toHaveLength ( 1 ) ;
181
- expect ( popper . hasClass ( "visible" ) ) . toBe ( false ) ;
182
- } ) ;
183
- } ) ;
184
-
185
- let targetHoverState : boolean = false ;
186
- let targetInfos : Array < {
187
- targetType : TargetType ;
188
- component : any ;
189
- activateTarget : ( component : any ) => void ;
190
- } > = [
191
- {
192
- component : TargetClick ,
193
- targetType : "click" ,
194
- activateTarget : target => {
195
- target . props ( ) . onClick ( { } as any ) ;
57
+ describe ( "Open/Close scenarios" , ( ) => {
58
+ let targetHoverState : boolean = false ;
59
+ let targetInfos : Array < {
60
+ targetType : TargetType ;
61
+ component : any ;
62
+ activateTarget : ( component : any ) => void ;
63
+ } > = [
64
+ {
65
+ component : TargetClick ,
66
+ targetType : "click" ,
67
+ activateTarget : target => {
68
+ target . props ( ) . onClick ( { } as any ) ;
69
+ }
70
+ } ,
71
+ {
72
+ component : TargetHover ,
73
+ targetType : "hover" ,
74
+ activateTarget : target => {
75
+ targetHoverState = ! targetHoverState ;
76
+ target . props ( ) . onHoverChange ( targetHoverState ) ;
77
+ }
196
78
}
197
- } ,
198
- {
199
- component : TargetHover ,
200
- targetType : "hover" ,
201
- activateTarget : target => {
202
- targetHoverState = ! targetHoverState ;
203
- target . props ( ) . onHoverChange ( targetHoverState ) ;
79
+ ] ;
80
+ let popperInfos : Array < {
81
+ popperType : PopperType ;
82
+ component : any ;
83
+ activateTarget : ( component : any ) => void ;
84
+ } > = [
85
+ {
86
+ component : PopperHover ,
87
+ popperType : "hover" ,
88
+ activateTarget : target => {
89
+ target . props ( ) . onHoverChange ( false ) ;
90
+ }
91
+ } ,
92
+ {
93
+ component : PopperHover ,
94
+ popperType : "none" ,
95
+ activateTarget : target => {
96
+ target . props ( ) . onHoverChange ( false ) ;
97
+ }
98
+ } ,
99
+ {
100
+ component : PopperClick ,
101
+ popperType : "click" ,
102
+ activateTarget : target => {
103
+ target . props ( ) . onDismiss ( ) ;
104
+ }
105
+ } ,
106
+ {
107
+ component : PopperBlur ,
108
+ popperType : "blur" ,
109
+ activateTarget : target => {
110
+ target . props ( ) . onDismiss ( { } as any ) ;
111
+ }
204
112
}
205
- }
206
- ] ;
207
- let popperInfos : Array < {
208
- popperType : PopperType ;
209
- component : any ;
210
- } > = [
211
- {
212
- component : PopperHover ,
213
- popperType : "hover"
214
- } ,
215
- {
216
- component : PopperHover ,
217
- popperType : "none"
218
- } ,
219
- {
220
- component : PopperClick ,
221
- popperType : "click"
222
- } ,
223
- {
224
- component : PopperBlur ,
225
- popperType : "blur"
226
- }
227
- ] ;
228
- for ( let targetType of targetInfos ) {
229
- describe ( `TargetType: ${ targetType . targetType } ` , ( ) => {
230
- for ( let popperType of popperInfos ) {
231
- describe ( `PopperType: ${ popperType . popperType } ` , ( ) => {
232
- beforeEach ( ( ) => {
233
- defaultProps = {
234
- ...defaultProps ,
235
- popperType : popperType . popperType ,
236
- targetType : targetType . targetType
237
- } ;
238
- } ) ;
239
-
240
- it ( "Renders closed by default" , ( ) => {
241
- let wrapper = shallow ( < Popover { ...defaultProps } /> ) ;
242
-
243
- let popper = wrapper . find ( popperType . component ) ;
244
- expect ( popper ) . toHaveLength ( 1 ) ;
245
- expect ( popper . hasClass ( "visible" ) ) . toBe ( false ) ;
113
+ ] ;
114
+
115
+ describe ( "Target events" , ( ) => {
116
+ for ( let targetType of targetInfos ) {
117
+ for ( let popperType of popperInfos ) {
118
+ describe ( `TargetType: ${ targetType . targetType } , PopperType: ${
119
+ popperType . popperType
120
+ } `, ( ) => {
121
+ beforeEach ( ( ) => {
122
+ targetHoverState = false ;
123
+ defaultProps = {
124
+ ...defaultProps ,
125
+ popperType : popperType . popperType ,
126
+ targetType : targetType . targetType
127
+ } ;
128
+ } ) ;
129
+
130
+ it ( "Renders closed by default" , ( ) => {
131
+ let wrapper = shallow ( < Popover { ...defaultProps } /> ) ;
132
+
133
+ let popper = wrapper . find ( popperType . component ) ;
134
+ expect ( popper ) . toHaveLength ( 1 ) ;
135
+ expect ( popper . hasClass ( "visible" ) ) . toBe ( false ) ;
136
+ } ) ;
137
+
138
+ it ( "Renders open/closed when clicked" , ( ) => {
139
+ let wrapper = shallow ( < Popover { ...defaultProps } /> ) ;
140
+
141
+ // Click the target and open it
142
+ let targetClick = wrapper . find ( targetType . component ) ;
143
+ targetType . activateTarget ( targetClick ) ;
144
+
145
+ // Verify the popper is open
146
+ let popper = wrapper . find ( popperType . component ) ;
147
+ expect ( popper ) . toHaveLength ( 1 ) ;
148
+ expect ( popper . hasClass ( "visible" ) ) . toBe ( true ) ;
149
+
150
+ // Now click the target again to close it
151
+ targetClick = wrapper . find ( targetType . component ) ;
152
+ targetType . activateTarget ( targetClick ) ;
153
+
154
+ // Verify the popper is in expected state
155
+ popper = wrapper . find ( popperType . component ) ;
156
+ expect ( popper ) . toHaveLength ( 1 ) ;
157
+ if (
158
+ targetType . targetType === "hover" &&
159
+ ( popperType . popperType === "click" ||
160
+ popperType . popperType === "blur" )
161
+ ) {
162
+ // For these types, the popper should open by the target but only the popper can close it, not the target
163
+ expect ( popper . hasClass ( "visible" ) ) . toBe ( true ) ;
164
+ } else {
165
+ // For these two types the popper should disappear when no longer focused on the target
166
+ expect ( popper . hasClass ( "visible" ) ) . toBe ( false ) ;
167
+ }
168
+ } ) ;
246
169
} ) ;
170
+ }
171
+ }
172
+ } ) ;
247
173
248
- it ( "Renders open/closed when clicked" , ( ) => {
249
- let wrapper = shallow ( < Popover { ...defaultProps } /> ) ;
250
-
251
- // Click the target and open it
252
- let targetClick = wrapper . find ( targetType . component ) ;
253
- targetType . activateTarget ( targetClick ) ;
254
-
255
- // Verify the popper is open
256
- let popper = wrapper . find ( popperType . component ) ;
257
- expect ( popper ) . toHaveLength ( 1 ) ;
258
- expect ( popper . hasClass ( "visible" ) ) . toBe ( true ) ;
259
-
260
- // Now click the target again to close it
261
- targetClick = wrapper . find ( targetType . component ) ;
262
- targetType . activateTarget ( targetClick ) ;
263
- popper = wrapper . find ( popperType . component ) ;
264
- expect ( popper ) . toHaveLength ( 1 ) ;
265
- expect ( popper . hasClass ( "visible" ) ) . toBe ( false ) ;
174
+ describe ( "Popper events" , ( ) => {
175
+ for ( let targetType of targetInfos ) {
176
+ for ( let popperType of popperInfos ) {
177
+ describe ( `TargetType: ${ targetType . targetType } , PopperType: ${
178
+ popperType . popperType
179
+ } `, ( ) => {
180
+ beforeEach ( ( ) => {
181
+ targetHoverState = false ;
182
+ defaultProps = {
183
+ ...defaultProps ,
184
+ popperType : popperType . popperType ,
185
+ targetType : targetType . targetType
186
+ } ;
187
+ } ) ;
188
+
189
+ it ( "Renders closed by default" , ( ) => {
190
+ let wrapper = shallow ( < Popover { ...defaultProps } /> ) ;
191
+
192
+ let popper = wrapper . find ( popperType . component ) ;
193
+ expect ( popper ) . toHaveLength ( 1 ) ;
194
+ expect ( popper . hasClass ( "visible" ) ) . toBe ( false ) ;
195
+ } ) ;
196
+
197
+ it ( "Closes when requested" , ( ) => {
198
+ let wrapper = shallow ( < Popover { ...defaultProps } /> ) ;
199
+
200
+ // Click the target and open it
201
+ let targetClick = wrapper . find ( targetType . component ) ;
202
+ targetType . activateTarget ( targetClick ) ;
203
+
204
+ // Verify the popper is open
205
+ let popper = wrapper . find ( popperType . component ) ;
206
+ expect ( popper ) . toHaveLength ( 1 ) ;
207
+ expect ( popper . hasClass ( "visible" ) ) . toBe ( true ) ;
208
+
209
+ // Now activate the close scenario to close the popper
210
+ popper = wrapper . find ( popperType . component ) ;
211
+ popperType . activateTarget ( popper ) ;
212
+
213
+ // Verify the popper is closed
214
+ popper = wrapper . find ( popperType . component ) ;
215
+ expect ( popper ) . toHaveLength ( 1 ) ;
216
+ if ( popperType . popperType === "none" ) {
217
+ expect ( popper . hasClass ( "visible" ) ) . toBe ( true ) ;
218
+ } else {
219
+ expect ( popper . hasClass ( "visible" ) ) . toBe ( false ) ;
220
+ }
221
+ } ) ;
266
222
} ) ;
267
- } ) ;
223
+ }
268
224
}
269
225
} ) ;
270
- }
226
+ } ) ;
271
227
272
228
describe ( "Uncontrolled component methods" , ( ) => {
273
229
let spy : jest . SpyInstance < ( ( isOpen : boolean ) => void ) | undefined > ;
0 commit comments