diff options
Diffstat (limited to 'tests/unit/tabs')
-rw-r--r-- | tests/unit/tabs/all.html | 4 | ||||
-rw-r--r-- | tests/unit/tabs/tabs.html | 72 | ||||
-rw-r--r-- | tests/unit/tabs/tabs_common.js (renamed from tests/unit/tabs/tabs_defaults.js) | 2 | ||||
-rw-r--r-- | tests/unit/tabs/tabs_common_deprecated.js (renamed from tests/unit/tabs/tabs_defaults_deprecated.js) | 2 | ||||
-rw-r--r-- | tests/unit/tabs/tabs_core.js | 4 | ||||
-rw-r--r-- | tests/unit/tabs/tabs_deprecated.html | 72 | ||||
-rw-r--r-- | tests/unit/tabs/tabs_deprecated.js | 130 | ||||
-rw-r--r-- | tests/unit/tabs/tabs_events.js | 140 | ||||
-rw-r--r-- | tests/unit/tabs/tabs_methods.js | 113 | ||||
-rw-r--r-- | tests/unit/tabs/tabs_options.js | 73 | ||||
-rw-r--r-- | tests/unit/tabs/tabs_test_helpers.js | 61 |
11 files changed, 323 insertions, 350 deletions
diff --git a/tests/unit/tabs/all.html b/tests/unit/tabs/all.html index 1da3ecad2..41bf965f2 100644 --- a/tests/unit/tabs/all.html +++ b/tests/unit/tabs/all.html @@ -7,9 +7,9 @@ <script src="../../../jquery-1.7.2.js"></script> <link rel="stylesheet" href="../../../external/qunit.css"> - <link rel="stylesheet" href="../subsuiteRunner.css"> + <link rel="stylesheet" href="../qunit-composite.css"> <script src="../../../external/qunit.js"></script> - <script src="../subsuiteRunner.js"></script> + <script src="../qunit-composite.js"></script> <script src="../subsuite.js"></script> <script> diff --git a/tests/unit/tabs/tabs.html b/tests/unit/tabs/tabs.html index fc494e013..b961c60f3 100644 --- a/tests/unit/tabs/tabs.html +++ b/tests/unit/tabs/tabs.html @@ -8,9 +8,12 @@ <script> $.uiBackCompat = false; </script> - <script src="../../resource_loader.js"></script> + <link rel="stylesheet" href="../../../external/qunit.css"> + <script src="../../../external/qunit.js"></script> + <script src="../../jquery.simulate.js"></script> + <script src="../testsuite.js"></script> <script> - loadResources({ + TestHelpers.loadResources({ css: [ "ui.core", "ui.tabs" ], js: [ "ui/jquery.ui.core.js", @@ -20,73 +23,13 @@ }); </script> - <link rel="stylesheet" href="../../../external/qunit.css"> - <script src="../../../external/qunit.js"></script> - <script src="../../jquery.simulate.js"></script> - <script src="../testsuite.js"></script> - - <script src="tabs_defaults.js"></script> + <script src="tabs_test_helpers.js"></script> + <script src="tabs_common.js"></script> <script src="tabs_core.js"></script> <script src="tabs_events.js"></script> <script src="tabs_methods.js"></script> <script src="tabs_options.js"></script> - <script> - function tabs_state( tabs ) { - var expected = $.makeArray( arguments ).slice( 1 ); - var actual = tabs.find( ".ui-tabs-nav li" ).map(function() { - var tab = $( this ), - panel = $( $.ui.tabs.prototype._sanitizeSelector( - "#" + tab.find( "a" ).attr( "aria-controls" ) ) ), - tabIsActive = tab.hasClass( "ui-state-active" ), - panelIsActive = panel.css( "display" ) !== "none"; - - if ( tabIsActive && panelIsActive ) { - return 1; - } - if ( !tabIsActive && !panelIsActive ) { - return 0; - } - return -1; // mixed state - invalid - }).get(); - deepEqual( actual, expected ); - } - - function tabs_disabled( tabs, state ) { - var expected = $.map( new Array( tabs.find ( ".ui-tabs-nav li" ).length ), function( _, index ) { - if ( typeof state === "boolean" ) { - return state ? 1 : 0; - } else { - return $.inArray( index, state ) !== -1 ? 1 : 0; - } - }); - - var internalState = tabs.tabs( "option", "disabled" ); - if ( internalState === false ) { - internalState = []; - } - if ( internalState === true ) { - internalState = $.map( new Array( tabs.find( ".ui-tabs-nav li" ).length ), function( _, index ) { - return index; - }); - } - - var actual = tabs.find( ".ui-tabs-nav li" ).map(function( index ) { - var tab = $( this ), - tabIsDisabled = tab.hasClass( "ui-state-disabled" ); - - if ( tabIsDisabled && $.inArray( index, internalState ) !== -1 ) { - return 1; - } - if ( !tabIsDisabled && $.inArray( index, internalState ) === -1 ) { - return 0; - } - return -1; // mixed state - invalid - }).get(); - deepEqual( tabs.tabs( "option", "disabled" ), state ); - deepEqual( actual, expected ); - } - </script> <script src="../swarminject.js"></script> </head> <body> @@ -119,6 +62,7 @@ </ul> <div id="colon:test"></div> <div style="height: 300px;" id="inline-style"></div> + <div id="custom-id"></div> </div> <div id="tabs3"> diff --git a/tests/unit/tabs/tabs_defaults.js b/tests/unit/tabs/tabs_common.js index 52b6f8a71..7ffb05da4 100644 --- a/tests/unit/tabs/tabs_defaults.js +++ b/tests/unit/tabs/tabs_common.js @@ -1,4 +1,4 @@ -commonWidgetTests( "tabs", { +TestHelpers.commonWidgetTests( "tabs", { defaults: { active: null, collapsible: false, diff --git a/tests/unit/tabs/tabs_defaults_deprecated.js b/tests/unit/tabs/tabs_common_deprecated.js index 1a56297e9..fdcff21b3 100644 --- a/tests/unit/tabs/tabs_defaults_deprecated.js +++ b/tests/unit/tabs/tabs_common_deprecated.js @@ -1,4 +1,4 @@ -commonWidgetTests( "tabs", { +TestHelpers.commonWidgetTests( "tabs", { defaults: { active: null, ajaxOptions: null, diff --git a/tests/unit/tabs/tabs_core.js b/tests/unit/tabs/tabs_core.js index 21250fb33..b9bd81987 100644 --- a/tests/unit/tabs/tabs_core.js +++ b/tests/unit/tabs/tabs_core.js @@ -1,5 +1,7 @@ (function( $ ) { +var state = TestHelpers.tabs.state; + module( "tabs: core" ); test( "markup structure", function() { @@ -89,7 +91,7 @@ test( "#4033 - IE expands hash to full url and misinterprets tab as ajax", funct }); equal( element.find( ".ui-tabs-nav a" ).attr( "aria-controls" ), "tab", "aria-contorls attribute is correct" ); - tabs_state( element, 1 ); + state( element, 1 ); }); }( jQuery ) ); diff --git a/tests/unit/tabs/tabs_deprecated.html b/tests/unit/tabs/tabs_deprecated.html index 410aebc40..09afc91b4 100644 --- a/tests/unit/tabs/tabs_deprecated.html +++ b/tests/unit/tabs/tabs_deprecated.html @@ -6,9 +6,12 @@ <script src="../../jquery.js"></script> <script src="../../../external/jquery.cookie.js"></script> - <script src="../../resource_loader.js"></script> + <link rel="stylesheet" href="../../../external/qunit.css"> + <script src="../../../external/qunit.js"></script> + <script src="../../jquery.simulate.js"></script> + <script src="../testsuite.js"></script> <script> - loadResources({ + TestHelpers.loadResources({ css: [ "ui.core", "ui.tabs" ], js: [ "ui/jquery.ui.core.js", @@ -18,74 +21,14 @@ }); </script> - <link rel="stylesheet" href="../../../external/qunit.css"> - <script src="../../../external/qunit.js"></script> - <script src="../../jquery.simulate.js"></script> - <script src="../testsuite.js"></script> - - <script src="tabs_defaults_deprecated.js"></script> + <script src="tabs_test_helpers.js"></script> + <script src="tabs_common_deprecated.js"></script> <script src="tabs_core.js"></script> <script src="tabs_events.js"></script> <script src="tabs_methods.js"></script> <script src="tabs_options.js"></script> <script src="tabs_deprecated.js"></script> - <script> - function tabs_state( tabs ) { - var expected = $.makeArray( arguments ).slice( 1 ); - var actual = tabs.find( ".ui-tabs-nav li" ).map(function() { - var tab = $( this ), - panel = $( $.ui.tabs.prototype._sanitizeSelector( - "#" + tab.find( "a" ).attr( "aria-controls" ) ) ), - tabIsActive = tab.hasClass( "ui-state-active" ), - panelIsActive = panel.css( "display" ) !== "none"; - - if ( tabIsActive && panelIsActive ) { - return 1; - } - if ( !tabIsActive && !panelIsActive ) { - return 0; - } - return -1; // mixed state - invalid - }).get(); - deepEqual( actual, expected ); - } - - function tabs_disabled( tabs, state ) { - var expected = $.map( new Array( tabs.find ( ".ui-tabs-nav li" ).length ), function( _, index ) { - if ( typeof state === "boolean" ) { - return state ? 1 : 0; - } else { - return $.inArray( index, state ) !== -1 ? 1 : 0; - } - }); - - var internalState = tabs.tabs( "option", "disabled" ); - if ( internalState === false ) { - internalState = []; - } - if ( internalState === true ) { - internalState = $.map( new Array( tabs.find( ".ui-tabs-nav li" ).length ), function( _, index ) { - return index; - }); - } - - var actual = tabs.find( ".ui-tabs-nav li" ).map(function( index ) { - var tab = $( this ), - tabIsDisabled = tab.hasClass( "ui-state-disabled" ); - - if ( tabIsDisabled && $.inArray( index, internalState ) !== -1 ) { - return 1; - } - if ( !tabIsDisabled && $.inArray( index, internalState ) === -1 ) { - return 0; - } - return -1; // mixed state - invalid - }).get(); - deepEqual( tabs.tabs( "option", "disabled" ), state ); - deepEqual( actual, expected ); - } - </script> <script src="../swarminject.js"></script> </head> <body> @@ -118,6 +61,7 @@ </ul> <div id="colon:test"></div> <div style="height: 300px;" id="inline-style"></div> + <div id="custom-id"></div> </div> <div id="tabs3"> diff --git a/tests/unit/tabs/tabs_deprecated.js b/tests/unit/tabs/tabs_deprecated.js index 80bc4a326..66768b866 100644 --- a/tests/unit/tabs/tabs_deprecated.js +++ b/tests/unit/tabs/tabs_deprecated.js @@ -1,5 +1,7 @@ (function( $ ) { +var state = TestHelpers.tabs.state; + module( "tabs (deprecated): core" ); test( "panel ids", function() { @@ -48,17 +50,17 @@ asyncTest( "cache", function() { cache: true }); element.one( "tabsshow", function( event, ui ) { - tabs_state( element, 0, 0, 1, 0, 0 ); + state( element, 0, 0, 1, 0, 0 ); }); element.one( "tabsload", function( event, ui ) { ok( true, "tabsload" ); setTimeout(function() { element.tabs( "option", "active", 0 ); - tabs_state( element, 1, 0, 0, 0, 0 ); + state( element, 1, 0, 0, 0, 0 ); element.one( "tabsshow", function( event, ui ) { - tabs_state( element, 0, 0, 1, 0, 0 ); + state( element, 0, 0, 1, 0, 0 ); }); element.one( "tabsload", function( event, ui ) { ok( false, "should be cached" ); @@ -68,7 +70,7 @@ asyncTest( "cache", function() { }, 1 ); }); element.tabs( "option", "active", 2 ); - tabs_state( element, 0, 0, 1, 0, 0 ); + state( element, 0, 0, 1, 0, 0 ); }); test( "idPrefix", function() { @@ -89,10 +91,11 @@ test( "tabTemplate + panelTemplate", function() { // defaults are tested in the add method test expect( 11 ); - var element = $( "#tabs2" ).tabs({ - tabTemplate: "<li class='customTab'><a href='http://example.com/#{href}'>#{label}</a></li>", - panelTemplate: "<div class='customPanel'></div>" - }); + var tab, anchor, + element = $( "#tabs2" ).tabs({ + tabTemplate: "<li class='customTab'><a href='http://example.com/#{href}'>#{label}</a></li>", + panelTemplate: "<div class='customPanel'></div>" + }); element.one( "tabsadd", function( event, ui ) { var anchor = $( ui.tab ); equal( ui.index, 5, "ui.index" ); @@ -103,8 +106,8 @@ test( "tabTemplate + panelTemplate", function() { ok( $( ui.panel ).hasClass( "customPanel" ), "panel custom class" ); }); element.tabs( "add", "#new", "New" ); - var tab = element.find( ".ui-tabs-nav li" ).last(), - anchor = tab.find( "a" ); + tab = element.find( ".ui-tabs-nav li" ).last(); + anchor = tab.find( "a" ); equal( tab.text(), "New", "label" ); ok( tab.hasClass( "customTab" ), "tab custom class" ); equal( anchor.attr( "href" ), "http://example.com/#new", "href" ); @@ -170,50 +173,50 @@ test( "selected", function() { var element = $( "#tabs1" ).tabs(); equal( element.tabs( "option", "selected" ), 0, "should be 0 by default" ); - tabs_state( element, 1, 0, 0 ); + state( element, 1, 0, 0 ); element.tabs( "destroy" ); location.hash = "#fragment-3"; element = $( "#tabs1" ).tabs(); equal( element.tabs( "option", "selected" ), 2, "should be 2 based on URL" ); - tabs_state( element, 0, 0, 1 ); + state( element, 0, 0, 1 ); element.tabs( "destroy" ); el = $('#tabs1').tabs({ selected: -1, collapsible: true }); - tabs_state( element, 0, 0, 0 ); - equal( element.find( ".ui-tabs-nav .ui-state-active" ).size(), 0, "no tabs selected" ); + state( element, 0, 0, 0 ); + equal( element.find( ".ui-tabs-nav .ui-state-active" ).length, 0, "no tabs selected" ); strictEqual( element.tabs( "option", "selected" ), -1 ); element.tabs( "option", "collapsible", false ); - tabs_state( element, 1, 0, 0 ); + state( element, 1, 0, 0 ); equal( element.tabs( "option", "selected" ), 0 ); element.tabs( "destroy" ); element.tabs({ selected: -1 }); - tabs_state( element, 1, 0, 0 ); + state( element, 1, 0, 0 ); strictEqual( element.tabs( "option", "selected" ), 0 ); element.tabs( "destroy" ); element.tabs({ selected: 2 }); equal( element.tabs( "option", "selected" ), 2 ); - tabs_state( element, 0, 0, 1 ); + state( element, 0, 0, 1 ); element.tabs( "option", "selected", 0 ); equal( element.tabs( "option", "selected" ), 0 ); - tabs_state( element, 1, 0, 0 ); + state( element, 1, 0, 0 ); element.find( ".ui-tabs-nav a" ).eq( 1 ).click(); equal( element.tabs( "option", "selected" ), 1 ); - tabs_state( element, 0, 1, 0 ); + state( element, 0, 1, 0 ); element.tabs( "option", "selected", 10 ); equal( element.tabs( "option", "selected" ), 1 ); - tabs_state( element, 0, 1, 0 ); + state( element, 0, 1, 0 ); location.hash = "#"; }); @@ -236,7 +239,7 @@ asyncTest( "load", function() { strictEqual( ui.tab, tab[ 0 ], "tab" ); strictEqual( ui.panel, panel[ 0 ], "panel" ); equal( $( ui.panel ).find( "p" ).length, 1, "panel html" ); - tabs_state( element, 0, 0, 1, 0, 0 ); + state( element, 0, 0, 1, 0, 0 ); tabsload1(); }); element.tabs({ active: 2 }); @@ -252,7 +255,7 @@ asyncTest( "load", function() { strictEqual( ui.tab, tab[ 0 ], "tab" ); strictEqual( ui.panel, panel[ 0 ], "panel" ); equal( $( ui.panel ).find( "p" ).length, 1, "panel html" ); - tabs_state( element, 0, 0, 0, 1, 0 ); + state( element, 0, 0, 0, 1, 0 ); tabsload2(); }); element.tabs( "option", "active", 3 ); @@ -269,7 +272,7 @@ asyncTest( "load", function() { strictEqual( ui.tab, tab[ 0 ], "tab" ); strictEqual( ui.panel, panel[ 0 ], "panel" ); equal( $( ui.panel ).find( "p" ).length, 1, "panel html" ); - tabs_state( element, 0, 0, 0, 0, 1 ); + state( element, 0, 0, 0, 0, 1 ); start(); }); element.find( ".ui-tabs-nav a" ).eq( 4 ).click(); @@ -324,10 +327,10 @@ test( "show", function() { strictEqual( ui.tab, tabs[ 0 ], "ui.tab" ); strictEqual( ui.panel, panels[ 0 ], "ui.panel" ); equal( ui.index, 0, "ui.index" ); - tabs_state( element, 1, 0, 0 ); + state( element, 1, 0, 0 ); }); element.tabs( "option", "active", 0 ); - tabs_state( element, 1, 0, 0 ); + state( element, 1, 0, 0 ); // switching tabs element.one( "tabsshow", function( event, ui ) { @@ -335,17 +338,17 @@ test( "show", function() { strictEqual( ui.tab, tabs[ 1 ], "ui.tab" ); strictEqual( ui.panel, panels[ 1 ], "ui.panel" ); equal( ui.index, 1, "ui.index" ); - tabs_state( element, 0, 1, 0 ); + state( element, 0, 1, 0 ); }); tabs.eq( 1 ).click(); - tabs_state( element, 0, 1, 0 ); + state( element, 0, 1, 0 ); // collapsing element.one( "tabsshow", function( event, ui ) { ok( false, "collapsing" ); }); element.tabs( "option", "active", false ); - tabs_state( element, 0, 0, 0 ); + state( element, 0, 0, 0 ); }); test( "select", function() { @@ -364,10 +367,10 @@ test( "select", function() { strictEqual( ui.tab, tabs[ 0 ], "ui.tab" ); strictEqual( ui.panel, panels[ 0 ], "ui.panel" ); equal( ui.index, 0, "ui.index" ); - tabs_state( element, 0, 0, 0 ); + state( element, 0, 0, 0 ); }); element.tabs( "option", "active", 0 ); - tabs_state( element, 1, 0, 0 ); + state( element, 1, 0, 0 ); // switching tabs element.one( "tabsselect", function( event, ui ) { @@ -375,26 +378,32 @@ test( "select", function() { strictEqual( ui.tab, tabs[ 1 ], "ui.tab" ); strictEqual( ui.panel, panels[ 1 ], "ui.panel" ); equal( ui.index, 1, "ui.index" ); - tabs_state( element, 1, 0, 0 ); + state( element, 1, 0, 0 ); }); tabs.eq( 1 ).click(); - tabs_state( element, 0, 1, 0 ); + state( element, 0, 1, 0 ); // collapsing element.one( "tabsselect", function( event, ui ) { ok( false, "collapsing" ); }); element.tabs( "option", "active", false ); - tabs_state( element, 0, 0, 0 ); + state( element, 0, 0, 0 ); }); module( "tabs (deprecated): methods" ); test( "add", function() { - expect( 27 ); + expect( 28 ); - var element = $( "#tabs1" ).tabs(); - tabs_state( element, 1, 0, 0 ); + var tab, anchor, + element = $( "#tabs1" ).tabs(); + + function stripLeadingSlash( str ) { + return str.substr( str.charAt( 0 ) === "/" ? 1 : 0 ); + } + + state( element, 1, 0, 0 ); // add without index element.one( "tabsadd", function( event, ui ) { @@ -403,17 +412,18 @@ test( "add", function() { equal( ui.panel.id, "new", "ui.panel" ); }); element.tabs( "add", "#new", "New" ); - tabs_state( element, 1, 0, 0, 0 ); - var tab = element.find( ".ui-tabs-nav li" ).last(), - anchor = tab.find( "a" ); + state( element, 1, 0, 0, 0 ); + tab = element.find( ".ui-tabs-nav li" ).last(); + anchor = tab.find( "a" ); equal( tab.text(), "New", "label" ); - equal( anchor.attr( "href" ), "#new", "href" ); + equal( stripLeadingSlash( anchor[0].pathname ), stripLeadingSlash( location.pathname ), "href pathname" ); + equal( anchor[0].hash, "#new", "href hash" ); equal( anchor.attr( "aria-controls" ), "new", "aria-controls" ); ok( !tab.hasClass( "ui-state-hover" ), "not hovered" ); anchor.simulate( "mouseover" ); ok( tab.hasClass( "ui-state-hover" ), "hovered" ); anchor.simulate( "click" ); - tabs_state( element, 0, 0, 0, 1 ); + state( element, 0, 0, 0, 1 ); // add remote tab with index element.one( "tabsadd", function( event, ui ) { @@ -422,17 +432,19 @@ test( "add", function() { equal( ui.panel.id, $( ui.tab ).attr( "aria-controls" ), "ui.panel" ); }); element.tabs( "add", "data/test.html", "New Remote", 1 ); - tabs_state( element, 0, 0, 0, 0, 1 ); + state( element, 0, 0, 0, 0, 1 ); tab = element.find( ".ui-tabs-nav li" ).eq( 1 ); anchor = tab.find( "a" ); equal( tab.text(), "New Remote", "label" ); - equal( anchor.attr( "href" ), "data/test.html", "href" ); + equal( stripLeadingSlash( stripLeadingSlash( + anchor[0].pathname.replace( stripLeadingSlash( location.pathname ).split( "/" ).slice( 0, -1 ).join( "/" ), "" ) + ) ), "data/test.html", "href" ); ok( /^ui-tabs-\d+$/.test( anchor.attr( "aria-controls" ) ), "aria controls" ); ok( !tab.hasClass( "ui-state-hover" ), "not hovered" ); anchor.simulate( "mouseover" ); ok( tab.hasClass( "ui-state-hover" ), "hovered" ); anchor.simulate( "click" ); - tabs_state( element, 0, 1, 0, 0, 0 ); + state( element, 0, 1, 0, 0, 0 ); // add to empty tab set element = $( "<div><ul></ul></div>" ).tabs(); @@ -443,7 +455,7 @@ test( "add", function() { equal( ui.panel.id, "first", "ui.panel" ); }); element.tabs( "add", "#first", "First" ); - tabs_state( element, 1 ); + state( element, 1 ); equal( element.tabs( "option", "active" ), 0, "active: 0 after add" ); }); @@ -460,7 +472,7 @@ test( "remove", function() { expect( 17 ); var element = $( "#tabs1" ).tabs({ active: 1 }); - tabs_state( element, 0, 1, 0 ); + state( element, 0, 1, 0 ); element.one( "tabsremove", function( event, ui ) { equal( ui.index, -1, "ui.index" ); @@ -468,7 +480,7 @@ test( "remove", function() { equal( ui.panel.id, "fragment-2", "ui.panel" ); }); element.tabs( "remove", 1 ); - tabs_state( element, 0, 1 ); + state( element, 0, 1 ); equal( element.tabs( "option", "active" ), 1 ); equal( element.find( ".ui-tabs-nav li a[href$='fragment-2']" ).length, 0, "remove correct list item" ); @@ -480,7 +492,7 @@ test( "remove", function() { equal( ui.panel.id, "fragment-3", "ui.panel" ); }); element.tabs( "remove", 1 ); - tabs_state( element, 1 ); + state( element, 1 ); equal( element.tabs( "option", "active"), 0 ); element.one( "tabsremove", function( event, ui ) { @@ -496,43 +508,43 @@ test( "select", function() { expect( 23 ); var element = $( "#tabs1" ).tabs(); - tabs_state( element, 1, 0, 0 ); + state( element, 1, 0, 0 ); element.tabs( "select", 1 ); - tabs_state( element, 0, 1, 0 ); + state( element, 0, 1, 0 ); equal( element.tabs( "option", "active" ), 1, "active" ); equal( element.tabs( "option", "selected" ), 1, "selected" ); element.tabs( "destroy" ); element.tabs({ collapsible: true }); - tabs_state( element, 1, 0, 0 ); + state( element, 1, 0, 0 ); element.tabs( "select", 0 ); - tabs_state( element, 0, 0, 0 ); + state( element, 0, 0, 0 ); equal( element.tabs( "option", "active" ), false, "active" ); equal( element.tabs( "option", "selected" ), -1, "selected" ); element.tabs( "destroy" ); element.tabs({ collapsible: true }); element.tabs( "select", -1 ); - tabs_state( element, 0, 0, 0 ); + state( element, 0, 0, 0 ); equal( element.tabs( "option", "active" ), false, "active" ); equal( element.tabs( "option", "selected" ), -1, "selected" ); element.tabs( "destroy" ); element.tabs(); - tabs_state( element, 1, 0, 0 ); + state( element, 1, 0, 0 ); equal( element.tabs( "option", "active" ), 0, "active" ); equal( element.tabs( "option", "selected" ), 0, "selected" ); element.tabs( "select", 0 ); - tabs_state( element, 1, 0, 0 ); + state( element, 1, 0, 0 ); equal( element.tabs( "option", "active" ), 0, "active" ); equal( element.tabs( "option", "selected" ), 0, "selected" ); element.tabs( "select", -1 ); - tabs_state( element, 1, 0, 0 ); + state( element, 1, 0, 0 ); equal( element.tabs( "option", "active" ), 0, "active" ); equal( element.tabs( "option", "selected" ), 0, "selected" ); element.tabs( "select", "#fragment-2" ); - tabs_state( element, 0, 1, 0 ); + state( element, 0, 1, 0 ); equal( element.tabs( "option", "active" ), 1, "active" ); equal( element.tabs( "option", "selected" ), 1, "selected" ); }); @@ -569,6 +581,10 @@ asyncTest( "abort", function() { start(); }); }); + // prevent IE from caching the request, so that it won't resolve before we call abort + element.find( ".ui-tabs-nav li:eq(2) a" ).attr( "href", function( href ) { + return href + "?" + (+ new Date()); + }); element.tabs( "option", "active", 2 ); element.tabs( "abort" ); }); diff --git a/tests/unit/tabs/tabs_events.js b/tests/unit/tabs/tabs_events.js index 4f9269b62..f33686581 100644 --- a/tests/unit/tabs/tabs_events.js +++ b/tests/unit/tabs/tabs_events.js @@ -1,5 +1,7 @@ (function( $ ) { +var state = TestHelpers.tabs.state; + module( "tabs: events" ); test( "create", function() { @@ -11,9 +13,9 @@ test( "create", function() { element.tabs({ create: function( event, ui ) { - equal( ui.tab.size(), 1, "tab size" ); + equal( ui.tab.length, 1, "tab length" ); strictEqual( ui.tab[ 0 ], tabs[ 0 ], "tab" ); - equal( ui.panel.size(), 1, "panel size" ); + equal( ui.panel.length, 1, "panel length" ); strictEqual( ui.panel[ 0 ], panels[ 0 ], "panel" ); } }); @@ -22,9 +24,9 @@ test( "create", function() { element.tabs({ active: 2, create: function( event, ui ) { - equal( ui.tab.size(), 1, "tab size" ); + equal( ui.tab.length, 1, "tab length" ); strictEqual( ui.tab[ 0 ], tabs[ 2 ], "tab" ); - equal( ui.panel.size(), 1, "panel size" ); + equal( ui.panel.length, 1, "panel length" ); strictEqual( ui.panel[ 0 ], panels[ 2 ], "panel" ); } }); @@ -34,8 +36,8 @@ test( "create", function() { active: false, collapsible: true, create: function( event, ui ) { - equal( ui.tab.size(), 0, "tab size" ); - equal( ui.panel.size(), 0, "panel size" ); + equal( ui.tab.length, 0, "tab length" ); + equal( ui.panel.length, 0, "panel length" ); } }); element.tabs( "destroy" ); @@ -54,61 +56,61 @@ test( "beforeActivate", function() { // from collapsed element.one( "tabsbeforeactivate", function( event, ui ) { ok( !( "originalEvent" in event ), "originalEvent" ); - equal( ui.oldTab.size(), 0, "oldTab size" ); - equal( ui.oldPanel.size(), 0, "oldPanel size" ); - equal( ui.newTab.size(), 1, "newTab size" ); + equal( ui.oldTab.length, 0, "oldTab length" ); + equal( ui.oldPanel.length, 0, "oldPanel length" ); + equal( ui.newTab.length, 1, "newTab length" ); strictEqual( ui.newTab[ 0 ], tabs[ 0 ], "newTab" ); - equal( ui.newPanel.size(), 1, "newPanel size" ); + equal( ui.newPanel.length, 1, "newPanel length" ); strictEqual( ui.newPanel[ 0 ], panels[ 0 ], "newPanel" ); - tabs_state( element, 0, 0, 0 ); + state( element, 0, 0, 0 ); }); element.tabs( "option", "active", 0 ); - tabs_state( element, 1, 0, 0 ); + state( element, 1, 0, 0 ); // switching tabs element.one( "tabsbeforeactivate", function( event, ui ) { equal( event.originalEvent.type, "click", "originalEvent" ); - equal( ui.oldTab.size(), 1, "oldTab size" ); + equal( ui.oldTab.length, 1, "oldTab length" ); strictEqual( ui.oldTab[ 0 ], tabs[ 0 ], "oldTab" ); - equal( ui.oldPanel.size(), 1, "oldPanel size" ); + equal( ui.oldPanel.length, 1, "oldPanel length" ); strictEqual( ui.oldPanel[ 0 ], panels[ 0 ], "oldPanel" ); - equal( ui.newTab.size(), 1, "newTab size" ); + equal( ui.newTab.length, 1, "newTab length" ); strictEqual( ui.newTab[ 0 ], tabs[ 1 ], "newTab" ); - equal( ui.newPanel.size(), 1, "newPanel size" ); + equal( ui.newPanel.length, 1, "newPanel length" ); strictEqual( ui.newPanel[ 0 ], panels[ 1 ], "newPanel" ); - tabs_state( element, 1, 0, 0 ); + state( element, 1, 0, 0 ); }); tabs.eq( 1 ).click(); - tabs_state( element, 0, 1, 0 ); + state( element, 0, 1, 0 ); // collapsing element.one( "tabsbeforeactivate", function( event, ui ) { ok( !( "originalEvent" in event ), "originalEvent" ); - equal( ui.oldTab.size(), 1, "oldTab size" ); + equal( ui.oldTab.length, 1, "oldTab length" ); strictEqual( ui.oldTab[ 0 ], tabs[ 1 ], "oldTab" ); - equal( ui.oldPanel.size(), 1, "oldPanel size" ); + equal( ui.oldPanel.length, 1, "oldPanel length" ); strictEqual( ui.oldPanel[ 0 ], panels[ 1 ], "oldPanel" ); - equal( ui.newTab.size(), 0, "newTab size" ); - equal( ui.newPanel.size(), 0, "newPanel size" ); - tabs_state( element, 0, 1, 0 ); + equal( ui.newTab.length, 0, "newTab length" ); + equal( ui.newPanel.length, 0, "newPanel length" ); + state( element, 0, 1, 0 ); }); element.tabs( "option", "active", false ); - tabs_state( element, 0, 0, 0 ); + state( element, 0, 0, 0 ); // prevent activation element.one( "tabsbeforeactivate", function( event, ui ) { ok( !( "originalEvent" in event ), "originalEvent" ); - equal( ui.oldTab.size(), 0, "oldTab size" ); - equal( ui.oldPanel.size(), 0, "oldTab" ); - equal( ui.newTab.size(), 1, "newTab size" ); + equal( ui.oldTab.length, 0, "oldTab length" ); + equal( ui.oldPanel.length, 0, "oldTab" ); + equal( ui.newTab.length, 1, "newTab length" ); strictEqual( ui.newTab[ 0 ], tabs[ 1 ], "newTab" ); - equal( ui.newPanel.size(), 1, "newPanel size" ); + equal( ui.newPanel.length, 1, "newPanel length" ); strictEqual( ui.newPanel[ 0 ], panels[ 1 ], "newPanel" ); event.preventDefault(); - tabs_state( element, 0, 0, 0 ); + state( element, 0, 0, 0 ); }); element.tabs( "option", "active", 1 ); - tabs_state( element, 0, 0, 0 ); + state( element, 0, 0, 0 ); }); test( "activate", function() { @@ -124,46 +126,46 @@ test( "activate", function() { // from collapsed element.one( "tabsactivate", function( event, ui ) { ok( !( "originalEvent" in event ), "originalEvent" ); - equal( ui.oldTab.size(), 0, "oldTab size" ); - equal( ui.oldPanel.size(), 0, "oldPanel size" ); - equal( ui.newTab.size(), 1, "newTab size" ); + equal( ui.oldTab.length, 0, "oldTab length" ); + equal( ui.oldPanel.length, 0, "oldPanel length" ); + equal( ui.newTab.length, 1, "newTab length" ); strictEqual( ui.newTab[ 0 ], tabs[ 0 ], "newTab" ); - equal( ui.newPanel.size(), 1, "newPanel size" ); + equal( ui.newPanel.length, 1, "newPanel length" ); strictEqual( ui.newPanel[ 0 ], panels[ 0 ], "newPanel" ); - tabs_state( element, 1, 0, 0 ); + state( element, 1, 0, 0 ); }); element.tabs( "option", "active", 0 ); - tabs_state( element, 1, 0, 0 ); + state( element, 1, 0, 0 ); // switching tabs element.one( "tabsactivate", function( event, ui ) { equal( event.originalEvent.type, "click", "originalEvent" ); - equal( ui.oldTab.size(), 1, "oldTab size" ); + equal( ui.oldTab.length, 1, "oldTab length" ); strictEqual( ui.oldTab[ 0 ], tabs[ 0 ], "oldTab" ); - equal( ui.oldPanel.size(), 1, "oldPanel size" ); + equal( ui.oldPanel.length, 1, "oldPanel length" ); strictEqual( ui.oldPanel[ 0 ], panels[ 0 ], "oldPanel" ); - equal( ui.newTab.size(), 1, "newTab size" ); + equal( ui.newTab.length, 1, "newTab length" ); strictEqual( ui.newTab[ 0 ], tabs[ 1 ], "newTab" ); - equal( ui.newPanel.size(), 1, "newPanel size" ); + equal( ui.newPanel.length, 1, "newPanel length" ); strictEqual( ui.newPanel[ 0 ], panels[ 1 ], "newPanel" ); - tabs_state( element, 0, 1, 0 ); + state( element, 0, 1, 0 ); }); tabs.eq( 1 ).click(); - tabs_state( element, 0, 1, 0 ); + state( element, 0, 1, 0 ); // collapsing element.one( "tabsactivate", function( event, ui ) { ok( !( "originalEvent" in event ), "originalEvent" ); - equal( ui.oldTab.size(), 1, "oldTab size" ); + equal( ui.oldTab.length, 1, "oldTab length" ); strictEqual( ui.oldTab[ 0 ], tabs[ 1 ], "oldTab" ); - equal( ui.oldPanel.size(), 1, "oldPanel size" ); + equal( ui.oldPanel.length, 1, "oldPanel length" ); strictEqual( ui.oldPanel[ 0 ], panels[ 1 ], "oldPanel" ); - equal( ui.newTab.size(), 0, "newTab size" ); - equal( ui.newPanel.size(), 0, "newPanel size" ); - tabs_state( element, 0, 0, 0 ); + equal( ui.newTab.length, 0, "newTab length" ); + equal( ui.newPanel.length, 0, "newPanel length" ); + state( element, 0, 0, 0 ); }); element.tabs( "option", "active", false ); - tabs_state( element, 0, 0, 0 ); + state( element, 0, 0, 0 ); // prevent activation element.one( "tabsbeforeactivate", function( event ) { @@ -191,16 +193,16 @@ test( "beforeLoad", function() { ok( !( "originalEvent" in event ), "originalEvent" ); ok( "abort" in ui.jqXHR, "jqXHR" ); ok( ui.ajaxSettings.url, "data/test.html", "ajaxSettings.url" ); - equal( ui.tab.size(), 1, "tab size" ); + equal( ui.tab.length, 1, "tab length" ); strictEqual( ui.tab[ 0 ], tab[ 0 ], "tab" ); - equal( ui.panel.size(), 1, "panel size" ); + equal( ui.panel.length, 1, "panel length" ); strictEqual( ui.panel[ 0 ], panel[ 0 ], "panel" ); equal( ui.panel.html(), "", "panel html" ); event.preventDefault(); - tabs_state( element, 0, 0, 1, 0, 0 ); + state( element, 0, 0, 1, 0, 0 ); }); element.tabs({ active: 2 }); - tabs_state( element, 0, 0, 1, 0, 0 ); + state( element, 0, 0, 1, 0, 0 ); equal( panel.html(), "", "panel html after" ); element.tabs( "destroy" ); @@ -213,17 +215,17 @@ test( "beforeLoad", function() { ok( !( "originalEvent" in event ), "originalEvent" ); ok( "abort" in ui.jqXHR, "jqXHR" ); ok( ui.ajaxSettings.url, "data/test.html", "ajaxSettings.url" ); - equal( ui.tab.size(), 1, "tab size" ); + equal( ui.tab.length, 1, "tab length" ); strictEqual( ui.tab[ 0 ], tab[ 0 ], "tab" ); - equal( ui.panel.size(), 1, "panel size" ); + equal( ui.panel.length, 1, "panel length" ); strictEqual( ui.panel[ 0 ], panel[ 0 ], "panel" ); equal( ui.panel.html(), "", "panel html" ); event.preventDefault(); - tabs_state( element, 1, 0, 0, 0, 0 ); + state( element, 1, 0, 0, 0, 0 ); }); element.tabs(); element.tabs( "option", "active", 2 ); - tabs_state( element, 0, 0, 1, 0, 0 ); + state( element, 0, 0, 1, 0, 0 ); equal( panel.html(), "", "panel html after" ); // click, change panel content @@ -235,16 +237,16 @@ test( "beforeLoad", function() { equal( event.originalEvent.type, "click", "originalEvent" ); ok( "abort" in ui.jqXHR, "jqXHR" ); ok( ui.ajaxSettings.url, "data/test.html", "ajaxSettings.url" ); - equal( ui.tab.size(), 1, "tab size" ); + equal( ui.tab.length, 1, "tab length" ); strictEqual( ui.tab[ 0 ], tab[ 0 ], "tab" ); - equal( ui.panel.size(), 1, "panel size" ); + equal( ui.panel.length, 1, "panel length" ); strictEqual( ui.panel[ 0 ], panel[ 0 ], "panel" ); ui.panel.html( "<p>testing</p>" ); event.preventDefault(); - tabs_state( element, 0, 0, 1, 0, 0 ); + state( element, 0, 0, 1, 0, 0 ); }); element.find( ".ui-tabs-nav a" ).eq( 3 ).click(); - tabs_state( element, 0, 0, 0, 1, 0 ); + state( element, 0, 0, 0, 1, 0 ); // .toLowerCase() is needed to convert <P> to <p> in old IEs equal( panel.html().toLowerCase(), "<p>testing</p>", "panel html after" ); }); @@ -263,12 +265,12 @@ if ( $.uiBackCompat === false ) { panel = $( "#" + panelId ); ok( !( "originalEvent" in event ), "originalEvent" ); - equal( ui.tab.size(), 1, "tab size" ); + equal( ui.tab.length, 1, "tab length" ); strictEqual( ui.tab[ 0 ], tab[ 0 ], "tab" ); - equal( ui.panel.size(), 1, "panel size" ); + equal( ui.panel.length, 1, "panel length" ); strictEqual( ui.panel[ 0 ], panel[ 0 ], "panel" ); equal( ui.panel.find( "p" ).length, 1, "panel html" ); - tabs_state( element, 0, 0, 1, 0, 0 ); + state( element, 0, 0, 1, 0, 0 ); tabsload1(); }); element.tabs({ active: 2 }); @@ -281,12 +283,12 @@ if ( $.uiBackCompat === false ) { panel = $( "#" + panelId ); ok( !( "originalEvent" in event ), "originalEvent" ); - equal( ui.tab.size(), 1, "tab size" ); + equal( ui.tab.length, 1, "tab length" ); strictEqual( ui.tab[ 0 ], tab[ 0 ], "tab" ); - equal( ui.panel.size(), 1, "panel size" ); + equal( ui.panel.length, 1, "panel length" ); strictEqual( ui.panel[ 0 ], panel[ 0 ], "panel" ); equal( ui.panel.find( "p" ).length, 1, "panel html" ); - tabs_state( element, 0, 0, 0, 1, 0 ); + state( element, 0, 0, 0, 1, 0 ); tabsload2(); }); element.tabs( "option", "active", 3 ); @@ -300,12 +302,12 @@ if ( $.uiBackCompat === false ) { panel = $( "#" + panelId ); equal( event.originalEvent.type, "click", "originalEvent" ); - equal( ui.tab.size(), 1, "tab size" ); + equal( ui.tab.length, 1, "tab length" ); strictEqual( ui.tab[ 0 ], tab[ 0 ], "tab" ); - equal( ui.panel.size(), 1, "panel size" ); + equal( ui.panel.length, 1, "panel length" ); strictEqual( ui.panel[ 0 ], panel[ 0 ], "panel" ); equal( ui.panel.find( "p" ).length, 1, "panel html" ); - tabs_state( element, 0, 0, 0, 0, 1 ); + state( element, 0, 0, 0, 0, 1 ); start(); }); element.find( ".ui-tabs-nav a" ).eq( 4 ).click(); diff --git a/tests/unit/tabs/tabs_methods.js b/tests/unit/tabs/tabs_methods.js index fee87db96..0837995e6 100644 --- a/tests/unit/tabs/tabs_methods.js +++ b/tests/unit/tabs/tabs_methods.js @@ -1,5 +1,8 @@ (function( $ ) { +var disabled = TestHelpers.tabs.disabled, + state = TestHelpers.tabs.state; + module( "tabs: methods" ); test( "destroy", function() { @@ -12,95 +15,95 @@ test( "enable", function() { expect( 8 ); var element = $( "#tabs1" ).tabs({ disabled: true }); - tabs_disabled( element, true ); + disabled( element, true ); element.tabs( "enable" ); - tabs_disabled( element, false ); + disabled( element, false ); element.tabs( "destroy" ); element.tabs({ disabled: [ 0, 1 ] }); - tabs_disabled( element, [ 0, 1 ] ); + disabled( element, [ 0, 1 ] ); element.tabs( "enable" ); - tabs_disabled( element, false ); + disabled( element, false ); }); test( "enable( index )", function() { expect( 10 ); var element = $( "#tabs1" ).tabs({ disabled: true }); - tabs_disabled( element, true ); + disabled( element, true ); // fully disabled -> partially disabled element.tabs( "enable", 1 ); - tabs_disabled( element, [ 0, 2 ] ); + disabled( element, [ 0, 2 ] ); // partially disabled -> partially disabled element.tabs( "enable", 2 ); - tabs_disabled( element, [ 0 ] ); + disabled( element, [ 0 ] ); // already enabled tab, no change element.tabs( "enable", 2 ); - tabs_disabled( element, [ 0 ] ); + disabled( element, [ 0 ] ); // partially disabled -> fully enabled element.tabs( "enable", 0 ); - tabs_disabled( element, false ); + disabled( element, false ); }); test( "disable", function() { expect( 8 ); var element = $( "#tabs1" ).tabs({ disabled: false }); - tabs_disabled( element, false ); + disabled( element, false ); element.tabs( "disable" ); - tabs_disabled( element, true ); + disabled( element, true ); element.tabs( "destroy" ); element.tabs({ disabled: [ 0, 1 ] }); - tabs_disabled( element, [ 0, 1 ] ); + disabled( element, [ 0, 1 ] ); element.tabs( "disable" ); - tabs_disabled( element, true ); + disabled( element, true ); }); test( "disable( index )", function() { expect( 10 ); var element = $( "#tabs1" ).tabs({ disabled: false }); - tabs_disabled( element, false ); + disabled( element, false ); // fully enabled -> partially disabled element.tabs( "disable", 1 ); - tabs_disabled( element, [ 1 ] ); + disabled( element, [ 1 ] ); // partially disabled -> partially disabled element.tabs( "disable", 2 ); - tabs_disabled( element, [ 1, 2 ] ); + disabled( element, [ 1, 2 ] ); // already disabled tab, no change element.tabs( "disable", 2 ); - tabs_disabled( element, [ 1, 2 ] ); + disabled( element, [ 1, 2 ] ); // partially disabled -> fully disabled element.tabs( "disable", 0 ); - tabs_disabled( element, true ); + disabled( element, true ); }); test( "refresh", function() { expect( 27 ); var element = $( "#tabs1" ).tabs(); - tabs_state( element, 1, 0, 0 ); - tabs_disabled( element, false ); + state( element, 1, 0, 0 ); + disabled( element, false ); // disable tab via markup element.find( ".ui-tabs-nav li" ).eq( 1 ).addClass( "ui-state-disabled" ); element.tabs( "refresh" ); - tabs_state( element, 1, 0, 0 ); - tabs_disabled( element, [ 1 ] ); + state( element, 1, 0, 0 ); + disabled( element, [ 1 ] ); // add remote tab element.find( ".ui-tabs-nav" ).append( "<li id='newTab'><a href='data/test.html'>new</a></li>" ); element.tabs( "refresh" ); - tabs_state( element, 1, 0, 0, 0 ); - tabs_disabled( element, [ 1 ] ); + state( element, 1, 0, 0, 0 ); + disabled( element, [ 1 ] ); equal( element.find( "#" + $( "#newTab a" ).attr( "aria-controls" ) ).length, 1, "panel added for remote tab" ); // remove all tabs element.find( ".ui-tabs-nav li, .ui-tabs-panel" ).remove(); element.tabs( "refresh" ); - tabs_state( element ); + state( element ); equal( element.tabs( "option", "active" ), false, "no active tab" ); // add tabs @@ -115,34 +118,34 @@ test( "refresh", function() { .append( "<div id='newTab4'>new 4</div>" ) .append( "<div id='newTab5'>new 5</div>" ); element.tabs( "refresh" ); - tabs_state( element, 0, 0, 0, 0 ); - tabs_disabled( element, [ 0 ] ); + state( element, 0, 0, 0, 0 ); + disabled( element, [ 0 ] ); // activate third tab element.tabs( "option", "active", 2 ); - tabs_state( element, 0, 0, 1, 0 ); - tabs_disabled( element, [ 0 ] ); + state( element, 0, 0, 1, 0 ); + disabled( element, [ 0 ] ); // remove fourth tab, third tab should stay active element.find( ".ui-tabs-nav li" ).eq( 3 ).remove(); element.find( ".ui-tabs-panel" ).eq( 3 ).remove(); element.tabs( "refresh" ); - tabs_state( element, 0, 0, 1 ); - tabs_disabled( element, [ 0 ] ); + state( element, 0, 0, 1 ); + disabled( element, [ 0 ] ); // remove third (active) tab, second tab should become active element.find( ".ui-tabs-nav li" ).eq( 2 ).remove(); element.find( ".ui-tabs-panel" ).eq( 2 ).remove(); element.tabs( "refresh" ); - tabs_state( element, 0, 1 ); - tabs_disabled( element, [ 0 ] ); + state( element, 0, 1 ); + disabled( element, [ 0 ] ); // remove first tab, previously active tab (now first) should stay active element.find( ".ui-tabs-nav li" ).eq( 0 ).remove(); element.find( ".ui-tabs-panel" ).eq( 0 ).remove(); element.tabs( "refresh" ); - tabs_state( element, 1 ); - tabs_disabled( element, false ); + state( element, 1 ); + disabled( element, false ); }); asyncTest( "load", function() { @@ -158,32 +161,31 @@ asyncTest( "load", function() { panel = $( "#" + panelId ); ok( !( "originalEvent" in event ), "originalEvent" ); - equal( ui.tab.size(), 1, "tab size" ); + equal( ui.tab.length, 1, "tab length" ); strictEqual( ui.tab[ 0 ], tab[ 0 ], "tab" ); - equal( ui.panel.size(), 1, "panel size" ); + equal( ui.panel.length, 1, "panel length" ); strictEqual( ui.panel[ 0 ], panel[ 0 ], "panel" ); - tabs_state( element, 1, 0, 0, 0, 0 ); + state( element, 1, 0, 0, 0, 0 ); }); element.one( "tabsload", function( event, ui ) { // TODO: remove wrapping in 2.0 var uiTab = $( ui.tab ), - uiPanel = $( ui.panel ); - - var tab = element.find( ".ui-tabs-nav a" ).eq( 3 ), + uiPanel = $( ui.panel ), + tab = element.find( ".ui-tabs-nav a" ).eq( 3 ), panelId = tab.attr( "aria-controls" ), panel = $( "#" + panelId ); ok( !( "originalEvent" in event ), "originalEvent" ); - equal( uiTab.size(), 1, "tab size" ); + equal( uiTab.length, 1, "tab length" ); strictEqual( uiTab[ 0 ], tab[ 0 ], "tab" ); - equal( uiPanel.size(), 1, "panel size" ); + equal( uiPanel.length, 1, "panel length" ); strictEqual( uiPanel[ 0 ], panel[ 0 ], "panel" ); equal( uiPanel.find( "p" ).length, 1, "panel html" ); - tabs_state( element, 1, 0, 0, 0, 0 ); + state( element, 1, 0, 0, 0, 0 ); setTimeout( tabsload1, 100 ); }); element.tabs( "load", 3 ); - tabs_state( element, 1, 0, 0, 0, 0 ); + state( element, 1, 0, 0, 0, 0 ); function tabsload1() { // no need to test details of event (tested in events tests) @@ -195,7 +197,7 @@ asyncTest( "load", function() { setTimeout( tabsload2, 100 ); }); element.tabs( "option", "active", 3 ); - tabs_state( element, 0, 0, 0, 1, 0 ); + state( element, 0, 0, 0, 1, 0 ); } function tabsload2() { @@ -206,31 +208,30 @@ asyncTest( "load", function() { panel = $( "#" + panelId ); ok( !( "originalEvent" in event ), "originalEvent" ); - equal( ui.tab.size(), 1, "tab size" ); + equal( ui.tab.length, 1, "tab length" ); strictEqual( ui.tab[ 0 ], tab[ 0 ], "tab" ); - equal( ui.panel.size(), 1, "panel size" ); + equal( ui.panel.length, 1, "panel length" ); strictEqual( ui.panel[ 0 ], panel[ 0 ], "panel" ); - tabs_state( element, 0, 0, 0, 1, 0 ); + state( element, 0, 0, 0, 1, 0 ); }); element.one( "tabsload", function( event, ui ) { // TODO: remove wrapping in 2.0 var uiTab = $( ui.tab ), - uiPanel = $( ui.panel ); - - var tab = element.find( ".ui-tabs-nav a" ).eq( 3 ), + uiPanel = $( ui.panel ), + tab = element.find( ".ui-tabs-nav a" ).eq( 3 ), panelId = tab.attr( "aria-controls" ), panel = $( "#" + panelId ); ok( !( "originalEvent" in event ), "originalEvent" ); - equal( uiTab.size(), 1, "tab size" ); + equal( uiTab.length, 1, "tab length" ); strictEqual( uiTab[ 0 ], tab[ 0 ], "tab" ); - equal( uiPanel.size(), 1, "panel size" ); + equal( uiPanel.length, 1, "panel length" ); strictEqual( uiPanel[ 0 ], panel[ 0 ], "panel" ); - tabs_state( element, 0, 0, 0, 1, 0 ); + state( element, 0, 0, 0, 1, 0 ); start(); }); element.tabs( "load", 3 ); - tabs_state( element, 0, 0, 0, 1, 0 ); + state( element, 0, 0, 0, 1, 0 ); } }); diff --git a/tests/unit/tabs/tabs_options.js b/tests/unit/tabs/tabs_options.js index e1ebf5efa..ae9e7bdc6 100644 --- a/tests/unit/tabs/tabs_options.js +++ b/tests/unit/tabs/tabs_options.js @@ -1,5 +1,8 @@ (function( $ ) { +var disabled = TestHelpers.tabs.disabled, + state = TestHelpers.tabs.state; + module( "tabs: options" ); test( "{ active: default }", function() { @@ -7,13 +10,13 @@ test( "{ active: default }", function() { var element = $( "#tabs1" ).tabs(); equal( element.tabs( "option", "active" ), 0, "should be 0 by default" ); - tabs_state( element, 1, 0, 0 ); + state( element, 1, 0, 0 ); element.tabs( "destroy" ); location.hash = "#fragment-3"; element = $( "#tabs1" ).tabs(); equal( element.tabs( "option", "active" ), 2, "should be 2 based on URL" ); - tabs_state( element, 0, 0, 1 ); + state( element, 0, 0, 1 ); element.tabs( "destroy" ); location.hash = "#"; }); @@ -25,19 +28,19 @@ test( "{ active: false }", function() { active: false, collapsible: true }); - tabs_state( element, 0, 0, 0 ); - equal( element.find( ".ui-tabs-nav .ui-state-active" ).size(), 0, "no tabs selected" ); + state( element, 0, 0, 0 ); + equal( element.find( ".ui-tabs-nav .ui-state-active" ).length, 0, "no tabs selected" ); strictEqual( element.tabs( "option", "active" ), false ); element.tabs( "option", "collapsible", false ); - tabs_state( element, 1, 0, 0 ); + state( element, 1, 0, 0 ); equal( element.tabs( "option", "active" ), 0 ); element.tabs( "destroy" ); element.tabs({ active: false }); - tabs_state( element, 1, 0, 0 ); + state( element, 1, 0, 0 ); strictEqual( element.tabs( "option", "active" ), 0 ); }); @@ -48,19 +51,19 @@ test( "{ active: Number }", function() { active: 2 }); equal( element.tabs( "option", "active" ), 2 ); - tabs_state( element, 0, 0, 1 ); + state( element, 0, 0, 1 ); element.tabs( "option", "active", 0 ); equal( element.tabs( "option", "active" ), 0 ); - tabs_state( element, 1, 0, 0 ); + state( element, 1, 0, 0 ); element.find( ".ui-tabs-nav a" ).eq( 1 ).click(); equal( element.tabs( "option", "active" ), 1 ); - tabs_state( element, 0, 1, 0 ); + state( element, 0, 1, 0 ); element.tabs( "option", "active", 10 ); equal( element.tabs( "option", "active" ), 1 ); - tabs_state( element, 0, 1, 0 ); + state( element, 0, 1, 0 ); }); if ( $.uiBackCompat === false ) { @@ -69,19 +72,19 @@ if ( $.uiBackCompat === false ) { active: -1 }); equal( element.tabs( "option", "active" ), 2 ); - tabs_state( element, 0, 0, 1 ); + state( element, 0, 0, 1 ); element.tabs( "option", "active", -2 ); equal( element.tabs( "option", "active" ), 1 ); - tabs_state( element, 0, 1, 0 ); + state( element, 0, 1, 0 ); element.tabs( "option", "active", -10 ); equal( element.tabs( "option", "active" ), 1 ); - tabs_state( element, 0, 1, 0 ); + state( element, 0, 1, 0 ); element.tabs( "option", "active", -3 ); equal( element.tabs( "option", "active" ), 0 ); - tabs_state( element, 1, 0, 0 ); + state( element, 1, 0, 0 ); }); } @@ -91,9 +94,9 @@ test( "active - mismatched tab/panel order", function() { location.hash = "#tabs7-2"; var element = $( "#tabs7" ).tabs(); equal( element.tabs( "option", "active" ), 1, "should be 1 based on URL" ); - tabs_state( element, 0, 1 ); + state( element, 0, 1 ); element.tabs( "option", "active", 0 ); - tabs_state( element, 1, 0 ); + state( element, 1, 0 ); location.hash = "#"; }); @@ -105,11 +108,11 @@ test( "{ collapsible: false }", function() { }); element.tabs( "option", "active", false ); equal( element.tabs( "option", "active" ), 1 ); - tabs_state( element, 0, 1, 0 ); + state( element, 0, 1, 0 ); element.find( ".ui-state-active a" ).eq( 1 ).click(); equal( element.tabs( "option", "active" ), 1 ); - tabs_state( element, 0, 1, 0 ); + state( element, 0, 1, 0 ); }); test( "{ collapsible: true }", function() { @@ -122,15 +125,15 @@ test( "{ collapsible: true }", function() { element.tabs( "option", "active", false ); equal( element.tabs( "option", "active" ), false ); - tabs_state( element, 0, 0, 0 ); + state( element, 0, 0, 0 ); element.tabs( "option", "active", 1 ); equal( element.tabs( "option", "active" ), 1 ); - tabs_state( element, 0, 1, 0 ); + state( element, 0, 1, 0 ); element.find( ".ui-state-active a" ).click(); equal( element.tabs( "option", "active" ), false ); - tabs_state( element, 0, 0, 0 ); + state( element, 0, 0, 0 ); }); test( "disabled", function() { @@ -138,23 +141,23 @@ test( "disabled", function() { // fully enabled by default var element = $( "#tabs1" ).tabs(); - tabs_disabled( element, false ); + disabled( element, false ); // disable single tab element.tabs( "option", "disabled", [ 1 ] ); - tabs_disabled( element, [ 1 ] ); + disabled( element, [ 1 ] ); // disabled active tab element.tabs( "option", "disabled", [ 0, 1 ] ); - tabs_disabled( element, [ 0, 1 ] ); + disabled( element, [ 0, 1 ] ); // disable all tabs element.tabs( "option", "disabled", [ 0, 1, 2 ] ); - tabs_disabled( element, true ); + disabled( element, true ); // enable all tabs element.tabs( "option", "disabled", [] ); - tabs_disabled( element, false ); + disabled( element, false ); }); test( "{ event: null }", function() { @@ -163,16 +166,16 @@ test( "{ event: null }", function() { var element = $( "#tabs1" ).tabs({ event: null }); - tabs_state( element, 1, 0, 0 ); + state( element, 1, 0, 0 ); element.tabs( "option", "active", 1 ); equal( element.tabs( "option", "active" ), 1 ); - tabs_state( element, 0, 1, 0 ); + state( element, 0, 1, 0 ); // ensure default click handler isn't bound element.find( ".ui-tabs-nav a" ).eq( 2 ).click(); equal( element.tabs( "option", "active" ), 1 ); - tabs_state( element, 0, 1, 0 ); + state( element, 0, 1, 0 ); }); test( "{ event: custom }", function() { @@ -181,31 +184,31 @@ test( "{ event: custom }", function() { var element = $( "#tabs1" ).tabs({ event: "custom1 custom2" }); - tabs_state( element, 1, 0, 0 ); + state( element, 1, 0, 0 ); element.find( ".ui-tabs-nav a" ).eq( 1 ).trigger( "custom1" ); equal( element.tabs( "option", "active" ), 1 ); - tabs_state( element, 0, 1, 0 ); + state( element, 0, 1, 0 ); // ensure default click handler isn't bound element.find( ".ui-tabs-nav a" ).eq( 2 ).trigger( "click" ); equal( element.tabs( "option", "active" ), 1 ); - tabs_state( element, 0, 1, 0 ); + state( element, 0, 1, 0 ); element.find( ".ui-tabs-nav a" ).eq( 2 ).trigger( "custom2" ); equal( element.tabs( "option", "active" ), 2 ); - tabs_state( element, 0, 0, 1 ); + state( element, 0, 0, 1 ); element.tabs( "option", "event", "custom3" ); // ensure old event handlers are unbound element.find( ".ui-tabs-nav a" ).eq( 1 ).trigger( "custom1" ); equal( element.tabs( "option", "active" ), 2 ); - tabs_state( element, 0, 0, 1 ); + state( element, 0, 0, 1 ); element.find( ".ui-tabs-nav a" ).eq( 1 ).trigger( "custom3" ); equal( element.tabs( "option", "active" ), 1 ); - tabs_state( element, 0, 1, 0 ); + state( element, 0, 1, 0 ); }); // TODO: add animation tests diff --git a/tests/unit/tabs/tabs_test_helpers.js b/tests/unit/tabs/tabs_test_helpers.js new file mode 100644 index 000000000..9f592c074 --- /dev/null +++ b/tests/unit/tabs/tabs_test_helpers.js @@ -0,0 +1,61 @@ +TestHelpers.tabs = { + disabled: function( tabs, state ) { + var expected, actual, + internalState = tabs.tabs( "option", "disabled" ); + + if ( internalState === false ) { + internalState = []; + } + if ( internalState === true ) { + internalState = $.map( new Array( tabs.find( ".ui-tabs-nav li" ).length ), function( _, index ) { + return index; + }); + } + + expected = $.map( new Array( tabs.find ( ".ui-tabs-nav li" ).length ), function( _, index ) { + if ( typeof state === "boolean" ) { + return state ? 1 : 0; + } else { + return $.inArray( index, state ) !== -1 ? 1 : 0; + } + }); + + actual = tabs.find( ".ui-tabs-nav li" ).map(function( index ) { + var tab = $( this ), + tabIsDisabled = tab.hasClass( "ui-state-disabled" ); + + if ( tabIsDisabled && $.inArray( index, internalState ) !== -1 ) { + return 1; + } + if ( !tabIsDisabled && $.inArray( index, internalState ) === -1 ) { + return 0; + } + // mixed state - invalid + return -1; + }).get(); + + deepEqual( tabs.tabs( "option", "disabled" ), state ); + deepEqual( actual, expected ); + }, + + state: function( tabs ) { + var expected = $.makeArray( arguments ).slice( 1 ), + actual = tabs.find( ".ui-tabs-nav li" ).map(function() { + var tab = $( this ), + panel = $( $.ui.tabs.prototype._sanitizeSelector( + "#" + tab.find( "a" ).attr( "aria-controls" ) ) ), + tabIsActive = tab.hasClass( "ui-state-active" ), + panelIsActive = panel.css( "display" ) !== "none"; + + if ( tabIsActive && panelIsActive ) { + return 1; + } + if ( !tabIsActive && !panelIsActive ) { + return 0; + } + return -1; // mixed state - invalid + }).get(); + deepEqual( actual, expected ); + } +}; + |