@@ -135,9 +135,9 @@ describe('Tooltip', () => {
135135 wrapper . detach ( ) ;
136136 } ) ;
137137
138- it ( 'should clear timeout if it exists on target click' , ( ) => {
138+ it ( 'should clear hide timeout if it exists on target click' , ( ) => {
139139 const wrapper = mount (
140- < Tooltip target = "target" isOpen = { isOpen } toggle = { toggle } >
140+ < Tooltip target = "target" isOpen = { isOpen } toggle = { toggle } delay = { 200 } >
141141 Tooltip Content
142142 </ Tooltip > ,
143143 { attachTo : container }
@@ -147,7 +147,7 @@ describe('Tooltip', () => {
147147 instance . onMouseLeaveTooltip ( ) ;
148148 expect ( isOpen ) . toBe ( false ) ;
149149 instance . handleDocumentClick ( { target : target } ) ;
150- jasmine . clock ( ) . tick ( 250 ) ;
150+ jasmine . clock ( ) . tick ( 200 ) ;
151151 expect ( isOpen ) . toBe ( true ) ;
152152 wrapper . setProps ( { isOpen : isOpen } ) ;
153153 instance . handleDocumentClick ( { target : target } ) ;
@@ -176,7 +176,57 @@ describe('Tooltip', () => {
176176 wrapper . detach ( ) ;
177177 } ) ;
178178
179- describe ( 'onTimeout' , ( ) => {
179+ describe ( 'delay' , ( ) => {
180+ it ( 'should accept a number' , ( ) => {
181+ isOpen = true ;
182+ const wrapper = mount (
183+ < Tooltip target = "target" isOpen = { isOpen } toggle = { toggle } delay = { 200 } >
184+ Tooltip Content
185+ </ Tooltip > ,
186+ { attachTo : container }
187+ ) ;
188+ const instance = wrapper . instance ( ) ;
189+
190+ instance . onMouseLeaveTooltip ( ) ;
191+ expect ( isOpen ) . toBe ( true ) ;
192+ jasmine . clock ( ) . tick ( 200 ) ;
193+ expect ( isOpen ) . toBe ( false ) ;
194+ } ) ;
195+
196+ it ( 'should accept an object' , ( ) => {
197+ isOpen = true ;
198+ const wrapper = mount (
199+ < Tooltip target = "target" isOpen = { isOpen } toggle = { toggle } delay = { { show : 200 , hide : 200 } } >
200+ Tooltip Content
201+ </ Tooltip > ,
202+ { attachTo : container }
203+ ) ;
204+ const instance = wrapper . instance ( ) ;
205+
206+ instance . onMouseLeaveTooltip ( ) ;
207+ expect ( isOpen ) . toBe ( true ) ;
208+ jasmine . clock ( ) . tick ( 200 ) ;
209+ expect ( isOpen ) . toBe ( false ) ;
210+ } ) ;
211+
212+ it ( 'should use default value if value is missing from object' , ( ) => {
213+ isOpen = true ;
214+ const wrapper = mount (
215+ < Tooltip target = "target" isOpen = { isOpen } toggle = { toggle } delay = { { show : 0 } } >
216+ Tooltip Content
217+ </ Tooltip > ,
218+ { attachTo : container }
219+ ) ;
220+ const instance = wrapper . instance ( ) ;
221+
222+ instance . onMouseLeaveTooltip ( ) ;
223+ expect ( isOpen ) . toBe ( true ) ;
224+ jasmine . clock ( ) . tick ( 250 ) ; // Default hide value: 250
225+ expect ( isOpen ) . toBe ( false ) ;
226+ } ) ;
227+ } ) ;
228+
229+ describe ( 'hide' , ( ) => {
180230 it ( 'should call toggle when isOpen' , ( ) => {
181231 spyOn ( Tooltip . prototype , 'toggle' ) . and . callThrough ( ) ;
182232 isOpen = true ;
@@ -190,7 +240,7 @@ describe('Tooltip', () => {
190240
191241 expect ( Tooltip . prototype . toggle ) . not . toHaveBeenCalled ( ) ;
192242
193- instance . onTimeout ( ) ;
243+ instance . hide ( ) ;
194244
195245 expect ( Tooltip . prototype . toggle ) . toHaveBeenCalled ( ) ;
196246
@@ -209,7 +259,48 @@ describe('Tooltip', () => {
209259
210260 expect ( Tooltip . prototype . toggle ) . not . toHaveBeenCalled ( ) ;
211261
212- instance . onTimeout ( ) ;
262+ instance . hide ( ) ;
263+
264+ expect ( Tooltip . prototype . toggle ) . not . toHaveBeenCalled ( ) ;
265+
266+ wrapper . detach ( ) ;
267+ } ) ;
268+ } ) ;
269+
270+ describe ( 'show' , ( ) => {
271+ it ( 'should call toggle when isOpen is false' , ( ) => {
272+ spyOn ( Tooltip . prototype , 'toggle' ) . and . callThrough ( ) ;
273+ const wrapper = mount (
274+ < Tooltip target = "target" isOpen = { isOpen } toggle = { toggle } >
275+ Tooltip Content
276+ </ Tooltip > ,
277+ { attachTo : container }
278+ ) ;
279+ const instance = wrapper . instance ( ) ;
280+
281+ expect ( Tooltip . prototype . toggle ) . not . toHaveBeenCalled ( ) ;
282+
283+ instance . show ( ) ;
284+
285+ expect ( Tooltip . prototype . toggle ) . toHaveBeenCalled ( ) ;
286+
287+ wrapper . detach ( ) ;
288+ } ) ;
289+
290+ it ( 'should not call toggle when isOpen' , ( ) => {
291+ spyOn ( Tooltip . prototype , 'toggle' ) . and . callThrough ( ) ;
292+ isOpen = true ;
293+ const wrapper = mount (
294+ < Tooltip target = "target" isOpen = { isOpen } toggle = { toggle } >
295+ Tooltip Content
296+ </ Tooltip > ,
297+ { attachTo : container }
298+ ) ;
299+ const instance = wrapper . instance ( ) ;
300+
301+ expect ( Tooltip . prototype . toggle ) . not . toHaveBeenCalled ( ) ;
302+
303+ instance . show ( ) ;
213304
214305 expect ( Tooltip . prototype . toggle ) . not . toHaveBeenCalled ( ) ;
215306
@@ -221,7 +312,7 @@ describe('Tooltip', () => {
221312 it ( 'should clear timeout if it exists on target click' , ( ) => {
222313 spyOn ( Tooltip . prototype , 'toggle' ) . and . callThrough ( ) ;
223314 const wrapper = mount (
224- < Tooltip target = "target" isOpen = { isOpen } toggle = { toggle } >
315+ < Tooltip target = "target" isOpen = { isOpen } toggle = { toggle } delay = { 200 } >
225316 Tooltip Content
226317 </ Tooltip > ,
227318 { attachTo : container }
@@ -234,6 +325,7 @@ describe('Tooltip', () => {
234325 expect ( Tooltip . prototype . toggle ) . not . toHaveBeenCalled ( ) ;
235326
236327 instance . onMouseOverTooltip ( ) ;
328+ jasmine . clock ( ) . tick ( 200 ) ;
237329
238330 expect ( Tooltip . prototype . toggle ) . toHaveBeenCalled ( ) ;
239331
@@ -244,19 +336,66 @@ describe('Tooltip', () => {
244336 spyOn ( Tooltip . prototype , 'toggle' ) . and . callThrough ( ) ;
245337 isOpen = true ;
246338 const wrapper = mount (
247- < Tooltip target = "target" isOpen = { isOpen } toggle = { toggle } >
339+ < Tooltip target = "target" isOpen = { isOpen } toggle = { toggle } delay = { 0 } >
248340 Tooltip Content
249341 </ Tooltip > ,
250342 { attachTo : container }
251343 ) ;
252344 const instance = wrapper . instance ( ) ;
253345
254346 instance . onMouseOverTooltip ( ) ;
347+ jasmine . clock ( ) . tick ( 0 ) ; // delay: 0 toggle is still async
255348
256349 expect ( isOpen ) . toBe ( true ) ;
257350 expect ( Tooltip . prototype . toggle ) . not . toHaveBeenCalled ( ) ;
258351
259352 wrapper . detach ( ) ;
260353 } ) ;
261354 } ) ;
355+
356+ describe ( 'onMouseLeaveTooltip' , ( ) => {
357+ it ( 'should clear timeout if it exists on target click' , ( ) => {
358+ spyOn ( Tooltip . prototype , 'toggle' ) . and . callThrough ( ) ;
359+ isOpen = true ;
360+ const wrapper = mount (
361+ < Tooltip target = "target" isOpen = { isOpen } toggle = { toggle } delay = { 200 } >
362+ Tooltip Content
363+ </ Tooltip > ,
364+ { attachTo : container }
365+ ) ;
366+ const instance = wrapper . instance ( ) ;
367+
368+ instance . onMouseOverTooltip ( ) ;
369+
370+ expect ( isOpen ) . toBe ( true ) ;
371+ expect ( Tooltip . prototype . toggle ) . not . toHaveBeenCalled ( ) ;
372+
373+ instance . onMouseLeaveTooltip ( ) ;
374+ jasmine . clock ( ) . tick ( 200 ) ;
375+
376+ expect ( Tooltip . prototype . toggle ) . toHaveBeenCalled ( ) ;
377+
378+ wrapper . detach ( ) ;
379+ } ) ;
380+
381+ it ( 'should not call .toggle if isOpen is false' , ( ) => {
382+ spyOn ( Tooltip . prototype , 'toggle' ) . and . callThrough ( ) ;
383+ isOpen = false ;
384+ const wrapper = mount (
385+ < Tooltip target = "target" isOpen = { isOpen } toggle = { toggle } delay = { 0 } >
386+ Tooltip Content
387+ </ Tooltip > ,
388+ { attachTo : container }
389+ ) ;
390+ const instance = wrapper . instance ( ) ;
391+
392+ instance . onMouseLeaveTooltip ( ) ;
393+ jasmine . clock ( ) . tick ( 0 ) ; // delay: 0 toggle is still async
394+
395+ expect ( isOpen ) . toBe ( false ) ;
396+ expect ( Tooltip . prototype . toggle ) . not . toHaveBeenCalled ( ) ;
397+
398+ wrapper . detach ( ) ;
399+ } ) ;
400+ } ) ;
262401} ) ;
0 commit comments