From d3e10de6bce82bc6184eb7b5a4fd68247bc5905b Mon Sep 17 00:00:00 2001 From: Scott González Date: Fri, 15 Apr 2011 08:53:05 -0400 Subject: Tabs: Better tests for tab state. --- tests/unit/tabs/tabs.html | 14 ++++++++- tests/unit/tabs/tabs_deprecated.html | 14 ++++++++- tests/unit/tabs/tabs_methods.js | 61 ++---------------------------------- tests/unit/tabs/tabs_options.js | 14 ++++++++- 4 files changed, 42 insertions(+), 61 deletions(-) (limited to 'tests') diff --git a/tests/unit/tabs/tabs.html b/tests/unit/tabs/tabs.html index c800894ff..bba0e8a58 100644 --- a/tests/unit/tabs/tabs.html +++ b/tests/unit/tabs/tabs.html @@ -30,7 +30,19 @@ function tabs_state( tabs ) { var expected = $.makeArray( arguments ).slice( 1 ); var actual = tabs.find( ".ui-tabs-nav li" ).map(function() { - return $( this ).hasClass( "ui-state-active" ) ? 1 : 0; + var tab = $( this ), + panel = $( $.ui.tabs.prototype._sanitizeSelector( + "#" + tab.find( "a" ).attr( "aria-controls" ) ) ), + tabIsActive = tab.hasClass( "ui-state-active" ), + panelIsActive = panel.is( ":visible" ); + + if ( tabIsActive && panelIsActive ) { + return 1; + } + if ( !tabIsActive && !panelIsActive ) { + return 0; + } + return -1; // mixed state - invalid }).get(); same( actual, expected ); } diff --git a/tests/unit/tabs/tabs_deprecated.html b/tests/unit/tabs/tabs_deprecated.html index 54e0c39d6..1fb50352b 100644 --- a/tests/unit/tabs/tabs_deprecated.html +++ b/tests/unit/tabs/tabs_deprecated.html @@ -29,7 +29,19 @@ function tabs_state( tabs ) { var expected = $.makeArray( arguments ).slice( 1 ); var actual = tabs.find( ".ui-tabs-nav li" ).map(function() { - return $( this ).hasClass( "ui-state-active" ) ? 1 : 0; + var tab = $( this ), + panel = $( $.ui.tabs.prototype._sanitizeSelector( + "#" + tab.find( "a" ).attr( "aria-controls" ) ) ), + tabIsActive = tab.hasClass( "ui-state-active" ), + panelIsActive = panel.is( ":visible" ); + + if ( tabIsActive && panelIsActive ) { + return 1; + } + if ( !tabIsActive && !panelIsActive ) { + return 0; + } + return -1; // mixed state - invalid }).get(); same( actual, expected ); } diff --git a/tests/unit/tabs/tabs_methods.js b/tests/unit/tabs/tabs_methods.js index 8fcd2a848..7c72cd26d 100644 --- a/tests/unit/tabs/tabs_methods.js +++ b/tests/unit/tabs/tabs_methods.js @@ -1,61 +1,6 @@ -/* - * tabs_methods.js - */ -(function($) { +(function( $ ) { -module("tabs: methods"); - -test('init', function() { - expect(9); - - el = $('#tabs1').tabs(); - - ok(true, '.tabs() called on element'); - ok( el.is('.ui-tabs.ui-widget.ui-widget-content.ui-corner-all'), 'attach classes to container'); - ok( $('ul', el).is('.ui-tabs-nav.ui-helper-reset.ui-helper-clearfix.ui-widget-header.ui-corner-all'), 'attach classes to list' ); - ok( $('div:eq(0)', el).is('.ui-tabs-panel.ui-widget-content.ui-corner-bottom'), 'attach classes to panel' ); - ok( $('li:eq(0)', el).is('.ui-tabs-active.ui-state-active.ui-corner-top'), 'attach classes to active li'); - ok( $('li:eq(1)', el).is('.ui-state-default.ui-corner-top'), 'attach classes to inactive li'); - equals( el.tabs('option', 'active'), 0, 'active option set' ); - equals( $('li', el).index( $('li.ui-tabs-active', el) ), 0, 'second tab active'); - equals( $('div', el).index( $('div:hidden', '#tabs1') ), 1, 'second panel should be hidden' ); -}); - -test('init with hash', function() { - expect(5); - - //set a hash in the url - location.hash = '#fragment-2'; - - //selection of tab with divs ordered differently than list - el = $('#tabs1').tabs(); - - equals(el.tabs('option', 'active'), 1, 'second tab should be active'); - - ok(!$('#tabs1 ul li:eq(0)').is('.ui-tabs-active.ui-state-active'), 'first tab should not be selected nor active'); - ok($('#tabs1 div:eq(0)').is(':hidden'), 'first div for first tab should be hidden'); - - ok($('#tabs1 ul li:eq(1)').is('.ui-tabs-active.ui-state-active'), 'second tab should be selected and active'); - ok(!$('#tabs1 div:eq(1)').is(':hidden'), 'second div for second tab should not be hidden'); -}); - -test('init mismatched order with hash', function() { - expect(5); - - //set a hash in the url - location.hash = '#tabs7-2'; - - //selection of tab with divs ordered differently than list - el = $('#tabs7').tabs(); - - equals(el.tabs('option', 'active'), 1, 'second tab should be active'); - - ok(!$('#tabs7-list li:eq(0)').is('.ui-tabs-active.ui-state-active'), 'first tab should not be selected nor active'); - ok($('#tabs7 div:eq(1)').is(':hidden'), 'second div for first tab should be hidden'); - - ok($('#tabs7-list li:eq(1)').is('.ui-tabs-active.ui-state-active'), 'second tab should be selected and active'); - ok(!$('#tabs7 div:eq(0)').is(':hidden'), 'first div for second tab should not be hidden'); -}); +module( "tabs: methods" ); test('destroy', function() { expect(6); @@ -162,4 +107,4 @@ test('load', function() { ok(false, "missing test - untested code is broken code."); }); -})(jQuery); +}( jQuery ) ); diff --git a/tests/unit/tabs/tabs_options.js b/tests/unit/tabs/tabs_options.js index 3cce96e1c..884a566c6 100644 --- a/tests/unit/tabs/tabs_options.js +++ b/tests/unit/tabs/tabs_options.js @@ -10,10 +10,11 @@ test( "{ active: default }", function() { tabs_state( element, 1, 0, 0 ); element.tabs( "destroy" ); - window.location.hash = "#fragment-3"; + location.hash = "#fragment-3"; element = $( "#tabs1" ).tabs(); equals( element.tabs( "option", "active" ), 2, "should be 2 based on URL" ); tabs_state( element, 0, 0, 1 ); + element.tabs( "destroy" ); }); test( "{ active: false }", function() { @@ -83,6 +84,17 @@ if ( $.uiBackCompat === false ) { }); } +test( "active - mismatched tab/panel order", function() { + expect( 3 ); + + location.hash = "#tabs7-2"; + var element = $( "#tabs7" ).tabs(); + equals( element.tabs( "option", "active" ), 1, "should be 1 based on URL" ); + tabs_state( element, 0, 1 ); + element.tabs( "option", "active", 0 ); + tabs_state( element, 1, 0 ); +}); + test( "{ collapsible: false }", function() { expect( 4 ); -- cgit v1.2.3 From ae8963f054902b44c8b510ed09ad941eb4e7f64f Mon Sep 17 00:00:00 2001 From: Scott González Date: Fri, 15 Apr 2011 11:04:49 -0400 Subject: Tabs: Rewrote some ticket tests and moved to approriate file. --- tests/unit/tabs/tabs_core.js | 16 +++++++++++ tests/unit/tabs/tabs_tickets.js | 62 ----------------------------------------- 2 files changed, 16 insertions(+), 62 deletions(-) (limited to 'tests') diff --git a/tests/unit/tabs/tabs_core.js b/tests/unit/tabs/tabs_core.js index 30d58c254..c9b16e3a8 100644 --- a/tests/unit/tabs/tabs_core.js +++ b/tests/unit/tabs/tabs_core.js @@ -26,6 +26,22 @@ $.each({ }); }); +// #5893 - Sublist in the tab list are considered as tab +test( "nested list", function() { + expect( 1 ); + + var element = $( "#tabs6" ).tabs(); + equals( element.data( "tabs" ).anchors.length, 2, "should contain 2 tab" ); +}); + +test( "disconnected from DOM", function() { + expect( 2 ); + + var element = $( "#tabs1" ).remove().tabs(); + equals( element.find( ".ui-tabs-nav" ).length, 1, "should initialize nav" ); + equals( element.find( ".ui-tabs-panel" ).length, 3, "should initialize panels" ); +}); + test( "aria-controls", function() { expect( 7 ); var element = $( "#tabs1" ).tabs(), diff --git a/tests/unit/tabs/tabs_tickets.js b/tests/unit/tabs/tabs_tickets.js index d65f0285a..d7a59cb5b 100644 --- a/tests/unit/tabs/tabs_tickets.js +++ b/tests/unit/tabs/tabs_tickets.js @@ -5,39 +5,6 @@ module("tabs: tickets"); -test('#2715 - id containing colon', function() { - // http://dev.jqueryui.com/ticket/2715 - expect(4); - - el = $('#tabs2').tabs(); - ok( $('div.ui-tabs-panel:eq(0)', '#tabs2').is(':visible'), 'first panel should be visible' ); - ok( $('div.ui-tabs-panel:eq(1)', '#tabs2').is(':hidden'), 'second panel should be hidden' ); - - el.tabs('option', 'active', 1).tabs('option', 'active', 0); - ok( $('div.ui-tabs-panel:eq(0)', '#tabs2').is(':visible'), 'first panel should be visible' ); - ok( $('div.ui-tabs-panel:eq(1)', '#tabs2').is(':hidden'), 'second panel should be hidden' ); - -}); - -test('#???? - panel containing inline style', function() { - expect(3); - - var inlineStyle = function(property) { - return $('#inline-style')[0].style[property]; - }; - var expected = inlineStyle('height'); - - el = $('#tabs2').tabs(); - equals(inlineStyle('height'), expected, 'init should not remove inline style'); - - el.tabs('option', 'active', 1); - equals(inlineStyle('height'), expected, 'show tab should not remove inline style'); - - el.tabs('option', 'active', 0); - equals(inlineStyle('height'), expected, 'hide tab should not remove inline style'); - -}); - test('#3627 - Ajax tab with url containing a fragment identifier fails to load', function() { // http://dev.jqueryui.com/ticket/3627 expect(1); @@ -67,33 +34,4 @@ test('#4033 - IE expands hash to full url and misinterprets tab as ajax', functi equals($('a', el).attr('aria-controls'), 'tab', 'aria-contorls attribute is correct'); }); -test('#5893 - Sublist in the tab list are considered as tab', function() { - // http://dev.jqueryui.com/ticket/5893 - expect(1); - - el = $('#tabs6').tabs(); - equals(el.data("tabs").anchors.length, 2, 'should contain 2 tab'); - -}); - -test('#6710 - selectors are global', function() { - // http://bugs.jqueryui.com/ticket/6710 - expect(1); - - var container = $('\ -
\ -
\ - \ -

first

\ -

second

\ -
\ -
'); - container.find('#tabs_6710').tabs(); - ok( container.find('#tabs-2_6710').is(':hidden'), 'should find panels and add corresponding classes' ); -}); - - })(jQuery); -- cgit v1.2.3 From 4547da1ba56641a490f03043241003aca505e3e4 Mon Sep 17 00:00:00 2001 From: Scott González Date: Fri, 15 Apr 2011 11:29:26 -0400 Subject: Accordion tests: Coding standards. --- tests/unit/accordion/accordion.html | 2 +- tests/unit/accordion/accordion_core.js | 28 ++-- tests/unit/accordion/accordion_deprecated.html | 2 +- tests/unit/accordion/accordion_deprecated.js | 198 +++++++++++----------- tests/unit/accordion/accordion_events.js | 58 +++---- tests/unit/accordion/accordion_methods.js | 26 +-- tests/unit/accordion/accordion_options.js | 222 ++++++++++++------------- 7 files changed, 268 insertions(+), 268 deletions(-) (limited to 'tests') diff --git a/tests/unit/accordion/accordion.html b/tests/unit/accordion/accordion.html index 8ffdc22a4..c260ef22f 100644 --- a/tests/unit/accordion/accordion.html +++ b/tests/unit/accordion/accordion.html @@ -20,7 +20,7 @@ - - - - - - - - - - - - -
- - - - - -

Default

- - - -

- -
- -

Drilldown

- - - -
- -

- -
- -

Flyout / nested

- - - -
- - - - diff --git a/tests/static/menu/default.html b/tests/static/menu/default.html deleted file mode 100644 index dd1e0ba7d..000000000 --- a/tests/static/menu/default.html +++ /dev/null @@ -1,39 +0,0 @@ - - - - - Menu Static Test : Default - - - - - - - - - - - - - - -- cgit v1.2.3 From 03132f93fc961fc23771b1784ada7d46c104dea1 Mon Sep 17 00:00:00 2001 From: Hans Hillen Date: Wed, 20 Apr 2011 20:15:26 +0200 Subject: Fix menubar escape key + minor css fix --- tests/visual/menu/menubar.html | 4 ++-- tests/visual/menu/menubar.js | 3 +-- 2 files changed, 3 insertions(+), 4 deletions(-) (limited to 'tests') diff --git a/tests/visual/menu/menubar.html b/tests/visual/menu/menubar.html index 1b4b331f6..d2185e97c 100644 --- a/tests/visual/menu/menubar.html +++ b/tests/visual/menu/menubar.html @@ -55,9 +55,9 @@ .ui-menubar .ui-button { float: left; font-weight: normal; border-top-width: 0 !important; border-bottom-width: 0 !important; margin: 0; outline: none; } .ui-menubar .ui-menubar-link { border-right: 1px dashed transparent; border-left: 1px dashed transparent; } - .ui-menubar, .ui-menubar { + .ui-menubar { list-style: none; - margin-left: 0; + margin: 0; padding-left: 0; } diff --git a/tests/visual/menu/menubar.js b/tests/visual/menu/menubar.js index e6f6ab069..13a508811 100644 --- a/tests/visual/menu/menubar.js +++ b/tests/visual/menu/menubar.js @@ -38,7 +38,6 @@ $.widget("ui.menubar", { var menu = $(this); if (menu.is(":hidden")) return; - event.stopPropagation(); switch (event.keyCode) { case $.ui.keyCode.LEFT: self._left(event); @@ -119,7 +118,7 @@ $.widget("ui.menubar", { } }) self._bind({ - keyup: function(event) { + keydown: function(event) { if (event.keyCode == $.ui.keyCode.ESCAPE && self.open) { if (self.active.menu("left", event) !== true) { var active = self.active; -- cgit v1.2.3 From 45c418d29327c83a54c06553ad0f7505ede64cbb Mon Sep 17 00:00:00 2001 From: Hans Hillen Date: Fri, 22 Apr 2011 20:22:16 +0200 Subject: Added focusin & focusout handler for menubar --- tests/visual/menu/menubar.js | 44 ++++++++++++++++---------------------------- 1 file changed, 16 insertions(+), 28 deletions(-) (limited to 'tests') diff --git a/tests/visual/menu/menubar.js b/tests/visual/menu/menubar.js index 13a508811..0fd5d0ecd 100644 --- a/tests/visual/menu/menubar.js +++ b/tests/visual/menu/menubar.js @@ -47,14 +47,8 @@ $.widget("ui.menubar", { self._right(event); event.preventDefault(); break; - case $.ui.keyCode.TAB: - self.open= false; - break; }; - }).blur(function( event ) { - if (!self.open) - self._close( event ); - }); + }) }); items.each(function() { var input = $(this), @@ -107,19 +101,9 @@ $.widget("ui.menubar", { }; }); - self._bind(document, { - click: function(event) { - if (self.open) { - var menubar = $(event.target).closest(".ui-menubar"); - if (!menubar.length || menubar.get(0) !== self.element.get(0)) { - self._close(); - } - } - } - }) self._bind({ keydown: function(event) { - if (event.keyCode == $.ui.keyCode.ESCAPE && self.open) { + if (event.keyCode == $.ui.keyCode.ESCAPE) { if (self.active.menu("left", event) !== true) { var active = self.active; self.active.blur(); @@ -127,6 +111,14 @@ $.widget("ui.menubar", { active.prev().focus(); } } + }, + focusout : function( event ) { + self.closeTimer = setTimeout(function() { + self._close( event ); + }, 100); + }, + focusin :function( event ) { + clearTimeout(self.closeTimer); } }); }, @@ -158,7 +150,7 @@ $.widget("ui.menubar", { .removeAttr("aria-hidden", "true") .removeAttr("aria-expanded", "false") .removeAttr("tabindex") - .unbind("keydown", "blur") + .unbind("keydown", "blur", "focusin", "focusout") ; }, @@ -168,11 +160,7 @@ $.widget("ui.menubar", { this.active.menu("closeAll").hide().attr("aria-hidden", "true").attr("aria-expanded", "false"); this.active.prev().removeClass("ui-state-active").removeAttr("tabIndex"); this.active = null; - var self = this; - // delay for the next focus event to see it as still "open" - self.timer = setTimeout(function() { - self.open = false; - }, 13); + self.open = false; }, _open: function(event, menu) { @@ -185,8 +173,6 @@ $.widget("ui.menubar", { this.active.menu("closeAll").hide().attr("aria-hidden", "true").attr("aria-expanded", "false"); this.active.prev().removeClass("ui-state-active"); } - clearTimeout(this.timer); - this.open = true; // set tabIndex -1 to have the button skipped on shift-tab when menu is open (it gets focus) var button = menu.prev().addClass("ui-state-active").attr("tabIndex", -1); this.active = menu.show().position({ @@ -196,8 +182,10 @@ $.widget("ui.menubar", { }) .removeAttr("aria-hidden").attr("aria-expanded", "true") .menu("focus", event, menu.children("li").first()) - .focus(); - + .focus() + .focusin() + ; + self.open = true; }, _prev: function( event, button ) { -- cgit v1.2.3 From 42e11d8e41253571d67a7e1a62caa9376771c292 Mon Sep 17 00:00:00 2001 From: Hans Hillen Date: Fri, 22 Apr 2011 23:11:53 +0200 Subject: Fix error for Escape key on menubar item --- tests/visual/menu/menubar.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'tests') diff --git a/tests/visual/menu/menubar.js b/tests/visual/menu/menubar.js index 0fd5d0ecd..8c0bd4904 100644 --- a/tests/visual/menu/menubar.js +++ b/tests/visual/menu/menubar.js @@ -104,7 +104,7 @@ $.widget("ui.menubar", { self._bind({ keydown: function(event) { if (event.keyCode == $.ui.keyCode.ESCAPE) { - if (self.active.menu("left", event) !== true) { + if (self.active && self.active.menu("left", event) !== true) { var active = self.active; self.active.blur(); self._close( event ); -- cgit v1.2.3 From 54795b56509cb5562fb9385ae59f10552df5cd78 Mon Sep 17 00:00:00 2001 From: Hans Hillen Date: Sat, 23 Apr 2011 17:31:25 +0200 Subject: change self.open to this.open --- tests/visual/menu/menubar.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'tests') diff --git a/tests/visual/menu/menubar.js b/tests/visual/menu/menubar.js index 8c0bd4904..8e2d51e30 100644 --- a/tests/visual/menu/menubar.js +++ b/tests/visual/menu/menubar.js @@ -160,7 +160,7 @@ $.widget("ui.menubar", { this.active.menu("closeAll").hide().attr("aria-hidden", "true").attr("aria-expanded", "false"); this.active.prev().removeClass("ui-state-active").removeAttr("tabIndex"); this.active = null; - self.open = false; + this.open = false; }, _open: function(event, menu) { @@ -185,7 +185,7 @@ $.widget("ui.menubar", { .focus() .focusin() ; - self.open = true; + this.open = true; }, _prev: function( event, button ) { -- cgit v1.2.3 From f7d2fdbab8f6e0ea37fb02f9458489990305ff2f Mon Sep 17 00:00:00 2001 From: Hans Hillen Date: Sat, 23 Apr 2011 17:35:03 +0200 Subject: removed unbind for focusin and focusout --- tests/visual/menu/menubar.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'tests') diff --git a/tests/visual/menu/menubar.js b/tests/visual/menu/menubar.js index 8e2d51e30..cc3258d4a 100644 --- a/tests/visual/menu/menubar.js +++ b/tests/visual/menu/menubar.js @@ -150,7 +150,7 @@ $.widget("ui.menubar", { .removeAttr("aria-hidden", "true") .removeAttr("aria-expanded", "false") .removeAttr("tabindex") - .unbind("keydown", "blur", "focusin", "focusout") + .unbind("keydown", "blur") ; }, -- cgit v1.2.3 From c4c36e557ef2b3450bc365708064f7314bc6fdc4 Mon Sep 17 00:00:00 2001 From: Scott González Date: Mon, 25 Apr 2011 08:10:39 -0400 Subject: Accordion, Autocomplete, Tabs: Separate callbacks and options in the defaults. --- tests/unit/accordion/accordion_defaults.js | 6 +++- .../accordion/accordion_defaults_deprecated.js | 8 ++++- tests/unit/autocomplete/autocomplete_defaults.js | 41 ++++++++++++---------- tests/unit/tabs/tabs_defaults.js | 8 +++-- tests/unit/tabs/tabs_defaults_deprecated.js | 22 ++++++------ ui/jquery.ui.accordion.js | 11 +++++- ui/jquery.ui.autocomplete.js | 11 +++++- ui/jquery.ui.tabs.js | 8 +++-- 8 files changed, 77 insertions(+), 38 deletions(-) (limited to 'tests') diff --git a/tests/unit/accordion/accordion_defaults.js b/tests/unit/accordion/accordion_defaults.js index 95a478057..847a394e2 100644 --- a/tests/unit/accordion/accordion_defaults.js +++ b/tests/unit/accordion/accordion_defaults.js @@ -10,6 +10,10 @@ commonWidgetTests( "accordion", { icons: { "activeHeader": "ui-icon-triangle-1-s", "header": "ui-icon-triangle-1-e" - } + }, + + // callbacks + activate: null, + beforeActivate: null } }); diff --git a/tests/unit/accordion/accordion_defaults_deprecated.js b/tests/unit/accordion/accordion_defaults_deprecated.js index b90b472e2..bdc059d10 100644 --- a/tests/unit/accordion/accordion_defaults_deprecated.js +++ b/tests/unit/accordion/accordion_defaults_deprecated.js @@ -16,6 +16,12 @@ commonWidgetTests( "accordion", { "headerSelected": "ui-icon-triangle-1-s" }, navigation: false, - navigationFilter: function() {} + navigationFilter: function() {}, + + // callbacks + activate: null, + beforeActivate: null, + change: null, + changestart: null } }); diff --git a/tests/unit/autocomplete/autocomplete_defaults.js b/tests/unit/autocomplete/autocomplete_defaults.js index dd5007089..05897b848 100644 --- a/tests/unit/autocomplete/autocomplete_defaults.js +++ b/tests/unit/autocomplete/autocomplete_defaults.js @@ -1,19 +1,24 @@ -/* - * autocomplete_defaults.js - */ +commonWidgetTests( "autocomplete", { + defaults: { + appendTo: "body", + autoFocus: false, + delay: 300, + disabled: false, + minLength: 1, + position: { + my: "left top", + at: "left bottom", + collision: "none" + }, + source: null, -var autocomplete_defaults = { - appendTo: "body", - autoFocus: false, - delay: 300, - disabled: false, - minLength: 1, - position: { - my: "left top", - at: "left bottom", - collision: "none" - }, - source: null -}; - -commonWidgetTests('autocomplete', { defaults: autocomplete_defaults }); + // callbacks + change: null, + close: null, + focus: null, + open: null, + response: null, + search: null, + select: null + } +}); diff --git a/tests/unit/tabs/tabs_defaults.js b/tests/unit/tabs/tabs_defaults.js index e15d618de..0750094e4 100644 --- a/tests/unit/tabs/tabs_defaults.js +++ b/tests/unit/tabs/tabs_defaults.js @@ -1,13 +1,15 @@ commonWidgetTests( "tabs", { defaults: { - activate: null, active: null, - beforeLoad: null, - beforeActivate: null, collapsible: false, disabled: false, event: "click", fx: null, + + // callbacks + activate: null, + beforeActivate: null, + beforeLoad: null, load: null } }); diff --git a/tests/unit/tabs/tabs_defaults_deprecated.js b/tests/unit/tabs/tabs_defaults_deprecated.js index 2d9772c6d..84f7de073 100644 --- a/tests/unit/tabs/tabs_defaults_deprecated.js +++ b/tests/unit/tabs/tabs_defaults_deprecated.js @@ -1,26 +1,28 @@ commonWidgetTests( "tabs", { defaults: { - activate: null, active: null, - add: null, ajaxOptions: null, - beforeLoad: null, - beforeActivate: null, cache: false, collapsible: false, cookie: null, - disable: null, disabled: false, - enable: null, event: "click", fx: null, idPrefix: "ui-tabs-", - load: null, panelTemplate: "
", + spinner: "Loading…", + tabTemplate: "
  • #{label}
  • ", + + // callbacks + activate: null, + add: null, + beforeActivate: null, + beforeLoad: null, + disable: null, + enable: null, + load: null, remove: null, select: null, - show: null, - spinner: "Loading…", - tabTemplate: "
  • #{label}
  • " + show: null } }); diff --git a/ui/jquery.ui.accordion.js b/ui/jquery.ui.accordion.js index 455c66a28..0cc1f9e2a 100644 --- a/ui/jquery.ui.accordion.js +++ b/ui/jquery.ui.accordion.js @@ -25,7 +25,11 @@ $.widget( "ui.accordion", { icons: { activeHeader: "ui-icon-triangle-1-s", header: "ui-icon-triangle-1-e" - } + }, + + // callbacks + activate: null, + beforeActivate: null }, _create: function() { @@ -649,6 +653,11 @@ if ( $.uiBackCompat !== false ) { // change events (function( $, prototype ) { + $.extend( prototype.options, { + change: null, + changestart: null + }); + var _trigger = prototype._trigger; prototype._trigger = function( type, event, data ) { var ret = _trigger.apply( this, arguments ); diff --git a/ui/jquery.ui.autocomplete.js b/ui/jquery.ui.autocomplete.js index 1685c0652..526eb3869 100644 --- a/ui/jquery.ui.autocomplete.js +++ b/ui/jquery.ui.autocomplete.js @@ -30,7 +30,16 @@ $.widget( "ui.autocomplete", { at: "left bottom", collision: "none" }, - source: null + source: null, + + // callbacks + change: null, + close: null, + focus: null, + open: null, + response: null, + search: null, + select: null }, pending: 0, diff --git a/ui/jquery.ui.tabs.js b/ui/jquery.ui.tabs.js index 699c1a5ee..82d3f186d 100755 --- a/ui/jquery.ui.tabs.js +++ b/ui/jquery.ui.tabs.js @@ -26,13 +26,15 @@ function getNextListId() { $.widget( "ui.tabs", { options: { - activate: null, active: null, - beforeActivate: null, - beforeLoad: null, collapsible: false, event: "click", fx: null, // e.g. { height: 'toggle', opacity: 'toggle', duration: 200 } + + // callbacks + activate: null, + beforeActivate: null, + beforeLoad: null, load: null }, -- cgit v1.2.3 From 325ee6e87133dd2a507c820dd3c356e3b897a3ec Mon Sep 17 00:00:00 2001 From: Scott González Date: Mon, 25 Apr 2011 14:04:30 -0400 Subject: Widget: define a null default for the create callback. --- tests/unit/accordion/accordion_defaults.js | 3 +- .../accordion/accordion_defaults_deprecated.js | 3 +- tests/unit/autocomplete/autocomplete_defaults.js | 1 + tests/unit/button/button_defaults.js | 25 ++++---- tests/unit/dialog/dialog_defaults.js | 67 +++++++++++----------- tests/unit/dialog/dialog_options.js | 4 +- tests/unit/menu/menu_defaults.js | 21 ++++--- tests/unit/progressbar/progressbar_defaults.js | 19 +++--- tests/unit/slider/slider_defaults.js | 37 ++++++------ tests/unit/spinner/spinner_defaults.js | 29 +++++----- tests/unit/tabs/tabs_defaults.js | 1 + tests/unit/tabs/tabs_defaults_deprecated.js | 1 + tests/unit/tooltip/tooltip_defaults.js | 27 +++++---- tests/unit/widget/widget_core.js | 3 + ui/jquery.ui.widget.js | 5 +- 15 files changed, 125 insertions(+), 121 deletions(-) (limited to 'tests') diff --git a/tests/unit/accordion/accordion_defaults.js b/tests/unit/accordion/accordion_defaults.js index 847a394e2..9aa58e650 100644 --- a/tests/unit/accordion/accordion_defaults.js +++ b/tests/unit/accordion/accordion_defaults.js @@ -14,6 +14,7 @@ commonWidgetTests( "accordion", { // callbacks activate: null, - beforeActivate: null + beforeActivate: null, + create: null } }); diff --git a/tests/unit/accordion/accordion_defaults_deprecated.js b/tests/unit/accordion/accordion_defaults_deprecated.js index bdc059d10..3f45a1f10 100644 --- a/tests/unit/accordion/accordion_defaults_deprecated.js +++ b/tests/unit/accordion/accordion_defaults_deprecated.js @@ -22,6 +22,7 @@ commonWidgetTests( "accordion", { activate: null, beforeActivate: null, change: null, - changestart: null + changestart: null, + create: null } }); diff --git a/tests/unit/autocomplete/autocomplete_defaults.js b/tests/unit/autocomplete/autocomplete_defaults.js index 05897b848..ac83eaea4 100644 --- a/tests/unit/autocomplete/autocomplete_defaults.js +++ b/tests/unit/autocomplete/autocomplete_defaults.js @@ -15,6 +15,7 @@ commonWidgetTests( "autocomplete", { // callbacks change: null, close: null, + create: null, focus: null, open: null, response: null, diff --git a/tests/unit/button/button_defaults.js b/tests/unit/button/button_defaults.js index b81fa7cbb..96c7e5bfa 100644 --- a/tests/unit/button/button_defaults.js +++ b/tests/unit/button/button_defaults.js @@ -1,15 +1,14 @@ -/* - * button_defaults.js - */ +commonWidgetTests( "button", { + defaults: { + disabled: null, + icons: { + primary: null, + secondary: null + }, + label: null, + text: true, -var button_defaults = { - disabled: null, - text: true, - label: null, - icons: { - primary: null, - secondary: null + // callbacks + create: null } -}; - -commonWidgetTests('button', { defaults: button_defaults }); +}); diff --git a/tests/unit/dialog/dialog_defaults.js b/tests/unit/dialog/dialog_defaults.js index 612fd58c8..9f2e4c6a8 100644 --- a/tests/unit/dialog/dialog_defaults.js +++ b/tests/unit/dialog/dialog_defaults.js @@ -1,35 +1,34 @@ -/* - * dialog_defaults.js - */ +commonWidgetTests( "dialog", { + defaults: { + autoOpen: true, + buttons: {}, + closeOnEscape: true, + closeText: 'close', + disabled: false, + dialogClass: '', + draggable: true, + height: 'auto', + hide: null, + maxHeight: false, + maxWidth: false, + minHeight: 150, + minWidth: 150, + modal: false, + position: { + my: 'center', + at: 'center', + of: window, + collision: 'fit', + using: $.ui.dialog.prototype.options.position.using + }, + resizable: true, + show: null, + stack: true, + title: '', + width: 300, + zIndex: 1000, -var dialog_defaults = { - autoOpen: true, - buttons: {}, - closeOnEscape: true, - closeText: 'close', - disabled: false, - dialogClass: '', - draggable: true, - height: 'auto', - hide: null, - maxHeight: false, - maxWidth: false, - minHeight: 150, - minWidth: 150, - modal: false, - position: { - my: 'center', - at: 'center', - of: window, - collision: 'fit', - using: $.ui.dialog.prototype.options.position.using - }, - resizable: true, - show: null, - stack: true, - title: '', - width: 300, - zIndex: 1000 -}; - -commonWidgetTests('dialog', { defaults: dialog_defaults }); + // callbacks + create: null + } +}); diff --git a/tests/unit/dialog/dialog_options.js b/tests/unit/dialog/dialog_options.js index fb8dea775..5705da079 100644 --- a/tests/unit/dialog/dialog_options.js +++ b/tests/unit/dialog/dialog_options.js @@ -180,7 +180,7 @@ test("height", function() { expect(3); el = $('
    ').dialog(); - equals(dlg().height(), dialog_defaults.minHeight, "default height"); + equals(dlg().height(), 150, "default height"); el.remove(); el = $('
    ').dialog({ height: 237 }); @@ -431,7 +431,7 @@ test("width", function() { expect(3); el = $('
    ').dialog(); - equals(dlg().width(), dialog_defaults.width, "default width"); + equals(dlg().width(), 300, "default width"); el.remove(); el = $('
    ').dialog({width: 437 }); diff --git a/tests/unit/menu/menu_defaults.js b/tests/unit/menu/menu_defaults.js index 58122fea2..dd182ca09 100644 --- a/tests/unit/menu/menu_defaults.js +++ b/tests/unit/menu/menu_defaults.js @@ -1,13 +1,12 @@ -/* - * menu_defaults.js - */ +commonWidgetTests( "menu", { + defaults: { + disabled: false, + position: { + my: "left top", + at: "right top" + }, -var menu_defaults = { - disabled: false, - position: { - my: "left top", - at: "right top" + // callbacks + create: null } -}; - -commonWidgetTests('menu', { defaults: menu_defaults }); +}); diff --git a/tests/unit/progressbar/progressbar_defaults.js b/tests/unit/progressbar/progressbar_defaults.js index 925510871..3856e31a0 100644 --- a/tests/unit/progressbar/progressbar_defaults.js +++ b/tests/unit/progressbar/progressbar_defaults.js @@ -1,11 +1,10 @@ -/* - * progressbar_defaults.js - */ +commonWidgetTests( "progressbar", { + defaults: { + disabled: false, + value: 0, + max: 100, -var progressbar_defaults = { - disabled: false, - value: 0, - max: 100 -}; - -commonWidgetTests('progressbar', { defaults: progressbar_defaults }); + //callbacks + create: null + } +}); diff --git a/tests/unit/slider/slider_defaults.js b/tests/unit/slider/slider_defaults.js index 76e5da8ea..03f2a4f8e 100644 --- a/tests/unit/slider/slider_defaults.js +++ b/tests/unit/slider/slider_defaults.js @@ -1,20 +1,19 @@ -/* - * slider_defaults.js - */ +commonWidgetTests( "slider", { + defaults: { + animate: false, + cancel: function() {}, + delay: 0, + disabled: false, + distance: 0, + max: 100, + min: 0, + orientation: 'horizontal', + range: false, + step: 1, + value: 0, + values: null, -var slider_defaults = { - animate: false, - cancel: function() {}, - delay: 0, - disabled: false, - distance: 0, - max: 100, - min: 0, - orientation: 'horizontal', - range: false, - step: 1, - value: 0, - values: null -}; - -commonWidgetTests('slider', { defaults: slider_defaults }); + // callbacks + create: null + } +}); diff --git a/tests/unit/spinner/spinner_defaults.js b/tests/unit/spinner/spinner_defaults.js index 0389ab169..f6081b1f3 100644 --- a/tests/unit/spinner/spinner_defaults.js +++ b/tests/unit/spinner/spinner_defaults.js @@ -1,16 +1,15 @@ -/* - * spinner_defaults.js - */ +commonWidgetTests( "spinner", { + defaults: { + disabled: false, + incremental: true, + max: null, + min: null, + numberformat: null, + page: 10, + step: null, + value: null, -var spinner_defaults = { - disabled: false, - incremental: true, - max: null, - min: null, - numberformat: null, - page: 10, - step: null, - value: null -}; - -commonWidgetTests('spinner', { defaults: spinner_defaults }); + // callbacks + create: null + } +}); diff --git a/tests/unit/tabs/tabs_defaults.js b/tests/unit/tabs/tabs_defaults.js index 0750094e4..52b6f8a71 100644 --- a/tests/unit/tabs/tabs_defaults.js +++ b/tests/unit/tabs/tabs_defaults.js @@ -10,6 +10,7 @@ commonWidgetTests( "tabs", { activate: null, beforeActivate: null, beforeLoad: null, + create: null, load: null } }); diff --git a/tests/unit/tabs/tabs_defaults_deprecated.js b/tests/unit/tabs/tabs_defaults_deprecated.js index 84f7de073..1a56297e9 100644 --- a/tests/unit/tabs/tabs_defaults_deprecated.js +++ b/tests/unit/tabs/tabs_defaults_deprecated.js @@ -18,6 +18,7 @@ commonWidgetTests( "tabs", { add: null, beforeActivate: null, beforeLoad: null, + create: null, disable: null, enable: null, load: null, diff --git a/tests/unit/tooltip/tooltip_defaults.js b/tests/unit/tooltip/tooltip_defaults.js index 419d7a085..c1fc49f1a 100644 --- a/tests/unit/tooltip/tooltip_defaults.js +++ b/tests/unit/tooltip/tooltip_defaults.js @@ -1,16 +1,15 @@ -/* - * tooltip_defaults.js - */ +commonWidgetTests( "tooltip", { + defaults: { + disabled: false, + items: "[title]", + content: $.ui.tooltip.prototype.options.content, + position: { + my: "left center", + at: "right center", + offset: "15 0" + }, -var tooltip_defaults = { - disabled: false, - items: "[title]", - content: $.ui.tooltip.prototype.options.content, - position: { - my: "left center", - at: "right center", - offset: "15 0" + // callbacks + create: null } -}; - -commonWidgetTests('tooltip', { defaults: tooltip_defaults }); +}); diff --git a/tests/unit/widget/widget_core.js b/tests/unit/widget/widget_core.js index 5a6717560..b1c27b104 100644 --- a/tests/unit/widget/widget_core.js +++ b/tests/unit/widget/widget_core.js @@ -202,6 +202,7 @@ test( "merge multiple option arguments", function() { $.widget( "ui.testWidget", { _create: function() { same( this.options, { + create: null, disabled: false, option1: "value1", option2: "value2", @@ -249,6 +250,7 @@ test( "._getCreateOptions()", function() { }, _create: function() { same( this.options, { + create: null, disabled: false, option1: "override1", option2: "value2", @@ -418,6 +420,7 @@ test( ".option() - getter", function() { var options = div.testWidget( "option" ); same( options, { + create: null, disabled: false, foo: "bar", baz: 5, diff --git a/ui/jquery.ui.widget.js b/ui/jquery.ui.widget.js index 27d08ccd2..55b9f7984 100644 --- a/ui/jquery.ui.widget.js +++ b/ui/jquery.ui.widget.js @@ -155,7 +155,10 @@ $.Widget.prototype = { widgetEventPrefix: "", defaultElement: "
    ", options: { - disabled: false + disabled: false, + + // callbacks + create: null }, _createWidget: function( options, element ) { element = $( element || this.defaultElement || this )[ 0 ]; -- cgit v1.2.3 From 0e7769c66958a0f86ffda0209caa4039d96c79b2 Mon Sep 17 00:00:00 2001 From: David Petersen Date: Sun, 17 Apr 2011 21:09:47 -0400 Subject: Tabs: enable/disable handle when current state already matches, fix error when disabled = true and enable gets called --- tests/unit/tabs/tabs_methods.js | 22 ++++++++++++++++++++-- ui/jquery.ui.tabs.js | 10 +++++++++- 2 files changed, 29 insertions(+), 3 deletions(-) (limited to 'tests') diff --git a/tests/unit/tabs/tabs_methods.js b/tests/unit/tabs/tabs_methods.js index 7c72cd26d..bd28316c5 100644 --- a/tests/unit/tabs/tabs_methods.js +++ b/tests/unit/tabs/tabs_methods.js @@ -18,7 +18,7 @@ test('destroy', function() { }); test('enable', function() { - expect(8); + expect(12); el = $('#tabs1').tabs({ disabled: [ 0, 1 ] }); el.tabs("enable", 1); @@ -31,6 +31,18 @@ test('enable', function() { ok( !$('li.ui-state-disabled', el).length, 'enable all'); same(el.tabs('option', 'disabled'), false, 'update property'); + // enable one tab + el.tabs({ disabled: true }); + el.tabs("enable", 1); + ok( $('li:eq(1)', el).is(':not(.ui-state-disabled)'), 'remove class from li'); + same(el.tabs('option', 'disabled'), [ 0, 2 ], 'update property'); + + // all tabs already enabled + el.tabs({ disabled: false }); + el.tabs("enable", 1); + ok( !$('li.ui-state-disabled', el).length, 'enable all'); + same(el.tabs('option', 'disabled'), false, 'update property'); + el.tabs('destroy'); // enable all tabs one by one el.tabs({ disabled: [ 1, 2 ] }); @@ -43,7 +55,7 @@ test('enable', function() { }); test('disable', function() { - expect(12); + expect(14); // normal el = $('#tabs1').tabs(); @@ -61,6 +73,12 @@ test('disable', function() { same( $('li.ui-state-disabled', el).length, 3, 'disable all'); same(el.tabs('option', 'disabled'), true, 'set to true'); + // all tabs already disabled + el.tabs({ disabled: true }); + el.tabs("disable", 1); + ok( $('li.ui-state-disabled', el).length, 'disable all'); + same(el.tabs('option', 'disabled'), true, 'set to true'); + el.tabs("destroy"); // disable all tabs one by one el.tabs(); diff --git a/ui/jquery.ui.tabs.js b/ui/jquery.ui.tabs.js index f73799f02..5c525b34a 100755 --- a/ui/jquery.ui.tabs.js +++ b/ui/jquery.ui.tabs.js @@ -513,6 +513,9 @@ $.widget( "ui.tabs", { enable: function( index ) { var disabled = this.options.disabled; + if ( disabled === false ) { + return; + } if ( index === undefined ) { disabled = false; @@ -523,7 +526,9 @@ $.widget( "ui.tabs", { return num !== index ? num : null; }); } else { - disabled = [ index ]; + disabled = $.map( this.lis, function( li, num ) { + return num !== index ? num : null; + }); } } this._setupDisabled( disabled ); @@ -531,6 +536,9 @@ $.widget( "ui.tabs", { disable: function( index ) { var disabled = this.options.disabled; + if ( disabled === true ) { + return; + } if ( index === undefined ) { disabled = true; -- cgit v1.2.3 From d819cdd3a92d9d152a33ce6aecbd5cd9737a3ade Mon Sep 17 00:00:00 2001 From: Scott González Date: Thu, 28 Apr 2011 12:04:08 -0400 Subject: Tabs: Fixed disable method and cleaned up tests for enable and disable methods. --- tests/unit/tabs/tabs.html | 35 +++++++++ tests/unit/tabs/tabs_deprecated.html | 35 +++++++++ tests/unit/tabs/tabs_methods.js | 134 ++++++++++++++++------------------- ui/jquery.ui.tabs.js | 3 + 4 files changed, 136 insertions(+), 71 deletions(-) (limited to 'tests') diff --git a/tests/unit/tabs/tabs.html b/tests/unit/tabs/tabs.html index bba0e8a58..3e38f5f25 100644 --- a/tests/unit/tabs/tabs.html +++ b/tests/unit/tabs/tabs.html @@ -46,6 +46,41 @@ }).get(); same( 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(); + same( tabs.tabs( "option", "disabled" ), state ); + same( actual, expected ); + }