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
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ test('init', function() {
equals( el.data('selected.tabs'), 0, 'selected.tabs set' );
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' );

});

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( $('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');

});

test('enable', function() {
Expand Down Expand Up @@ -67,7 +65,41 @@ test('remove', 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() {
Expand All @@ -83,7 +115,6 @@ test('length', function() {

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

});

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

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

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

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

// show new tab
if ($show.length) {
Expand Down Expand Up @@ -474,19 +475,23 @@ $.widget("ui.tabs", {
select: function(index) {
if (typeof index == 'string')
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');
},

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],
bypassCache = callback == undefined, url = $a.data('load.tabs');

callback = callback || function() {};

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

// not remote or from cache - just finish with callback
if (!url || !bypassCache && $.data(a, 'cache.tabs')) {
callback();
return;
Expand Down

0 comments on commit 8aee174

Please sign in to comment.