diff --git a/js/ext/angular/test/directive/ionicTabBar.unit.js b/js/ext/angular/test/directive/ionicTabBar.unit.js index ded0991fed..fd150a4831 100644 --- a/js/ext/angular/test/directive/ionicTabBar.unit.js +++ b/js/ext/angular/test/directive/ionicTabBar.unit.js @@ -11,26 +11,27 @@ describe('tabs', function() { })); }); - describe('$ionicTabs controller', function() { + describe('ionicTabs controller', function() { beforeEach(module('ionic')); var ctrl, scope; beforeEach(inject(function($rootScope, $controller) { scope = $rootScope.$new(); - ctrl = $controller('$ionicTabs', { + ctrl = $controller('ionicTabs', { $scope: scope, $element: angular.element('
') }); })); - it('should add itself to scope', function() { - expect(scope.tabsController).toBe(ctrl); - }); - it('.getTabIndex should return indexOf tab', function() { - ctrl.tabs = [1,2]; - expect(ctrl.getTabIndex(1)).toBe(0); - expect(ctrl.getTabIndex(2)).toBe(1); - expect(ctrl.getTabIndex(3)).toBe(-1); + expect(ctrl.selectedTabIndex()).toBe(-1); + var tab1 = {}, tab2 = {}; + ctrl.add(tab1); + ctrl.add(tab2); + expect(ctrl.selectedTabIndex()).toBe(0); + ctrl.select(tab2); + expect(ctrl.selectedTabIndex()).toBe(1); + ctrl.deselect(tab2); + expect(ctrl.selectedTabIndex()).toBe(-1); }); it('.add should add tab and select if empty, & set historyId', inject(function($ionicViewService) { @@ -56,19 +57,19 @@ describe('tabs', function() { ctrl.add(tab1); ctrl.add(tab2); ctrl.add(tab3); - expect(ctrl.selectedTab).toBe(tab1); + expect(ctrl.selectedTab()).toBe(tab1); ctrl.select(tab3); - expect(ctrl.selectedTab).toBe(tab3); + expect(ctrl.selectedTab()).toBe(tab3); ctrl.remove(tab3); - expect(ctrl.selectedTab).toBe(tab2); + expect(ctrl.selectedTab()).toBe(tab2); expect(ctrl.tabs.indexOf(tab3)).toBe(-1); ctrl.remove(tab1); - expect(ctrl.selectedTab).toBe(tab2); + expect(ctrl.selectedTab()).toBe(tab2); expect(ctrl.tabs.indexOf(tab1)).toBe(-1); ctrl.remove(tab2) - expect(ctrl.selectedTab).toBe(null); + expect(ctrl.selectedTab()).toBe(null); expect(ctrl.tabs.indexOf(tab2)).toBe(-1); expect(ctrl.tabs.length).toBe(0); }); @@ -76,13 +77,12 @@ describe('tabs', function() { it('.deselect should unselect if visible', function() { var tab1 = { $tabSelected: true, - onDeselect: jasmine.createSpy('deselect') + onDeselect: jasmine.createSpy('deselect'), }; - ctrl.selectedTab = tab1; ctrl.deselect(tab1); expect(tab1.$tabSelected).toBe(false); expect(tab1.onDeselect).toHaveBeenCalled(); - expect(ctrl.selectedTab).toBe(null); + expect(ctrl.selectedTab()).toBe(null); }); it('.deselect should do nothing if not visible', function() { @@ -90,11 +90,13 @@ describe('tabs', function() { $tabSelected: false, onDeselect: jasmine.createSpy('deselect') }; - ctrl.selectedTab = 'foo'; + spyOn(ctrl, 'selectedTab').andCallFake(function() { + return 'foo'; + }); ctrl.deselect(tab1); expect(tab1.$tabSelected).toBe(false); expect(tab1.onDeselect).not.toHaveBeenCalled(); - expect(ctrl.selectedTab).toBe('foo'); + expect(ctrl.selectedTab()).toBe('foo'); }); it('.select should throw error if tab doesnt exist', function() { @@ -130,23 +132,23 @@ describe('tabs', function() { ctrl.add(tab2); ctrl.select(tab2); - expect(ctrl.selectedTab).toBe(tab2); + expect(ctrl.selectedTab()).toBe(tab2); ctrl.select(0); - expect(ctrl.selectedTab).toBe(tab1); + expect(ctrl.selectedTab()).toBe(tab1); ctrl.select(1); - expect(ctrl.selectedTab).toBe(tab2); + expect(ctrl.selectedTab()).toBe(tab2); ctrl.select(tab1); - expect(ctrl.selectedTab).toBe(tab1); + expect(ctrl.selectedTab()).toBe(tab1); }); it('.select on selected tab should do nothing or go to history root', inject(function($ionicViewService) { spyOn($ionicViewService, 'goToHistoryRoot'); var tab = { $historyId: '1' }; ctrl.add(tab); - expect(ctrl.selectedTab).toBe(tab); + expect(ctrl.selectedTab()).toBe(tab); //Do nothing unless emit event is passed ctrl.select(tab); @@ -169,7 +171,7 @@ describe('tabs', function() { expect(ctrl.deselect).toHaveBeenCalledWith(tab2); expect(tab2.$tabSelected).toBe(true); - expect(ctrl.selectedTab).toBe(tab2); + expect(ctrl.selectedTab()).toBe(tab2); expect(tab2.onSelect).toHaveBeenCalled(); }); @@ -222,6 +224,18 @@ describe('tabs', function() { return element; } + it('should bind controller to scope.tabsController by default', function() { + var el = setup(); + expect(el.controller('ionTabs')).toBeTruthy(); //sanity + expect(el.scope().tabsController).toBe(el.controller('ionTabs')); + }); + + it('should bind controller to scope[attr.model]', function() { + var el = setup('model="superman"'); + expect(el.controller('ionTabs')).toBeTruthy(); + expect(el.scope().superman).toBe(el.controller('ionTabs')); + }); + it('should set attr classes', function() { var el = setup('animation="foo" tabs-style="bar" tabs-type="baz"'); expect(el.hasClass('foo')).toBe(true); @@ -256,7 +270,7 @@ describe('tabs', function() { spyOn(tabsCtrl, 'remove'); }); } - + it('should not initially compile content until selected', inject(function($compile, $rootScope) { var el = $compile('' + '' + @@ -365,7 +379,11 @@ describe('tabs', function() { var tabsCtrl, tabCtrl; function setup(attrs) { tabsCtrl = { - select: jasmine.createSpy('select') + select: jasmine.createSpy('select'), + _selectedTab: null, + selectedTab: function() { + return this._selectedTab; + } }; tabCtrl = { $scope: {} @@ -387,9 +405,9 @@ describe('tabs', function() { it('.isTabActive should be correct', function() { var el = setup(); expect(el.isolateScope().isTabActive()).toBe(false); - tabsCtrl.selectedTab = tabCtrl.$scope; + tabsCtrl._selectedTab = tabCtrl.$scope; expect(el.isolateScope().isTabActive()).toBe(true); - tabsCtrl.selectedTab = null; + tabsCtrl._selectedTab = null; expect(el.isolateScope().isTabActive()).toBe(false); }); it('.selectTab should be correct and preventDefault', function() {