aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/jquery.simulate.js3
-rw-r--r--tests/unit/accordion/accordion_core.js34
-rw-r--r--tests/unit/button/button_core.js6
-rw-r--r--tests/unit/button/button_methods.js11
-rw-r--r--tests/unit/button/button_options.js9
-rw-r--r--tests/unit/button/button_tickets.js5
-rw-r--r--tests/unit/core/core.js26
-rw-r--r--tests/unit/core/selector.js4
-rw-r--r--tests/unit/datepicker/datepicker_core.js6
-rw-r--r--tests/unit/datepicker/datepicker_events.js1
-rw-r--r--tests/unit/datepicker/datepicker_methods.js2
-rw-r--r--tests/unit/datepicker/datepicker_options.js19
-rw-r--r--tests/unit/datepicker/datepicker_tickets.js4
-rw-r--r--tests/unit/dialog/dialog_core.js1
-rw-r--r--tests/unit/dialog/dialog_methods.js11
-rw-r--r--tests/unit/dialog/dialog_options.js9
-rw-r--r--tests/unit/dialog/dialog_tickets.js2
-rw-r--r--tests/unit/effects/effects.html28
-rw-r--r--tests/unit/effects/effects_core.js15
-rw-r--r--tests/unit/effects/effects_scale.js15
-rw-r--r--tests/unit/menu/menu.html8
-rw-r--r--tests/unit/menu/menu_common.js3
-rw-r--r--tests/unit/menu/menu_core.js41
-rw-r--r--tests/unit/menu/menu_events.js453
-rw-r--r--tests/unit/menu/menu_methods.js103
-rw-r--r--tests/unit/menu/menu_options.js121
-rw-r--r--tests/unit/menu/menu_test_helpers.js25
-rw-r--r--tests/unit/position/position_core.js2
-rw-r--r--tests/unit/position/position_deprecated.js1
-rw-r--r--tests/unit/progressbar/progressbar_options.js5
-rw-r--r--tests/unit/spinner/spinner.html2
-rw-r--r--tests/unit/spinner/spinner_common.js4
-rw-r--r--tests/unit/spinner/spinner_events.js1
-rw-r--r--tests/unit/spinner/spinner_options.js19
-rw-r--r--tests/unit/tabs/tabs_core.js525
-rw-r--r--tests/unit/tabs/tabs_methods.js21
-rw-r--r--tests/unit/tabs/tabs_options.js52
-rw-r--r--tests/unit/testsuite.js31
-rw-r--r--tests/unit/tooltip/tooltip_common.js1
-rw-r--r--tests/unit/tooltip/tooltip_core.js5
-rw-r--r--tests/unit/tooltip/tooltip_methods.js5
-rw-r--r--tests/unit/tooltip/tooltip_options.js3
-rw-r--r--tests/unit/widget/widget_core.js138
-rw-r--r--tests/visual/addClass/queue.html2
-rw-r--r--tests/visual/effects/all.html28
-rw-r--r--tests/visual/effects/scale.html4
-rw-r--r--tests/visual/menu/menu.html5
-rw-r--r--tests/visual/tooltip/animations.html10
48 files changed, 1389 insertions, 440 deletions
diff --git a/tests/jquery.simulate.js b/tests/jquery.simulate.js
index 2dae34c28..874d274cc 100644
--- a/tests/jquery.simulate.js
+++ b/tests/jquery.simulate.js
@@ -1,7 +1,8 @@
/*
* jquery.simulate - simulate browser mouse and keyboard events
+ * http://jqueryui.com
*
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
+ * Copyright 2012 jQuery Foundation and other contributors
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*/
diff --git a/tests/unit/accordion/accordion_core.js b/tests/unit/accordion/accordion_core.js
index 7a1d56c18..101cb83b1 100644
--- a/tests/unit/accordion/accordion_core.js
+++ b/tests/unit/accordion/accordion_core.js
@@ -48,31 +48,31 @@ test( "accessibility", function () {
equal( headers.eq( 1 ).attr( "aria-selected" ), "true", "active tab has aria-selected=true" );
equal( headers.eq( 1 ).next().attr( "aria-expanded" ), "true", "active tabpanel has aria-expanded=true" );
equal( headers.eq( 1 ).next().attr( "aria-hidden" ), "false", "active tabpanel has aria-hidden=false" );
- equal( headers.eq( 0 ).attr( "tabindex" ), -1, "active header has tabindex=-1" );
- equal( headers.eq( 0 ).attr( "aria-selected" ), "false", "active tab has aria-selected=false" );
- equal( headers.eq( 0 ).next().attr( "aria-expanded" ), "false", "active tabpanel has aria-expanded=false" );
- equal( headers.eq( 0 ).next().attr( "aria-hidden" ), "true", "active tabpanel has aria-hidden=true" );
- equal( headers.eq( 2 ).attr( "tabindex" ), -1, "active header has tabindex=-1" );
- equal( headers.eq( 2 ).attr( "aria-selected" ), "false", "active tab has aria-selected=false" );
- equal( headers.eq( 2 ).next().attr( "aria-expanded" ), "false", "active tabpanel has aria-expanded=false" );
- equal( headers.eq( 2 ).next().attr( "aria-hidden" ), "true", "active tabpanel has aria-hidden=true" );
+ equal( headers.eq( 0 ).attr( "tabindex" ), -1, "inactive header has tabindex=-1" );
+ equal( headers.eq( 0 ).attr( "aria-selected" ), "false", "inactive tab has aria-selected=false" );
+ equal( headers.eq( 0 ).next().attr( "aria-expanded" ), "false", "inactive tabpanel has aria-expanded=false" );
+ equal( headers.eq( 0 ).next().attr( "aria-hidden" ), "true", "inactive tabpanel has aria-hidden=true" );
+ equal( headers.eq( 2 ).attr( "tabindex" ), -1, "inactive header has tabindex=-1" );
+ equal( headers.eq( 2 ).attr( "aria-selected" ), "false", "inactive tab has aria-selected=false" );
+ equal( headers.eq( 2 ).next().attr( "aria-expanded" ), "false", "inactive tabpanel has aria-expanded=false" );
+ equal( headers.eq( 2 ).next().attr( "aria-hidden" ), "true", "inactive tabpanel has aria-hidden=true" );
element.accordion( "option", "active", 0 );
equal( headers.eq( 0 ).attr( "tabindex" ), 0, "active header has tabindex=0" );
equal( headers.eq( 0 ).attr( "aria-selected" ), "true", "active tab has aria-selected=true" );
equal( headers.eq( 0 ).next().attr( "aria-expanded" ), "true", "active tabpanel has aria-expanded=true" );
equal( headers.eq( 0 ).next().attr( "aria-hidden" ), "false", "active tabpanel has aria-hidden=false" );
- equal( headers.eq( 1 ).attr( "tabindex" ), -1, "active header has tabindex=-1" );
- equal( headers.eq( 1 ).attr( "aria-selected" ), "false", "active tab has aria-selected=false" );
- equal( headers.eq( 1 ).next().attr( "aria-expanded" ), "false", "active tabpanel has aria-expanded=false" );
- equal( headers.eq( 1 ).next().attr( "aria-hidden" ), "true", "active tabpanel has aria-hidden=true" );
- equal( headers.eq( 2 ).attr( "tabindex" ), -1, "active header has tabindex=-1" );
- equal( headers.eq( 2 ).attr( "aria-selected" ), "false", "active tab has aria-selected=false" );
- equal( headers.eq( 2 ).next().attr( "aria-expanded" ), "false", "active tabpanel has aria-expanded=false" );
- equal( headers.eq( 2 ).next().attr( "aria-hidden" ), "true", "active tabpanel has aria-hidden=true" );
+ equal( headers.eq( 1 ).attr( "tabindex" ), -1, "inactive header has tabindex=-1" );
+ equal( headers.eq( 1 ).attr( "aria-selected" ), "false", "inactive tab has aria-selected=false" );
+ equal( headers.eq( 1 ).next().attr( "aria-expanded" ), "false", "inactive tabpanel has aria-expanded=false" );
+ equal( headers.eq( 1 ).next().attr( "aria-hidden" ), "true", "inactive tabpanel has aria-hidden=true" );
+ equal( headers.eq( 2 ).attr( "tabindex" ), -1, "inactive header has tabindex=-1" );
+ equal( headers.eq( 2 ).attr( "aria-selected" ), "false", "inactive tab has aria-selected=false" );
+ equal( headers.eq( 2 ).next().attr( "aria-expanded" ), "false", "inactive tabpanel has aria-expanded=false" );
+ equal( headers.eq( 2 ).next().attr( "aria-hidden" ), "true", "inactive tabpanel has aria-hidden=true" );
});
-asyncTest( "keybaord support", function() {
+asyncTest( "keyboard support", function() {
expect( 13 );
var element = $( "#list1" ).accordion(),
headers = element.find( ".ui-accordion-header" ),
diff --git a/tests/unit/button/button_core.js b/tests/unit/button/button_core.js
index c274a8473..f3c50d840 100644
--- a/tests/unit/button/button_core.js
+++ b/tests/unit/button/button_core.js
@@ -8,6 +8,7 @@
module("button: core");
test("checkbox", function() {
+ expect( 4 );
var input = $("#check"),
label = $("label[for=check]");
ok( input.is(":visible") );
@@ -18,6 +19,7 @@ test("checkbox", function() {
});
test("radios", function() {
+ expect( 4 );
var inputs = $("#radio0 input"),
labels = $("#radio0 label");
ok( inputs.is(":visible") );
@@ -34,6 +36,7 @@ function assert(noForm, form1, form2) {
}
test("radio groups", function() {
+ expect( 12 );
$("input[type=radio]").button();
assert(":eq(0)", ":eq(1)", ":eq(2)");
@@ -51,6 +54,7 @@ test("radio groups", function() {
});
test("input type submit, don't create child elements", function() {
+ expect( 2 );
var input = $("#submit");
deepEqual( input.children().length, 0 );
input.button();
@@ -58,6 +62,7 @@ test("input type submit, don't create child elements", function() {
});
test("buttonset", function() {
+ expect( 6 );
var set = $("#radio1").buttonset();
ok( set.is(".ui-buttonset") );
deepEqual( set.children(".ui-button").length, 3 );
@@ -68,6 +73,7 @@ test("buttonset", function() {
});
test("buttonset (rtl)", function() {
+ expect( 6 );
var set,
parent = $("#radio1").parent();
// Set to rtl
diff --git a/tests/unit/button/button_methods.js b/tests/unit/button/button_methods.js
index 347806d4e..6a305d654 100644
--- a/tests/unit/button/button_methods.js
+++ b/tests/unit/button/button_methods.js
@@ -7,13 +7,10 @@
module("button: methods");
test("destroy", function() {
- var beforeHtml = $("#button").parent().html(),
- afterHtml = $("#button").button().button("destroy").parent().html();
- // Opera 9 outputs role="" instead of removing the attribute like everyone else
- if ($.browser.opera) {
- afterHtml = afterHtml.replace(/ role=""/g, "");
- }
- equal( afterHtml, beforeHtml );
+ expect( 1 );
+ domEqual( "#button", function() {
+ $( "#button" ).button().button( "destroy" );
+ });
});
})(jQuery);
diff --git a/tests/unit/button/button_options.js b/tests/unit/button/button_options.js
index 3dd361ac9..eeb6e5527 100644
--- a/tests/unit/button/button_options.js
+++ b/tests/unit/button/button_options.js
@@ -6,6 +6,7 @@
module("button: options");
test("disabled, explicit value", function() {
+ expect( 4 );
$("#radio01").button({ disabled: false });
deepEqual(false, $("#radio01").button("option", "disabled"),
"disabled option set to false");
@@ -18,6 +19,7 @@ test("disabled, explicit value", function() {
});
test("disabled, null", function() {
+ expect( 4 );
$("#radio01").button({ disabled: null });
deepEqual(false, $("#radio01").button("option", "disabled"),
"disabled option set to false");
@@ -30,6 +32,7 @@ test("disabled, null", function() {
});
test("text false without icon", function() {
+ expect( 1 );
$("#button").button({
text: false
});
@@ -39,6 +42,7 @@ test("text false without icon", function() {
});
test("text false with icon", function() {
+ expect( 1 );
$("#button").button({
text: false,
icons: {
@@ -51,6 +55,7 @@ test("text false with icon", function() {
});
test("label, default", function() {
+ expect( 2 );
$("#button").button();
deepEqual( $("#button").text(), "Label" );
deepEqual( $( "#button").button( "option", "label" ), "Label" );
@@ -59,6 +64,7 @@ test("label, default", function() {
});
test("label", function() {
+ expect( 2 );
$("#button").button({
label: "xxx"
});
@@ -69,11 +75,13 @@ test("label", function() {
});
test("label default with input type submit", function() {
+ expect( 2 );
deepEqual( $("#submit").button().val(), "Label" );
deepEqual( $("#submit").button( "option", "label" ), "Label" );
});
test("label with input type submit", function() {
+ expect( 2 );
var label = $("#submit").button({
label: "xxx"
}).val();
@@ -82,6 +90,7 @@ test("label with input type submit", function() {
});
test("icons", function() {
+ expect( 1 );
$("#button").button({
text: false,
icons: {
diff --git a/tests/unit/button/button_tickets.js b/tests/unit/button/button_tickets.js
index fe0d82fd6..846ca7ef4 100644
--- a/tests/unit/button/button_tickets.js
+++ b/tests/unit/button/button_tickets.js
@@ -6,6 +6,7 @@
module( "button: tickets" );
test( "#5946 - buttonset should ignore buttons that are not :visible", function() {
+ expect( 2 );
$( "#radio01" ).next().andSelf().hide();
var set = $( "#radio0" ).buttonset({ items: "input[type=radio]:visible" });
ok( set.find( "label:eq(0)" ).is( ":not(.ui-button):not(.ui-corner-left)" ) );
@@ -13,6 +14,7 @@ test( "#5946 - buttonset should ignore buttons that are not :visible", function(
});
test( "#6262 - buttonset not applying ui-corner to invisible elements", function() {
+ expect( 3 );
$( "#radio0" ).hide();
var set = $( "#radio0" ).buttonset();
ok( set.find( "label:eq(0)" ).is( ".ui-button.ui-corner-left" ) );
@@ -21,6 +23,7 @@ test( "#6262 - buttonset not applying ui-corner to invisible elements", function
});
test( "#6711 Checkbox/Radiobutton do not Show Focused State when using Keyboard Navigation", function() {
+ expect( 2 );
var check = $( "#check" ).button(),
label = $( "label[for='check']" );
ok( !label.is( ".ui-state-focus" ) );
@@ -29,6 +32,7 @@ test( "#6711 Checkbox/Radiobutton do not Show Focused State when using Keyboard
});
test( "#7092 - button creation that requires a matching label does not find label in all cases", function() {
+ expect( 5 );
var group = $( "<span><label for='t7092a'></label><input type='checkbox' id='t7092a'></span>" );
group.find( "input[type=checkbox]" ).button();
ok( group.find( "label" ).is( ".ui-button" ) );
@@ -51,6 +55,7 @@ test( "#7092 - button creation that requires a matching label does not find labe
});
test( "#7534 - Button label selector works for ids with \":\"", function() {
+ expect( 1 );
var group = $( "<span><input type='checkbox' id='check:7534'><label for='check:7534'>Label</label></span>" );
group.find( "input" ).button();
ok( group.find( "label" ).is( ".ui-button" ), "Found an id with a :" );
diff --git a/tests/unit/core/core.js b/tests/unit/core/core.js
index 1026c5b0b..5ebb9e9f4 100644
--- a/tests/unit/core/core.js
+++ b/tests/unit/core/core.js
@@ -2,7 +2,7 @@
module( "core - jQuery extensions" );
-TestHelpers.testJshint( "ui.core" );
+TestHelpers.testJshint( "core" );
test( "focus - original functionality", function() {
expect( 1 );
@@ -28,6 +28,7 @@ asyncTest( "focus", function() {
});
test( "zIndex", function() {
+ expect( 7 );
var el = $( "#zIndexAutoWithParent" ),
parent = el.parent();
equal( el.zIndex(), 100, "zIndex traverses up to find value" );
@@ -46,6 +47,7 @@ test( "zIndex", function() {
});
test( "innerWidth - getter", function() {
+ expect( 2 );
var el = $( "#dimensions" );
equal( el.innerWidth(), 122, "getter passthru" );
@@ -54,6 +56,7 @@ test( "innerWidth - getter", function() {
});
test( "innerWidth - setter", function() {
+ expect( 2 );
var el = $( "#dimensions" );
el.innerWidth( 120 );
@@ -64,6 +67,7 @@ test( "innerWidth - setter", function() {
});
test( "innerHeight - getter", function() {
+ expect( 2 );
var el = $( "#dimensions" );
equal( el.innerHeight(), 70, "getter passthru" );
@@ -72,6 +76,7 @@ test( "innerHeight - getter", function() {
});
test( "innerHeight - setter", function() {
+ expect( 2 );
var el = $( "#dimensions" );
el.innerHeight( 60 );
@@ -82,6 +87,7 @@ test( "innerHeight - setter", function() {
});
test( "outerWidth - getter", function() {
+ expect( 2 );
var el = $( "#dimensions" );
equal( el.outerWidth(), 140, "getter passthru" );
@@ -90,6 +96,7 @@ test( "outerWidth - getter", function() {
});
test( "outerWidth - setter", function() {
+ expect( 2 );
var el = $( "#dimensions" );
el.outerWidth( 130 );
@@ -100,6 +107,7 @@ test( "outerWidth - setter", function() {
});
test( "outerWidth(true) - getter", function() {
+ expect( 2 );
var el = $( "#dimensions" );
equal( el.outerWidth(true), 154, "getter passthru w/ margin" );
@@ -108,6 +116,7 @@ test( "outerWidth(true) - getter", function() {
});
test( "outerWidth(true) - setter", function() {
+ expect( 2 );
var el = $( "#dimensions" );
el.outerWidth( 130, true );
@@ -118,6 +127,7 @@ test( "outerWidth(true) - setter", function() {
});
test( "outerHeight - getter", function() {
+ expect( 2 );
var el = $( "#dimensions" );
equal( el.outerHeight(), 86, "getter passthru" );
@@ -126,6 +136,7 @@ test( "outerHeight - getter", function() {
});
test( "outerHeight - setter", function() {
+ expect( 2 );
var el = $( "#dimensions" );
el.outerHeight( 80 );
@@ -136,6 +147,7 @@ test( "outerHeight - setter", function() {
});
test( "outerHeight(true) - getter", function() {
+ expect( 2 );
var el = $( "#dimensions" );
equal( el.outerHeight(true), 98, "getter passthru w/ margin" );
@@ -144,6 +156,7 @@ test( "outerHeight(true) - getter", function() {
});
test( "outerHeight(true) - setter", function() {
+ expect( 2 );
var el = $( "#dimensions" );
el.outerHeight( 90, true );
@@ -154,13 +167,20 @@ test( "outerHeight(true) - setter", function() {
});
test( "uniqueId / removeUniqueId", function() {
+ expect( 3 );
var el = $( "img" ).eq( 0 );
- equal( el.attr( "id" ), undefined, "element has no initial id" );
+ // support: jQuery <1.6.2
+ // support: IE <8
+ // We should use strictEqual( id, undefined ) when dropping jQuery 1.6.1 support (or IE6/7)
+ ok( !el.attr( "id" ), "element has no initial id" );
el.uniqueId();
ok( /ui-id-\d+$/.test( el.attr( "id" ) ), "element has generated id" );
el.removeUniqueId();
- equal( el.attr( "id" ), undefined, "unique id has been removed from element" );
+ // support: jQuery <1.6.2
+ // support: IE <8
+ // see above
+ ok( !el.attr( "id" ), "unique id has been removed from element" );
});
})( jQuery );
diff --git a/tests/unit/core/selector.js b/tests/unit/core/selector.js
index 4309289c9..7876cdd07 100644
--- a/tests/unit/core/selector.js
+++ b/tests/unit/core/selector.js
@@ -150,6 +150,8 @@ test("focusable - not natively focusable with various tabindex", function() {
});
test("focusable - area elements", function() {
+ expect( 3 );
+
isFocusable('#areaCoordsHref', 'coords and href');
isFocusable('#areaNoCoordsHref', 'href but no coords');
isNotFocusable('#areaNoImg', 'not associated with an image');
@@ -227,6 +229,8 @@ test("tabbable - not natively tabbable with various tabindex", function() {
});
test("tabbable - area elements", function() {
+ expect( 3 );
+
isTabbable('#areaCoordsHref', 'coords and href');
isTabbable('#areaNoCoordsHref', 'href but no coords');
isNotTabbable('#areaNoImg', 'not associated with an image');
diff --git a/tests/unit/datepicker/datepicker_core.js b/tests/unit/datepicker/datepicker_core.js
index 4bf04d83e..17cefe157 100644
--- a/tests/unit/datepicker/datepicker_core.js
+++ b/tests/unit/datepicker/datepicker_core.js
@@ -43,16 +43,19 @@ var PROP_NAME = 'datepicker';
module("datepicker: core");
test( "widget method - empty collection", function() {
+ expect( 1 );
$( "#nonExist" ).datepicker(); // should create nothing
ok( !$( "#ui-datepicker-div" ).length, "Non init on empty collection" );
});
test("widget method", function() {
+ expect( 1 );
var actual = $("#inp").datepicker().datepicker("widget")[0];
deepEqual($("body > #ui-datepicker-div:last-child")[0], actual);
});
test('baseStructure', function() {
+ expect( 59 );
var header, title, table, thead, week, panel, inl, child,
inp = init('#inp').focus(),
dp = $('#ui-datepicker-div'),
@@ -176,6 +179,7 @@ test('baseStructure', function() {
});
test('customStructure', function() {
+ expect( 20 );
var iframe, header, panel, title, thead,
dp = $('#ui-datepicker-div'),
// Check right-to-left localisation
@@ -233,6 +237,7 @@ test('customStructure', function() {
});
test('keystrokes', function() {
+ expect( 26 );
var inp = init('#inp'),
date = new Date();
inp.val('').datepicker('show').
@@ -367,6 +372,7 @@ test('keystrokes', function() {
});
test('mouse', function() {
+ expect( 15 );
var inl,
inp = init('#inp'),
dp = $('#ui-datepicker-div'),
diff --git a/tests/unit/datepicker/datepicker_events.js b/tests/unit/datepicker/datepicker_events.js
index b3e6704ef..e35be62ce 100644
--- a/tests/unit/datepicker/datepicker_events.js
+++ b/tests/unit/datepicker/datepicker_events.js
@@ -22,6 +22,7 @@ function callback2(year, month, inst) {
}
test('events', function() {
+ expect( 26 );
var dateStr, newMonthYear, inp2,
inp = init('#inp', {onSelect: callback}),
date = new Date();
diff --git a/tests/unit/datepicker/datepicker_methods.js b/tests/unit/datepicker/datepicker_methods.js
index 603427440..e7aa7602e 100644
--- a/tests/unit/datepicker/datepicker_methods.js
+++ b/tests/unit/datepicker/datepicker_methods.js
@@ -6,6 +6,7 @@
module("datepicker: methods");
test('destroy', function() {
+ expect( 33 );
var inl,
inp = init('#inp');
ok(inp.is('.hasDatepicker'), 'Default - marker class set');
@@ -63,6 +64,7 @@ test('destroy', function() {
});
test('enableDisable', function() {
+ expect( 33 );
var inl, dp,
inp = init('#inp');
ok(!inp.datepicker('isDisabled'), 'Enable/disable - initially marked as enabled');
diff --git a/tests/unit/datepicker/datepicker_options.js b/tests/unit/datepicker/datepicker_options.js
index 3e200ecaa..a01b9c7e0 100644
--- a/tests/unit/datepicker/datepicker_options.js
+++ b/tests/unit/datepicker/datepicker_options.js
@@ -7,6 +7,7 @@
module("datepicker: options");
test('setDefaults', function() {
+ expect( 3 );
var inp = init('#inp');
equal($.datepicker._defaults.showOn, 'focus', 'Initial showOn');
$.datepicker.setDefaults({showOn: 'button'});
@@ -16,6 +17,7 @@ test('setDefaults', function() {
});
test('option', function() {
+ expect( 17 );
var inp = init('#inp'),
inst = $.data(inp[0], PROP_NAME);
// Set option
@@ -47,6 +49,7 @@ test('option', function() {
});
test('change', function() {
+ expect( 12 );
var inp = init('#inp'),
inst = $.data(inp[0], PROP_NAME);
equal(inst.settings.showOn, null, 'Initial setting showOn');
@@ -67,6 +70,7 @@ test('change', function() {
});
test('invocation', function() {
+ expect( 29 );
var button, image,
inp = init('#inp'),
dp = $('#ui-datepicker-div'),
@@ -138,6 +142,7 @@ test('invocation', function() {
});
test('otherMonths', function() {
+ expect( 8 );
var inp = init('#inp'),
pop = $('#ui-datepicker-div');
inp.val('06/01/2009').datepicker('show');
@@ -159,6 +164,7 @@ test('otherMonths', function() {
});
test('defaultDate', function() {
+ expect( 17 );
var inp = init('#inp'),
date = new Date();
inp.val('').datepicker('show').
@@ -253,6 +259,7 @@ test('defaultDate', function() {
});
test('miscellaneous', function() {
+ expect( 19 );
var curYear, longNames, shortNames, date,
dp = $('#ui-datepicker-div'),
inp = init('#inp');
@@ -314,6 +321,7 @@ test('miscellaneous', function() {
});
test('minMax', function() {
+ expect( 17 );
var date,
inp = init('#inp'),
lastYear = new Date(2007, 6 - 1, 4),
@@ -398,6 +406,7 @@ test('minMax', function() {
});
test('setDate', function() {
+ expect( 24 );
var inl, alt, minDate, maxDate, dateAndTimeToSet, dateAndTimeClone,
inp = init('#inp'),
date1 = new Date(2008, 6 - 1, 4),
@@ -477,6 +486,7 @@ test('setDate', function() {
});
test('altField', function() {
+ expect( 10 );
var inp = init('#inp'),
alt = $('#alt');
// No alternate field set
@@ -515,6 +525,7 @@ test('altField', function() {
});
test('autoSize', function() {
+ expect( 15 );
var inp = init('#inp');
equal(inp.prop('size'), 20, 'Auto size - default');
inp.datepicker('option', 'autoSize', true);
@@ -550,6 +561,7 @@ test('autoSize', function() {
});
test('daylightSaving', function() {
+ expect( 25 );
var inp = init('#inp'),
dp = $('#ui-datepicker-div');
ok(true, 'Daylight saving - ' + new Date());
@@ -664,6 +676,7 @@ function calcWeek(date) {
}
test('callbacks', function() {
+ expect( 13 );
// Before show
var dp, day20, day21,
inp = init('#inp', {beforeShow: beforeAll}),
@@ -693,6 +706,7 @@ test('callbacks', function() {
});
test('localisation', function() {
+ expect( 24 );
var dp, month, day, date,
inp = init('#inp', $.datepicker.regional.fr);
inp.datepicker('option', {dateFormat: 'DD, d MM yy', showButtonPanel:true, changeMonth:true, changeYear:true}).val('').datepicker('show');
@@ -722,6 +736,7 @@ test('localisation', function() {
});
test('noWeekends', function() {
+ expect( 31 );
var i, date;
for (i = 1; i <= 31; i++) {
date = new Date(2001, 1 - 1, i);
@@ -731,6 +746,7 @@ test('noWeekends', function() {
});
test('iso8601Week', function() {
+ expect( 12 );
var date = new Date(2000, 12 - 1, 31);
equal($.datepicker.iso8601Week(date), 52, 'ISO 8601 week ' + date);
date = new Date(2001, 1 - 1, 1);
@@ -758,6 +774,7 @@ test('iso8601Week', function() {
});
test('parseDate', function() {
+ expect( 26 );
init('#inp');
var currentYear, gmtDate, fr, settings, zh;
ok($.datepicker.parseDate('d m y', '') == null, 'Parse date empty');
@@ -822,6 +839,7 @@ test('parseDate', function() {
});
test('parseDateErrors', function() {
+ expect( 17 );
init('#inp');
var fr, settings;
function expectError(expr, value, error) {
@@ -874,6 +892,7 @@ test('parseDateErrors', function() {
});
test('formatDate', function() {
+ expect( 16 );
init('#inp');
var gmtDate, fr, settings;
equal($.datepicker.formatDate('d m y', new Date(2001, 2 - 1, 3)),
diff --git a/tests/unit/datepicker/datepicker_tickets.js b/tests/unit/datepicker/datepicker_tickets.js
index 105be63a6..e1b882a89 100644
--- a/tests/unit/datepicker/datepicker_tickets.js
+++ b/tests/unit/datepicker/datepicker_tickets.js
@@ -7,6 +7,7 @@ module("datepicker: tickets");
// http://forum.jquery.com/topic/several-breaking-changes-in-jquery-ui-1-8rc1
test('beforeShowDay-getDate', function() {
+ expect( 3 );
var inp = init('#inp', {beforeShowDay: function(date) { inp.datepicker('getDate'); return [true, '']; }}),
dp = $('#ui-datepicker-div');
inp.val('01/01/2010').datepicker('show');
@@ -25,6 +26,7 @@ test('beforeShowDay-getDate', function() {
});
test('Ticket 7602: Stop datepicker from appearing with beforeShow event handler', function(){
+ expect( 3 );
var inp = init('#inp',{
beforeShow: function(){
return false;
@@ -58,11 +60,13 @@ test('Ticket 7602: Stop datepicker from appearing with beforeShow event handler'
});
test('Ticket 6827: formatDate day of year calculation is wrong during day lights savings time', function(){
+ expect( 1 );
var time = $.datepicker.formatDate("oo", new Date("2010/03/30 12:00:00 CDT"));
equal(time, "089");
});
test('Ticket #7244: date parser does not fail when too many numbers are passed into the date function', function() {
+ expect( 4 );
var date;
try{
date = $.datepicker.parseDate('dd/mm/yy', '18/04/19881');
diff --git a/tests/unit/dialog/dialog_core.js b/tests/unit/dialog/dialog_core.js
index 636b957e8..e0a5c8701 100644
--- a/tests/unit/dialog/dialog_core.js
+++ b/tests/unit/dialog/dialog_core.js
@@ -116,6 +116,7 @@ test("ARIA", function() {
});
test("widget method", function() {
+ expect( 1 );
var dialog = $("<div>").appendTo("#main").dialog();
deepEqual(dialog.parent()[0], dialog.dialog("widget")[0]);
});
diff --git a/tests/unit/dialog/dialog_methods.js b/tests/unit/dialog/dialog_methods.js
index 1f84cd6b5..ba0c2bd41 100644
--- a/tests/unit/dialog/dialog_methods.js
+++ b/tests/unit/dialog/dialog_methods.js
@@ -34,6 +34,8 @@ test("init", function() {
});
test("destroy", function() {
+ expect( 4 );
+
$("<div></div>").appendTo('body').dialog().dialog("destroy").remove();
ok(true, '.dialog("destroy") called on element');
@@ -49,6 +51,8 @@ test("destroy", function() {
});
test("enable", function() {
+ expect( 3 );
+
var expected = $('<div></div>').dialog(),
actual = expected.dialog('enable');
equal(actual, expected, 'enable is chainable');
@@ -60,6 +64,8 @@ test("enable", function() {
});
test("disable", function() {
+ expect( 3 );
+
var expected = $('<div></div>').dialog(),
actual = expected.dialog('disable');
equal(actual, expected, 'disable is chainable');
@@ -71,6 +77,8 @@ test("disable", function() {
});
test("close", function() {
+ expect( 3 );
+
var expected = $('<div></div>').dialog(),
actual = expected.dialog('close');
equal(actual, expected, 'close is chainable');
@@ -98,6 +106,8 @@ test("isOpen", function() {
});
test("moveToTop", function() {
+ expect( 3 );
+
var d1, d2, dlg1, dlg2,
expected = $('<div></div>').dialog(),
actual = expected.dialog('moveToTop');
@@ -117,6 +127,7 @@ test("moveToTop", function() {
});
test("open", function() {
+ expect( 3 );
var expected = $('<div></div>').dialog(),
actual = expected.dialog('open');
equal(actual, expected, 'open is chainable');
diff --git a/tests/unit/dialog/dialog_options.js b/tests/unit/dialog/dialog_options.js
index c071c1b09..ba217c6f4 100644
--- a/tests/unit/dialog/dialog_options.js
+++ b/tests/unit/dialog/dialog_options.js
@@ -106,6 +106,7 @@ test("buttons - advanced", function() {
});
test("closeOnEscape", function() {
+ expect( 6 );
el = $('<div></div>').dialog({ closeOnEscape: false });
ok(true, 'closeOnEscape: false');
ok(dlg().is(':visible') && !dlg().is(':hidden'), 'dialog is open before ESC');
@@ -276,6 +277,7 @@ test("minWidth", function() {
});
test("position, default center on window", function() {
+ expect( 2 );
var el = $('<div></div>').dialog(),
dialog = el.dialog('widget'),
offset = dialog.offset();
@@ -285,6 +287,7 @@ test("position, default center on window", function() {
});
test("position, top on window", function() {
+ expect( 2 );
var el = $('<div></div>').dialog({ position: "top" }),
dialog = el.dialog('widget'),
offset = dialog.offset();
@@ -294,6 +297,7 @@ test("position, top on window", function() {
});
test("position, left on window", function() {
+ expect( 2 );
var el = $('<div></div>').dialog({ position: "left" }),
dialog = el.dialog('widget'),
offset = dialog.offset();
@@ -303,6 +307,7 @@ test("position, left on window", function() {
});
test("position, right bottom on window", function() {
+ expect( 2 );
var el = $('<div></div>').dialog({ position: "right bottom" }),
dialog = el.dialog('widget'),
offset = dialog.offset();
@@ -312,6 +317,7 @@ test("position, right bottom on window", function() {
});
test("position, right bottom on window w/array", function() {
+ expect( 2 );
var el = $('<div></div>').dialog({ position: ["right", "bottom"] }),
dialog = el.dialog('widget'),
offset = dialog.offset();
@@ -321,6 +327,7 @@ test("position, right bottom on window w/array", function() {
});
test("position, offset from top left w/array", function() {
+ expect( 2 );
var el = $('<div></div>').dialog({ position: [10, 10] }),
dialog = el.dialog('widget'),
offset = dialog.offset();
@@ -330,6 +337,7 @@ test("position, offset from top left w/array", function() {
});
test("position, right bottom at right bottom via ui.position args", function() {
+ expect( 2 );
var el = $('<div></div>').dialog({
position: {
my: "right bottom",
@@ -345,6 +353,7 @@ test("position, right bottom at right bottom via ui.position args", function() {
});
test("position, at another element", function() {
+ expect( 4 );
var parent = $('<div></div>').css({
position: 'absolute',
top: 400,
diff --git a/tests/unit/dialog/dialog_tickets.js b/tests/unit/dialog/dialog_tickets.js
index 98983cf33..201ea3a87 100644
--- a/tests/unit/dialog/dialog_tickets.js
+++ b/tests/unit/dialog/dialog_tickets.js
@@ -71,6 +71,7 @@ test("#5184: isOpen in dialogclose event is true", function() {
});
test("#5531: dialog width should be at least minWidth on creation", function () {
+ expect( 4 );
el = $('<div></div>').dialog({
width: 200,
minWidth: 300
@@ -192,6 +193,7 @@ test("#6966: Escape key closes all dialogs, not the top one", function(){
});
test("#4980: Destroy should place element back in original DOM position", function(){
+ expect( 2 );
container = $('<div id="container"><div id="modal">Content</div></div>');
modal = container.find('#modal');
modal.dialog();
diff --git a/tests/unit/effects/effects.html b/tests/unit/effects/effects.html
index 1fd94182d..9305fcd21 100644
--- a/tests/unit/effects/effects.html
+++ b/tests/unit/effects/effects.html
@@ -15,20 +15,20 @@
<script>
TestHelpers.loadResources({
js: [
- "ui/jquery.effects.core.js",
- "ui/jquery.effects.blind.js",
- "ui/jquery.effects.bounce.js",
- "ui/jquery.effects.clip.js",
- "ui/jquery.effects.drop.js",
- "ui/jquery.effects.explode.js",
- "ui/jquery.effects.fade.js",
- "ui/jquery.effects.fold.js",
- "ui/jquery.effects.highlight.js",
- "ui/jquery.effects.pulsate.js",
- "ui/jquery.effects.scale.js",
- "ui/jquery.effects.shake.js",
- "ui/jquery.effects.slide.js",
- "ui/jquery.effects.transfer.js"
+ "ui/jquery.ui.effect.js",
+ "ui/jquery.ui.effect-blind.js",
+ "ui/jquery.ui.effect-bounce.js",
+ "ui/jquery.ui.effect-clip.js",
+ "ui/jquery.ui.effect-drop.js",
+ "ui/jquery.ui.effect-explode.js",
+ "ui/jquery.ui.effect-fade.js",
+ "ui/jquery.ui.effect-fold.js",
+ "ui/jquery.ui.effect-highlight.js",
+ "ui/jquery.ui.effect-pulsate.js",
+ "ui/jquery.ui.effect-scale.js",
+ "ui/jquery.ui.effect-shake.js",
+ "ui/jquery.ui.effect-slide.js",
+ "ui/jquery.ui.effect-transfer.js"
]
});
</script>
diff --git a/tests/unit/effects/effects_core.js b/tests/unit/effects/effects_core.js
index 955e6f799..9b4787a57 100644
--- a/tests/unit/effects/effects_core.js
+++ b/tests/unit/effects/effects_core.js
@@ -90,16 +90,16 @@ asyncTest( "animateClass works with colors", function() {
});
asyncTest( "animateClass calls step option", 1, function() {
- var test = jQuery("div.animateClass"),
- done = function() {
- done = jQuery.noop;
+ var test = jQuery( "div.animateClass" ),
+ step = function( fx ) {
+ ok( true, "Step Function Called" );
test.stop();
start();
+ step = $.noop;
};
test.toggleClass( "testChangeBackground", {
- step: function( fx ) {
- ok( true, "Step Function Called" );
- setTimeout( done, 0 );
+ step: function() {
+ step();
}
});
});
@@ -153,6 +153,7 @@ asyncTest( "animateClass clears style properties when stopped", function() {
});
asyncTest( "animateClass: css and class changes during animation are not lost (#7106)", function() {
+ expect( 2 );
var test = $( "div.ticket7106" );
// ensure the class stays and that the css property stays
@@ -174,7 +175,7 @@ $.each( $.effects.effect, function( effect ) {
// puff and size are defined inside scale
if ( effect !== "puff" && effect !== "size" ) {
- TestHelpers.testJshint( "effects." + effect );
+ TestHelpers.testJshint( "effect-" + effect );
}
if ( effect === "transfer" ) {
diff --git a/tests/unit/effects/effects_scale.js b/tests/unit/effects/effects_scale.js
index df61d9e91..6abbcb538 100644
--- a/tests/unit/effects/effects_scale.js
+++ b/tests/unit/effects/effects_scale.js
@@ -4,6 +4,7 @@ module( "effect.scale: Scale" );
function run( position, v, h, vo, ho ) {
var desc = "End Position Correct: " + position + " (" + v + "," + h + ") - origin: (" + vo + "," + ho + ")";
asyncTest( desc, function() {
+ expect( 2 );
function complete() {
equal( parseInt( test.css( h ), 10 ), target[ h ], "Horizontal Position Correct " + desc );
equal( parseInt( test.css( v ), 10 ), target[ v ], "Vertical Position Correct " + desc );
@@ -53,13 +54,13 @@ function suite( position ) {
$(function() {
suite( "absolute" );
suite( "relative" );
- var fixed = $.support.fixedPosition;
- // jQuery < 1.7 uses $.offset.supportsFixedPosition
- if ( fixed === undefined ) {
- $.offset.initialize();
- fixed = $.offset.supportsFixedPosition;
- }
- if ( fixed ) {
+ var fixedElem = $( "<div>" )
+ .css({
+ position: "fixed",
+ top: 10
+ })
+ .appendTo( "body" );
+ if ( fixedElem.offset().top === 10 ) {
suite( "fixed" );
}
});
diff --git a/tests/unit/menu/menu.html b/tests/unit/menu/menu.html
index 31c29a924..ed376232e 100644
--- a/tests/unit/menu/menu.html
+++ b/tests/unit/menu/menu.html
@@ -44,11 +44,7 @@
</head>
<body>
-<h1 id="qunit-header">jQuery UI Menu Test Suite</h1>
-<h2 id="qunit-banner"></h2>
-<div id="qunit-testrunner-toolbar"></div>
-<h2 id="qunit-userAgent"></h2>
-<ol id="qunit-tests"></ol>
+<div id="qunit">jQuery UI Menu Test Suite</div>
<div id="qunit-fixture">
<ul class="foo" id="menu1">
@@ -268,8 +264,6 @@
<li class="foo"><a class="foo" href="#">Saarland</a></li>
</ul>
-<div id="log"></div>
-
</div>
</body>
</html>
diff --git a/tests/unit/menu/menu_common.js b/tests/unit/menu/menu_common.js
index 07295f1af..4a89a947a 100644
--- a/tests/unit/menu/menu_common.js
+++ b/tests/unit/menu/menu_common.js
@@ -1,6 +1,9 @@
TestHelpers.commonWidgetTests( "menu", {
defaults: {
disabled: false,
+ icons: {
+ submenu: "ui-icon-carat-1-e"
+ },
menus: "ul",
position: {
my: "left top",
diff --git a/tests/unit/menu/menu_core.js b/tests/unit/menu/menu_core.js
index 7732fd7b7..5ee28c14a 100644
--- a/tests/unit/menu/menu_core.js
+++ b/tests/unit/menu/menu_core.js
@@ -1,29 +1,30 @@
-/*
- * menu_core.js
- */
+(function( $ ) {
+module( "menu: core" );
-(function($) {
+test( "markup structure", function() {
+ expect( 6 );
+ var element = $( "#menu1" ).menu();
+ ok( element.hasClass( "ui-menu" ), "main element is .ui-menu" );
+ element.children().each(function( index ) {
+ ok( $( this ).hasClass( "ui-menu-item" ), "child " + index + " is .ui-menu-item" );
+ });
+});
-module("menu: core");
+test( "accessibility", function () {
+ expect( 4 );
+ var element = $( "#menu1" ).menu();
-test("accessibility", function () {
- expect(5);
- var item,
- menu = $('#menu1').menu(),
- item0 = $("li:eq(0) a");
+ equal( element.attr( "role" ), "menu", "main role" );
+ ok( !element.attr( "aria-activedescendant" ), "aria-activedescendant not set" );
- ok( menu.hasClass("ui-menu ui-widget ui-widget-content ui-corner-all"), "menu class");
- equal( menu.attr("role"), "menu", "main role");
- ok( !menu.attr("aria-activedescendant"), "aria attribute not yet active");
+ element.menu( "focus", $.Event(), element.children().eq( -2 ) );
+ equal( element.attr( "aria-activedescendant" ), "testID1", "aria-activedescendant from existing id" );
- item = menu.find( "li:first" ).find( "a" ).attr( "id", "xid" ).end();
- menu.menu( "focus", $.Event(), item );
- equal( menu.attr("aria-activedescendant"), "xid", "aria attribute, id from dom");
+ element.menu( "focus", $.Event(), element.children().eq( 0 ) );
+ ok( /^ui-id-\d+$/.test( element.attr( "aria-activedescendant" ) ), "aria-activedescendant from generated id" );
- item = menu.find( "li:last" );
- menu.menu( "focus", $.Event(), item );
- ok( /^ui-id-\d+$/.test( menu.attr( "aria-activedescendant" ) ), "aria attribute, generated id");
+ // Item roles are tested in the role option tests
});
-})(jQuery);
+})( jQuery );
diff --git a/tests/unit/menu/menu_events.js b/tests/unit/menu/menu_events.js
index 2132ff764..8eb8ee8c6 100644
--- a/tests/unit/menu/menu_events.js
+++ b/tests/unit/menu/menu_events.js
@@ -1,50 +1,52 @@
-/*
- * menu_events.js
- */
-(function($) {
+(function( $ ) {
var log = TestHelpers.menu.log,
+ logOutput = TestHelpers.menu.logOutput,
click = TestHelpers.menu.click;
-module("menu: events");
+module( "menu: events", {
+ setup: function() {
+ TestHelpers.menu.clearLog();
+ }
+});
-test("handle click on menu", function() {
- expect(1);
- var menu = $('#menu1').menu({
- select: function(event, ui) {
+test( "handle click on menu", function() {
+ expect( 1 );
+ var element = $( "#menu1" ).menu({
+ select: function( event, ui ) {
log();
}
});
- log("click",true);
- click($('#menu1'),"1");
- log("afterclick");
- click( menu,"2");
- click($('#menu1'),"3");
- click( menu,"1");
- equal( $("#log").html(), "1,3,2,afterclick,1,click,", "Click order not valid.");
+ log( "click", true );
+ click( $( "#menu1" ), "1" );
+ log( "afterclick" );
+ click( element, "2" );
+ click( $( "#menu1" ), "3" );
+ click( element, "1" );
+ equal( logOutput(), "click,1,afterclick,2,3,1", "Click order not valid." );
});
-test("handle click on custom item menu", function() {
- expect(1);
- var menu = $('#menu5').menu({
- select: function(event, ui) {
+test( "handle click on custom item menu", function() {
+ expect( 1 );
+ var element = $( "#menu5" ).menu({
+ select: function( event, ui ) {
log();
},
menus: "div"
});
- log("click",true);
- click($('#menu5'),"1");
- log("afterclick");
- click( menu,"2");
- click($('#menu5'),"3");
- click( menu,"1");
- equal( $("#log").html(), "1,3,2,afterclick,1,click,", "Click order not valid.");
+ log( "click", true );
+ click( $( "#menu5" ), "1" );
+ log( "afterclick" );
+ click( element, "2" );
+ click( $( "#menu5" ), "3" );
+ click( element, "1" );
+ equal( logOutput(), "click,1,afterclick,2,3,1", "Click order not valid." );
});
asyncTest( "handle blur", function() {
expect( 1 );
var blurHandled = false,
- $menu = $( "#menu1" ).menu({
+ element = $( "#menu1" ).menu({
blur: function( event, ui ) {
// Ignore duplicate blur event fired by IE
if ( !blurHandled ) {
@@ -54,17 +56,17 @@ asyncTest( "handle blur", function() {
}
});
- click( $menu, "1" );
+ click( element, "1" );
setTimeout( function() {
- $menu.blur();
+ element.blur();
start();
- }, 350);
+ }, 350 );
});
asyncTest( "handle blur on click", function() {
expect( 1 );
var blurHandled = false,
- $menu = $( "#menu1" ).menu({
+ element = $( "#menu1" ).menu({
blur: function( event, ui ) {
// Ignore duplicate blur event fired by IE
if ( !blurHandled ) {
@@ -74,12 +76,11 @@ asyncTest( "handle blur on click", function() {
}
});
- click( $menu, "1" );
+ click( element, "1" );
setTimeout( function() {
- $( "<a>", { id: "remove"} ).appendTo("body").trigger( "click" );
- $("#remove").remove();
+ $( "<a>", { id: "remove"} ).appendTo( "body" ).trigger( "click" );
start();
- }, 350);
+ }, 350 );
});
test( "handle focus of menu with active item", function() {
@@ -95,226 +96,225 @@ test( "handle focus of menu with active item", function() {
element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } );
element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } );
element.focus();
- equal( $("#log").html(), "2,2,1,0,focus,", "current active item remains active");
+ equal( logOutput(), "focus,0,1,2,2", "current active item remains active" );
});
asyncTest( "handle submenu auto collapse: mouseleave", function() {
expect( 4 );
- var $menu = $( "#menu2" ).menu(),
+ var element = $( "#menu2" ).menu(),
event = $.Event( "mouseenter" );
function menumouseleave1() {
- equal( $menu.find( "ul[aria-expanded='true']" ).length, 1, "first submenu expanded" );
- $menu.menu( "focus", event, $menu.find( "li:nth-child(7) li:first" ) );
+ equal( element.find( "ul[aria-expanded='true']" ).length, 1, "first submenu expanded" );
+ element.menu( "focus", event, element.find( "li:nth-child(7) li:first" ) );
setTimeout( menumouseleave2, 350 );
}
function menumouseleave2() {
- equal( $menu.find( "ul[aria-expanded='true']" ).length, 2, "second submenu expanded" );
- $menu.find( "ul[aria-expanded='true']:first" ).trigger( "mouseleave" );
+ equal( element.find( "ul[aria-expanded='true']" ).length, 2, "second submenu expanded" );
+ element.find( "ul[aria-expanded='true']:first" ).trigger( "mouseleave" );
setTimeout( menumouseleave3, 350 );
}
function menumouseleave3() {
- equal( $menu.find( "ul[aria-expanded='true']" ).length, 1, "second submenu collapsed" );
- $menu.trigger( "mouseleave" );
+ equal( element.find( "ul[aria-expanded='true']" ).length, 1, "second submenu collapsed" );
+ element.trigger( "mouseleave" );
setTimeout( menumouseleave4, 350 );
}
function menumouseleave4() {
- equal( $menu.find( "ul[aria-expanded='true']" ).length, 0, "first submenu collapsed" );
+ equal( element.find( "ul[aria-expanded='true']" ).length, 0, "first submenu collapsed" );
start();
}
- $menu.find( "li:nth-child(7)" ).trigger( "mouseenter" );
+ element.find( "li:nth-child(7)" ).trigger( "mouseenter" );
setTimeout( menumouseleave1, 350 );
});
asyncTest( "handle submenu auto collapse: mouseleave", function() {
expect( 4 );
- var $menu = $( "#menu5" ).menu( { menus: "div" } ),
+ var element = $( "#menu5" ).menu({ menus: "div" }),
event = $.Event( "mouseenter" );
function menumouseleave1() {
- equal( $menu.find( "div[aria-expanded='true']" ).length, 1, "first submenu expanded" );
- $menu.menu( "focus", event, $menu.find( ":nth-child(7)" ).find( "div" ).eq( 0 ).children().eq( 0 ) );
+ equal( element.find( "div[aria-expanded='true']" ).length, 1, "first submenu expanded" );
+ element.menu( "focus", event, element.find( ":nth-child(7)" ).find( "div" ).eq( 0 ).children().eq( 0 ) );
setTimeout( menumouseleave2, 350 );
}
function menumouseleave2() {
- equal( $menu.find( "div[aria-expanded='true']" ).length, 2, "second submenu expanded" );
- $menu.find( "div[aria-expanded='true']:first" ).trigger( "mouseleave" );
+ equal( element.find( "div[aria-expanded='true']" ).length, 2, "second submenu expanded" );
+ element.find( "div[aria-expanded='true']:first" ).trigger( "mouseleave" );
setTimeout( menumouseleave3, 350 );
}
function menumouseleave3() {
- equal( $menu.find( "div[aria-expanded='true']" ).length, 1, "second submenu collapsed" );
- $menu.trigger( "mouseleave" );
+ equal( element.find( "div[aria-expanded='true']" ).length, 1, "second submenu collapsed" );
+ element.trigger( "mouseleave" );
setTimeout( menumouseleave4, 350 );
}
function menumouseleave4() {
- equal( $menu.find( "div[aria-expanded='true']" ).length, 0, "first submenu collapsed" );
+ equal( element.find( "div[aria-expanded='true']" ).length, 0, "first submenu collapsed" );
start();
}
- $menu.find( ":nth-child(7)" ).trigger( "mouseenter" );
+ element.find( ":nth-child(7)" ).trigger( "mouseenter" );
setTimeout( menumouseleave1, 350 );
-
});
-test("handle keyboard navigation on menu without scroll and without submenus", function() {
- expect(12);
- var element = $('#menu1').menu({
- select: function(event, ui) {
- log($(ui.item[0]).text());
+test( "handle keyboard navigation on menu without scroll and without submenus", function() {
+ expect( 12 );
+ var element = $( "#menu1" ).menu({
+ select: function( event, ui ) {
+ log( $( ui.item[0] ).text() );
},
focus: function( event, ui ) {
- log($(event.target).find(".ui-state-focus").parent().index());
+ log( $( event.target ).find( ".ui-state-focus" ).parent().index() );
}
});
- log("keydown",true);
+ log( "keydown", true );
element.focus();
element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } );
element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } );
- equal( $("#log").html(), "2,1,0,keydown,", "Keydown DOWN");
+ equal( logOutput(), "keydown,0,1,2", "Keydown DOWN" );
- log("keydown",true);
+ log( "keydown", true );
element.simulate( "keydown", { keyCode: $.ui.keyCode.UP } );
- equal( $("#log").html(), "1,keydown,", "Keydown UP");
+ equal( logOutput(), "keydown,1", "Keydown UP" );
- log("keydown",true);
+ log( "keydown", true );
element.simulate( "keydown", { keyCode: $.ui.keyCode.LEFT } );
- equal( $("#log").html(), "keydown,", "Keydown LEFT (no effect)");
+ equal( logOutput(), "keydown", "Keydown LEFT (no effect)" );
- log("keydown",true);
+ log( "keydown", true );
element.simulate( "keydown", { keyCode: $.ui.keyCode.RIGHT } );
- equal( $("#log").html(), "keydown,", "Keydown RIGHT (no effect)");
+ equal( logOutput(), "keydown", "Keydown RIGHT (no effect)" );
- log("keydown",true);
+ log( "keydown", true );
element.simulate( "keydown", { keyCode: $.ui.keyCode.PAGE_DOWN } );
- equal( $("#log").html(), "4,keydown,", "Keydown PAGE_DOWN");
+ equal( logOutput(), "keydown,4", "Keydown PAGE_DOWN" );
- log("keydown",true);
+ log( "keydown", true );
element.simulate( "keydown", { keyCode: $.ui.keyCode.PAGE_DOWN } );
- equal( $("#log").html(), "keydown,", "Keydown PAGE_DOWN (no effect)");
+ equal( logOutput(), "keydown", "Keydown PAGE_DOWN (no effect)" );
- log("keydown",true);
+ log( "keydown", true );
element.simulate( "keydown", { keyCode: $.ui.keyCode.PAGE_UP } );
- equal( $("#log").html(), "0,keydown,", "Keydown PAGE_UP");
+ equal( logOutput(), "keydown,0", "Keydown PAGE_UP" );
- log("keydown",true);
+ log( "keydown", true );
element.simulate( "keydown", { keyCode: $.ui.keyCode.PAGE_UP } );
- equal( $("#log").html(), "keydown,", "Keydown PAGE_UP (no effect)");
+ equal( logOutput(), "keydown", "Keydown PAGE_UP (no effect)" );
- log("keydown",true);
+ log( "keydown", true );
element.simulate( "keydown", { keyCode: $.ui.keyCode.END } );
- equal( $("#log").html(), "4,keydown,", "Keydown END");
+ equal( logOutput(), "keydown,4", "Keydown END" );
- log("keydown",true);
+ log( "keydown", true );
element.simulate( "keydown", { keyCode: $.ui.keyCode.HOME } );
- equal( $("#log").html(), "0,keydown,", "Keydown HOME");
+ equal( logOutput(), "keydown,0", "Keydown HOME" );
- log("keydown",true);
+ log( "keydown", true );
element.simulate( "keydown", { keyCode: $.ui.keyCode.ESCAPE } );
- equal( $("#log").html(), "keydown,", "Keydown ESCAPE (no effect)");
+ equal( logOutput(), "keydown", "Keydown ESCAPE (no effect)" );
- log("keydown",true);
+ log( "keydown", true );
element.simulate( "keydown", { keyCode: $.ui.keyCode.ENTER } );
- equal( $("#log").html(), "Aberdeen,keydown,", "Keydown ENTER");
+ equal( logOutput(), "keydown,Aberdeen", "Keydown ENTER" );
});
-asyncTest("handle keyboard navigation on menu without scroll and with submenus", function() {
- expect(16);
- var element = $('#menu2').menu({
- select: function(event, ui) {
- log($(ui.item[0]).text());
+asyncTest( "handle keyboard navigation on menu without scroll and with submenus", function() {
+ expect( 16 );
+ var element = $( "#menu2" ).menu({
+ select: function( event, ui ) {
+ log( $( ui.item[0] ).text() );
},
focus: function( event, ui ) {
- log($(event.target).find(".ui-state-focus").parent().index());
+ log( $( event.target ).find( ".ui-state-focus" ).parent().index() );
}
});
- log("keydown",true);
+ log( "keydown", true );
element.one( "menufocus", function( event, ui ) {
element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } );
element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } );
- equal( $("#log").html(), "2,1,keydown,", "Keydown DOWN");
+ equal( logOutput(), "keydown,1,2", "Keydown DOWN" );
setTimeout( menukeyboard1, 50 );
});
element.focus();
function menukeyboard1() {
- log("keydown",true);
+ log( "keydown", true );
element.simulate( "keydown", { keyCode: $.ui.keyCode.UP } );
element.simulate( "keydown", { keyCode: $.ui.keyCode.UP } );
- equal( $("#log").html(), "0,1,keydown,", "Keydown UP");
+ equal( logOutput(), "keydown,1,0", "Keydown UP" );
- log("keydown",true);
+ log( "keydown", true );
element.simulate( "keydown", { keyCode: $.ui.keyCode.LEFT } );
- equal( $("#log").html(), "keydown,", "Keydown LEFT (no effect)");
+ equal( logOutput(), "keydown", "Keydown LEFT (no effect)" );
- log("keydown",true);
+ log( "keydown", true );
element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } );
element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } );
element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } );
element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } );
element.simulate( "keydown", { keyCode: $.ui.keyCode.RIGHT } );
- setTimeout( function() {
- equal( $("#log").html(), "0,4,3,2,1,keydown,", "Keydown RIGHT (open submenu)");
- }, 50);
- setTimeout( menukeyboard2, 50 );
+ setTimeout(function() {
+ equal( logOutput(), "keydown,1,2,3,4,0", "Keydown RIGHT (open submenu)" );
+ setTimeout( menukeyboard2, 50 );
+ }, 50 );
}
function menukeyboard2() {
- log("keydown",true);
+ log( "keydown", true );
element.simulate( "keydown", { keyCode: $.ui.keyCode.LEFT } );
- equal( $("#log").html(), "4,keydown,", "Keydown LEFT (close submenu)");
+ equal( logOutput(), "keydown,4", "Keydown LEFT (close submenu)" );
- //re-open submenu
+ // re-open submenu
element.simulate( "keydown", { keyCode: $.ui.keyCode.RIGHT } );
setTimeout( menukeyboard3, 50 );
}
function menukeyboard3() {
- log("keydown",true);
+ log( "keydown", trueĀ );
element.simulate( "keydown", { keyCode: $.ui.keyCode.PAGE_DOWN } );
- equal( $("#log").html(), "2,keydown,", "Keydown PAGE_DOWN");
+ equal( logOutput(), "keydown,2", "Keydown PAGE_DOWN" );
- log("keydown",true);
+ log( "keydown", true );
element.simulate( "keydown", { keyCode: $.ui.keyCode.PAGE_DOWN } );
- equal( $("#log").html(), "keydown,", "Keydown PAGE_DOWN (no effect)");
+ equal( logOutput(), "keydown", "Keydown PAGE_DOWN (no effect)" );
- log("keydown",true);
+ log( "keydown", true );
element.simulate( "keydown", { keyCode: $.ui.keyCode.PAGE_UP } );
- equal( $("#log").html(), "0,keydown,", "Keydown PAGE_UP");
+ equal( logOutput(), "keydown,0", "Keydown PAGE_UP" );
- log("keydown",true);
+ log( "keydown", true );
element.simulate( "keydown", { keyCode: $.ui.keyCode.PAGE_UP } );
- equal( $("#log").html(), "keydown,", "Keydown PAGE_UP (no effect)");
+ equal( logOutput(), "keydown", "Keydown PAGE_UP (no effect)" );
- log("keydown",true);
+ log( "keydown", true );
element.simulate( "keydown", { keyCode: $.ui.keyCode.END } );
- equal( $("#log").html(), "2,keydown,", "Keydown END");
+ equal( logOutput(), "keydown,2", "Keydown END" );
- log("keydown",true);
+ log( "keydown", true );
element.simulate( "keydown", { keyCode: $.ui.keyCode.HOME } );
- equal( $("#log").html(), "0,keydown,", "Keydown HOME");
+ equal( logOutput(), "keydown,0", "Keydown HOME" );
- log("keydown",true);
+ log( "keydown", true );
element.simulate( "keydown", { keyCode: $.ui.keyCode.ESCAPE } );
- equal( $("#log").html(), "4,keydown,", "Keydown ESCAPE (close submenu)");
+ equal( logOutput(), "keydown,4", "Keydown ESCAPE (close submenu)" );
- log("keydown",true);
+ log( "keydown", true );
element.simulate( "keydown", { keyCode: $.ui.keyCode.SPACE } );
setTimeout( menukeyboard4, 50 );
}
function menukeyboard4() {
- equal( $("#log").html(), "0,keydown,", "Keydown SPACE (open submenu)");
+ equal( logOutput(), "keydown,0", "Keydown SPACE (open submenu)" );
- log("keydown",true);
+ log( "keydown", true );
element.simulate( "keydown", { keyCode: $.ui.keyCode.ESCAPE } );
- equal( $("#log").html(), "4,keydown,", "Keydown ESCAPE (close submenu)");
+ equal( logOutput(), "keydown,4", "Keydown ESCAPE (close submenu)" );
- log("keydown",true);
+ log( "keydown", true );
element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } );
element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } );
element.simulate( "keydown", { keyCode: $.ui.keyCode.RIGHT } );
@@ -325,9 +325,9 @@ asyncTest("handle keyboard navigation on menu without scroll and with submenus",
element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } );
element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } );
element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } );
- equal( $("#log").html(), "0,4,2,0,1,0,6,5,keydown,", "Keydown skip dividers and items without anchors");
+ equal( logOutput(), "keydown,5,6,0,1,0,2,4,0", "Keydown skip dividers and items without anchors" );
- log("keydown",true);
+ log( "keydown", true );
element.simulate( "keydown", { keyCode: $.ui.keyCode.ENTER } );
setTimeout( menukeyboard6, 50 );
}, 50 );
@@ -335,232 +335,229 @@ asyncTest("handle keyboard navigation on menu without scroll and with submenus",
}
function menukeyboard6() {
- equal( $("#log").html(), "Ada,keydown,", "Keydown ENTER (open submenu)");
-
+ equal( logOutput(), "keydown,Ada", "Keydown ENTER (open submenu)" );
start();
}
});
-test("handle keyboard navigation on menu with scroll and without submenus", function() {
- expect(14);
- var element = $('#menu3').menu({
- select: function(event, ui) {
- log($(ui.item[0]).text());
+test( "handle keyboard navigation on menu with scroll and without submenus", function() {
+ expect( 14 );
+ var element = $( "#menu3" ).menu({
+ select: function( event, ui ) {
+ log( $( ui.item[0] ).text() );
},
focus: function( event, ui ) {
- log($(event.target).find(".ui-state-focus").parent().index());
+ log( $( event.target ).find( ".ui-state-focus" ).parent().index());
}
});
- log("keydown",true);
+ log( "keydown", true );
element.focus();
element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } );
element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } );
- equal( $("#log").html(), "2,1,0,keydown,", "Keydown DOWN");
+ equal( logOutput(), "keydown,0,1,2", "Keydown DOWN" );
- log("keydown",true);
+ log( "keydown", true );
element.simulate( "keydown", { keyCode: $.ui.keyCode.UP } );
element.simulate( "keydown", { keyCode: $.ui.keyCode.UP } );
- equal( $("#log").html(), "0,1,keydown,", "Keydown UP");
+ equal( logOutput(), "keydown,1,0", "Keydown UP" );
- log("keydown",true);
+ log( "keydown", true );
element.simulate( "keydown", { keyCode: $.ui.keyCode.LEFT } );
- equal( $("#log").html(), "keydown,", "Keydown LEFT (no effect)");
+ equal( logOutput(), "keydown", "Keydown LEFT (no effect)" );
- log("keydown",true);
+ log( "keydown", true );
element.simulate( "keydown", { keyCode: $.ui.keyCode.RIGHT } );
- equal( $("#log").html(), "keydown,", "Keydown RIGHT (no effect)");
+ equal( logOutput(), "keydown", "Keydown RIGHT (no effect)" );
- log("keydown",true);
+ log( "keydown", true );
element.simulate( "keydown", { keyCode: $.ui.keyCode.PAGE_DOWN } );
- equal( $("#log").html(), "10,keydown,", "Keydown PAGE_DOWN");
+ equal( logOutput(), "keydown,10", "Keydown PAGE_DOWN" );
- log("keydown",true);
+ log( "keydown", true );
element.simulate( "keydown", { keyCode: $.ui.keyCode.PAGE_DOWN } );
- equal( $("#log").html(), "20,keydown,", "Keydown PAGE_DOWN");
+ equal( logOutput(), "keydown,20", "Keydown PAGE_DOWN" );
- log("keydown",true);
+ log( "keydown", true );
element.simulate( "keydown", { keyCode: $.ui.keyCode.PAGE_UP } );
- equal( $("#log").html(), "10,keydown,", "Keydown PAGE_UP");
+ equal( logOutput(), "keydown,10", "Keydown PAGE_UP" );
- log("keydown",true);
+ log( "keydown", true );
element.simulate( "keydown", { keyCode: $.ui.keyCode.PAGE_UP } );
- equal( $("#log").html(), "0,keydown,", "Keydown PAGE_UP");
+ equal( logOutput(), "keydown,0", "Keydown PAGE_UP" );
- log("keydown",true);
+ log( "keydown", true );
element.simulate( "keydown", { keyCode: $.ui.keyCode.PAGE_UP } );
- equal( $("#log").html(), "keydown,", "Keydown PAGE_UP (no effect)");
+ equal( logOutput(), "keydown", "Keydown PAGE_UP (no effect)" );
- log("keydown",true);
+ log( "keydown", true );
element.simulate( "keydown", { keyCode: $.ui.keyCode.END } );
- equal( $("#log").html(), "37,keydown,", "Keydown END");
+ equal( logOutput(), "keydown,37", "Keydown END" );
- log("keydown",true);
+ log( "keydown", true );
element.simulate( "keydown", { keyCode: $.ui.keyCode.PAGE_DOWN } );
- equal( $("#log").html(), "keydown,", "Keydown PAGE_DOWN (no effect)");
+ equal( logOutput(), "keydown", "Keydown PAGE_DOWN (no effect)" );
- log("keydown",true);
+ log( "keydown", true );
element.simulate( "keydown", { keyCode: $.ui.keyCode.HOME } );
- equal( $("#log").html(), "0,keydown,", "Keydown HOME");
+ equal( logOutput(), "keydown,0", "Keydown HOME" );
- log("keydown",true);
+ log( "keydown", true );
element.simulate( "keydown", { keyCode: $.ui.keyCode.ESCAPE } );
- equal( $("#log").html(), "keydown,", "Keydown ESCAPE (no effect)");
+ equal( logOutput(), "keydown", "Keydown ESCAPE (no effect)" );
- log("keydown",true);
+ log( "keydown", true );
element.simulate( "keydown", { keyCode: $.ui.keyCode.ENTER } );
- equal( $("#log").html(), "Aberdeen,keydown,", "Keydown ENTER");
+ equal( logOutput(), "keydown,Aberdeen", "Keydown ENTER" );
});
-asyncTest("handle keyboard navigation on menu with scroll and with submenus", function() {
- expect(14);
- var element = $('#menu4').menu({
- select: function(event, ui) {
- log($(ui.item[0]).text());
+asyncTest( "handle keyboard navigation on menu with scroll and with submenus", function() {
+ expect( 14 );
+ var element = $( "#menu4" ).menu({
+ select: function( event, ui ) {
+ log( $( ui.item[0] ).text() );
},
focus: function( event, ui ) {
- log($(event.target).find(".ui-state-focus").parent().index());
+ log( $( event.target ).find( ".ui-state-focus" ).parent().index());
}
});
- log("keydown",true);
+ log( "keydown", true );
element.one( "menufocus", function( event, ui ) {
element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } );
element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } );
- equal( $("#log").html(), "2,1,keydown,", "Keydown DOWN");
+ equal( logOutput(), "keydown,1,2", "Keydown DOWN" );
setTimeout( menukeyboard1, 50 );
});
element.focus();
-
function menukeyboard1() {
- log("keydown",true);
+ log( "keydown", true );
element.simulate( "keydown", { keyCode: $.ui.keyCode.UP } );
element.simulate( "keydown", { keyCode: $.ui.keyCode.UP } );
- equal( $("#log").html(), "0,1,keydown,", "Keydown UP");
+ equal( logOutput(), "keydown,1,0", "Keydown UP" );
- log("keydown",true);
+ log( "keydown", true );
element.simulate( "keydown", { keyCode: $.ui.keyCode.LEFT } );
- equal( $("#log").html(), "keydown,", "Keydown LEFT (no effect)");
+ equal( logOutput(), "keydown", "Keydown LEFT (no effect)" );
- log("keydown",true);
+ log( "keydown", true );
element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } );
element.simulate( "keydown", { keyCode: $.ui.keyCode.RIGHT } );
setTimeout( function() {
- equal( $("#log").html(), "0,1,keydown,", "Keydown RIGHT (open submenu)");
- }, 50);
+ equal( logOutput(), "keydown,1,0", "Keydown RIGHT (open submenu)" );
+ }, 50 );
setTimeout( menukeyboard2, 50 );
}
function menukeyboard2() {
- log("keydown",true);
+ log( "keydown", true );
element.simulate( "keydown", { keyCode: $.ui.keyCode.LEFT } );
- equal( $("#log").html(), "1,keydown,", "Keydown LEFT (close submenu)");
+ equal( logOutput(), "keydown,1", "Keydown LEFT (close submenu)" );
- //re-open submenu
+ // re-open submenu
element.simulate( "keydown", { keyCode: $.ui.keyCode.RIGHT } );
setTimeout( menukeyboard3, 50 );
}
function menukeyboard3() {
- log("keydown",true);
+ log( "keydown", true );
element.simulate( "keydown", { keyCode: $.ui.keyCode.PAGE_DOWN } );
- equal( $("#log").html(), "10,keydown,", "Keydown PAGE_DOWN");
+ equal( logOutput(), "keydown,10", "Keydown PAGE_DOWN" );
- log("keydown",true);
+ log( "keydown", true );
element.simulate( "keydown", { keyCode: $.ui.keyCode.PAGE_DOWN } );
- equal( $("#log").html(), "20,keydown,", "Keydown PAGE_DOWN");
+ equal( logOutput(), "keydown,20", "Keydown PAGE_DOWN" );
- log("keydown",true);
+ log( "keydown", true );
element.simulate( "keydown", { keyCode: $.ui.keyCode.PAGE_UP } );
- equal( $("#log").html(), "10,keydown,", "Keydown PAGE_UP");
+ equal( logOutput(), "keydown,10", "Keydown PAGE_UP" );
- log("keydown",true);
+ log( "keydown", true );
element.simulate( "keydown", { keyCode: $.ui.keyCode.PAGE_UP } );
- equal( $("#log").html(), "0,keydown,", "Keydown PAGE_UP");
+ equal( logOutput(), "keydown,0", "Keydown PAGE_UP" );
- log("keydown",true);
+ log( "keydown", true );
element.simulate( "keydown", { keyCode: $.ui.keyCode.END } );
- equal( $("#log").html(), "27,keydown,", "Keydown END");
+ equal( logOutput(), "keydown,27", "Keydown END" );
- log("keydown",true);
+ log( "keydown", true );
element.simulate( "keydown", { keyCode: $.ui.keyCode.HOME } );
- equal( $("#log").html(), "0,keydown,", "Keydown HOME");
+ equal( logOutput(), "keydown,0", "Keydown HOME" );
- log("keydown",true);
+ log( "keydown", true );
element.simulate( "keydown", { keyCode: $.ui.keyCode.ESCAPE } );
- equal( $("#log").html(), "1,keydown,", "Keydown ESCAPE (close submenu)");
+ equal( logOutput(), "keydown,1", "Keydown ESCAPE (close submenu)" );
- log("keydown",true);
+ log( "keydown", true );
element.simulate( "keydown", { keyCode: $.ui.keyCode.ENTER } );
setTimeout( menukeyboard4, 50 );
}
function menukeyboard4() {
- equal( $("#log").html(), "0,keydown,", "Keydown ENTER (open submenu)");
+ equal( logOutput(), "keydown,0", "Keydown ENTER (open submenu)" );
- log("keydown",true);
+ log( "keydown", true );
element.simulate( "keydown", { keyCode: $.ui.keyCode.ENTER } );
- equal( $("#log").html(), "Aberdeen,keydown,", "Keydown ENTER (select item)");
+ equal( logOutput(), "keydown,Aberdeen", "Keydown ENTER (select item)" );
start();
}
});
-asyncTest("handle keyboard navigation and mouse click on menu with disabled items", function() {
- expect(6);
- var element = $('#menu6').menu({
- select: function(event, ui) {
- log($(ui.item[0]).text());
+asyncTest( "handle keyboard navigation and mouse click on menu with disabled items", function() {
+ expect( 6 );
+ var element = $( "#menu6" ).menu({
+ select: function( event, ui ) {
+ log( $( ui.item[0] ).text() );
},
focus: function( event, ui ) {
- log($(event.target).find(".ui-state-focus").parent().index());
+ log( $( event.target ).find( ".ui-state-focus" ).parent().index());
}
});
- log("keydown",true);
+ log( "keydown", true );
element.one( "menufocus", function( event, ui ) {
element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } );
element.simulate( "keydown", { keyCode: $.ui.keyCode.ENTER } );
- equal( $("#log").html(), "1,keydown,", "Keydown focus but not select disabled item");
+ equal( logOutput(), "keydown,1", "Keydown focus but not select disabled item" );
setTimeout( menukeyboard1, 50 );
});
element.focus();
-
function menukeyboard1() {
- log("keydown",true);
+ log( "keydown", true );
element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } );
element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } );
element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } );
- equal( $("#log").html(), "4,3,2,keydown,", "Keydown focus disabled item with submenu");
+ equal( logOutput(), "keydown,2,3,4", "Keydown focus disabled item with submenu" );
- log("keydown",true);
+ log( "keydown", true );
element.simulate( "keydown", { keyCode: $.ui.keyCode.LEFT } );
- equal( $("#log").html(), "keydown,", "Keydown LEFT (no effect)");
+ equal( logOutput(), "keydown", "Keydown LEFT (no effect)" );
- log("keydown",true);
+ log( "keydown", true );
element.simulate( "keydown", { keyCode: $.ui.keyCode.RIGHT } );
setTimeout( function() {
- equal( $("#log").html(), "keydown,", "Keydown RIGHT (no effect on disabled sub-menu)");
+ equal( logOutput(), "keydown", "Keydown RIGHT (no effect on disabled sub-menu)" );
- log("keydown",true);
+ log( "keydown", true );
element.simulate( "keydown", { keyCode: $.ui.keyCode.ENTER } );
setTimeout( function() {
- equal( $("#log").html(), "keydown,", "Keydown ENTER (no effect on disabled sub-menu)");
- log("click",true);
+ equal( logOutput(), "keydown", "Keydown ENTER (no effect on disabled sub-menu)" );
+ log( "click", true );
click( element, "1" );
- equal( $("#log").html(), "click,", "Click disabled item (no effect)");
+ equal( logOutput(), "click", "Click disabled item (no effect)" );
start();
- }, 50);
- }, 50);
+ }, 50 );
+ }, 50 );
}
});
-test("handle keyboard navigation with spelling of menu items", function() {
+test( "handle keyboard navigation with spelling of menu items", function() {
expect( 2 );
var element = $( "#menu2" ).menu({
focus: function( event, ui ) {
@@ -573,14 +570,14 @@ test("handle keyboard navigation with spelling of menu items", function() {
element.simulate( "keydown", { keyCode: 65 } );
element.simulate( "keydown", { keyCode: 68 } );
element.simulate( "keydown", { keyCode: 68 } );
- equal( $("#log").html(), "3,1,0,keydown,", "Keydown focus Addyston by spelling the first 3 letters");
+ equal( logOutput(), "keydown,0,1,3", "Keydown focus Addyston by spelling the first 3 letters" );
element.simulate( "keydown", { keyCode: 68 } );
- equal( $("#log").html(), "4,3,1,0,keydown,", "Keydown focus Delphi by repeating the 'd' again");
+ equal( logOutput(), "keydown,0,1,3,4", "Keydown focus Delphi by repeating the 'd' again" );
});
element.focus();
});
-asyncTest("handle page up and page down before the menu has focus", function() {
+asyncTest( "handle page up and page down before the menu has focus", function() {
expect( 1 );
var element = $( "#menu1" ).menu({
focus: function( event, ui ) {
@@ -593,9 +590,9 @@ asyncTest("handle page up and page down before the menu has focus", function() {
element.blur();
setTimeout( function() {
element.simulate( "keydown", { keyCode: $.ui.keyCode.PAGE_UP } );
- equal( $("#log").html(), "0,0,keydown,", "Page Up and Page Down bring initial focus to first item");
+ equal( logOutput(), "keydown,0,0", "Page Up and Page Down bring initial focus to first item" );
start();
- }, 500);
+ }, 500 );
});
-})(jQuery);
+})( jQuery );
diff --git a/tests/unit/menu/menu_methods.js b/tests/unit/menu/menu_methods.js
index c17986816..510ddb1d7 100644
--- a/tests/unit/menu/menu_methods.js
+++ b/tests/unit/menu/menu_methods.js
@@ -1,58 +1,87 @@
-/*
- * menu_methods.js
- */
-(function($) {
+(function( $ ) {
var log = TestHelpers.menu.log,
+ logOutput = TestHelpers.menu.logOutput,
click = TestHelpers.menu.click;
-module("menu: methods");
+module( "menu: methods", {
+ setup: function() {
+ TestHelpers.menu.clearLog();
+ }
+});
test( "enable/disable", function() {
expect( 3 );
- var menu = $( "#menu1" ).menu({
- select: function(event, ui) {
+ var element = $( "#menu1" ).menu({
+ select: function( event, ui ) {
log();
}
});
- menu.menu("disable");
- ok(menu.is(".ui-state-disabled"),"Missing ui-state-disabled class");
- log("click",true);
- click(menu,"1");
- log("afterclick");
- menu.menu("enable");
- ok(menu.not(".ui-state-disabled"),"Has ui-state-disabled class");
- log("click");
- click(menu,"1");
- log("afterclick");
- equal( $("#log").html(), "afterclick,1,click,afterclick,click,", "Click order not valid.");
+ element.menu( "disable" );
+ ok( element.is( ".ui-state-disabled" ), "Missing ui-state-disabled class" );
+ log( "click", true );
+ click( element, "1" );
+ log( "afterclick" );
+ element.menu( "enable" );
+ ok( element.not( ".ui-state-disabled" ), "Has ui-state-disabled class" );
+ log( "click" );
+ click( element, "1" );
+ log( "afterclick" );
+ equal( logOutput(), "click,afterclick,click,1,afterclick", "Click order not valid." );
});
test( "refresh", function() {
expect( 5 );
- var menu = $( "#menu1" ).menu();
- equal(menu.find(".ui-menu-item").length,5,"Incorrect number of menu items");
- menu.append("<li><a href='#'>test item</a></li>").menu("refresh");
- equal(menu.find(".ui-menu-item").length,6,"Incorrect number of menu items");
- menu.find(".ui-menu-item:last").remove().end().menu("refresh");
- equal(menu.find(".ui-menu-item").length,5,"Incorrect number of menu items");
- menu.append("<li>---</li>").menu("refresh");
- equal(menu.find(".ui-menu-item").length,5,"Incorrect number of menu items");
- menu.children(":last").remove().end().menu("refresh");
- equal(menu.find(".ui-menu-item").length,5,"Incorrect number of menu items");
+ var element = $( "#menu1" ).menu();
+ equal( element.find( ".ui-menu-item" ).length, 5, "Incorrect number of menu items" );
+ element.append( "<li><a href='#'>test item</a></li>" ).menu( "refresh" );
+ equal( element.find( ".ui-menu-item" ).length, 6, "Incorrect number of menu items" );
+ element.find( ".ui-menu-item:last" ).remove().end().menu( "refresh" );
+ equal( element.find( ".ui-menu-item" ).length, 5, "Incorrect number of menu items" );
+ element.append( "<li>---</li>" ).menu( "refresh" );
+ equal( element.find( ".ui-menu-item" ).length, 5, "Incorrect number of menu items" );
+ element.children( ":last" ).remove().end().menu( "refresh" );
+ equal( element.find( ".ui-menu-item" ).length, 5, "Incorrect number of menu items" );
});
-test("destroy", function() {
- domEqual("#menu1", function() {
- $("#menu1").menu().menu("destroy");
+// TODO: test focus method
+
+// TODO: test blur method
+
+// TODO: test collapseAll method
+
+// TODO: test collapse method
+
+// TODO: test expand method
+
+// TODO: test next method
+
+// TODO: test prev method
+
+// TODO: test isFirstItem method
+
+// TODO: test isLastItem method
+
+// TODO: test nextPage method
+
+// TODO: test prevPage method
+
+// TODO: test select method
+
+test( "destroy", function() {
+ expect( 4 );
+ domEqual( "#menu1", function() {
+ $( "#menu1" ).menu().menu( "destroy" );
+ });
+ domEqual( "#menu2", function() {
+ $( "#menu2" ).menu().menu( "destroy" );
});
- domEqual("#menu5", function() {
- $("#menu5").menu().menu("destroy");
+ domEqual( "#menu5", function() {
+ $( "#menu5").menu().menu( "destroy" );
});
- domEqual("#menu6", function() {
- $("#menu6").menu().menu("destroy");
+ domEqual( "#menu6", function() {
+ $( "#menu6" ).menu().menu( "destroy"Ā );
});
});
-
-})(jQuery);
+})( jQuery );
diff --git a/tests/unit/menu/menu_options.js b/tests/unit/menu/menu_options.js
index 306f575ea..a8b029201 100644
--- a/tests/unit/menu/menu_options.js
+++ b/tests/unit/menu/menu_options.js
@@ -1,67 +1,112 @@
-/*
- * menu_options.js
- */
-(function($) {
+(function( $ ) {
var log = TestHelpers.menu.log,
+ logOutput = TestHelpers.menu.logOutput,
click = TestHelpers.menu.click;
-module("menu: options");
+module( "menu: options", {
+ setup: function() {
+ TestHelpers.menu.clearLog();
+ }
+});
test( "{ disabled: true }", function() {
expect( 2 );
- var menu = $( "#menu1" ).menu({
+ var element = $( "#menu1" ).menu({
disabled: true,
select: function(event, ui) {
log();
}
});
- ok(menu.is(".ui-state-disabled"),"Missing ui-state-disabled class");
- log("click",true);
- click(menu,"1");
- log("afterclick");
- equal( $("#log").html(), "afterclick,click,", "Click order not valid.");
+ ok( element.hasClass( "ui-state-disabled" ), "Missing ui-state-disabled class" );
+ log( "click", true );
+ click( element, "1" );
+ log( "afterclick" );
+ equal( logOutput(), "click,afterclick", "Click order not valid." );
});
test( "{ disabled: false }", function() {
expect( 2 );
- var menu = $( "#menu1" ).menu({
+ var element = $( "#menu1" ).menu({
disabled: false,
- select: function(event, ui) {
+ select: function( event, ui ) {
log();
}
});
- ok(menu.not(".ui-state-disabled"),"Has ui-state-disabled class");
- log("click",true);
- click(menu,"1");
- log("afterclick");
- equal( $("#log").html(), "afterclick,1,click,", "Click order not valid.");
+ ok( !element.hasClass( "ui-state-disabled" ), "Has ui-state-disabled class" );
+ log( "click", true );
+ click( element, "1" );
+ log( "afterclick" );
+ equal( logOutput(), "click,1,afterclick", "Click order not valid." );
+});
+
+test( "{ icons: default }", function() {
+ expect( 1 );
+ var element = $( "#menu2" ).menu();
+ equal( element.find( ".ui-menu-icon" ).attr( "class" ), "ui-menu-icon ui-icon ui-icon-carat-1-e" );
+});
+
+test( "{ icons: { submenu: 'custom' } }", function() {
+ expect( 1 );
+ var element = $( "#menu2" ).menu({
+ icons: {
+ submenu: "custom-class"
+ }
+ });
+ equal( element.find( ".ui-menu-icon" ).attr( "class" ), "ui-menu-icon ui-icon custom-class" );
});
-test("{ role: 'menu' } ", function () {
- var menu = $('#menu1').menu();
- expect(2 + 5 * $("li", menu).length);
- equal( menu.attr( "role" ), "menu" );
- ok( $("li", menu).length > 0, "number of menu items");
- $("li", menu).each(function(item) {
- ok( $(this).hasClass("ui-menu-item"), "menu item ("+ item + ") class for item");
- equal( $(this).attr("role"), "presentation", "menu item ("+ item + ") role");
- equal( $("a", this).attr("role"), "menuitem", "menu item ("+ item + ") role");
- ok( $("a",this).hasClass("ui-corner-all"), "a element class for menu item ("+ item + ") ");
- equal( $("a",this).attr("tabindex"), "-1", "a element tabindex for menu item ("+ item + ") ");
+// TODO: test menus option
+
+// TODO: test position option
+
+test( "{ role: 'menu' } ", function() {
+ var element = $( "#menu1" ).menu(),
+ items = element.find( "li" );
+ expect( 2 + 5 * items.length );
+ equal( element.attr( "role" ), "menu" );
+ ok( items.length > 0, "number of menu items" );
+ items.each(function( item ) {
+ ok( $( this ).hasClass( "ui-menu-item" ), "menu item ("+ item + ") class for item" );
+ equal( $( this ).attr( "role" ), "presentation", "menu item ("+ item + ") role" );
+ equal( $( "a", this ).attr( "role" ), "menuitem", "menu item ("+ item + ") role" );
+ ok( $( "a", this ).hasClass( "ui-corner-all" ), "a element class for menu item ("+ item + ")" );
+ equal( $( "a", this ).attr( "tabindex" ), "-1", "a element tabindex for menu item ("+ item + ")" );
});
});
-test("{ role: 'listbox' } ", function () {
- var menu = $('#menu1').menu({
- role: "listbox"
+test( "{ role: 'listbox' } ", function() {
+ var element = $( "#menu1" ).menu({
+ role: "listbox"
+ }),
+ items = element.find( "li" );
+ expect( 2 + 5 * items.length );
+ equal( element.attr( "role" ), "listbox" );
+ ok( items.length > 0, "number of menu items" );
+ items.each(function( item ) {
+ ok( $( this ).hasClass( "ui-menu-item" ), "menu item ("+ item + ") class for item" );
+ equal( $( this ).attr( "role" ), "presentation", "menu item ("+ item + ") role" );
+ equal( $( "a", this ).attr( "role" ), "option", "menu item ("+ item + ") role" );
+ ok( $( "a", this ).hasClass( "ui-corner-all" ), "a element class for menu item ("+ item + ")" );
+ equal( $( "a", this ).attr( "tabindex" ), "-1", "a element tabindex for menu item ("+ item + ")" );
});
- expect(2 + $("li", menu).length);
- equal( menu.attr( "role" ), "listbox" );
- ok( ($("li", menu).length > 0 ), "number of menu items");
- $("li", menu).each(function(item) {
- equal( $("a", this).attr("role"), "option", "menu item ("+ item + ") role");
+});
+
+test( "{ role: null }", function() {
+ var element = $( "#menu1" ).menu({
+ role: null
+ }),
+ items = element.find( "li" );
+ expect( 2 + 5 * items.length );
+ strictEqual( element.attr( "role" ), undefined );
+ ok( items.length > 0, "number of menu items" );
+ items.each(function( item ) {
+ ok( $( this ).hasClass( "ui-menu-item" ), "menu item ("+ item + ") class for item" );
+ equal( $( this ).attr( "role" ), "presentation", "menu item ("+ item + ") role" );
+ equal( $( "a", this ).attr( "role" ), undefined, "menu item ("+ item + ") role" );
+ ok( $( "a", this ).hasClass( "ui-corner-all" ), "a element class for menu item ("+ item + ")" );
+ equal( $( "a", this ).attr( "tabindex" ), "-1", "a element tabindex for menu item ("+ item + ")" );
});
});
-})(jQuery);
+})( jQuery );
diff --git a/tests/unit/menu/menu_test_helpers.js b/tests/unit/menu/menu_test_helpers.js
index a576af19a..b6c09ad7a 100644
--- a/tests/unit/menu/menu_test_helpers.js
+++ b/tests/unit/menu/menu_test_helpers.js
@@ -1,16 +1,31 @@
+(function() {
+
+var lastItem,
+ log = [];
+
TestHelpers.menu = {
log: function( message, clear ) {
if ( clear ) {
- $( "#log" ).empty();
+ log.length = 0;
}
if ( message === undefined ) {
- message = $( "#log" ).data( "lastItem" );
+ message = lastItem;
}
- $( "#log" ).prepend( $.trim( message ) + "," );
+ log.push( $.trim( message ) );
+ },
+
+ logOutput: function() {
+ return log.join( "," );
+ },
+
+ clearLog: function() {
+ log.length = 0;
},
click: function( menu, item ) {
- $( "#log" ).data( "lastItem", item );
+ lastItem = item;
menu.children( ":eq(" + item + ")" ).find( "a:first" ).trigger( "click" );
}
-}; \ No newline at end of file
+};
+
+})();
diff --git a/tests/unit/position/position_core.js b/tests/unit/position/position_core.js
index 4a2240311..3b749a218 100644
--- a/tests/unit/position/position_core.js
+++ b/tests/unit/position/position_core.js
@@ -16,7 +16,7 @@ module( "position", {
}
});
-TestHelpers.testJshint( "ui.position" );
+TestHelpers.testJshint( "position" );
test( "my, at, of", function() {
expect( 4 );
diff --git a/tests/unit/position/position_deprecated.js b/tests/unit/position/position_deprecated.js
index 9a3164246..789d4e608 100644
--- a/tests/unit/position/position_deprecated.js
+++ b/tests/unit/position/position_deprecated.js
@@ -1,6 +1,7 @@
(function( $ ) {
test( "offset", function() {
+ expect( 3 );
$( "#elx" ).position({
my: "left top",
at: "left bottom",
diff --git a/tests/unit/progressbar/progressbar_options.js b/tests/unit/progressbar/progressbar_options.js
index f050fc5da..fd5988ebd 100644
--- a/tests/unit/progressbar/progressbar_options.js
+++ b/tests/unit/progressbar/progressbar_options.js
@@ -1,6 +1,7 @@
module( "progressbar: options" );
test( "{ value : 0 }, default", function() {
+ expect( 1 );
$( "#progressbar" ).progressbar();
equal( 0, $( "#progressbar" ).progressbar( "value" ) );
});
@@ -28,6 +29,7 @@ test( "value: visibility of valueDiv", function() {
});
test( "{ value : 5 }", function() {
+ expect( 1 );
$( "#progressbar" ).progressbar({
value: 5
});
@@ -35,6 +37,7 @@ test( "{ value : 5 }", function() {
});
test( "{ value : -5 }", function() {
+ expect( 1 );
$( "#progressbar" ).progressbar({
value: -5
});
@@ -42,6 +45,7 @@ test( "{ value : -5 }", function() {
});
test( "{ value : 105 }", function() {
+ expect( 1 );
$( "#progressbar" ).progressbar({
value: 105
});
@@ -49,6 +53,7 @@ test( "{ value : 105 }", function() {
});
test( "{ max : 5, value : 10 }", function() {
+ expect( 1 );
$("#progressbar").progressbar({
max: 5,
value: 10
diff --git a/tests/unit/spinner/spinner.html b/tests/unit/spinner/spinner.html
index b7f4a532a..1d09bbc38 100644
--- a/tests/unit/spinner/spinner.html
+++ b/tests/unit/spinner/spinner.html
@@ -5,7 +5,7 @@
<title>jQuery UI Spinner Test Suite</title>
<script src="../../jquery.js"></script>
- <script src="../../../external/jquery.mousewheel-3.0.4.js"></script>
+ <script src="../../../external/jquery.mousewheel.js"></script>
<script src="../../../external/globalize.js"></script>
<script src="../../../external/globalize.culture.ja-JP.js"></script>
<link rel="stylesheet" href="../../../external/qunit.css">
diff --git a/tests/unit/spinner/spinner_common.js b/tests/unit/spinner/spinner_common.js
index 4f05b1e63..b494e3ca3 100644
--- a/tests/unit/spinner/spinner_common.js
+++ b/tests/unit/spinner/spinner_common.js
@@ -2,6 +2,10 @@ TestHelpers.commonWidgetTests( "spinner", {
defaults: {
culture: null,
disabled: false,
+ icons: {
+ down: "ui-icon-triangle-1-s",
+ up: "ui-icon-triangle-1-n"
+ },
incremental: true,
max: null,
min: null,
diff --git a/tests/unit/spinner/spinner_events.js b/tests/unit/spinner/spinner_events.js
index 72b185528..64f510de0 100644
--- a/tests/unit/spinner/spinner_events.js
+++ b/tests/unit/spinner/spinner_events.js
@@ -220,6 +220,7 @@ asyncTest( "change", function() {
shouldChange( false, "min, value not changed" );
element.spinner( "option", "min", 200 );
+ shouldChange( true, "cleanup" );
start();
});
});
diff --git a/tests/unit/spinner/spinner_options.js b/tests/unit/spinner/spinner_options.js
index e21852630..1f6646a33 100644
--- a/tests/unit/spinner/spinner_options.js
+++ b/tests/unit/spinner/spinner_options.js
@@ -6,6 +6,25 @@ module( "spinner: options" );
// culture is tested after numberFormat, since it depends on numberFormat
+test( "icons: default ", function() {
+ expect( 2 );
+ var element = $( "#spin" ).val( 0 ).spinner().spinner( "widget" );
+ equal( element.find( ".ui-icon:first" ).attr( "class" ), "ui-icon ui-icon-triangle-1-n" );
+ equal( element.find( ".ui-icon:last" ).attr( "class" ), "ui-icon ui-icon-triangle-1-s" );
+});
+
+test( "icons: custom ", function() {
+ expect( 2 );
+ var element = $( "#spin" ).val( 0 ).spinner({
+ icons: {
+ down: "custom-down",
+ up: "custom-up"
+ }
+ }).spinner( "widget" );
+ equal( element.find( ".ui-icon:first" ).attr( "class" ), "ui-icon custom-up" );
+ equal( element.find( ".ui-icon:last" ).attr( "class" ), "ui-icon custom-down" );
+});
+
test( "incremental, false", function() {
expect( 100 );
diff --git a/tests/unit/tabs/tabs_core.js b/tests/unit/tabs/tabs_core.js
index fb3c306e6..f1a2d72c1 100644
--- a/tests/unit/tabs/tabs_core.js
+++ b/tests/unit/tabs/tabs_core.js
@@ -63,8 +63,529 @@ test( "aria-controls", function() {
});
test( "accessibility", function() {
- // TODO: add tests
- expect( 0 );
+ expect( 49 );
+ var element = $( "#tabs1" ).tabs({
+ active: 1,
+ disabled: [ 2 ]
+ }),
+ tabs = element.find( ".ui-tabs-nav li" ),
+ anchors = tabs.find( ".ui-tabs-anchor" ),
+ panels = element.find( ".ui-tabs-panel" );
+
+ equal( element.find( ".ui-tabs-nav" ).attr( "role" ), "tablist", "tablist role" );
+ tabs.each(function( index ) {
+ var tab = tabs.eq( index ),
+ anchor = anchors.eq( index ),
+ anchorId = anchor.attr( "id" ),
+ panel = panels.eq( index );
+ equal( tab.attr( "role" ), "tab", "tab " + index + " role" );
+ equal( tab.attr( "aria-labelledby" ), anchorId, "tab " + index + " aria-labelledby" );
+ equal( anchor.attr( "role" ), "presentation", "anchor " + index + " role" );
+ equal( anchor.attr( "tabindex" ), -1, "anchor " + index + " tabindex" );
+ equal( panel.attr( "role" ), "tabpanel", "panel " + index + " role" );
+ equal( panel.attr( "aria-labelledby" ), anchorId, "panel " + index + " aria-labelledby" );
+ });
+
+ equal( tabs.eq( 1 ).attr( "aria-selected" ), "true", "active tab has aria-selected=true" );
+ equal( tabs.eq( 1 ).attr( "tabindex" ), 0, "active tab has tabindex=0" );
+ equal( tabs.eq( 1 ).attr( "aria-disabled" ), null, "enabled tab does not have aria-disabled" );
+ equal( panels.eq( 1 ).attr( "aria-expanded" ), "true", "active panel has aria-expanded=true" );
+ equal( panels.eq( 1 ).attr( "aria-hidden" ), "false", "active panel has aria-hidden=false" );
+ equal( tabs.eq( 0 ).attr( "aria-selected" ), "false", "inactive tab has aria-selected=false" );
+ equal( tabs.eq( 0 ).attr( "tabindex" ), -1, "inactive tab has tabindex=-1" );
+ equal( tabs.eq( 0 ).attr( "aria-disabled" ), null, "enabled tab does not have aria-disabled" );
+ equal( panels.eq( 0 ).attr( "aria-expanded" ), "false", "inactive panel has aria-expanded=false" );
+ equal( panels.eq( 0 ).attr( "aria-hidden" ), "true", "inactive panel has aria-hidden=true" );
+ equal( tabs.eq( 2 ).attr( "aria-selected" ), "false", "inactive tab has aria-selected=false" );
+ equal( tabs.eq( 2 ).attr( "tabindex" ), -1, "inactive tab has tabindex=-1" );
+ equal( tabs.eq( 2 ).attr( "aria-disabled" ), "true", "disabled tab has aria-disabled=true" );
+ equal( panels.eq( 2 ).attr( "aria-expanded" ), "false", "inactive panel has aria-expanded=false" );
+ equal( panels.eq( 2 ).attr( "aria-hidden" ), "true", "inactive panel has aria-hidden=true" );
+
+ element.tabs( "option", "active", 0 );
+ equal( tabs.eq( 0 ).attr( "aria-selected" ), "true", "active tab has aria-selected=true" );
+ equal( tabs.eq( 0 ).attr( "tabindex" ), 0, "active tab has tabindex=0" );
+ equal( tabs.eq( 0 ).attr( "aria-disabled" ), null, "enabled tab does not have aria-disabled" );
+ equal( panels.eq( 0 ).attr( "aria-expanded" ), "true", "active panel has aria-expanded=true" );
+ equal( panels.eq( 0 ).attr( "aria-hidden" ), "false", "active panel has aria-hidden=false" );
+ equal( tabs.eq( 1 ).attr( "aria-selected" ), "false", "inactive tab has aria-selected=false" );
+ equal( tabs.eq( 1 ).attr( "tabindex" ), -1, "inactive tab has tabindex=-1" );
+ equal( tabs.eq( 1 ).attr( "aria-disabled" ), null, "enabled tab does not have aria-disabled" );
+ equal( panels.eq( 1 ).attr( "aria-expanded" ), "false", "inactive panel has aria-expanded=false" );
+ equal( panels.eq( 1 ).attr( "aria-hidden" ), "true", "inactive panel has aria-hidden=true" );
+ equal( tabs.eq( 2 ).attr( "aria-selected" ), "false", "inactive tab has aria-selected=false" );
+ equal( tabs.eq( 2 ).attr( "tabindex" ), -1, "inactive tab has tabindex=-1" );
+ equal( tabs.eq( 2 ).attr( "aria-disabled" ), "true", "disabled tab has aria-disabled=true" );
+ equal( panels.eq( 2 ).attr( "aria-expanded" ), "false", "inactive panel has aria-expanded=false" );
+ equal( panels.eq( 2 ).attr( "aria-hidden" ), "true", "inactive panel has aria-hidden=true" );
+});
+
+asyncTest( "accessibility - ajax", function() {
+ expect( 4 );
+ var element = $( "#tabs2" ).tabs(),
+ tab = element.find( ".ui-tabs-nav li" ).eq( 3 ),
+ panel = $( "#custom-id" );
+
+ equal( panel.attr( "aria-live" ), "polite", "remote panel has aria-live" );
+ equal( panel.attr( "aria-busy" ), null, "does not have aria-busy on init" );
+ element.tabs( "option", "active", 3 );
+ equal( panel.attr( "aria-busy" ), "true", "panel has aria-busy during load" );
+ element.one( "tabsload", function() {
+ setTimeout(function() {
+ equal( panel.attr( "aria-busy" ), null, "panel does not have aria-busy after load" );
+ start();
+ }, 1 );
+ });
+});
+
+asyncTest( "keyboard support - LEFT, RIGHT, UP, DOWN, HOME, END, SPACE, ENTER", function() {
+ expect( 92 );
+ var element = $( "#tabs1" ).tabs({
+ collapsible: true
+ }),
+ tabs = element.find( ".ui-tabs-nav li" ),
+ panels = element.find( ".ui-tabs-panel" ),
+ keyCode = $.ui.keyCode;
+
+ element.data( "tabs" ).delay = 50;
+
+ equal( tabs.filter( ".ui-state-focus" ).length, 0, "no tabs focused on init" );
+ tabs.eq( 0 ).simulate( "focus" );
+
+ // down, right, down (wrap), up (wrap)
+ function step1() {
+ ok( tabs.eq( 0 ).is( ".ui-state-focus" ), "first tab has focus" );
+ equal( tabs.eq( 0 ).attr( "aria-selected" ), "true", "first tab has aria-selected=true" );
+ ok( panels.eq( 0 ).is( ":visible" ), "first panel is visible" );
+
+ tabs.eq( 0 ).simulate( "keydown", { keyCode: keyCode.DOWN } );
+ ok( tabs.eq( 1 ).is( ".ui-state-focus" ), "DOWN moves focus to next tab" );
+ ok( !tabs.eq( 0 ).is( ".ui-state-focus" ), "first tab is no longer focused" );
+ equal( tabs.eq( 1 ).attr( "aria-selected" ), "true", "second tab has aria-selected=true" );
+ equal( tabs.eq( 0 ).attr( "aria-selected" ), "false", "first tab has aria-selected=false" );
+ ok( panels.eq( 1 ).is( ":hidden" ), "second panel is still hidden" );
+ equal( panels.eq( 1 ).attr( "aria-expanded" ), "false", "second panel has aria-expanded=false" );
+ equal( panels.eq( 1 ).attr( "aria-hidden" ), "true", "second panel has aria-hidden=true" );
+ ok( panels.eq( 0 ).is( ":visible" ), "first panel is still visible" );
+ equal( panels.eq( 0 ).attr( "aria-expanded" ), "true", "first panel has aria-expanded=true" );
+ equal( panels.eq( 0 ).attr( "aria-hidden" ), "false", "first panel has aria-hidden=false" );
+
+ tabs.eq( 1 ).simulate( "keydown", { keyCode: keyCode.RIGHT } );
+ ok( tabs.eq( 2 ).is( ".ui-state-focus" ), "RIGHT moves focus to next tab" );
+ equal( tabs.eq( 2 ).attr( "aria-selected" ), "true", "third tab has aria-selected=true" );
+ equal( tabs.eq( 1 ).attr( "aria-selected" ), "false", "second tab has aria-selected=false" );
+ ok( panels.eq( 2 ).is( ":hidden" ), "third panel is still hidden" );
+ equal( panels.eq( 2 ).attr( "aria-expanded" ), "false", "third panel has aria-expanded=false" );
+ equal( panels.eq( 2 ).attr( "aria-hidden" ), "true", "third panel has aria-hidden=true" );
+ ok( panels.eq( 0 ).is( ":visible" ), "first panel is still visible" );
+ equal( panels.eq( 0 ).attr( "aria-expanded" ), "true", "first panel has aria-expanded=true" );
+ equal( panels.eq( 0 ).attr( "aria-hidden" ), "false", "first panel has aria-hidden=false" );
+
+ tabs.eq( 2 ).simulate( "keydown", { keyCode: keyCode.DOWN } );
+ ok( tabs.eq( 0 ).is( ".ui-state-focus" ), "DOWN wraps focus to first tab" );
+ equal( tabs.eq( 0 ).attr( "aria-selected" ), "true", "first tab has aria-selected=true" );
+ equal( tabs.eq( 2 ).attr( "aria-selected" ), "false", "third tab has aria-selected=false" );
+ ok( panels.eq( 0 ).is( ":visible" ), "first panel is still visible" );
+ equal( panels.eq( 0 ).attr( "aria-expanded" ), "true", "first panel has aria-expanded=true" );
+ equal( panels.eq( 0 ).attr( "aria-hidden" ), "false", "first panel has aria-hidden=false" );
+
+ tabs.eq( 0 ).simulate( "keydown", { keyCode: keyCode.UP } );
+ ok( tabs.eq( 2 ).is( ".ui-state-focus" ), "UP wraps focus to last tab" );
+ equal( tabs.eq( 2 ).attr( "aria-selected" ), "true", "third tab has aria-selected=true" );
+ equal( tabs.eq( 0 ).attr( "aria-selected" ), "false", "first tab has aria-selected=false" );
+ ok( panels.eq( 2 ).is( ":hidden" ), "third panel is still hidden" );
+ equal( panels.eq( 2 ).attr( "aria-expanded" ), "false", "third panel has aria-expanded=false" );
+ equal( panels.eq( 2 ).attr( "aria-hidden" ), "true", "third panel has aria-hidden=true" );
+ ok( panels.eq( 0 ).is( ":visible" ), "first panel is still visible" );
+ equal( panels.eq( 0 ).attr( "aria-expanded" ), "true", "first panel has aria-expanded=true" );
+ equal( panels.eq( 0 ).attr( "aria-hidden" ), "false", "first panel has aria-hidden=false" );
+
+ setTimeout( step2, 100 );
+ }
+
+ // left, home, space
+ function step2() {
+ equal( tabs.eq( 2 ).attr( "aria-selected" ), "true", "third tab has aria-selected=true" );
+ equal( tabs.eq( 0 ).attr( "aria-selected" ), "false", "first tab has aria-selected=false" );
+ ok( panels.eq( 2 ).is( ":visible" ), "third panel is visible" );
+ equal( panels.eq( 2 ).attr( "aria-expanded" ), "true", "third panel has aria-expanded=true" );
+ equal( panels.eq( 2 ).attr( "aria-hidden" ), "false", "third panel has aria-hidden=false" );
+ ok( panels.eq( 0 ).is( ":hidden" ), "first panel is hidden" );
+ equal( panels.eq( 0 ).attr( "aria-expanded" ), "false", "first panel has aria-expanded=false" );
+ equal( panels.eq( 0 ).attr( "aria-hidden" ), "true", "first panel has aria-hidden=true" );
+
+ tabs.eq( 2 ).simulate( "keydown", { keyCode: keyCode.LEFT } );
+ ok( tabs.eq( 1 ).is( ".ui-state-focus" ), "LEFT moves focus to previous tab" );
+ equal( tabs.eq( 1 ).attr( "aria-selected" ), "true", "second tab has aria-selected=true" );
+ equal( tabs.eq( 2 ).attr( "aria-selected" ), "false", "third tab has aria-selected=false" );
+ ok( panels.eq( 1 ).is( ":hidden" ), "second panel is still hidden" );
+ equal( panels.eq( 1 ).attr( "aria-expanded" ), "false", "second panel has aria-expanded=false" );
+ equal( panels.eq( 1 ).attr( "aria-hidden" ), "true", "second panel has aria-hidden=true" );
+ ok( panels.eq( 2 ).is( ":visible" ), "third panel is still visible" );
+ equal( panels.eq( 2 ).attr( "aria-expanded" ), "true", "third panel has aria-expanded=true" );
+ equal( panels.eq( 2 ).attr( "aria-hidden" ), "false", "third panel has aria-hidden=false" );
+
+ tabs.eq( 1 ).simulate( "keydown", { keyCode: keyCode.HOME } );
+ ok( tabs.eq( 0 ).is( ".ui-state-focus" ), "HOME moves focus to first tab" );
+ equal( tabs.eq( 0 ).attr( "aria-selected" ), "true", "first tab has aria-selected=true" );
+ equal( tabs.eq( 1 ).attr( "aria-selected" ), "false", "second tab has aria-selected=false" );
+ ok( panels.eq( 0 ).is( ":hidden" ), "first panel is still hidden" );
+ equal( panels.eq( 0 ).attr( "aria-expanded" ), "false", "first panel has aria-expanded=false" );
+ equal( panels.eq( 0 ).attr( "aria-hidden" ), "true", "first panel has aria-hidden=true" );
+ ok( panels.eq( 2 ).is( ":visible" ), "third panel is still visible" );
+ equal( panels.eq( 2 ).attr( "aria-expanded" ), "true", "third panel has aria-expanded=true" );
+ equal( panels.eq( 2 ).attr( "aria-hidden" ), "false", "third panel has aria-hidden=false" );
+
+ // SPACE activates, cancels delay
+ tabs.eq( 0 ).simulate( "keydown", { keyCode: keyCode.SPACE } );
+ setTimeout( step3, 1 );
+ }
+
+ // end, enter
+ function step3() {
+ equal( tabs.eq( 0 ).attr( "aria-selected" ), "true", "first tab has aria-selected=true" );
+ equal( tabs.eq( 2 ).attr( "aria-selected" ), "false", "third tab has aria-selected=false" );
+ ok( panels.eq( 0 ).is( ":visible" ), "first panel is visible" );
+ equal( panels.eq( 0 ).attr( "aria-expanded" ), "true", "first panel has aria-expanded=true" );
+ equal( panels.eq( 0 ).attr( "aria-hidden" ), "false", "first panel has aria-hidden=false" );
+ ok( panels.eq( 2 ).is( ":hidden" ), "third panel is hidden" );
+ equal( panels.eq( 2 ).attr( "aria-expanded" ), "false", "third panel has aria-expanded=false" );
+ equal( panels.eq( 2 ).attr( "aria-hidden" ), "true", "third panel has aria-hidden=true" );
+
+ tabs.eq( 0 ).simulate( "keydown", { keyCode: keyCode.END } );
+ ok( tabs.eq( 2 ).is( ".ui-state-focus" ), "END moves focus to last tab" );
+ equal( tabs.eq( 2 ).attr( "aria-selected" ), "true", "third tab has aria-selected=true" );
+ equal( tabs.eq( 0 ).attr( "aria-selected" ), "false", "first tab has aria-selected=false" );
+ ok( panels.eq( 2 ).is( ":hidden" ), "third panel is still hidden" );
+ equal( panels.eq( 2 ).attr( "aria-expanded" ), "false", "third panel has aria-expanded=false" );
+ equal( panels.eq( 2 ).attr( "aria-hidden" ), "true", "third panel has aria-hidden=true" );
+ ok( panels.eq( 0 ).is( ":visible" ), "first panel is still visible" );
+ equal( panels.eq( 0 ).attr( "aria-expanded" ), "true", "first panel has aria-expanded=true" );
+ equal( panels.eq( 0 ).attr( "aria-hidden" ), "false", "first panel has aria-hidden=false" );
+
+ // ENTER activates, cancels delay
+ tabs.eq( 0 ).simulate( "keydown", { keyCode: keyCode.ENTER } );
+ setTimeout( step4, 1 );
+ }
+
+ // enter (collapse)
+ function step4() {
+ equal( tabs.eq( 2 ).attr( "aria-selected" ), "true", "third tab has aria-selected=true" );
+ ok( panels.eq( 2 ).is( ":visible" ), "third panel is visible" );
+ equal( panels.eq( 2 ).attr( "aria-expanded" ), "true", "third panel has aria-expanded=true" );
+ equal( panels.eq( 2 ).attr( "aria-hidden" ), "false", "third panel has aria-hidden=false" );
+ ok( panels.eq( 0 ).is( ":hidden" ), "first panel is hidden" );
+ equal( panels.eq( 0 ).attr( "aria-expanded" ), "false", "first panel has aria-expanded=false" );
+ equal( panels.eq( 0 ).attr( "aria-hidden" ), "true", "first panel has aria-hidden=true" );
+
+ // ENTER collapses if active
+ tabs.eq( 2 ).simulate( "keydown", { keyCode: keyCode.ENTER } );
+ equal( tabs.eq( 2 ).attr( "aria-selected" ), "false", "third tab has aria-selected=false" );
+ ok( panels.eq( 2 ).is( ":hidden" ), "third panel is hidden" );
+ equal( panels.eq( 2 ).attr( "aria-expanded" ), "false", "third panel has aria-expanded=false" );
+ equal( panels.eq( 2 ).attr( "aria-hidden" ), "true", "third panel has aria-hidden=true" );
+
+ // support: Firefox 12
+ // Firefox <13 passes arguments so we can't use setTimeout( start, 1 )
+ setTimeout(function() {
+ start();
+ }, 1 );
+ }
+
+ setTimeout( step1, 1 );
+});
+
+asyncTest( "keyboard support - CTRL navigation", function() {
+ expect( 115 );
+ var element = $( "#tabs1" ).tabs(),
+ tabs = element.find( ".ui-tabs-nav li" ),
+ panels = element.find( ".ui-tabs-panel" ),
+ keyCode = $.ui.keyCode;
+
+ element.data( "tabs" ).delay = 50;
+
+ equal( tabs.filter( ".ui-state-focus" ).length, 0, "no tabs focused on init" );
+ tabs.eq( 0 ).simulate( "focus" );
+
+ // down
+ function step1() {
+ ok( tabs.eq( 0 ).is( ".ui-state-focus" ), "first tab has focus" );
+ equal( tabs.eq( 0 ).attr( "aria-selected" ), "true", "first tab has aria-selected=true" );
+ ok( panels.eq( 0 ).is( ":visible" ), "first panel is visible" );
+
+ tabs.eq( 0 ).simulate( "keydown", { keyCode: keyCode.DOWN, ctrlKey: true } );
+ ok( tabs.eq( 1 ).is( ".ui-state-focus" ), "DOWN moves focus to next tab" );
+ ok( !tabs.eq( 0 ).is( ".ui-state-focus" ), "first tab is no longer focused" );
+ equal( tabs.eq( 1 ).attr( "aria-selected" ), "false", "second tab has aria-selected=false" );
+ equal( tabs.eq( 0 ).attr( "aria-selected" ), "true", "first tab has aria-selected=true" );
+ ok( panels.eq( 1 ).is( ":hidden" ), "second panel is still hidden" );
+ equal( panels.eq( 1 ).attr( "aria-expanded" ), "false", "second panel has aria-expanded=false" );
+ equal( panels.eq( 1 ).attr( "aria-hidden" ), "true", "second panel has aria-hidden=true" );
+ ok( panels.eq( 0 ).is( ":visible" ), "first panel is still visible" );
+ equal( panels.eq( 0 ).attr( "aria-expanded" ), "true", "first panel has aria-expanded=true" );
+ equal( panels.eq( 0 ).attr( "aria-hidden" ), "false", "first panel has aria-hidden=false" );
+
+ setTimeout( step2, 100 );
+ }
+
+ // right
+ function step2() {
+ equal( tabs.eq( 0 ).attr( "aria-selected" ), "true", "first tab has aria-selected=true" );
+ ok( panels.eq( 0 ).is( ":visible" ), "first panel is visible" );
+ equal( panels.eq( 0 ).attr( "aria-expanded" ), "true", "first panel has aria-expanded=true" );
+ equal( panels.eq( 0 ).attr( "aria-hidden" ), "false", "first panel has aria-hidden=false" );
+ ok( panels.eq( 1 ).is( ":hidden" ), "second panel is hidden" );
+ equal( panels.eq( 1 ).attr( "aria-expanded" ), "false", "second panel has aria-expanded=false" );
+ equal( panels.eq( 1 ).attr( "aria-hidden" ), "true", "second panel has aria-hidden=true" );
+
+ tabs.eq( 1 ).simulate( "keydown", { keyCode: keyCode.RIGHT, ctrlKey: true } );
+ ok( tabs.eq( 2 ).is( ".ui-state-focus" ), "RIGHT moves focus to next tab" );
+ equal( tabs.eq( 2 ).attr( "aria-selected" ), "false", "third tab has aria-selected=false" );
+ equal( tabs.eq( 0 ).attr( "aria-selected" ), "true", "first tab has aria-selected=true" );
+ ok( panels.eq( 2 ).is( ":hidden" ), "third panel is still hidden" );
+ equal( panels.eq( 2 ).attr( "aria-expanded" ), "false", "third panel has aria-expanded=false" );
+ equal( panels.eq( 2 ).attr( "aria-hidden" ), "true", "third panel has aria-hidden=true" );
+ ok( panels.eq( 0 ).is( ":visible" ), "first panel is still visible" );
+ equal( panels.eq( 0 ).attr( "aria-expanded" ), "true", "first panel has aria-expanded=true" );
+ equal( panels.eq( 0 ).attr( "aria-hidden" ), "false", "first panel has aria-hidden=false" );
+
+ setTimeout( step3, 100 );
+ }
+
+ // down (wrap)
+ function step3() {
+ equal( tabs.eq( 0 ).attr( "aria-selected" ), "true", "first tab has aria-selected=true" );
+ ok( panels.eq( 0 ).is( ":visible" ), "first panel is visible" );
+ equal( panels.eq( 0 ).attr( "aria-expanded" ), "true", "first panel has aria-expanded=true" );
+ equal( panels.eq( 0 ).attr( "aria-hidden" ), "false", "first panel has aria-hidden=false" );
+ ok( panels.eq( 2 ).is( ":hidden" ), "third panel is hidden" );
+ equal( panels.eq( 2 ).attr( "aria-expanded" ), "false", "third panel has aria-expanded=false" );
+ equal( panels.eq( 2 ).attr( "aria-hidden" ), "true", "third panel has aria-hidden=true" );
+
+ tabs.eq( 2 ).simulate( "keydown", { keyCode: keyCode.DOWN, ctrlKey: true } );
+ ok( tabs.eq( 0 ).is( ".ui-state-focus" ), "DOWN wraps focus to first tab" );
+ equal( tabs.eq( 0 ).attr( "aria-selected" ), "true", "first tab has aria-selected=true" );
+ ok( panels.eq( 0 ).is( ":visible" ), "first panel is still visible" );
+ equal( panels.eq( 0 ).attr( "aria-expanded" ), "true", "first panel has aria-expanded=true" );
+ equal( panels.eq( 0 ).attr( "aria-hidden" ), "false", "first panel has aria-hidden=false" );
+
+ setTimeout( step4, 100 );
+ }
+
+ // up (wrap)
+ function step4() {
+ equal( tabs.eq( 0 ).attr( "aria-selected" ), "true", "first tab has aria-selected=true" );
+ ok( panels.eq( 0 ).is( ":visible" ), "first panel is visible" );
+ equal( panels.eq( 0 ).attr( "aria-expanded" ), "true", "first panel has aria-expanded=true" );
+ equal( panels.eq( 0 ).attr( "aria-hidden" ), "false", "first panel has aria-hidden=false" );
+
+ tabs.eq( 0 ).simulate( "keydown", { keyCode: keyCode.UP, ctrlKey: true } );
+ ok( tabs.eq( 2 ).is( ".ui-state-focus" ), "UP wraps focus to last tab" );
+ equal( tabs.eq( 2 ).attr( "aria-selected" ), "false", "third tab has aria-selected=false" );
+ equal( tabs.eq( 0 ).attr( "aria-selected" ), "true", "first tab has aria-selected=true" );
+ ok( panels.eq( 2 ).is( ":hidden" ), "third panel is still hidden" );
+ equal( panels.eq( 2 ).attr( "aria-expanded" ), "false", "third panel has aria-expanded=false" );
+ equal( panels.eq( 2 ).attr( "aria-hidden" ), "true", "third panel has aria-hidden=true" );
+ ok( panels.eq( 0 ).is( ":visible" ), "first panel is still visible" );
+ equal( panels.eq( 0 ).attr( "aria-expanded" ), "true", "first panel has aria-expanded=true" );
+ equal( panels.eq( 0 ).attr( "aria-hidden" ), "false", "first panel has aria-hidden=false" );
+
+ setTimeout( step5, 100 );
+ }
+
+ // left
+ function step5() {
+ equal( tabs.eq( 0 ).attr( "aria-selected" ), "true", "first tab has aria-selected=true" );
+ ok( panels.eq( 0 ).is( ":visible" ), "first panel is visible" );
+ equal( panels.eq( 0 ).attr( "aria-expanded" ), "true", "first panel has aria-expanded=true" );
+ equal( panels.eq( 0 ).attr( "aria-hidden" ), "false", "first panel has aria-hidden=false" );
+ ok( panels.eq( 2 ).is( ":hidden" ), "third panel is hidden" );
+ equal( panels.eq( 2 ).attr( "aria-expanded" ), "false", "third panel has aria-expanded=false" );
+ equal( panels.eq( 2 ).attr( "aria-hidden" ), "true", "third panel has aria-hidden=true" );
+
+ tabs.eq( 2 ).simulate( "keydown", { keyCode: keyCode.LEFT, ctrlKey: true } );
+ ok( tabs.eq( 1 ).is( ".ui-state-focus" ), "LEFT moves focus to previous tab" );
+ equal( tabs.eq( 1 ).attr( "aria-selected" ), "false", "second tab has aria-selected=false" );
+ equal( tabs.eq( 0 ).attr( "aria-selected" ), "true", "first tab has aria-selected=true" );
+ ok( panels.eq( 1 ).is( ":hidden" ), "second panel is still hidden" );
+ equal( panels.eq( 1 ).attr( "aria-expanded" ), "false", "second panel has aria-expanded=false" );
+ equal( panels.eq( 1 ).attr( "aria-hidden" ), "true", "second panel has aria-hidden=true" );
+ ok( panels.eq( 0 ).is( ":visible" ), "first panel is still visible" );
+ equal( panels.eq( 0 ).attr( "aria-expanded" ), "true", "first panel has aria-expanded=true" );
+ equal( panels.eq( 0 ).attr( "aria-hidden" ), "false", "first panel has aria-hidden=false" );
+
+ setTimeout( step6, 100 );
+ }
+
+ // home
+ function step6() {
+ equal( tabs.eq( 0 ).attr( "aria-selected" ), "true", "first tab has aria-selected=true" );
+ ok( panels.eq( 0 ).is( ":visible" ), "first panel is visible" );
+ equal( panels.eq( 0 ).attr( "aria-expanded" ), "true", "first panel has aria-expanded=true" );
+ equal( panels.eq( 0 ).attr( "aria-hidden" ), "false", "first panel has aria-hidden=false" );
+ ok( panels.eq( 1 ).is( ":hidden" ), "second panel is hidden" );
+ equal( panels.eq( 1 ).attr( "aria-expanded" ), "false", "second panel has aria-expanded=false" );
+ equal( panels.eq( 1 ).attr( "aria-hidden" ), "true", "second panel has aria-hidden=true" );
+
+ tabs.eq( 1 ).simulate( "keydown", { keyCode: keyCode.HOME, ctrlKey: true } );
+ ok( tabs.eq( 0 ).is( ".ui-state-focus" ), "HOME moves focus to first tab" );
+ equal( tabs.eq( 0 ).attr( "aria-selected" ), "true", "first tab has aria-selected=true" );
+ equal( tabs.eq( 1 ).attr( "aria-selected" ), "false", "second tab has aria-selected=false" );
+ ok( panels.eq( 1 ).is( ":hidden" ), "second panel is still hidden" );
+ equal( panels.eq( 1 ).attr( "aria-expanded" ), "false", "second panel has aria-expanded=false" );
+ equal( panels.eq( 1 ).attr( "aria-hidden" ), "true", "second panel has aria-hidden=true" );
+ ok( panels.eq( 0 ).is( ":visible" ), "first panel is still visible" );
+ equal( panels.eq( 0 ).attr( "aria-expanded" ), "true", "first panel has aria-expanded=true" );
+ equal( panels.eq( 0 ).attr( "aria-hidden" ), "false", "first panel has aria-hidden=false" );
+
+ setTimeout( step7, 100 );
+ }
+
+ // end
+ function step7() {
+ equal( tabs.eq( 0 ).attr( "aria-selected" ), "true", "first tab has aria-selected=true" );
+ ok( panels.eq( 0 ).is( ":visible" ), "first panel is visible" );
+ equal( panels.eq( 0 ).attr( "aria-expanded" ), "true", "first panel has aria-expanded=true" );
+ equal( panels.eq( 0 ).attr( "aria-hidden" ), "false", "first panel has aria-hidden=false" );
+
+ tabs.eq( 0 ).simulate( "keydown", { keyCode: keyCode.END, ctrlKey: true } );
+ ok( tabs.eq( 2 ).is( ".ui-state-focus" ), "END moves focus to last tab" );
+ equal( tabs.eq( 2 ).attr( "aria-selected" ), "false", "third tab has aria-selected=false" );
+ equal( tabs.eq( 0 ).attr( "aria-selected" ), "true", "first tab has aria-selected=true" );
+ ok( panels.eq( 2 ).is( ":hidden" ), "third panel is still hidden" );
+ equal( panels.eq( 2 ).attr( "aria-expanded" ), "false", "third panel has aria-expanded=false" );
+ equal( panels.eq( 2 ).attr( "aria-hidden" ), "true", "third panel has aria-hidden=true" );
+ ok( panels.eq( 0 ).is( ":visible" ), "first panel is still visible" );
+ equal( panels.eq( 0 ).attr( "aria-expanded" ), "true", "first panel has aria-expanded=true" );
+ equal( panels.eq( 0 ).attr( "aria-hidden" ), "false", "first panel has aria-hidden=false" );
+
+ setTimeout( step8, 100 );
+ }
+
+ // space
+ function step8() {
+ equal( tabs.eq( 0 ).attr( "aria-selected" ), "true", "first tab has aria-selected=true" );
+ ok( panels.eq( 0 ).is( ":visible" ), "first panel is visible" );
+ equal( panels.eq( 0 ).attr( "aria-expanded" ), "true", "first panel has aria-expanded=true" );
+ equal( panels.eq( 0 ).attr( "aria-hidden" ), "false", "first panel has aria-hidden=false" );
+ ok( panels.eq( 2 ).is( ":hidden" ), "third panel is hidden" );
+ equal( panels.eq( 2 ).attr( "aria-expanded" ), "false", "third panel has aria-expanded=false" );
+ equal( panels.eq( 2 ).attr( "aria-hidden" ), "true", "third panel has aria-hidden=true" );
+
+ tabs.eq( 2 ).simulate( "keydown", { keyCode: keyCode.SPACE } );
+ equal( tabs.eq( 2 ).attr( "aria-selected" ), "true", "third tab has aria-selected=true" );
+ equal( tabs.eq( 0 ).attr( "aria-selected" ), "false", "first tab has aria-selected=false" );
+ ok( panels.eq( 2 ).is( ":visible" ), "third panel is visible" );
+ equal( panels.eq( 2 ).attr( "aria-expanded" ), "true", "third panel has aria-expanded=true" );
+ equal( panels.eq( 2 ).attr( "aria-hidden" ), "false", "third panel has aria-hidden=false" );
+ ok( panels.eq( 0 ).is( ":hidden" ), "first panel is hidden" );
+ equal( panels.eq( 0 ).attr( "aria-expanded" ), "false", "first panel has aria-expanded=false" );
+ equal( panels.eq( 0 ).attr( "aria-hidden" ), "true", "first panel has aria-hidden=true" );
+
+ // support: Firefox 12
+ // Firefox <13 passes arguments so we can't use setTimeout( start, 1 )
+ setTimeout(function() {
+ start();
+ }, 1 );
+ }
+
+ setTimeout( step1, 1 );
+});
+
+asyncTest( "keyboard support - CTRL+UP, ALT+PAGE_DOWN, ALT+PAGE_UP", function() {
+ expect( 50 );
+ var element = $( "#tabs1" ).tabs(),
+ tabs = element.find( ".ui-tabs-nav li" ),
+ panels = element.find( ".ui-tabs-panel" ),
+ keyCode = $.ui.keyCode;
+
+ equal( tabs.filter( ".ui-state-focus" ).length, 0, "no tabs focused on init" );
+ panels.attr( "tabindex", -1 );
+ panels.eq( 0 ).simulate( "focus" );
+
+ function step1() {
+ strictEqual( document.activeElement, panels[ 0 ], "first panel is activeElement" );
+
+ panels.eq( 0 ).simulate( "keydown", { keyCode: keyCode.PAGE_DOWN, altKey: true } );
+ strictEqual( document.activeElement, tabs[ 1 ], "second tab is activeElement" );
+ ok( tabs.eq( 1 ).is( ".ui-state-focus" ), "ALT+PAGE_DOWN moves focus to next tab" );
+ equal( tabs.eq( 1 ).attr( "aria-selected" ), "true", "second tab has aria-selected=true" );
+ ok( panels.eq( 1 ).is( ":visible" ), "second panel is visible" );
+ equal( panels.eq( 1 ).attr( "aria-expanded" ), "true", "second panel has aria-expanded=true" );
+ equal( panels.eq( 1 ).attr( "aria-hidden" ), "false", "second panel has aria-hidden=false" );
+ ok( panels.eq( 0 ).is( ":hidden" ), "first panel is hidden" );
+ equal( panels.eq( 0 ).attr( "aria-expanded" ), "false", "first panel has aria-expanded=false" );
+ equal( panels.eq( 0 ).attr( "aria-hidden" ), "true", "first panel has aria-hidden=true" );
+
+ tabs.eq( 1 ).simulate( "keydown", { keyCode: keyCode.PAGE_DOWN, altKey: true } );
+ strictEqual( document.activeElement, tabs[ 2 ], "third tab is activeElement" );
+ ok( tabs.eq( 2 ).is( ".ui-state-focus" ), "ALT+PAGE_DOWN moves focus to next tab" );
+ equal( tabs.eq( 2 ).attr( "aria-selected" ), "true", "third tab has aria-selected=true" );
+ ok( panels.eq( 2 ).is( ":visible" ), "third panel is visible" );
+ equal( panels.eq( 2 ).attr( "aria-expanded" ), "true", "third panel has aria-expanded=true" );
+ equal( panels.eq( 2 ).attr( "aria-hidden" ), "false", "third panel has aria-hidden=false" );
+ ok( panels.eq( 1 ).is( ":hidden" ), "second panel is hidden" );
+ equal( panels.eq( 1 ).attr( "aria-expanded" ), "false", "second panel has aria-expanded=false" );
+ equal( panels.eq( 1 ).attr( "aria-hidden" ), "true", "second panel has aria-hidden=true" );
+
+ tabs.eq( 2 ).simulate( "keydown", { keyCode: keyCode.PAGE_DOWN, altKey: true } );
+ strictEqual( document.activeElement, tabs[ 0 ], "first tab is activeElement" );
+ ok( tabs.eq( 0 ).is( ".ui-state-focus" ), "ALT+PAGE_DOWN wraps focus to first tab" );
+ equal( tabs.eq( 0 ).attr( "aria-selected" ), "true", "first tab has aria-selected=true" );
+ ok( panels.eq( 0 ).is( ":visible" ), "first panel is visible" );
+ equal( panels.eq( 0 ).attr( "aria-expanded" ), "true", "first panel has aria-expanded=true" );
+ equal( panels.eq( 0 ).attr( "aria-hidden" ), "false", "first panel has aria-hidden=false" );
+ ok( panels.eq( 2 ).is( ":hidden" ), "third panel is hidden" );
+ equal( panels.eq( 2 ).attr( "aria-expanded" ), "false", "third panel has aria-expanded=false" );
+ equal( panels.eq( 2 ).attr( "aria-hidden" ), "true", "third panel has aria-hidden=true" );
+
+ panels.eq( 0 ).simulate( "focus" );
+ setTimeout( step2, 1 );
+ }
+
+ function step2() {
+ strictEqual( document.activeElement, panels[ 0 ], "first panel is activeElement" );
+
+ panels.eq( 0 ).simulate( "keydown", { keyCode: keyCode.PAGE_UP, altKey: true } );
+ strictEqual( document.activeElement, tabs[ 2 ], "third tab is activeElement" );
+ ok( tabs.eq( 2 ).is( ".ui-state-focus" ), "ALT+PAGE_UP wraps focus to last tab" );
+ equal( tabs.eq( 2 ).attr( "aria-selected" ), "true", "third tab has aria-selected=true" );
+ ok( panels.eq( 2 ).is( ":visible" ), "third panel is visible" );
+ equal( panels.eq( 2 ).attr( "aria-expanded" ), "true", "third panel has aria-expanded=true" );
+ equal( panels.eq( 2 ).attr( "aria-hidden" ), "false", "third panel has aria-hidden=false" );
+ ok( panels.eq( 0 ).is( ":hidden" ), "first panel is hidden" );
+ equal( panels.eq( 0 ).attr( "aria-expanded" ), "false", "first panel has aria-expanded=false" );
+ equal( panels.eq( 0 ).attr( "aria-hidden" ), "true", "first panel has aria-hidden=true" );
+
+ tabs.eq( 2 ).simulate( "keydown", { keyCode: keyCode.PAGE_UP, altKey: true } );
+ strictEqual( document.activeElement, tabs[ 1 ], "second tab is activeElement" );
+ ok( tabs.eq( 1 ).is( ".ui-state-focus" ), "ALT+PAGE_UP moves focus to previous tab" );
+ equal( tabs.eq( 1 ).attr( "aria-selected" ), "true", "second tab has aria-selected=true" );
+ ok( panels.eq( 1 ).is( ":visible" ), "second panel is visible" );
+ equal( panels.eq( 1 ).attr( "aria-expanded" ), "true", "second panel has aria-expanded=true" );
+ equal( panels.eq( 1 ).attr( "aria-hidden" ), "false", "second panel has aria-hidden=false" );
+ ok( panels.eq( 2 ).is( ":hidden" ), "third panel is hidden" );
+ equal( panels.eq( 2 ).attr( "aria-expanded" ), "false", "third panel has aria-expanded=false" );
+ equal( panels.eq( 2 ).attr( "aria-hidden" ), "true", "third panel has aria-hidden=true" );
+
+ panels.eq( 1 ).simulate( "focus" );
+ setTimeout( step3, 1 );
+ }
+
+ function step3() {
+ strictEqual( document.activeElement, panels[ 1 ], "second panel is activeElement" );
+
+ panels.eq( 1 ).simulate( "keydown", { keyCode: keyCode.UP, ctrlKey: true } );
+ strictEqual( document.activeElement, tabs[ 1 ], "second tab is activeElement" );
+
+ // support: Firefox 12
+ // Firefox <13 passes arguments so we can't use setTimeout( start, 1 )
+ setTimeout(function() {
+ start();
+ }, 1 );
+ }
+
+ setTimeout( step1, 1 );
});
test( "#3627 - Ajax tab with url containing a fragment identifier fails to load", function() {
diff --git a/tests/unit/tabs/tabs_methods.js b/tests/unit/tabs/tabs_methods.js
index ed3e73745..a41d7069d 100644
--- a/tests/unit/tabs/tabs_methods.js
+++ b/tests/unit/tabs/tabs_methods.js
@@ -6,6 +6,7 @@ var disabled = TestHelpers.tabs.disabled,
module( "tabs: methods" );
test( "destroy", function() {
+ expect( 1 );
domEqual( "#tabs1", function() {
$( "#tabs1" ).tabs().tabs( "destroy" );
});
@@ -148,6 +149,26 @@ test( "refresh", function() {
disabled( element, false );
});
+test( "refresh - looping", function() {
+ expect( 6 );
+
+ var element = $( "#tabs1" ).tabs({
+ disabled: [ 0 ],
+ active: 1
+ });
+ state( element, 0, 1, 0 );
+ disabled( element, [ 0 ] );
+
+ // remove active, jump to previous
+ // previous is disabled, just back one more
+ // reached first tab, move to end
+ // activate last tab
+ element.find( ".ui-tabs-nav li" ).eq( 2 ).remove();
+ element.tabs( "refresh" );
+ state( element, 0, 1 );
+ disabled( element, [ 0 ] );
+});
+
asyncTest( "load", function() {
expect( 30 );
diff --git a/tests/unit/tabs/tabs_options.js b/tests/unit/tabs/tabs_options.js
index 8365a42d7..5a90ff895 100644
--- a/tests/unit/tabs/tabs_options.js
+++ b/tests/unit/tabs/tabs_options.js
@@ -69,6 +69,8 @@ test( "{ active: Number }", function() {
if ( $.uiBackCompat === false ) {
test( "{ active: -Number }", function() {
+ expect( 8 );
+
var element = $( "#tabs1" ).tabs({
active: -1
});
@@ -278,6 +280,54 @@ test( "{ heightStyle: 'fill' } with multiple siblings", function() {
equalHeight( element, 335 );
});
-// TODO: add animation tests
+test( "hide and show: false", function() {
+ expect( 3 );
+ var element = $( "#tabs1" ).tabs({
+ show: false,
+ hide: false
+ }),
+ widget = element.data( "tabs" ),
+ panels = element.find( ".ui-tabs-panel" );
+ widget._show = function() {
+ ok( false, "_show() called" );
+ };
+ widget._hide = function() {
+ ok( false, "_hide() called" );
+ };
+
+ ok( panels.eq( 0 ).is( ":visible" ), "first panel visible" );
+ element.tabs( "option", "active", 1 );
+ ok( panels.eq( 0 ).is( ":hidden" ), "first panel hidden" );
+ ok( panels.eq( 1 ).is( ":visible" ), "second panel visible" );
+});
+
+asyncTest( "hide and show - animation", function() {
+ expect( 5 );
+ var element = $( "#tabs1" ).tabs({
+ show: "drop",
+ hide: 2000
+ }),
+ widget = element.data( "tabs" ),
+ panels = element.find( ".ui-tabs-panel" );
+ widget._show = function( element, options, callback ) {
+ strictEqual( element[ 0 ], panels[ 1 ], "correct element in _show()" );
+ equal( options, "drop", "correct options in _show()" );
+ setTimeout(function() {
+ callback();
+ }, 1 );
+ };
+ widget._hide = function( element, options, callback ) {
+ strictEqual( element[ 0 ], panels[ 0 ], "correct element in _hide()" );
+ equal( options, 2000, "correct options in _hide()" );
+ setTimeout(function() {
+ callback();
+ start();
+ }, 1 );
+ };
+
+ ok( panels.eq( 0 ).is( ":visible" ), "first panel visible" );
+ element.tabs( "option", "active", 1 );
+});
+
}( jQuery ) );
diff --git a/tests/unit/testsuite.js b/tests/unit/testsuite.js
index 3c8ec04c4..26f46138a 100644
--- a/tests/unit/testsuite.js
+++ b/tests/unit/testsuite.js
@@ -10,7 +10,14 @@ function includeScript( url ) {
document.write( "<script src='../../../" + url + "'></script>" );
}
-QUnit.config.urlConfig.push( "min" );
+QUnit.config.requireExpects = true;
+
+QUnit.config.urlConfig.push({
+ id: "min",
+ label: "Minified source",
+ tooltip: "Load minified source files instead of the regular unminified ones."
+});
+
TestHelpers.loadResources = QUnit.urlParams.min ?
function() {
// TODO: proper include with theme images
@@ -26,7 +33,12 @@ TestHelpers.loadResources = QUnit.urlParams.min ?
});
};
-QUnit.config.urlConfig.push( "nojshint" );
+QUnit.config.urlConfig.push({
+ id: "nojshint",
+ label: "Skip JSHint",
+ tooltip: "Skip running JSHint, e.g. within TestSwarm, where Jenkins runs it already"
+});
+
var jshintLoaded = false;
TestHelpers.testJshint = function( module ) {
if ( QUnit.urlParams.nojshint ) {
@@ -47,7 +59,7 @@ TestHelpers.testJshint = function( module ) {
dataType: "json"
}),
$.ajax({
- url: "../../../ui/jquery." + module + ".js",
+ url: "../../../ui/jquery.ui." + module + ".js",
dataType: "text"
})
).done(function( hintArgs, srcArgs ) {
@@ -76,7 +88,9 @@ function testWidgetDefaults( widget, defaults ) {
// ensure that all defaults have the correct value
test( "defined defaults", function() {
+ var count = 0;
$.each( defaults, function( key, val ) {
+ expect( ++count );
if ( $.isFunction( val ) ) {
ok( $.isFunction( pluginDefaults[ key ] ), key );
return;
@@ -87,7 +101,9 @@ function testWidgetDefaults( widget, defaults ) {
// ensure that all defaults were tested
test( "tested defaults", function() {
+ var count = 0;
$.each( pluginDefaults, function( key, val ) {
+ expect( ++count );
ok( key in defaults, key );
});
});
@@ -96,6 +112,7 @@ function testWidgetDefaults( widget, defaults ) {
function testWidgetOverrides( widget ) {
if ( $.uiBackCompat === false ) {
test( "$.widget overrides", function() {
+ expect( 4 );
$.each([
"_createWidget",
"destroy",
@@ -111,6 +128,8 @@ function testWidgetOverrides( widget ) {
function testBasicUsage( widget ) {
test( "basic usage", function() {
+ expect( 3 );
+
var defaultElement = $.ui[ widget ].prototype.defaultElement;
$( defaultElement ).appendTo( "body" )[ widget ]().remove();
ok( true, "initialized on element" );
@@ -126,11 +145,12 @@ function testBasicUsage( widget ) {
TestHelpers.commonWidgetTests = function( widget, settings ) {
module( widget + ": common widget" );
- TestHelpers.testJshint( "ui." + widget );
+ TestHelpers.testJshint( widget );
testWidgetDefaults( widget, settings.defaults );
testWidgetOverrides( widget );
testBasicUsage( widget );
test( "version", function() {
+ expect( 1 );
ok( "version" in $.ui[ widget ].prototype, "version property exists" );
});
};
@@ -188,6 +208,9 @@ window.domEqual = function( selector, modifier, message ) {
var value = elem.attr( attr );
result[ attrĀ ] = value !== undefined ? value : "";
});
+ result.events = $._data( elem[ 0 ], "events" );
+ result.data = $.extend( {}, elem.data() );
+ delete result.data[ $.expando ];
children = elem.children();
if ( children.length ) {
result.children = elem.children().map(function( ind ) {
diff --git a/tests/unit/tooltip/tooltip_common.js b/tests/unit/tooltip/tooltip_common.js
index d12ee9519..6d503aecd 100644
--- a/tests/unit/tooltip/tooltip_common.js
+++ b/tests/unit/tooltip/tooltip_common.js
@@ -11,6 +11,7 @@ TestHelpers.commonWidgetTests( "tooltip", {
},
show: true,
tooltipClass: null,
+ track: false,
// callbacks
close: null,
diff --git a/tests/unit/tooltip/tooltip_core.js b/tests/unit/tooltip/tooltip_core.js
index 1c8817aa8..2b39253a2 100644
--- a/tests/unit/tooltip/tooltip_core.js
+++ b/tests/unit/tooltip/tooltip_core.js
@@ -34,7 +34,10 @@ test( "accessibility", function() {
equal( element.attr( "aria-describedby" ), "fixture-span " + tooltipId,
"multiple describedby when open" );
// strictEqual to distinguish between .removeAttr( "title" ) and .attr( "title", "" )
- strictEqual( element.attr( "title" ), undefined, "no title when open" );
+ // support: jQuery <1.6.2
+ // support: IE <8
+ // We should use strictEqual( ..., undefined ) when dropping jQuery 1.6.1 support (or IE6/7)
+ ok( !element.attr( "title" ), "no title when open" );
element.tooltip( "close" );
equal( element.attr( "aria-describedby" ), "fixture-span",
"correct describedby when closed" );
diff --git a/tests/unit/tooltip/tooltip_methods.js b/tests/unit/tooltip/tooltip_methods.js
index 1b8cd2bf2..ef783cbd3 100644
--- a/tests/unit/tooltip/tooltip_methods.js
+++ b/tests/unit/tooltip/tooltip_methods.js
@@ -42,7 +42,10 @@ test( "enable/disable", function() {
element.tooltip( "disable" );
equal( $( ".ui-tooltip" ).length, 0, "no tooltip when disabled" );
- equal( tooltip.attr( "title" ), undefined, "title removed on disable" );
+ // support: jQuery <1.6.2
+ // support: IE <8
+ // We should use strictEqual( ..., undefined ) when dropping jQuery 1.6.1 support (or IE6/7)
+ ok( !tooltip.attr( "title" ), "title removed on disable" );
element.tooltip( "open" );
equal( $( ".ui-tooltip" ).length, 0, "open does nothing when disabled" );
diff --git a/tests/unit/tooltip/tooltip_options.js b/tests/unit/tooltip/tooltip_options.js
index a4ef9f472..771da6da7 100644
--- a/tests/unit/tooltip/tooltip_options.js
+++ b/tests/unit/tooltip/tooltip_options.js
@@ -3,11 +3,13 @@
module( "tooltip: options" );
test( "content: default", function() {
+ expect( 1 );
var element = $( "#tooltipped1" ).tooltip().tooltip( "open" );
deepEqual( $( "#" + element.data( "ui-tooltip-id" ) ).text(), "anchortitle" );
});
test( "content: return string", function() {
+ expect( 1 );
var element = $( "#tooltipped1" ).tooltip({
content: function() {
return "customstring";
@@ -17,6 +19,7 @@ test( "content: return string", function() {
});
test( "content: return jQuery", function() {
+ expect( 1 );
var element = $( "#tooltipped1" ).tooltip({
content: function() {
return $( "<div>" ).html( "cu<b>s</b>tomstring" );
diff --git a/tests/unit/widget/widget_core.js b/tests/unit/widget/widget_core.js
index aa70e2425..5efd91268 100644
--- a/tests/unit/widget/widget_core.js
+++ b/tests/unit/widget/widget_core.js
@@ -8,9 +8,10 @@ module( "widget factory", {
}
});
-TestHelpers.testJshint( "ui.widget" );
+TestHelpers.testJshint( "widget" );
test( "widget creation", function() {
+ expect( 5 );
var myPrototype = {
_create: function() {},
creationTest: function() {}
@@ -78,10 +79,11 @@ test( "element normalization", function() {
});
test( "custom selector expression", function() {
+ expect( 1 );
var elem = $( "<div>" ).appendTo( "#qunit-fixture" );
$.widget( "ui.testWidget", {} );
elem.testWidget();
- deepEqual( $( ":ui-testWidget" )[0], elem[0] );
+ deepEqual( $( ":ui-testwidget" )[0], elem[0] );
elem.testWidget( "destroy" );
});
@@ -300,6 +302,7 @@ test( "._getCreateEventData()", function() {
});
test( "re-init", function() {
+ expect( 3 );
var div = $( "<div>" ),
actions = [];
@@ -329,6 +332,7 @@ test( "re-init", function() {
});
test( "inheritance - options", function() {
+ expect( 4 );
// #5830 - Widget: Using inheritance overwrites the base classes options
$.widget( "ui.testWidgetBase", {
options: {
@@ -441,6 +445,7 @@ test( "._superApply()", function() {
});
test( ".option() - getter", function() {
+ expect( 6 );
$.widget( "ui.testWidget", {
_create: function() {}
});
@@ -472,6 +477,7 @@ test( ".option() - getter", function() {
});
test( ".option() - deep option getter", function() {
+ expect( 5 );
$.widget( "ui.testWidget", {} );
var div = $( "<div>" ).testWidget({
foo: {
@@ -490,6 +496,7 @@ test( ".option() - deep option getter", function() {
});
test( ".option() - delegate to ._setOptions()", function() {
+ expect( 2 );
var div,
calls = [];
$.widget( "ui.testWidget", {
@@ -514,6 +521,7 @@ test( ".option() - delegate to ._setOptions()", function() {
});
test( ".option() - delegate to ._setOption()", function() {
+ expect( 2 );
var div,
calls = [];
$.widget( "ui.testWidget", {
@@ -544,6 +552,7 @@ test( ".option() - delegate to ._setOption()", function() {
});
test( ".option() - deep option setter", function() {
+ expect( 6 );
$.widget( "ui.testWidget", {} );
var div = $( "<div>" ).testWidget();
function deepOption( from, to, msg ) {
@@ -592,6 +601,7 @@ test( ".disable()", function() {
});
test( ".widget() - base", function() {
+ expect( 1 );
$.widget( "ui.testWidget", {
_create: function() {}
});
@@ -600,6 +610,7 @@ test( ".widget() - base", function() {
});
test( ".widget() - overriden", function() {
+ expect( 1 );
var wrapper = $( "<div>" );
$.widget( "ui.testWidget", {
_create: function() {},
@@ -610,13 +621,13 @@ test( ".widget() - overriden", function() {
deepEqual( wrapper[0], $( "<div>" ).testWidget().testWidget( "widget" )[0] );
});
-test( "._bind() to element (default)", function() {
+test( "._on() to element (default)", function() {
expect( 12 );
var that, widget;
$.widget( "ui.testWidget", {
_create: function() {
that = this;
- this._bind({
+ this._on({
keyup: this.keyup,
keydown: "keydown"
});
@@ -650,13 +661,13 @@ test( "._bind() to element (default)", function() {
.trigger( "keydown" );
});
-test( "._bind() to descendent", function() {
+test( "._on() to descendent", function() {
expect( 12 );
var that, widget, descendant;
$.widget( "ui.testWidget", {
_create: function() {
that = this;
- this._bind( this.element.find( "strong" ), {
+ this._on( this.element.find( "strong" ), {
keyup: this.keyup,
keydown: "keydown"
});
@@ -707,13 +718,14 @@ test( "._bind() to descendent", function() {
.trigger( "keydown" );
});
-test( "_bind() with delegate", function() {
+test( "_on() with delegate", function() {
expect( 8 );
$.widget( "ui.testWidget", {
_create: function() {
+ var uuid = this.uuid;
this.element = {
bind: function( event, handler ) {
- equal( event, "click.testWidget" );
+ equal( event, "click.testWidget" + uuid );
ok( $.isFunction(handler) );
},
trigger: $.noop
@@ -722,12 +734,12 @@ test( "_bind() with delegate", function() {
return {
delegate: function( selector, event, handler ) {
equal( selector, "a" );
- equal( event, "click.testWidget" );
+ equal( event, "click.testWidget" + uuid );
ok( $.isFunction(handler) );
}
};
};
- this._bind({
+ this._on({
"click": "handler",
"click a": "handler"
});
@@ -735,12 +747,12 @@ test( "_bind() with delegate", function() {
return {
delegate: function( selector, event, handler ) {
equal( selector, "form fieldset > input" );
- equal( event, "change.testWidget" );
+ equal( event, "change.testWidget" + uuid );
ok( $.isFunction(handler) );
}
};
};
- this._bind({
+ this._on({
"change form fieldset > input": "handler"
});
}
@@ -748,7 +760,103 @@ test( "_bind() with delegate", function() {
$.ui.testWidget();
});
+test( "_on() to common element", function() {
+ expect( 1 );
+ $.widget( "ui.testWidget", {
+ _create: function() {
+ this._on( this.document, {
+ "customevent": "_handler"
+ });
+ },
+ _handler: function() {
+ ok( true, "handler triggered" );
+ }
+ });
+ var widget = $( "#widget" ).testWidget().data( "testWidget" );
+ $( "#widget-wrapper" ).testWidget();
+ widget.destroy();
+ $( document ).trigger( "customevent" );
+});
+
+test( "_off() - single event", function() {
+ expect( 3 );
+
+ $.widget( "ui.testWidget", {} );
+ var shouldTriggerWidget, shouldTriggerOther,
+ element = $( "#widget" ),
+ widget = element.testWidget().data( "testWidget" );
+ widget._on( element, { foo: function() {
+ ok( shouldTriggerWidget, "foo called from _on" );
+ }});
+ element.bind( "foo", function() {
+ ok( shouldTriggerOther, "foo called from bind" );
+ });
+ shouldTriggerWidget = true;
+ shouldTriggerOther = true;
+ element.trigger( "foo" );
+ shouldTriggerWidget = false;
+ widget._off( element, "foo" );
+ element.trigger( "foo" );
+});
+
+test( "_off() - multiple events", function() {
+ expect( 6 );
+
+ $.widget( "ui.testWidget", {} );
+ var shouldTriggerWidget, shouldTriggerOther,
+ element = $( "#widget" ),
+ widget = element.testWidget().data( "testWidget" );
+ widget._on( element, {
+ foo: function() {
+ ok( shouldTriggerWidget, "foo called from _on" );
+ },
+ bar: function() {
+ ok( shouldTriggerWidget, "bar called from _on" );
+ }
+ });
+ element.bind( "foo bar", function( event ) {
+ ok( shouldTriggerOther, event.type + " called from bind" );
+ });
+ shouldTriggerWidget = true;
+ shouldTriggerOther = true;
+ element.trigger( "foo" );
+ element.trigger( "bar" );
+ shouldTriggerWidget = false;
+ widget._off( element, "foo bar" );
+ element.trigger( "foo" );
+ element.trigger( "bar" );
+});
+
+test( "_off() - all events", function() {
+ expect( 6 );
+
+ $.widget( "ui.testWidget", {} );
+ var shouldTriggerWidget, shouldTriggerOther,
+ element = $( "#widget" ),
+ widget = element.testWidget().data( "testWidget" );
+ widget._on( element, {
+ foo: function() {
+ ok( shouldTriggerWidget, "foo called from _on" );
+ },
+ bar: function() {
+ ok( shouldTriggerWidget, "bar called from _on" );
+ }
+ });
+ element.bind( "foo bar", function( event ) {
+ ok( shouldTriggerOther, event.type + " called from bind" );
+ });
+ shouldTriggerWidget = true;
+ shouldTriggerOther = true;
+ element.trigger( "foo" );
+ element.trigger( "bar" );
+ shouldTriggerWidget = false;
+ widget._off( element );
+ element.trigger( "foo" );
+ element.trigger( "bar" );
+});
+
test( "._hoverable()", function() {
+ expect( 10 );
$.widget( "ui.testWidget", {
_create: function() {
this._hoverable( this.element.children() );
@@ -780,10 +888,11 @@ test( "._hoverable()", function() {
});
test( "._focusable()", function() {
+ expect( 10 );
$.widget( "ui.testWidget", {
_create: function() {
- this._focusable( this.element.children() );
- }
+ this._focusable( this.element.children() );
+ }
});
var div = $( "#widget" ).testWidget().children();
@@ -863,6 +972,7 @@ test( "._trigger() - cancelled event", function() {
});
test( "._trigger() - cancelled callback", function() {
+ expect( 1 );
$.widget( "ui.testWidget", {
_create: function() {}
});
diff --git a/tests/visual/addClass/queue.html b/tests/visual/addClass/queue.html
index 21f4cc1cb..0b7a43656 100644
--- a/tests/visual/addClass/queue.html
+++ b/tests/visual/addClass/queue.html
@@ -5,7 +5,7 @@
<title>addClass Visual Test : Queue</title>
<link rel="stylesheet" href="../../../themes/base/jquery.ui.all.css">
<script src="../../../jquery-1.7.2.js"></script>
- <script src="../../../ui/jquery.effects.core.js"></script>
+ <script src="../../../ui/jquery.ui.effect.js"></script>
<style>
.box {
width: 100px;
diff --git a/tests/visual/effects/all.html b/tests/visual/effects/all.html
index 15bfcd254..1797c5715 100644
--- a/tests/visual/effects/all.html
+++ b/tests/visual/effects/all.html
@@ -5,20 +5,20 @@
<title>jQuery UI Effects Test Suite</title>
<link rel="stylesheet" href="effects.css">
<script src="../../../jquery-1.7.2.js"></script>
- <script src="../../../ui/jquery.effects.core.js"></script>
- <script src="../../../ui/jquery.effects.blind.js"></script>
- <script src="../../../ui/jquery.effects.bounce.js"></script>
- <script src="../../../ui/jquery.effects.clip.js"></script>
- <script src="../../../ui/jquery.effects.drop.js"></script>
- <script src="../../../ui/jquery.effects.explode.js"></script>
- <script src="../../../ui/jquery.effects.fade.js"></script>
- <script src="../../../ui/jquery.effects.fold.js"></script>
- <script src="../../../ui/jquery.effects.highlight.js"></script>
- <script src="../../../ui/jquery.effects.pulsate.js"></script>
- <script src="../../../ui/jquery.effects.scale.js"></script>
- <script src="../../../ui/jquery.effects.shake.js"></script>
- <script src="../../../ui/jquery.effects.slide.js"></script>
- <script src="../../../ui/jquery.effects.transfer.js"></script>
+ <script src="../../../ui/jquery.ui.effect.js"></script>
+ <script src="../../../ui/jquery.ui.effect-blind.js"></script>
+ <script src="../../../ui/jquery.ui.effect-bounce.js"></script>
+ <script src="../../../ui/jquery.ui.effect-clip.js"></script>
+ <script src="../../../ui/jquery.ui.effect-drop.js"></script>
+ <script src="../../../ui/jquery.ui.effect-explode.js"></script>
+ <script src="../../../ui/jquery.ui.effect-fade.js"></script>
+ <script src="../../../ui/jquery.ui.effect-fold.js"></script>
+ <script src="../../../ui/jquery.ui.effect-highlight.js"></script>
+ <script src="../../../ui/jquery.ui.effect-pulsate.js"></script>
+ <script src="../../../ui/jquery.ui.effect-scale.js"></script>
+ <script src="../../../ui/jquery.ui.effect-shake.js"></script>
+ <script src="../../../ui/jquery.ui.effect-slide.js"></script>
+ <script src="../../../ui/jquery.ui.effect-transfer.js"></script>
<script src="effects.js"></script>
</head>
<body>
diff --git a/tests/visual/effects/scale.html b/tests/visual/effects/scale.html
index add2ba01c..bca21a45f 100644
--- a/tests/visual/effects/scale.html
+++ b/tests/visual/effects/scale.html
@@ -5,8 +5,8 @@
<title>jQuery UI Effects Test Suite</title>
<link rel="stylesheet" href="effects.css">
<script src="../../../jquery-1.7.2.js"></script>
- <script src="../../../ui/jquery.effects.core.js"></script>
- <script src="../../../ui/jquery.effects.scale.js"></script>
+ <script src="../../../ui/jquery.ui.effect.js"></script>
+ <script src="../../../ui/jquery.ui.effect-scale.js"></script>
<script>
$(function() {
var test = $( "#testBox" ),
diff --git a/tests/visual/menu/menu.html b/tests/visual/menu/menu.html
index 5bda32eae..205cb10c9 100644
--- a/tests/visual/menu/menu.html
+++ b/tests/visual/menu/menu.html
@@ -26,7 +26,8 @@
$( "#menu6" ).menu({
menus: ".menuElement",
- select: logger
+ select: logger,
+ icon: "ui-icon-carat-1-s"
});
});
</script>
@@ -212,7 +213,7 @@
</blockquote>
</div>
-<h2>Menu with custom markup, multi-line items</h2>
+<h2>Menu with custom markup, multi-line items and a custom submenu icon</h2>
<div class="menuElement" id="menu6">
<div class="address-item">
<a href="#">
diff --git a/tests/visual/tooltip/animations.html b/tests/visual/tooltip/animations.html
index 24fe02905..15badb618 100644
--- a/tests/visual/tooltip/animations.html
+++ b/tests/visual/tooltip/animations.html
@@ -9,11 +9,11 @@
<script src="../../../ui/jquery.ui.widget.js"></script>
<script src="../../../ui/jquery.ui.position.js"></script>
<script src="../../../ui/jquery.ui.tooltip.js"></script>
- <script src="../../../ui/jquery.effects.core.js"></script>
- <script src="../../../ui/jquery.effects.blind.js"></script>
- <script src="../../../ui/jquery.effects.bounce.js"></script>
- <script src="../../../ui/jquery.effects.drop.js"></script>
- <script src="../../../ui/jquery.effects.explode.js"></script>
+ <script src="../../../ui/jquery.ui.effect.js"></script>
+ <script src="../../../ui/jquery.ui.effect-blind.js"></script>
+ <script src="../../../ui/jquery.ui.effect-bounce.js"></script>
+ <script src="../../../ui/jquery.ui.effect-drop.js"></script>
+ <script src="../../../ui/jquery.ui.effect-explode.js"></script>
<style>
pre {
width: 250px;