Skip to content

Commit e2ca906

Browse files
committed
Menu: Clean up tests to remove nested setTimeout calls
1 parent f5b52a8 commit e2ca906

File tree

1 file changed

+143
-123
lines changed

1 file changed

+143
-123
lines changed

tests/unit/menu/menu_events.js

Lines changed: 143 additions & 123 deletions
Original file line numberDiff line numberDiff line change
@@ -87,48 +87,55 @@ asyncTest( "handle submenu auto collapse: mouseleave", function() {
8787
var $menu = $( "#menu2" ).menu();
8888

8989
$menu.find( "li:nth-child(7)" ).trigger( "mouseover" );
90-
setTimeout(function() {
90+
setTimeout( menumouseleave1, 350 );
91+
92+
function menumouseleave1() {
9193
equal( $menu.find( "ul[aria-expanded='true']" ).length, 1, "first submenu expanded" );
9294
$menu.find( "li:nth-child(7) li:first" ).trigger( "mouseover" );
93-
setTimeout(function() {
94-
equal( $menu.find( "ul[aria-expanded='true']" ).length, 2, "second submenu expanded" );
95-
$menu.find( "ul[aria-expanded='true']:first" ).trigger( "mouseleave" );
96-
setTimeout(function() {
97-
equal( $menu.find( "ul[aria-expanded='true']" ).length, 1, "second submenu collapsed" );
98-
$menu.trigger( "mouseleave" );
99-
setTimeout(function() {
100-
equal( $menu.find( "ul[aria-expanded='true']" ).length, 0, "first submenu collapsed" );
101-
start();
102-
}, 1400);
103-
}, 1050);
104-
}, 700);
105-
}, 350);
95+
setTimeout( menumouseleave2, 350 );
96+
}
97+
function menumouseleave2() {
98+
equal( $menu.find( "ul[aria-expanded='true']" ).length, 2, "second submenu expanded" );
99+
$menu.find( "ul[aria-expanded='true']:first" ).trigger( "mouseleave" );
100+
setTimeout( menumouseleave3, 350 );
101+
}
102+
function menumouseleave3() {
103+
equal( $menu.find( "ul[aria-expanded='true']" ).length, 1, "second submenu collapsed" );
104+
$menu.trigger( "mouseleave" );
105+
setTimeout( menumouseleave4, 350 );
106+
}
107+
function menumouseleave4() {
108+
equal( $menu.find( "ul[aria-expanded='true']" ).length, 0, "first submenu collapsed" );
109+
start();
110+
}
106111
});
107112

108-
asyncTest( "handle custom menu item submenu auto collapse: mouseleave", function() {
109-
expect( 5 );
113+
asyncTest( "handle submenu auto collapse: mouseleave", function() {
114+
expect( 4 );
110115
var $menu = $( "#menu5" ).menu( { menus: "div" } );
111116

112-
$menu.children( ":nth-child(7)" ).trigger( "mouseover" );
113-
setTimeout(function() {
117+
$menu.find( ":nth-child(7)" ).trigger( "mouseover" );
118+
setTimeout( menumouseleave1, 350 );
119+
120+
function menumouseleave1() {
114121
equal( $menu.find( "div[aria-expanded='true']" ).length, 1, "first submenu expanded" );
115-
$menu.children( ":nth-child(7)" ).find( "div:first" ).children( ":first" ).trigger( "mouseover" );
116-
setTimeout(function() {
117-
equal( $menu.find( "div[aria-expanded='true']" ).length, 2, "second submenu expanded" );
118-
$menu.find( "div[aria-expanded='true']:first" ).trigger( "mouseleave" );
119-
setTimeout(function() {
120-
equal( $menu.find( "div[aria-expanded='true']" ).length, 1, "second submenu collapsed" );
121-
$menu.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN });
122-
ok( $menu.find( ".ui-state-active" ).is( "#menu5 :nth-child(7) a" ),
123-
"down keypress selected an item from the first submenu" );
124-
$menu.trigger( "mouseleave" );
125-
setTimeout(function() {
126-
equal( $menu.find( "div[aria-expanded='true']" ).length, 0, "first submenu collapsed" );
127-
start();
128-
}, 1400);
129-
}, 1050);
130-
}, 700);
131-
}, 350);
122+
$menu.find( ":nth-child(7)" ).find( "div" ).eq( 0 ).children().eq( 0 ).trigger( "mouseover" );
123+
setTimeout( menumouseleave2, 350 );
124+
}
125+
function menumouseleave2() {
126+
equal( $menu.find( "div[aria-expanded='true']" ).length, 2, "second submenu expanded" );
127+
$menu.find( "div[aria-expanded='true']:first" ).trigger( "mouseleave" );
128+
setTimeout( menumouseleave3, 350 );
129+
}
130+
function menumouseleave3() {
131+
equal( $menu.find( "div[aria-expanded='true']" ).length, 1, "second submenu collapsed" );
132+
$menu.trigger( "mouseleave" );
133+
setTimeout( menumouseleave4, 350 );
134+
}
135+
function menumouseleave4() {
136+
equal( $menu.find( "div[aria-expanded='true']" ).length, 0, "first submenu collapsed" );
137+
start();
138+
}
132139
});
133140

