Skip to content

Commit

Permalink
Tabs: Added tests for select method while at the same time implemente…
Browse files Browse the repository at this point in the history
…d consistent handling of possible values to pass, addresses #4051
  • Loading branch information
Klaus Hartl committed Feb 5, 2009
1 parent dd3636c commit 8aee174
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 12 deletions.
39 changes: 35 additions & 4 deletions tests/unit/tabs/tabs_methods.js
Expand Up @@ -19,7 +19,6 @@ test('init', function() {
equals( el.data('selected.tabs'), 0, 'selected.tabs set' ); equals( el.data('selected.tabs'), 0, 'selected.tabs set' );
equals( $('li', el).index( $('li.ui-tabs-selected', el) ), 0, 'second tab active'); equals( $('li', el).index( $('li.ui-tabs-selected', el) ), 0, 'second tab active');
equals( $('div', el).index( $('div.ui-tabs-hide', '#tabs1') ), 1, 'second panel should be hidden' ); equals( $('div', el).index( $('div.ui-tabs-hide', '#tabs1') ), 1, 'second panel should be hidden' );

}); });


test('destroy', function() { test('destroy', function() {
Expand All @@ -33,7 +32,6 @@ test('destroy', function() {
ok( $('div:eq(1)', el).is(':not(.ui-tabs-panel, .ui-widget-content, .ui-corner-bottom, .ui-tabs-hide)'), 'remove classes to panel' ); ok( $('div:eq(1)', el).is(':not(.ui-tabs-panel, .ui-widget-content, .ui-corner-bottom, .ui-tabs-hide)'), 'remove classes to panel' );
ok( $('li:eq(0)', el).is(':not(.ui-tabs-selected, .ui-state-active, .ui-corner-top)'), 'remove classes from active li'); ok( $('li:eq(0)', el).is(':not(.ui-tabs-selected, .ui-state-active, .ui-corner-top)'), 'remove classes from active li');
ok( $('li:eq(1)', el).is(':not(.ui-state-default, .ui-corner-top)'), 'remove classes from inactive li'); ok( $('li:eq(1)', el).is(':not(.ui-state-default, .ui-corner-top)'), 'remove classes from inactive li');

}); });


test('enable', function() { test('enable', function() {
Expand Down Expand Up @@ -67,7 +65,41 @@ test('remove', function() {
}); });


test('select', function() { test('select', function() {
ok(false, "missing test - untested code is broken code."); expect(9);

el = $('#tabs1').tabs();

el.tabs('select', 1);
equals(el.data('selected.tabs'), 1, 'should select tab');

el.tabs('destroy');
el.tabs({ collapsible: true });
el.tabs('select', 0);
equals(el.data('selected.tabs'), -1, 'should collapse tab passing in the already selected tab');

el.tabs('destroy');
el.tabs({ collapsible: true });
el.tabs('select', -1);
equals(el.data('selected.tabs'), -1, 'should collapse tab passing in -1');

el.tabs('destroy');
el.tabs({ collapsible: true });
el.tabs('select', null);
equals(el.data('selected.tabs'), -1, 'should collapse tab passing in null (deprecated)');
el.tabs('select', null);
equals(el.data('selected.tabs'), -1, 'should not select tab passing in null a second time (deprecated)');

el.tabs('destroy');
el.tabs();
el.tabs('select', 0);
equals(el.data('selected.tabs'), 0, 'should not collapse tab if collapsible is not set to true');
el.tabs('select', -1);
equals(el.data('selected.tabs'), 0, 'should not collapse tab if collapsible is not set to true');
el.tabs('select', null);
equals(el.data('selected.tabs'), 0, 'should not collapse tab if collapsible is not set to true');

el.tabs('select', '#fragment-2');
equals(el.data('selected.tabs'), 1, 'should select tab by id');
}); });


test('load', function() { test('load', function() {
Expand All @@ -83,7 +115,6 @@ test('length', function() {


el = $('#tabs1').tabs(); el = $('#tabs1').tabs();
equals(el.tabs('length'), $('ul a', el).length, ' should return length'); equals(el.tabs('length'), $('ul a', el).length, ' should return length');

}); });


test('rotate', function() { test('rotate', function() {
Expand Down
21 changes: 13 additions & 8 deletions ui/ui.tabs.js
Expand Up @@ -21,8 +21,9 @@ $.widget("ui.tabs", {
}, },


_setData: function(key, value) { _setData: function(key, value) {
if ((/^selected/).test(key)) if (key == 'selected')
this.select(value); this.select(value);

else { else {
this.options[key] = value; this.options[key] = value;
if (key == 'deselectable') if (key == 'deselectable')
Expand Down Expand Up @@ -311,7 +312,7 @@ $.widget("ui.tabs", {
if (o.cookie) self._cookie(o.selected, o.cookie); if (o.cookie) self._cookie(o.selected, o.cookie);


// stop possibly running animations // stop possibly running animations
self.$panels.stop(); self.$panels.stop(false, true);


// show new tab // show new tab
if ($show.length) { if ($show.length) {
Expand Down Expand Up @@ -474,19 +475,23 @@ $.widget("ui.tabs", {
select: function(index) { select: function(index) {
if (typeof index == 'string') if (typeof index == 'string')
index = this.$tabs.index(this.$tabs.filter('[href$=' + index + ']')); index = this.$tabs.index(this.$tabs.filter('[href$=' + index + ']'));

else if (index === null)
index = -1;

if (index == -1 && this.options.collapsible)
index = this.options.selected;

this.$tabs.eq(index).trigger(this.options.event + '.tabs'); this.$tabs.eq(index).trigger(this.options.event + '.tabs');
}, },


load: function(index, callback) { // callback is for internal usage only load: function(index, callback) { // callback is for internal usage only

callback = callback || function() {};

var self = this, o = this.options, $a = this.$tabs.eq(index), a = $a[0], var self = this, o = this.options, $a = this.$tabs.eq(index), a = $a[0],
bypassCache = callback == undefined, url = $a.data('load.tabs'); bypassCache = callback == undefined, url = $a.data('load.tabs');


callback = callback || function() {}; // not remote or from cache - just finish with callback

// no remote or from cache - just finish with callback
// TODO in any case: insert cancel running load here..!

if (!url || !bypassCache && $.data(a, 'cache.tabs')) { if (!url || !bypassCache && $.data(a, 'cache.tabs')) {
callback(); callback();
return; return;
Expand Down

0 comments on commit 8aee174

Please sign in to comment.