From c4fa48725039c30349af725583f147e7f4fb69c7 Mon Sep 17 00:00:00 2001 From: Misko Hevery Date: Sat, 28 Apr 2012 22:25:05 -0700 Subject: feat(bootstrap): support code prettify and dropdown from bootstrap --- test/bootstrap/bootstrapSpec.js | 157 ++++++++++++++++++++++++++++++++++++++++ test/bootstrap/code.html | 91 +++++++++++++++++++++++ 2 files changed, 248 insertions(+) create mode 100644 test/bootstrap/bootstrapSpec.js create mode 100644 test/bootstrap/code.html (limited to 'test/bootstrap') diff --git a/test/bootstrap/bootstrapSpec.js b/test/bootstrap/bootstrapSpec.js new file mode 100644 index 00000000..2c8d89fa --- /dev/null +++ b/test/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( + '
' + + '
tab1
' + + '
tab2
' + + '
')($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( + '
' + + '
tab1
' + + '
tab2
' + + '
')($rootScope); + + expect(element).toHaveSelected(0); + clickTab(element, 1); + expect(element).toHaveSelected(1); + }); + + + it('should select the first tab in repeater', function() { + element = $compile( + '
' + + '
' + + 'Tab content {{id}}!' + + '
' + + '
')($rootScope); + $rootScope.$apply(); + + expect(element).toHaveSelected(0); + }); + + + describe('ngModel', function() { + it('should bind to model', function() { + $rootScope.tab = 'B'; + + element = $compile( + '
' + + '
tab1
' + + '
tab2
' + + '
')($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( + '
' + + '
' + + 'Tab content {{id}}!' + + '
' + + '
')($rootScope); + $rootScope.$apply(); + + expect(element).toHaveSelected(1); + }); + }); + }); +}); diff --git a/test/bootstrap/code.html b/test/bootstrap/code.html new file mode 100644 index 00000000..e1eaa8d2 --- /dev/null +++ b/test/bootstrap/code.html @@ -0,0 +1,91 @@ + + + + + + + + + +
+
+
+

AngularJS is {{'working'}}

+ +

Directive: prettify

+
+            <p>Sample text here...</p>
+          
+ + +

Directive: ng-set-text

+

+          
+
+          

Directive: ng-html-wrap

+

+
+          

Directive ng-embed-app

+
{{text}}
+ +

Bootstrap

+ +

Directive drop-down-toggle

+ + +

Directive tabbable

+ state = {{state}} + +
+
+ Tab content {{id}}! +
+
+ +
+ +
+
+ Tab content {{id}}! +
+
+ +
+ +
+
+ Tab content {{id}}! +
+
+ +
+
+
+
+
+
+
+
+
+ + -- cgit v1.2.3