134141

@@ -206,12 +213,15 @@ asyncTest("handle keyboard navigation on menu without scroll and with submenus",
206213
});
207214

208215
menu_log("keydown",true);
216+
element.one( "menufocus", function( event, ui ) {
217+
element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } );
218+
element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } );
219+
equals( $("#log").html(), "2,1,keydown,", "Keydown DOWN");
220+
setTimeout( menukeyboard1, 50 );
221+
});
209222
element.focus();
210-
element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } );
211-
element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } );
212-
equals( $("#log").html(), "2,1,0,keydown,", "Keydown DOWN");
213223

214-
setTimeout(function() {
224+
function menukeyboard1() {
215225
menu_log("keydown",true);
216226
element.simulate( "keydown", { keyCode: $.ui.keyCode.UP } );
217227
element.simulate( "keydown", { keyCode: $.ui.keyCode.UP } );
@@ -231,59 +241,62 @@ asyncTest("handle keyboard navigation on menu without scroll and with submenus",
231241
setTimeout( function() {
232242
equals( $("#log").html(), "0,4,3,2,1,keydown,", "Keydown RIGHT (open submenu)");
233243
}, 50);
244+
setTimeout( menukeyboard2, 50 );
245+
}
234246

235-
setTimeout( function() {
236-
menu_log("keydown",true);
237-
element.simulate( "keydown", { keyCode: $.ui.keyCode.LEFT } );
238-
equals( $("#log").html(), "4,keydown,", "Keydown LEFT (close submenu)");
247+
function menukeyboard2() {
248+
menu_log("keydown",true);
249+
element.simulate( "keydown", { keyCode: $.ui.keyCode.LEFT } );
250+
equals( $("#log").html(), "4,keydown,", "Keydown LEFT (close submenu)");
239251

240-
//re-open submenu
241-
element.simulate( "keydown", { keyCode: $.ui.keyCode.RIGHT } );
252+
//re-open submenu
253+
element.simulate( "keydown", { keyCode: $.ui.keyCode.RIGHT } );
254+
setTimeout( menukeyboard3, 50 );
255+
}
242256

243-
setTimeout( function() {
244-
menu_log("keydown",true);
245-
element.simulate( "keydown", { keyCode: $.ui.keyCode.PAGE_DOWN } );
246-
equals( $("#log").html(), "2,keydown,", "Keydown PAGE_DOWN");
257+
function menukeyboard3() {
258+
menu_log("keydown",true);
259+
element.simulate( "keydown", { keyCode: $.ui.keyCode.PAGE_DOWN } );
260+
equals( $("#log").html(), "2,keydown,", "Keydown PAGE_DOWN");
247261

248-
menu_log("keydown",true);
249-
element.simulate( "keydown", { keyCode: $.ui.keyCode.PAGE_DOWN } );
250-
equals( $("#log").html(), "keydown,", "Keydown PAGE_DOWN (no effect)");
262+
menu_log("keydown",true);
263+
element.simulate( "keydown", { keyCode: $.ui.keyCode.PAGE_DOWN } );
264+
equals( $("#log").html(), "keydown,", "Keydown PAGE_DOWN (no effect)");
251265

252-
menu_log("keydown",true);
253-
element.simulate( "keydown", { keyCode: $.ui.keyCode.PAGE_UP } );
254-
equals( $("#log").html(), "0,keydown,", "Keydown PAGE_UP");
266+
menu_log("keydown",true);
267+
element.simulate( "keydown", { keyCode: $.ui.keyCode.PAGE_UP } );
268+
equals( $("#log").html(), "0,keydown,", "Keydown PAGE_UP");
255269

256-
menu_log("keydown",true);
257-
element.simulate( "keydown", { keyCode: $.ui.keyCode.PAGE_UP } );
258-
equals( $("#log").html(), "keydown,", "Keydown PAGE_UP (no effect)");
270+
menu_log("keydown",true);
271+
element.simulate( "keydown", { keyCode: $.ui.keyCode.PAGE_UP } );
272+
equals( $("#log").html(), "keydown,", "Keydown PAGE_UP (no effect)");
259273

260-
menu_log("keydown",true);
261-
element.simulate( "keydown", { keyCode: $.ui.keyCode.END } );
262-
equals( $("#log").html(), "2,keydown,", "Keydown END");
274+
menu_log("keydown",true);
275+
element.simulate( "keydown", { keyCode: $.ui.keyCode.END } );
276+
equals( $("#log").html(), "2,keydown,", "Keydown END");
263277

264-
menu_log("keydown",true);
265-
element.simulate( "keydown", { keyCode: $.ui.keyCode.HOME } );
266-
equals( $("#log").html(), "0,keydown,", "Keydown HOME");
278+
menu_log("keydown",true);
279+
element.simulate( "keydown", { keyCode: $.ui.keyCode.HOME } );
280+
equals( $("#log").html(), "0,keydown,", "Keydown HOME");
267281

268-
menu_log("keydown",true);
269-
element.simulate( "keydown", { keyCode: $.ui.keyCode.ESCAPE } );
270-
equals( $("#log").html(), "4,keydown,", "Keydown ESCAPE (close submenu)");
282+
menu_log("keydown",true);
283+
element.simulate( "keydown", { keyCode: $.ui.keyCode.ESCAPE } );
284+
equals( $("#log").html(), "4,keydown,", "Keydown ESCAPE (close submenu)");
271285

272-
menu_log("keydown",true);
273-
element.simulate( "keydown", { keyCode: $.ui.keyCode.ENTER } );
286+
menu_log("keydown",true);
287+
element.simulate( "keydown", { keyCode: $.ui.keyCode.ENTER } );
288+
setTimeout( menukeyboard4, 50 );
289+
}
274290

275-
setTimeout( function() {
276-
equals( $("#log").html(), "0,keydown,", "Keydown ENTER (open submenu)");
291+
function menukeyboard4() {
292+
equals( $("#log").html(), "0,keydown,", "Keydown ENTER (open submenu)");
277293

278-
menu_log("keydown",true);
279-
element.simulate( "keydown", { keyCode: $.ui.keyCode.ENTER } );
280-
equals( $("#log").html(), "Ada,keydown,", "Keydown ENTER (select item)");
294+
menu_log("keydown",true);
295+
element.simulate( "keydown", { keyCode: $.ui.keyCode.ENTER } );
296+
equals( $("#log").html(), "Ada,keydown,", "Keydown ENTER (select item)");
281297

282-
start();
283-
}, 200);
284-
}, 150);
285-
}, 100);
286-
}, 50);
298+
start();
299+
}
287300
});
288301

