diff --git a/js/tabs.js b/js/tabs.js
index 6dfa330..0735869 100644
--- a/js/tabs.js
+++ b/js/tabs.js
@@ -1,26 +1,28 @@
var tabs = angular.module('tabs', []);
+var TabsController = function($scope, $element) {
+ var panes = $scope.panes = [];
+
+ $scope.select = function(pane) {
+ angular.forEach(panes, function(pane) {
+ pane.selected = false;
+ });
+ pane.selected = true;
+ };
+
+ this.addPane = function(pane) {
+ if (!panes.length) $scope.select(pane);
+ panes.push(pane);
+ };
+};
+
tabs.directive('tabs', function() {
return {
restrict: 'E',
transclude: true,
scope: {},
- controller: function($scope, $element) {
- var panes = $scope.panes = [];
-
- $scope.select = function(pane) {
- angular.forEach(panes, function(pane) {
- pane.selected = false;
- });
- pane.selected = true;
- };
-
- this.addPane = function(pane) {
- if (!panes.length) $scope.select(pane);
- panes.push(pane);
- };
- },
+ controller: TabsController,
// templateUrl: 'tpl/tabs.html',
template:
'
' +
diff --git a/test/tabsSpec.js b/test/tabsSpec.js
index 3c2cd20..f867879 100644
--- a/test/tabsSpec.js
+++ b/test/tabsSpec.js
@@ -85,3 +85,77 @@ describe('tabs', function() {
expect(contents.eq(1)).toHaveClass('active');
});
});
+
+
+describe('tabs controller', function() {
+ var scope, ctrl;
+
+ beforeEach(inject(function($controller, $rootScope) {
+ scope = $rootScope;
+
+ // instantiate the controller stand-alone, without the directive
+ ctrl = $controller(TabsController, {$scope: scope, $element: null});
+ }));
+
+
+ describe('select', function() {
+
+ it('should mark given pane selected', function() {
+ var pane = {};
+
+ scope.select(pane);
+ expect(pane.selected).toBe(true);
+ });
+
+
+ it('should deselect other panes', function() {
+ var pane1 = {}, pane2 = {}, pane3 = {};
+
+ ctrl.addPane(pane1);
+ ctrl.addPane(pane2);
+ ctrl.addPane(pane3);
+
+ scope.select(pane1);
+ expect(pane1.selected).toBe(true);
+ expect(pane2.selected).toBe(false);
+ expect(pane3.selected).toBe(false);
+
+ scope.select(pane2);
+ expect(pane1.selected).toBe(false);
+ expect(pane2.selected).toBe(true);
+ expect(pane3.selected).toBe(false);
+
+ scope.select(pane3);
+ expect(pane1.selected).toBe(false);
+ expect(pane2.selected).toBe(false);
+ expect(pane3.selected).toBe(true);
+ });
+ });
+
+
+ describe('addPane', function() {
+
+ it('should append pane', function() {
+ var pane1 = {}, pane2 = {};
+
+ expect(scope.panes).toEqual([]);
+
+ ctrl.addPane(pane1);
+ expect(scope.panes).toEqual([pane1]);
+
+ ctrl.addPane(pane2);
+ expect(scope.panes).toEqual([pane1, pane2]);
+ });
+
+
+ it('should select the first one', function() {
+ var pane1 = {}, pane2 = {};
+
+ ctrl.addPane(pane1);
+ expect(pane1.selected).toBe(true);
+
+ ctrl.addPane(pane2);
+ expect(pane1.selected).toBe(true);
+ });
+ });
+});