]> git.ipfire.org Git - ipfire.org.git/blame - src/scss/bootstrap-4.0.0-alpha.6/js/tests/unit/tab.js
Introduce autotools
[ipfire.org.git] / src / scss / bootstrap-4.0.0-alpha.6 / js / tests / unit / tab.js
CommitLineData
91e44d91
S
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 throw explicit error on undefined method', function (assert) {
28 assert.expect(1)
29 var $el = $('<div/>')
30 $el.bootstrapTab()
31 try {
32 $el.bootstrapTab('noMethod')
33 }
34 catch (err) {
35 assert.strictEqual(err.message, 'No method named "noMethod"')
36 }
37 })
38
39 QUnit.test('should return jquery collection containing the element', function (assert) {
40 assert.expect(2)
41 var $el = $('<div/>')
42 var $tab = $el.bootstrapTab()
43 assert.ok($tab instanceof $, 'returns jquery collection')
44 assert.strictEqual($tab[0], $el[0], 'collection contains element')
45 })
46
47 QUnit.test('should activate element by tab id', function (assert) {
48 assert.expect(2)
49 var tabsHTML = '<ul class="tabs">'
50 + '<li><a href="#home">Home</a></li>'
51 + '<li><a href="#profile">Profile</a></li>'
52 + '</ul>'
53
54 $('<ul><li id="home"/><li id="profile"/></ul>').appendTo('#qunit-fixture')
55
56 $(tabsHTML).find('li:last a').bootstrapTab('show')
57 assert.strictEqual($('#qunit-fixture').find('.active').attr('id'), 'profile')
58
59 $(tabsHTML).find('li:first a').bootstrapTab('show')
60 assert.strictEqual($('#qunit-fixture').find('.active').attr('id'), 'home')
61 })
62
63 QUnit.test('should activate element by tab id', function (assert) {
64 assert.expect(2)
65 var pillsHTML = '<ul class="pills">'
66 + '<li><a href="#home">Home</a></li>'
67 + '<li><a href="#profile">Profile</a></li>'
68 + '</ul>'
69
70 $('<ul><li id="home"/><li id="profile"/></ul>').appendTo('#qunit-fixture')
71
72 $(pillsHTML).find('li:last a').bootstrapTab('show')
73 assert.strictEqual($('#qunit-fixture').find('.active').attr('id'), 'profile')
74
75 $(pillsHTML).find('li:first a').bootstrapTab('show')
76 assert.strictEqual($('#qunit-fixture').find('.active').attr('id'), 'home')
77 })
78
79 QUnit.test('should activate element by tab id in ordered list', function (assert) {
80 assert.expect(2)
81 var pillsHTML = '<ol class="pills">'
82 + '<li><a href="#home">Home</a></li>'
83 + '<li><a href="#profile">Profile</a></li>'
84 + '</ol>'
85
86 $('<ol><li id="home"/><li id="profile"/></ol>').appendTo('#qunit-fixture')
87
88 $(pillsHTML).find('li:last a').bootstrapTab('show')
89 assert.strictEqual($('#qunit-fixture').find('.active').attr('id'), 'profile')
90
91 $(pillsHTML).find('li:first a').bootstrapTab('show')
92 assert.strictEqual($('#qunit-fixture').find('.active').attr('id'), 'home')
93 })
94
95 QUnit.test('should activate element by tab id in nav list', function (assert) {
96 assert.expect(2)
97 var tabsHTML = '<nav class="nav">' +
98 '<a href="#home">Home</a>' +
99 '<a href="#profile">Profile</a>' +
100 '</nav>'
101
102 $('<nav><div id="home"></div><div id="profile"></div></nav>').appendTo('#qunit-fixture')
103
104 $(tabsHTML).find('a:last').bootstrapTab('show')
105 assert.strictEqual($('#qunit-fixture').find('.active').attr('id'), 'profile')
106
107 $(tabsHTML).find('a:first').bootstrapTab('show')
108 assert.strictEqual($('#qunit-fixture').find('.active').attr('id'), 'home')
109 })
110
111 QUnit.test('should not fire shown when show is prevented', function (assert) {
112 assert.expect(1)
113 var done = assert.async()
114
115 $('<div class="tab"/>')
116 .on('show.bs.tab', function (e) {
117 e.preventDefault()
118 assert.ok(true, 'show event fired')
119 done()
120 })
121 .on('shown.bs.tab', function () {
122 assert.ok(false, 'shown event fired')
123 })
124 .bootstrapTab('show')
125 })
126
127 QUnit.test('should not fire shown when tab is already active', function (assert) {
128 assert.expect(0)
129 var tabsHTML = '<ul class="nav nav-tabs" role="tablist">'
130 + '<li class="nav-item"><a href="#home" class="nav-link active" role="tab">Home</a></li>'
131 + '<li class="nav-item"><a href="#profile" class="nav-link" role="tab">Profile</a></li>'
132 + '</ul>'
133 + '<div class="tab-content">'
134 + '<div class="tab-pane active" id="home" role="tabpanel"></div>'
135 + '<div class="tab-pane" id="profile" role="tabpanel"></div>'
136 + '</div>'
137
138 $(tabsHTML)
139 .find('a.active')
140 .on('shown.bs.tab', function () {
141 assert.ok(true, 'shown event fired')
142 })
143 .bootstrapTab('show')
144 })
145
146 QUnit.test('should not fire shown when tab is disabled', function (assert) {
147 assert.expect(0)
148 var tabsHTML = '<ul class="nav nav-tabs" role="tablist">'
149 + '<li class="nav-item"><a href="#home" class="nav-link active" role="tab">Home</a></li>'
150 + '<li class="nav-item"><a href="#profile" class="nav-link disabled" role="tab">Profile</a></li>'
151 + '</ul>'
152 + '<div class="tab-content">'
153 + '<div class="tab-pane active" id="home" role="tabpanel"></div>'
154 + '<div class="tab-pane" id="profile" role="tabpanel"></div>'
155 + '</div>'
156
157 $(tabsHTML)
158 .find('a.disabled')
159 .on('shown.bs.tab', function () {
160 assert.ok(true, 'shown event fired')
161 })
162 .bootstrapTab('show')
163 })
164
165 QUnit.test('show and shown events should reference correct relatedTarget', function (assert) {
166 assert.expect(2)
167 var done = assert.async()
168
169 var dropHTML = '<ul class="drop">'
170 + '<li class="dropdown"><a data-toggle="dropdown" href="#">1</a>'
171 + '<ul class="dropdown-menu">'
172 + '<li><a href="#1-1" data-toggle="tab">1-1</a></li>'
173 + '<li><a href="#1-2" data-toggle="tab">1-2</a></li>'
174 + '</ul>'
175 + '</li>'
176 + '</ul>'
177
178 $(dropHTML)
179 .find('ul > li:first a')
180 .bootstrapTab('show')
181 .end()
182 .find('ul > li:last a')
183 .on('show.bs.tab', function (e) {
184 assert.strictEqual(e.relatedTarget.hash, '#1-1', 'references correct element as relatedTarget')
185 })
186 .on('shown.bs.tab', function (e) {
187 assert.strictEqual(e.relatedTarget.hash, '#1-1', 'references correct element as relatedTarget')
188 done()
189 })
190 .bootstrapTab('show')
191 })
192
193 QUnit.test('should fire hide and hidden events', function (assert) {
194 assert.expect(2)
195 var done = assert.async()
196
197 var tabsHTML = '<ul class="tabs">'
198 + '<li><a href="#home">Home</a></li>'
199 + '<li><a href="#profile">Profile</a></li>'
200 + '</ul>'
201
202 $(tabsHTML)
203 .find('li:first a')
204 .on('hide.bs.tab', function () {
205 assert.ok(true, 'hide event fired')
206 })
207 .bootstrapTab('show')
208 .end()
209 .find('li:last a')
210 .bootstrapTab('show')
211
212 $(tabsHTML)
213 .find('li:first a')
214 .on('hidden.bs.tab', function () {
215 assert.ok(true, 'hidden event fired')
216 done()
217 })
218 .bootstrapTab('show')
219 .end()
220 .find('li:last a')
221 .bootstrapTab('show')
222 })
223
224 QUnit.test('should not fire hidden when hide is prevented', function (assert) {
225 assert.expect(1)
226 var done = assert.async()
227
228 var tabsHTML = '<ul class="tabs">'
229 + '<li><a href="#home">Home</a></li>'
230 + '<li><a href="#profile">Profile</a></li>'
231 + '</ul>'
232
233 $(tabsHTML)
234 .find('li:first a')
235 .on('hide.bs.tab', function (e) {
236 e.preventDefault()
237 assert.ok(true, 'hide event fired')
238 done()
239 })
240 .on('hidden.bs.tab', function () {
241 assert.ok(false, 'hidden event fired')
242 })
243 .bootstrapTab('show')
244 .end()
245 .find('li:last a')
246 .bootstrapTab('show')
247 })
248
249 QUnit.test('hide and hidden events contain correct relatedTarget', function (assert) {
250 assert.expect(2)
251 var done = assert.async()
252
253 var tabsHTML = '<ul class="tabs">'
254 + '<li><a href="#home">Home</a></li>'
255 + '<li><a href="#profile">Profile</a></li>'
256 + '</ul>'
257
258 $(tabsHTML)
259 .find('li:first a')
260 .on('hide.bs.tab', function (e) {
261 assert.strictEqual(e.relatedTarget.hash, '#profile', 'references correct element as relatedTarget')
262 })
263 .on('hidden.bs.tab', function (e) {
264 assert.strictEqual(e.relatedTarget.hash, '#profile', 'references correct element as relatedTarget')
265 done()
266 })
267 .bootstrapTab('show')
268 .end()
269 .find('li:last a')
270 .bootstrapTab('show')
271 })
272
273 QUnit.test('selected tab should have aria-expanded', function (assert) {
274 assert.expect(8)
275 var tabsHTML = '<ul class="nav nav-tabs">'
276 + '<li><a class="nav-item active" href="#home" toggle="tab" aria-expanded="true">Home</a></li>'
277 + '<li><a class="nav-item" href="#profile" toggle="tab" aria-expanded="false">Profile</a></li>'
278 + '</ul>'
279 var $tabs = $(tabsHTML).appendTo('#qunit-fixture')
280
281 $tabs.find('li:first a').bootstrapTab('show')
282 assert.strictEqual($tabs.find('.active').attr('aria-expanded'), 'true', 'shown tab has aria-expanded = true')
283 assert.strictEqual($tabs.find('a:not(.active)').attr('aria-expanded'), 'false', 'hidden tab has aria-expanded = false')
284
285 $tabs.find('li:last a').trigger('click')
286 assert.strictEqual($tabs.find('.active').attr('aria-expanded'), 'true', 'after click, shown tab has aria-expanded = true')
287 assert.strictEqual($tabs.find('a:not(.active)').attr('aria-expanded'), 'false', 'after click, hidden tab has aria-expanded = false')
288
289 $tabs.find('li:first a').bootstrapTab('show')
290 assert.strictEqual($tabs.find('.active').attr('aria-expanded'), 'true', 'shown tab has aria-expanded = true')
291 assert.strictEqual($tabs.find('a:not(.active)').attr('aria-expanded'), 'false', 'hidden tab has aria-expanded = false')
292
293 $tabs.find('li:first a').trigger('click')
294 assert.strictEqual($tabs.find('.active').attr('aria-expanded'), 'true', 'after second show event, shown tab still has aria-expanded = true')
295 assert.strictEqual($tabs.find('a:not(.active)').attr('aria-expanded'), 'false', 'after second show event, hidden tab has aria-expanded = false')
296 })
297
298 QUnit.test('selected tab should deactivate previous selected tab', function (assert) {
299 assert.expect(2)
300 var tabsHTML = '<ul class="nav nav-tabs">'
301 + '<li class="nav-item"><a class="nav-link active" href="#home" data-toggle="tab">Home</a></li>'
302 + '<li class="nav-item"><a class="nav-link" href="#profile" data-toggle="tab">Profile</a></li>'
303 + '</ul>'
304 var $tabs = $(tabsHTML).appendTo('#qunit-fixture')
305
306 $tabs.find('li:last a').trigger('click')
307 assert.notOk($tabs.find('li:first a').hasClass('active'))
308 assert.ok($tabs.find('li:last a').hasClass('active'))
309 })
310
311 QUnit.test('selected tab should deactivate previous selected link in dropdown', function (assert) {
312 assert.expect(3)
313 var tabsHTML = '<ul class="nav nav-tabs">'
314 + '<li class="nav-item"><a class="nav-link" href="#home" data-toggle="tab">Home</a></li>'
315 + '<li class="nav-item"><a class="nav-link" href="#profile" data-toggle="tab">Profile</a></li>'
316 + '<li class="nav-item dropdown"><a class="nav-link dropdown-toggle active" data-toggle="dropdown" href="#">Dropdown</a>'
317 + '<div class="dropdown-menu">'
318 + '<a class="dropdown-item active" href="#dropdown1" id="dropdown1-tab" data-toggle="tab">@fat</a>'
319 + '<a class="dropdown-item" href="#dropdown2" id="dropdown2-tab" data-toggle="tab">@mdo</a>'
320 + '</div>'
321 + '</li>'
322 + '</ul>'
323 var $tabs = $(tabsHTML).appendTo('#qunit-fixture')
324
325 $tabs.find('li:first > a').trigger('click')
326 assert.ok($tabs.find('li:first a').hasClass('active'))
327 assert.notOk($tabs.find('li:last > a').hasClass('active'))
328 assert.notOk($tabs.find('li:last > .dropdown-menu > a:first').hasClass('active'))
329 })
330})