diff options
Diffstat (limited to 'docs/component-spec/bootstrap/bootstrapSpec.js')
| -rw-r--r-- | docs/component-spec/bootstrap/bootstrapSpec.js | 157 | 
1 files changed, 157 insertions, 0 deletions
| diff --git a/docs/component-spec/bootstrap/bootstrapSpec.js b/docs/component-spec/bootstrap/bootstrapSpec.js new file mode 100644 index 00000000..2c8d89fa --- /dev/null +++ b/docs/component-spec/bootstrap/bootstrapSpec.js @@ -0,0 +1,157 @@ +'use strict'; + +describe('bootstrap', function() { +  var $compile, $rootScope, element; + +  function clickTab(element, index) { +    browserTrigger(element.children().eq(0).children().eq(index)); +  } + +  beforeEach(module('bootstrap')); +  beforeEach(inject(function(_$compile_, _$rootScope_) { +    $compile = _$compile_; +    $rootScope = _$rootScope_; +  })); +  beforeEach(function(){ +    function findTab(element, index) { +      return _jQuery(element[0]).find('> .nav-tabs > li').eq(index); +    } +    function findTabPane(element, index) { +      return _jQuery(element[0]).find('> .tab-content > .tab-pane').eq(index); +    } + +    this.addMatchers({ +      toHaveTab: function(index, title) { +        var tab = findTab(element, index); + +        this.message = function() { +          if (tab.length) { +            return 'Expect tab index ' + index + ' to be ' + toJson(title) + ' but was ' + toJson(tab.text()); +          } else { +            return 'Expect tab index ' + index + ' to be ' + toJson(title) + ' but there are only ' + +              element.children().length + ' tabs.'; +          } +        }; + +        return tab.length && tab.text() == title; +      }, + +      toHaveTabPane: function(index, title) { +        var tabPane = findTabPane(element, index); + +        this.message = function() { +          if (tabPane.length) { +            return 'Expect tab pane index ' + index + ' to be ' + toJson(title) + ' but was ' + toJson(tabPane.text()); +          } else { +            return 'Expect tab pane index ' + index + ' to be ' + toJson(title) + ' but there are only ' + +              element.children().length + 'tab panes.'; +          } +        }; + +        return tabPane.length && tabPane.text() == title; +      }, + +      toHaveSelected: function(index) { +        var tab = findTab(element, index); +        var tabPane = findTabPane(element, index); + +        this.message = function() { +          return 'Expect tab  index ' + index + ' to be selected\n' + +            '     TAB: ' + angular.mock.dump(tab) + '\n' + +            'TAB-PANE: ' + angular.mock.dump(tabPane); +        }; + +        return tabPane.hasClass('active') && tab.hasClass('active'); +      } +    }); +  }); + +  afterEach(function() { +    dealoc(element); +  }); + +  describe('tabbable', function() { + +    it('should create the right structure', function() { +      element = $compile( +        '<div class="tabbable">' + +          '<div class="tab-pane" title="first">tab1</div>' + +          '<div class="tab-pane" title="second">tab2</div>' + +        '</div>')($rootScope); + +      $rootScope.$apply(); + +      expect(element).toHaveTab(0, 'first'); +      expect(element).toHaveTab(1, 'second'); + +      expect(element).toHaveTabPane(0, 'tab1'); +      expect(element).toHaveTabPane(1, 'tab2'); + +      expect(element).toHaveSelected(0); +    }); + + +    it('should respond to tab click', function(){ +      element = $compile( +        '<div class="tabbable">' + +          '<div class="tab-pane" title="first">tab1</div>' + +          '<div class="tab-pane" title="second">tab2</div>' + +          '</div>')($rootScope); + +      expect(element).toHaveSelected(0); +      clickTab(element, 1); +      expect(element).toHaveSelected(1); +    }); + + +    it('should select the first tab in repeater', function() { +      element = $compile( +        '<div class="tabbable">' + +          '<div class="tab-pane" ng-repeat="id in [1,2,3]" title="Tab {{id}}" value="tab-{{id}}">' + +          'Tab content {{id}}!' + +          '</div>' + +        '</div>')($rootScope); +      $rootScope.$apply(); + +      expect(element).toHaveSelected(0); +    }); + + +    describe('ngModel', function() { +      it('should bind to model', function() { +        $rootScope.tab = 'B'; + +        element = $compile( +          '<div class="tabbable" ng-model="tab">' + +            '<div class="tab-pane" title="first" value="A">tab1</div>' + +            '<div class="tab-pane" title="second" value="B">tab2</div>' + +          '</div>')($rootScope); + +        $rootScope.$apply(); +        expect(element).toHaveSelected(1); + +        $rootScope.tab = 'A'; +        $rootScope.$apply(); +        expect(element).toHaveSelected(0); + +        clickTab(element, 1); +        expect($rootScope.tab).toEqual('B'); +        expect(element).toHaveSelected(1); +      }); + + +      it('should not overwrite the model', function() { +        $rootScope.tab = 'tab-2'; +        element = $compile( +        '<div class="tabbable" ng-model="tab">' + +            '<div class="tab-pane" ng-repeat="id in [1,2,3]" title="Tab {{id}}" value="tab-{{id}}">' + +            'Tab content {{id}}!' + +            '</div>' + +            '</div>')($rootScope); +        $rootScope.$apply(); + +        expect(element).toHaveSelected(1); +      }); +    }); +  }); +}); | 
