Skip to content

Commit e1eeed6

Browse files
committed
Tabs: CTRL navigation tests.
1 parent 4cacb4b commit e1eeed6

File tree

1 file changed

+200
-3
lines changed

1 file changed

+200
-3
lines changed

tests/unit/tabs/tabs_core.js

Lines changed: 200 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -123,13 +123,12 @@ test( "accessibility", function() {
123123
});
124124

125125
asyncTest( "keyboard support - LEFT, RIGHT, UP, DOWN, HOME, END, SPACE, ENTER", function() {
126-
expect( 90 );
126+
expect( 92 );
127127
var element = $( "#tabs1" ).tabs({
128128
active: 0,
129129
collapsible: true
130130
}),
131131
tabs = element.find( ".ui-tabs-nav li" ),
132-
anchors = tabs.find( ".ui-tabs-anchor" ),
133132
panels = element.find( ".ui-tabs-panel" ),
134133
keyCode = $.ui.keyCode;
135134

@@ -192,6 +191,7 @@ asyncTest( "keyboard support - LEFT, RIGHT, UP, DOWN, HOME, END, SPACE, ENTER",
192191
// left, home, space
193192
function step2() {
194193
equal( tabs.eq( 2 ).attr( "aria-selected" ), "true", "third tab has aria-selected=true" );
194+
equal( tabs.eq( 0 ).attr( "aria-selected" ), "false", "first tab has aria-selected=false" );
195195
ok( panels.eq( 2 ).is( ":visible" ), "third panel is visible" );
196196
equal( panels.eq( 2 ).attr( "aria-expanded" ), "true", "third panel has aria-expanded=true" );
197197
equal( panels.eq( 2 ).attr( "aria-hidden" ), "false", "third panel has aria-hidden=false" );
@@ -229,6 +229,7 @@ asyncTest( "keyboard support - LEFT, RIGHT, UP, DOWN, HOME, END, SPACE, ENTER",
229229
// end, enter
230230
function step3() {
231231
equal( tabs.eq( 0 ).attr( "aria-selected" ), "true", "first tab has aria-selected=true" );
232+
equal( tabs.eq( 2 ).attr( "aria-selected" ), "false", "third tab has aria-selected=false" );
232233
ok( panels.eq( 0 ).is( ":visible" ), "first panel is visible" );
233234
equal( panels.eq( 0 ).attr( "aria-expanded" ), "true", "first panel has aria-expanded=true" );
234235
equal( panels.eq( 0 ).attr( "aria-hidden" ), "false", "first panel has aria-hidden=false" );
@@ -269,7 +270,203 @@ asyncTest( "keyboard support - LEFT, RIGHT, UP, DOWN, HOME, END, SPACE, ENTER",
269270
equal( panels.eq( 2 ).attr( "aria-expanded" ), "false", "third panel has aria-expanded=false" );
270271
equal( panels.eq( 2 ).attr( "aria-hidden" ), "true", "third panel has aria-hidden=true" );
271272

272-
start();
273+
setTimeout( start, 1 );
274+
}
275+
276+
setTimeout( step1, 1 );
277+
});
278+
279+
asyncTest( "keyboard support - CTRL navigation", function() {
280+
expect( 115 );
281+
var element = $( "#tabs1" ).tabs({
282+
active: 0,
283+
collapsible: true
284+
}),
285+
tabs = element.find( ".ui-tabs-nav li" ),
286+
panels = element.find( ".ui-tabs-panel" ),
287+
keyCode = $.ui.keyCode;
288+
289+
element.data( "tabs" ).delay = 50;
290+
291+
equal( tabs.filter( ".ui-state-focus" ).length, 0, "no tabs focused on init" );
292+
tabs.eq( 0 ).simulate( "focus" );
293+
294+
// down
295+
function step1() {
296+
ok( tabs.eq( 0 ).is( ".ui-state-focus" ), "first tab has focus" );
297+
equal( tabs.eq( 0 ).attr( "aria-selected" ), "true", "first tab has aria-selected=true" );
298+
ok( panels.eq( 0 ).is( ":visible" ), "first panel is visible" );
299+
300+
tabs.eq( 0 ).simulate( "keydown", { keyCode: keyCode.DOWN, ctrlKey: true } );
301+
ok( tabs.eq( 1 ).is( ".ui-state-focus" ), "DOWN moves focus to next tab" );
302+
ok( !tabs.eq( 0 ).is( ".ui-state-focus" ), "first tab is no longer focused" );
303+
equal( tabs.eq( 1 ).attr( "aria-selected" ), "false", "second tab has aria-selected=false" );
304+
equal( tabs.eq( 0 ).attr( "aria-selected" ), "true", "first tab has aria-selected=true" );
305+
ok( panels.eq( 1 ).is( ":hidden" ), "second panel is still hidden" );
306+
equal( panels.eq( 1 ).attr( "aria-expanded" ), "false", "second panel has aria-expanded=false" );
307+
equal( panels.eq( 1 ).attr( "aria-hidden" ), "true", "second panel has aria-hidden=true" );
308+
ok( panels.eq( 0 ).is( ":visible" ), "first panel is still visible" );
309+
equal( panels.eq( 0 ).attr( "aria-expanded" ), "true", "first panel has aria-expanded=true" );
310+
equal( panels.eq( 0 ).attr( "aria-hidden" ), "false", "first panel has aria-hidden=false" );
311+
312+
setTimeout( step2, 100 );
313+
}
314+
315+
// right
316+
function step2() {
317+
equal( tabs.eq( 0 ).attr( "aria-selected" ), "true", "first tab has aria-selected=true" );
318+
ok( panels.eq( 0 ).is( ":visible" ), "first panel is visible" );
319+
equal( panels.eq( 0 ).attr( "aria-expanded" ), "true", "first panel has aria-expanded=true" );
320+
equal( panels.eq( 0 ).attr( "aria-hidden" ), "false", "first panel has aria-hidden=false" );
321+
ok( panels.eq( 1 ).is( ":hidden" ), "second panel is hidden" );
322+
equal( panels.eq( 1 ).attr( "aria-expanded" ), "false", "second panel has aria-expanded=false" );
323+
equal( panels.eq( 1 ).attr( "aria-hidden" ), "true", "second panel has aria-hidden=true" );
324+
325+
tabs.eq( 1 ).simulate( "keydown", { keyCode: keyCode.RIGHT, ctrlKey: true } );
326+
ok( tabs.eq( 2 ).is( ".ui-state-focus" ), "RIGHT moves focus to next tab" );
327+
equal( tabs.eq( 2 ).attr( "aria-selected" ), "false", "third tab has aria-selected=false" );
328+
equal( tabs.eq( 0 ).attr( "aria-selected" ), "true", "first tab has aria-selected=true" );
329+
ok( panels.eq( 2 ).is( ":hidden" ), "third panel is still hidden" );
330+
equal( panels.eq( 2 ).attr( "aria-expanded" ), "false", "third panel has aria-expanded=false" );
331+
equal( panels.eq( 2 ).attr( "aria-hidden" ), "true", "third panel has aria-hidden=true" );
332+
ok( panels.eq( 0 ).is( ":visible" ), "first panel is still visible" );
333+
equal( panels.eq( 0 ).attr( "aria-expanded" ), "true", "first panel has aria-expanded=true" );
334+
equal( panels.eq( 0 ).attr( "aria-hidden" ), "false", "first panel has aria-hidden=false" );
335+
336+
setTimeout( step3, 100 );
337+
}
338+
339+
// down (wrap)
340+
function step3() {
341+
equal( tabs.eq( 0 ).attr( "aria-selected" ), "true", "first tab has aria-selected=true" );
342+
ok( panels.eq( 0 ).is( ":visible" ), "first panel is visible" );
343+
equal( panels.eq( 0 ).attr( "aria-expanded" ), "true", "first panel has aria-expanded=true" );
344+
equal( panels.eq( 0 ).attr( "aria-hidden" ), "false", "first panel has aria-hidden=false" );
345+
ok( panels.eq( 2 ).is( ":hidden" ), "third panel is hidden" );
346+
equal( panels.eq( 2 ).attr( "aria-expanded" ), "false", "third panel has aria-expanded=false" );
347+
equal( panels.eq( 2 ).attr( "aria-hidden" ), "true", "third panel has aria-hidden=true" );
348+
349+
tabs.eq( 2 ).simulate( "keydown", { keyCode: keyCode.DOWN, ctrlKey: true } );
350+
ok( tabs.eq( 0 ).is( ".ui-state-focus" ), "DOWN wraps focus to first tab" );
351+
equal( tabs.eq( 0 ).attr( "aria-selected" ), "true", "first tab has aria-selected=true" );
352+
ok( panels.eq( 0 ).is( ":visible" ), "first panel is still visible" );
353+
equal( panels.eq( 0 ).attr( "aria-expanded" ), "true", "first panel has aria-expanded=true" );
354+
equal( panels.eq( 0 ).attr( "aria-hidden" ), "false", "first panel has aria-hidden=false" );
355+
356+
setTimeout( step4, 100 );
357+
}
358+
359+
// up (wrap)
360+
function step4() {
361+
equal( tabs.eq( 0 ).attr( "aria-selected" ), "true", "first tab has aria-selected=true" );
362+
ok( panels.eq( 0 ).is( ":visible" ), "first panel is visible" );
363+
equal( panels.eq( 0 ).attr( "aria-expanded" ), "true", "first panel has aria-expanded=true" );
364+
equal( panels.eq( 0 ).attr( "aria-hidden" ), "false", "first panel has aria-hidden=false" );
365+
366+
tabs.eq( 0 ).simulate( "keydown", { keyCode: keyCode.UP, ctrlKey: true } );
367+
ok( tabs.eq( 2 ).is( ".ui-state-focus" ), "UP wraps focus to last tab" );
368+
equal( tabs.eq( 2 ).attr( "aria-selected" ), "false", "third tab has aria-selected=false" );
369+
equal( tabs.eq( 0 ).attr( "aria-selected" ), "true", "first tab has aria-selected=true" );
370+
ok( panels.eq( 2 ).is( ":hidden" ), "third panel is still hidden" );
371+
equal( panels.eq( 2 ).attr( "aria-expanded" ), "false", "third panel has aria-expanded=false" );
372+
equal( panels.eq( 2 ).attr( "aria-hidden" ), "true", "third panel has aria-hidden=true" );
373+
ok( panels.eq( 0 ).is( ":visible" ), "first panel is still visible" );
374+
equal( panels.eq( 0 ).attr( "aria-expanded" ), "true", "first panel has aria-expanded=true" );
375+
equal( panels.eq( 0 ).attr( "aria-hidden" ), "false", "first panel has aria-hidden=false" );
376+
377+
setTimeout( step5, 100 );
378+
}
379+
380+
// left
381+
function step5() {
382+
equal( tabs.eq( 0 ).attr( "aria-selected" ), "true", "first tab has aria-selected=true" );
383+
ok( panels.eq( 0 ).is( ":visible" ), "first panel is visible" );
384+
equal( panels.eq( 0 ).attr( "aria-expanded" ), "true", "first panel has aria-expanded=true" );
385+
equal( panels.eq( 0 ).attr( "aria-hidden" ), "false", "first panel has aria-hidden=false" );
386+
ok( panels.eq( 2 ).is( ":hidden" ), "third panel is hidden" );
387+
equal( panels.eq( 2 ).attr( "aria-expanded" ), "false", "third panel has aria-expanded=false" );
388+
equal( panels.eq( 2 ).attr( "aria-hidden" ), "true", "third panel has aria-hidden=true" );
389+
390+
tabs.eq( 2 ).simulate( "keydown", { keyCode: keyCode.LEFT, ctrlKey: true } );
391+
ok( tabs.eq( 1 ).is( ".ui-state-focus" ), "LEFT moves focus to previous tab" );
392+
equal( tabs.eq( 1 ).attr( "aria-selected" ), "false", "second tab has aria-selected=false" );
393+
equal( tabs.eq( 0 ).attr( "aria-selected" ), "true", "first tab has aria-selected=true" );
394+
ok( panels.eq( 1 ).is( ":hidden" ), "second panel is still hidden" );
395+
equal( panels.eq( 1 ).attr( "aria-expanded" ), "false", "second panel has aria-expanded=false" );
396+
equal( panels.eq( 1 ).attr( "aria-hidden" ), "true", "second panel has aria-hidden=true" );
397+
ok( panels.eq( 0 ).is( ":visible" ), "first panel is still visible" );
398+
equal( panels.eq( 0 ).attr( "aria-expanded" ), "true", "first panel has aria-expanded=true" );
399+
equal( panels.eq( 0 ).attr( "aria-hidden" ), "false", "first panel has aria-hidden=false" );
400+
401+
setTimeout( step6, 100 );
402+
}
403+
404+
// home
405+
function step6() {
406+
equal( tabs.eq( 0 ).attr( "aria-selected" ), "true", "first tab has aria-selected=true" );
407+
ok( panels.eq( 0 ).is( ":visible" ), "first panel is visible" );
408+
equal( panels.eq( 0 ).attr( "aria-expanded" ), "true", "first panel has aria-expanded=true" );
409+
equal( panels.eq( 0 ).attr( "aria-hidden" ), "false", "first panel has aria-hidden=false" );
410+
ok( panels.eq( 1 ).is( ":hidden" ), "second panel is hidden" );
411+
equal( panels.eq( 1 ).attr( "aria-expanded" ), "false", "second panel has aria-expanded=false" );
412+
equal( panels.eq( 1 ).attr( "aria-hidden" ), "true", "second panel has aria-hidden=true" );
413+
414+
tabs.eq( 1 ).simulate( "keydown", { keyCode: keyCode.HOME, ctrlKey: true } );
415+
ok( tabs.eq( 0 ).is( ".ui-state-focus" ), "HOME moves focus to first tab" );
416+
equal( tabs.eq( 0 ).attr( "aria-selected" ), "true", "first tab has aria-selected=true" );
417+
equal( tabs.eq( 1 ).attr( "aria-selected" ), "false", "second tab has aria-selected=false" );
418+
ok( panels.eq( 1 ).is( ":hidden" ), "second panel is still hidden" );
419+
equal( panels.eq( 1 ).attr( "aria-expanded" ), "false", "second panel has aria-expanded=false" );
420+
equal( panels.eq( 1 ).attr( "aria-hidden" ), "true", "second panel has aria-hidden=true" );
421+
ok( panels.eq( 0 ).is( ":visible" ), "first panel is still visible" );
422+
equal( panels.eq( 0 ).attr( "aria-expanded" ), "true", "first panel has aria-expanded=true" );
423+
equal( panels.eq( 0 ).attr( "aria-hidden" ), "false", "first panel has aria-hidden=false" );
424+
425+
setTimeout( step7, 100 );
426+
}
427+
428+
// end
429+
function step7() {
430+
equal( tabs.eq( 0 ).attr( "aria-selected" ), "true", "first tab has aria-selected=true" );
431+
ok( panels.eq( 0 ).is( ":visible" ), "first panel is visible" );
432+
equal( panels.eq( 0 ).attr( "aria-expanded" ), "true", "first panel has aria-expanded=true" );
433+
equal( panels.eq( 0 ).attr( "aria-hidden" ), "false", "first panel has aria-hidden=false" );
434+
435+
tabs.eq( 0 ).simulate( "keydown", { keyCode: keyCode.END, ctrlKey: true } );
436+
ok( tabs.eq( 2 ).is( ".ui-state-focus" ), "END moves focus to last tab" );
437+
equal( tabs.eq( 2 ).attr( "aria-selected" ), "false", "third tab has aria-selected=false" );
438+
equal( tabs.eq( 0 ).attr( "aria-selected" ), "true", "first tab has aria-selected=true" );
439+
ok( panels.eq( 2 ).is( ":hidden" ), "third panel is still hidden" );
440+
equal( panels.eq( 2 ).attr( "aria-expanded" ), "false", "third panel has aria-expanded=false" );
441+
equal( panels.eq( 2 ).attr( "aria-hidden" ), "true", "third panel has aria-hidden=true" );
442+
ok( panels.eq( 0 ).is( ":visible" ), "first panel is still visible" );
443+
equal( panels.eq( 0 ).attr( "aria-expanded" ), "true", "first panel has aria-expanded=true" );
444+
equal( panels.eq( 0 ).attr( "aria-hidden" ), "false", "first panel has aria-hidden=false" );
445+
446+
setTimeout( step8, 100 );
447+
}
448+
449+
// space
450+
function step8() {
451+
equal( tabs.eq( 0 ).attr( "aria-selected" ), "true", "first tab has aria-selected=true" );
452+
ok( panels.eq( 0 ).is( ":visible" ), "first panel is visible" );
453+
equal( panels.eq( 0 ).attr( "aria-expanded" ), "true", "first panel has aria-expanded=true" );
454+
equal( panels.eq( 0 ).attr( "aria-hidden" ), "false", "first panel has aria-hidden=false" );
455+
ok( panels.eq( 2 ).is( ":hidden" ), "third panel is hidden" );
456+
equal( panels.eq( 2 ).attr( "aria-expanded" ), "false", "third panel has aria-expanded=false" );
457+
equal( panels.eq( 2 ).attr( "aria-hidden" ), "true", "third panel has aria-hidden=true" );
458+
459+
tabs.eq( 2 ).simulate( "keydown", { keyCode: keyCode.SPACE } );
460+
equal( tabs.eq( 2 ).attr( "aria-selected" ), "true", "third tab has aria-selected=true" );
461+
equal( tabs.eq( 0 ).attr( "aria-selected" ), "false", "first tab has aria-selected=false" );
462+
ok( panels.eq( 2 ).is( ":visible" ), "third panel is visible" );
463+
equal( panels.eq( 2 ).attr( "aria-expanded" ), "true", "third panel has aria-expanded=true" );
464+
equal( panels.eq( 2 ).attr( "aria-hidden" ), "false", "third panel has aria-hidden=false" );
465+
ok( panels.eq( 0 ).is( ":hidden" ), "first panel is hidden" );
466+
equal( panels.eq( 0 ).attr( "aria-expanded" ), "false", "first panel has aria-expanded=false" );
467+
equal( panels.eq( 0 ).attr( "aria-hidden" ), "true", "first panel has aria-hidden=true" );
468+
469+
setTimeout( start, 1 );
273470
}
274471

275472
setTimeout( step1, 1 );

0 commit comments

Comments
 (0)