289302
test("handle keyboard navigation on menu with scroll and without submenus", function() {
@@ -369,12 +382,16 @@ asyncTest("handle keyboard navigation on menu with scroll and with submenus", fu
369382
});
370383

371384
menu_log("keydown",true);
385+
element.one( "menufocus", function( event, ui ) {
386+
element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } );
387+
element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } );
388+
equals( $("#log").html(), "2,1,keydown,", "Keydown DOWN");
389+
setTimeout( menukeyboard1, 50 );
390+
});
372391
element.focus();
373-
element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } );
374-
element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } );
375-
equals( $("#log").html(), "2,1,0,keydown,", "Keydown DOWN");
392+
376393

377-
setTimeout(function() {
394+
function menukeyboard1() {
378395
menu_log("keydown",true);
379396
element.simulate( "keydown", { keyCode: $.ui.keyCode.UP } );
380397
element.simulate( "keydown", { keyCode: $.ui.keyCode.UP } );
@@ -391,59 +408,62 @@ asyncTest("handle keyboard navigation on menu with scroll and with submenus", fu
391408
setTimeout( function() {
392409
equals( $("#log").html(), "0,1,keydown,", "Keydown RIGHT (open submenu)");
393410
}, 50);
411+
setTimeout( menukeyboard2, 50 );
412+
}
394413

395-
setTimeout( function() {
396-
menu_log("keydown",true);
397-
element.simulate( "keydown", { keyCode: $.ui.keyCode.LEFT } );
398-
equals( $("#log").html(), "1,keydown,", "Keydown LEFT (close submenu)");
414+
function menukeyboard2() {
415+
menu_log("keydown",true);
416+
element.simulate( "keydown", { keyCode: $.ui.keyCode.LEFT } );
417+
equals( $("#log").html(), "1,keydown,", "Keydown LEFT (close submenu)");
399418

400-
//re-open submenu
401-
element.simulate( "keydown", { keyCode: $.ui.keyCode.RIGHT } );
419+
//re-open submenu
420+
element.simulate( "keydown", { keyCode: $.ui.keyCode.RIGHT } );
421+
setTimeout( menukeyboard3, 50 );
422+
}
402423

403-
setTimeout( function() {
404-
menu_log("keydown",true);
405-
element.simulate( "keydown", { keyCode: $.ui.keyCode.PAGE_DOWN } );
406-
equals( $("#log").html(), "10,keydown,", "Keydown PAGE_DOWN");
424+
function menukeyboard3() {
425+
menu_log("keydown",true);
426+
element.simulate( "keydown", { keyCode: $.ui.keyCode.PAGE_DOWN } );
427+
equals( $("#log").html(), "10,keydown,", "Keydown PAGE_DOWN");
407428

408-
menu_log("keydown",true);
409-
element.simulate( "keydown", { keyCode: $.ui.keyCode.PAGE_DOWN } );
410-
equals( $("#log").html(), "20,keydown,", "Keydown PAGE_DOWN");
429+
menu_log("keydown",true);
430+
element.simulate( "keydown", { keyCode: $.ui.keyCode.PAGE_DOWN } );
431+
equals( $("#log").html(), "20,keydown,", "Keydown PAGE_DOWN");
411432

412-
menu_log("keydown",true);
413-
element.simulate( "keydown", { keyCode: $.ui.keyCode.PAGE_UP } );
414-
equals( $("#log").html(), "10,keydown,", "Keydown PAGE_UP");
433+
menu_log("keydown",true);
434+
element.simulate( "keydown", { keyCode: $.ui.keyCode.PAGE_UP } );
435+
equals( $("#log").html(), "10,keydown,", "Keydown PAGE_UP");
415436

416-
menu_log("keydown",true);
417-
element.simulate( "keydown", { keyCode: $.ui.keyCode.PAGE_UP } );
418-
equals( $("#log").html(), "0,keydown,", "Keydown PAGE_UP");
437+
menu_log("keydown",true);
438+
element.simulate( "keydown", { keyCode: $.ui.keyCode.PAGE_UP } );
439+
equals( $("#log").html(), "0,keydown,", "Keydown PAGE_UP");
419440

420-
menu_log("keydown",true);
421-
element.simulate( "keydown", { keyCode: $.ui.keyCode.END } );
422-
equals( $("#log").html(), "27,keydown,", "Keydown END");
441+
menu_log("keydown",true);
442+
element.simulate( "keydown", { keyCode: $.ui.keyCode.END } );
443+
equals( $("#log").html(), "27,keydown,", "Keydown END");
423444

424-
menu_log("keydown",true);
425-
element.simulate( "keydown", { keyCode: $.ui.keyCode.HOME } );
426-
equals( $("#log").html(), "0,keydown,", "Keydown HOME");
445+
menu_log("keydown",true);
446+
element.simulate( "keydown", { keyCode: $.ui.keyCode.HOME } );
447+
equals( $("#log").html(), "0,keydown,", "Keydown HOME");
427448

428-
menu_log("keydown",true);
429-
element.simulate( "keydown", { keyCode: $.ui.keyCode.ESCAPE } );
430-
equals( $("#log").html(), "1,keydown,", "Keydown ESCAPE (close submenu)");
449+
menu_log("keydown",true);
450+
element.simulate( "keydown", { keyCode: $.ui.keyCode.ESCAPE } );
451+
equals( $("#log").html(), "1,keydown,", "Keydown ESCAPE (close submenu)");
431452

432-
menu_log("keydown",true);
433-
element.simulate( "keydown", { keyCode: $.ui.keyCode.ENTER } );
453+
menu_log("keydown",true);
454+
element.simulate( "keydown", { keyCode: $.ui.keyCode.ENTER } );
455+
setTimeout( menukeyboard4, 50 );
456+
}
434457

435-
setTimeout( function() {
436-
equals( $("#log").html(), "0,keydown,", "Keydown ENTER (open submenu)");
458+
function menukeyboard4() {
459+
equals( $("#log").html(), "0,keydown,", "Keydown ENTER (open submenu)");
437460

438-
menu_log("keydown",true);
439-
element.simulate( "keydown", { keyCode: $.ui.keyCode.ENTER } );
440-
equals( $("#log").html(), "Aberdeen,keydown,", "Keydown ENTER (select item)");
461+
menu_log("keydown",true);
462+
element.simulate( "keydown", { keyCode: $.ui.keyCode.ENTER } );
463+
equals( $("#log").html(), "Aberdeen,keydown,", "Keydown ENTER (select item)");
441464

442-
start();
443-
}, 200);
444-
}, 150);
445-
}, 100);
446-
}, 50);
465+
start();
466+
}
447467
});
448468

449469
})(jQuery);

0 commit comments

Comments
 (0)