Policy 1707 commit to LF
[policy/engine.git] / POLICY-SDK-APP / src / main / webapp / app / policyApp / CSS / bootstrap / js / tests / unit / tab.js
1 $(function () {
2   'use strict';
3
4   QUnit.module('tabs plugin')
5
6   QUnit.test('should be defined on jquery object', function (assert) {
7     assert.expect(1)
8     assert.ok($(document.body).tab, 'tabs method is defined')
9   })
10
11   QUnit.module('tabs', {
12     beforeEach: function () {
13       // Run all tests in noConflict mode -- it's the only way to ensure that the plugin works in noConflict mode
14       $.fn.bootstrapTab = $.fn.tab.noConflict()
15     },
16     afterEach: function () {
17       $.fn.tab = $.fn.bootstrapTab
18       delete $.fn.bootstrapTab
19     }
20   })
21
22   QUnit.test('should provide no conflict', function (assert) {
23     assert.expect(1)
24     assert.strictEqual($.fn.tab, undefined, 'tab was set back to undefined (org value)')
25   })
26
27   QUnit.test('should return jquery collection containing the element', function (assert) {
28     assert.expect(2)
29     var $el = $('<div/>')
30     var $tab = $el.bootstrapTab()
31     assert.ok($tab instanceof $, 'returns jquery collection')
32     assert.strictEqual($tab[0], $el[0], 'collection contains element')
33   })
34
35   QUnit.test('should activate element by tab id', function (assert) {
36     assert.expect(2)
37     var tabsHTML = '<ul class="tabs">'
38         + '<li><a href="#home">Home</a></li>'
39         + '<li><a href="#profile">Profile</a></li>'
40         + '</ul>'
41
42     $('<ul><li id="home"/><li id="profile"/></ul>').appendTo('#qunit-fixture')
43
44     $(tabsHTML).find('li:last a').bootstrapTab('show')
45     assert.strictEqual($('#qunit-fixture').find('.active').attr('id'), 'profile')
46
47     $(tabsHTML).find('li:first a').bootstrapTab('show')
48     assert.strictEqual($('#qunit-fixture').find('.active').attr('id'), 'home')
49   })
50
51   QUnit.test('should activate element by tab id', function (assert) {
52     assert.expect(2)
53     var pillsHTML = '<ul class="pills">'
54         + '<li><a href="#home">Home</a></li>'
55         + '<li><a href="#profile">Profile</a></li>'
56         + '</ul>'
57
58     $('<ul><li id="home"/><li id="profile"/></ul>').appendTo('#qunit-fixture')
59
60     $(pillsHTML).find('li:last a').bootstrapTab('show')
61     assert.strictEqual($('#qunit-fixture').find('.active').attr('id'), 'profile')
62
63     $(pillsHTML).find('li:first a').bootstrapTab('show')
64     assert.strictEqual($('#qunit-fixture').find('.active').attr('id'), 'home')
65   })
66
67   QUnit.test('should not fire shown when show is prevented', function (assert) {
68     assert.expect(1)
69     var done = assert.async()
70
71     $('<div class="tab"/>')
72       .on('show.bs.tab', function (e) {
73         e.preventDefault()
74         assert.ok(true, 'show event fired')
75         done()
76       })
77       .on('shown.bs.tab', function () {
78         assert.ok(false, 'shown event fired')
79       })
80       .bootstrapTab('show')
81   })
82
83   QUnit.test('show and shown events should reference correct relatedTarget', function (assert) {
84     assert.expect(2)
85     var done = assert.async()
86
87     var dropHTML = '<ul class="drop">'
88         + '<li class="dropdown"><a data-toggle="dropdown" href="#">1</a>'
89         + '<ul class="dropdown-menu">'
90         + '<li><a href="#1-1" data-toggle="tab">1-1</a></li>'
91         + '<li><a href="#1-2" data-toggle="tab">1-2</a></li>'
92         + '</ul>'
93         + '</li>'
94         + '</ul>'
95
96     $(dropHTML)
97       .find('ul > li:first a')
98         .bootstrapTab('show')
99       .end()
100       .find('ul > li:last a')
101         .on('show.bs.tab', function (e) {
102           assert.strictEqual(e.relatedTarget.hash, '#1-1', 'references correct element as relatedTarget')
103         })
104         .on('shown.bs.tab', function (e) {
105           assert.strictEqual(e.relatedTarget.hash, '#1-1', 'references correct element as relatedTarget')
106           done()
107         })
108         .bootstrapTab('show')
109   })
110
111   QUnit.test('should fire hide and hidden events', function (assert) {
112     assert.expect(2)
113     var done = assert.async()
114
115     var tabsHTML = '<ul class="tabs">'
116         + '<li><a href="#home">Home</a></li>'
117         + '<li><a href="#profile">Profile</a></li>'
118         + '</ul>'
119
120     $(tabsHTML)
121       .find('li:first a')
122         .on('hide.bs.tab', function () {
123           assert.ok(true, 'hide event fired')
124         })
125         .bootstrapTab('show')
126       .end()
127       .find('li:last a')
128         .bootstrapTab('show')
129
130     $(tabsHTML)
131       .find('li:first a')
132         .on('hidden.bs.tab', function () {
133           assert.ok(true, 'hidden event fired')
134           done()
135         })
136         .bootstrapTab('show')
137       .end()
138       .find('li:last a')
139         .bootstrapTab('show')
140   })
141
142   QUnit.test('should not fire hidden when hide is prevented', function (assert) {
143     assert.expect(1)
144     var done = assert.async()
145
146     var tabsHTML = '<ul class="tabs">'
147         + '<li><a href="#home">Home</a></li>'
148         + '<li><a href="#profile">Profile</a></li>'
149         + '</ul>'
150
151     $(tabsHTML)
152       .find('li:first a')
153         .on('hide.bs.tab', function (e) {
154           e.preventDefault()
155           assert.ok(true, 'hide event fired')
156           done()
157         })
158         .on('hidden.bs.tab', function () {
159           assert.ok(false, 'hidden event fired')
160         })
161         .bootstrapTab('show')
162       .end()
163       .find('li:last a')
164         .bootstrapTab('show')
165   })
166
167   QUnit.test('hide and hidden events contain correct relatedTarget', function (assert) {
168     assert.expect(2)
169     var done = assert.async()
170
171     var tabsHTML = '<ul class="tabs">'
172         + '<li><a href="#home">Home</a></li>'
173         + '<li><a href="#profile">Profile</a></li>'
174         + '</ul>'
175
176     $(tabsHTML)
177       .find('li:first a')
178         .on('hide.bs.tab', function (e) {
179           assert.strictEqual(e.relatedTarget.hash, '#profile', 'references correct element as relatedTarget')
180         })
181         .on('hidden.bs.tab', function (e) {
182           assert.strictEqual(e.relatedTarget.hash, '#profile', 'references correct element as relatedTarget')
183           done()
184         })
185         .bootstrapTab('show')
186       .end()
187       .find('li:last a')
188         .bootstrapTab('show')
189   })
190
191   QUnit.test('selected tab should have aria-expanded', function (assert) {
192     assert.expect(8)
193     var tabsHTML = '<ul class="nav nav-tabs">'
194         + '<li class="active"><a href="#home" toggle="tab" aria-expanded="true">Home</a></li>'
195         + '<li><a href="#profile" toggle="tab" aria-expanded="false">Profile</a></li>'
196         + '</ul>'
197     var $tabs = $(tabsHTML).appendTo('#qunit-fixture')
198
199     $tabs.find('li:first a').bootstrapTab('show')
200     assert.strictEqual($tabs.find('.active a').attr('aria-expanded'), 'true', 'shown tab has aria-expanded = true')
201     assert.strictEqual($tabs.find('li:not(.active) a').attr('aria-expanded'), 'false', 'hidden tab has aria-expanded = false')
202
203     $tabs.find('li:last a').trigger('click')
204     assert.strictEqual($tabs.find('.active a').attr('aria-expanded'), 'true', 'after click, shown tab has aria-expanded = true')
205     assert.strictEqual($tabs.find('li:not(.active) a').attr('aria-expanded'), 'false', 'after click, hidden tab has aria-expanded = false')
206
207     $tabs.find('li:first a').bootstrapTab('show')
208     assert.strictEqual($tabs.find('.active a').attr('aria-expanded'), 'true', 'shown tab has aria-expanded = true')
209     assert.strictEqual($tabs.find('li:not(.active) a').attr('aria-expanded'), 'false', 'hidden tab has aria-expanded = false')
210
211     $tabs.find('li:first a').trigger('click')
212     assert.strictEqual($tabs.find('.active a').attr('aria-expanded'), 'true', 'after second show event, shown tab still has aria-expanded = true')
213     assert.strictEqual($tabs.find('li:not(.active) a').attr('aria-expanded'), 'false', 'after second show event, hidden tab has aria-expanded = false')
214   })
215
216 })