]>
git.ipfire.org Git - ipfire.org.git/blob - src/scss/bootstrap-4.0.0-alpha.6/js/tests/unit/collapse.js
4 QUnit
.module('collapse plugin')
6 QUnit
.test('should be defined on jquery object', function (assert
) {
8 assert
.ok($(document
.body
).collapse
, 'collapse method is defined')
11 QUnit
.module('collapse', {
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
.bootstrapCollapse
= $.fn
.collapse
.noConflict()
16 afterEach: function () {
17 $.fn
.collapse
= $.fn
.bootstrapCollapse
18 delete $.fn
.bootstrapCollapse
22 QUnit
.test('should provide no conflict', function (assert
) {
24 assert
.strictEqual($.fn
.collapse
, undefined, 'collapse was set back to undefined (org value)')
27 QUnit
.test('should throw explicit error on undefined method', function (assert
) {
30 $el
.bootstrapCollapse()
32 $el
.bootstrapCollapse('noMethod')
35 assert
.strictEqual(err
.message
, 'No method named "noMethod"')
39 QUnit
.test('should return jquery collection containing the element', function (assert
) {
42 var $collapse
= $el
.bootstrapCollapse()
43 assert
.ok($collapse
instanceof $, 'returns jquery collection')
44 assert
.strictEqual($collapse
[0], $el
[0], 'collection contains element')
47 QUnit
.test('should show a collapsed element', function (assert
) {
49 var $el
= $('<div class="collapse"/>').bootstrapCollapse('show')
51 assert
.ok($el
.hasClass('show'), 'has class "show"')
52 assert
.ok(!/height/i.test($el
.attr('style')), 'has height reset')
55 QUnit
.test('should collapse only the first collapse', function (assert
) {
58 '<div class="panel-group" id="accordion1">',
59 '<div class="panel">',
60 '<div id="collapse1" class="collapse"/>',
63 '<div class="panel-group" id="accordion2">',
64 '<div class="panel">',
65 '<div id="collapse2" class="collapse show"/>',
69 $(html
).appendTo('#qunit-fixture')
70 var $el1
= $('#collapse1')
71 var $el2
= $('#collapse2')
72 $el1
.bootstrapCollapse('show')
74 assert
.ok($el1
.hasClass('show'))
75 assert
.ok($el2
.hasClass('show'))
78 QUnit
.test('should hide a collapsed element', function (assert
) {
80 var $el
= $('<div class="collapse"/>').bootstrapCollapse('hide')
82 assert
.ok(!$el
.hasClass('show'), 'does not have class "show"')
85 QUnit
.test('should not fire shown when show is prevented', function (assert
) {
87 var done
= assert
.async()
89 $('<div class="collapse"/>')
90 .on('show.bs.collapse', function (e
) {
92 assert
.ok(true, 'show event fired')
95 .on('shown.bs.collapse', function () {
96 assert
.ok(false, 'shown event fired')
98 .bootstrapCollapse('show')
101 QUnit
.test('should reset style to auto after finishing opening collapse', function (assert
) {
103 var done
= assert
.async()
105 $('<div class="collapse" style="height: 0px"/>')
106 .on('show.bs.collapse', function () {
107 assert
.strictEqual(this.style
.height
, '0px', 'height is 0px')
109 .on('shown.bs.collapse', function () {
110 assert
.strictEqual(this.style
.height
, '', 'height is auto')
113 .bootstrapCollapse('show')
116 QUnit
.test('should reset style to auto after finishing closing collapse', function (assert
) {
118 var done
= assert
.async()
120 $('<div class="collapse"/>')
121 .on('shown.bs.collapse', function () {
122 $(this).bootstrapCollapse('hide')
124 .on('hidden.bs.collapse', function () {
125 assert
.strictEqual(this.style
.height
, '', 'height is auto')
128 .bootstrapCollapse('show')
131 QUnit
.test('should remove "collapsed" class from target when collapse is shown', function (assert
) {
133 var done
= assert
.async()
135 var $target
= $('<a role="button" data-toggle="collapse" class="collapsed" href="#test1"/>').appendTo('#qunit-fixture')
137 $('<div id="test1"/>')
138 .appendTo('#qunit-fixture')
139 .on('shown.bs.collapse', function () {
140 assert
.ok(!$target
.hasClass('collapsed'), 'target does not have collapsed class')
144 $target
.trigger('click')
147 QUnit
.test('should add "collapsed" class to target when collapse is hidden', function (assert
) {
149 var done
= assert
.async()
151 var $target
= $('<a role="button" data-toggle="collapse" href="#test1"/>').appendTo('#qunit-fixture')
153 $('<div id="test1" class="show"/>')
154 .appendTo('#qunit-fixture')
155 .on('hidden.bs.collapse', function () {
156 assert
.ok($target
.hasClass('collapsed'), 'target has collapsed class')
160 $target
.trigger('click')
163 QUnit
.test('should remove "collapsed" class from all triggers targeting the collapse when the collapse is shown', function (assert
) {
165 var done
= assert
.async()
167 var $target
= $('<a role="button" data-toggle="collapse" class="collapsed" href="#test1"/>').appendTo('#qunit-fixture')
168 var $alt
= $('<a role="button" data-toggle="collapse" class="collapsed" href="#test1"/>').appendTo('#qunit-fixture')
170 $('<div id="test1"/>')
171 .appendTo('#qunit-fixture')
172 .on('shown.bs.collapse', function () {
173 assert
.ok(!$target
.hasClass('collapsed'), 'target trigger does not have collapsed class')
174 assert
.ok(!$alt
.hasClass('collapsed'), 'alt trigger does not have collapsed class')
178 $target
.trigger('click')
181 QUnit
.test('should add "collapsed" class to all triggers targeting the collapse when the collapse is hidden', function (assert
) {
183 var done
= assert
.async()
185 var $target
= $('<a role="button" data-toggle="collapse" href="#test1"/>').appendTo('#qunit-fixture')
186 var $alt
= $('<a role="button" data-toggle="collapse" href="#test1"/>').appendTo('#qunit-fixture')
188 $('<div id="test1" class="show"/>')
189 .appendTo('#qunit-fixture')
190 .on('hidden.bs.collapse', function () {
191 assert
.ok($target
.hasClass('collapsed'), 'target has collapsed class')
192 assert
.ok($alt
.hasClass('collapsed'), 'alt trigger has collapsed class')
196 $target
.trigger('click')
199 QUnit
.test('should not close a collapse when initialized with "show" option if already shown', function (assert
) {
201 var done
= assert
.async()
203 var $test
= $('<div id="test1" class="show"/>')
204 .appendTo('#qunit-fixture')
205 .on('hide.bs.collapse', function () {
209 $test
.bootstrapCollapse('show')
214 QUnit
.test('should open a collapse when initialized with "show" option if not already shown', function (assert
) {
216 var done
= assert
.async()
218 var $test
= $('<div id="test1" />')
219 .appendTo('#qunit-fixture')
220 .on('show.bs.collapse', function () {
224 $test
.bootstrapCollapse('show')
229 QUnit
.test('should not show a collapse when initialized with "hide" option if already hidden', function (assert
) {
231 var done
= assert
.async()
233 $('<div class="collapse"></div>')
234 .appendTo('#qunit-fixture')
235 .on('show.bs.collapse', function () {
236 assert
.ok(false, 'showing a previously-uninitialized hidden collapse when the "hide" method is called')
238 .bootstrapCollapse('hide')
243 QUnit
.test('should hide a collapse when initialized with "hide" option if not already hidden', function (assert
) {
245 var done
= assert
.async()
247 $('<div class="collapse show"></div>')
248 .appendTo('#qunit-fixture')
249 .on('hide.bs.collapse', function () {
250 assert
.ok(true, 'hiding a previously-uninitialized shown collapse when the "hide" method is called')
252 .bootstrapCollapse('hide')
257 QUnit
.test('should remove "collapsed" class from active accordion target', function (assert
) {
259 var done
= assert
.async()
261 var accordionHTML
= '<div id="accordion">'
262 + '<div class="card"/>'
263 + '<div class="card"/>'
264 + '<div class="card"/>'
266 var $groups
= $(accordionHTML
).appendTo('#qunit-fixture').find('.card')
268 var $target1
= $('<a role="button" data-toggle="collapse" href="#body1" data-parent="#accordion"/>').appendTo($groups
.eq(0))
270 $('<div id="body1" class="show"/>').appendTo($groups
.eq(0))
272 var $target2
= $('<a class="collapsed" data-toggle="collapse" role="button" href="#body2" data-parent="#accordion"/>').appendTo($groups
.eq(1))
274 $('<div id="body2"/>').appendTo($groups
.eq(1))
276 var $target3
= $('<a class="collapsed" data-toggle="collapse" role="button" href="#body3" data-parent="#accordion"/>').appendTo($groups
.eq(2))
278 $('<div id="body3"/>')
279 .appendTo($groups
.eq(2))
280 .on('shown.bs.collapse', function () {
281 assert
.ok($target1
.hasClass('collapsed'), 'inactive target 1 does have class "collapsed"')
282 assert
.ok($target2
.hasClass('collapsed'), 'inactive target 2 does have class "collapsed"')
283 assert
.ok(!$target3
.hasClass('collapsed'), 'active target 3 does not have class "collapsed"')
288 $target3
.trigger('click')
291 QUnit
.test('should allow dots in data-parent', function (assert
) {
293 var done
= assert
.async()
295 var accordionHTML
= '<div class="accordion">'
296 + '<div class="card"/>'
297 + '<div class="card"/>'
298 + '<div class="card"/>'
300 var $groups
= $(accordionHTML
).appendTo('#qunit-fixture').find('.card')
302 var $target1
= $('<a role="button" data-toggle="collapse" href="#body1" data-parent=".accordion"/>').appendTo($groups
.eq(0))
304 $('<div id="body1" class="show"/>').appendTo($groups
.eq(0))
306 var $target2
= $('<a class="collapsed" data-toggle="collapse" role="button" href="#body2" data-parent=".accordion"/>').appendTo($groups
.eq(1))
308 $('<div id="body2"/>').appendTo($groups
.eq(1))
310 var $target3
= $('<a class="collapsed" data-toggle="collapse" role="button" href="#body3" data-parent=".accordion"/>').appendTo($groups
.eq(2))
312 $('<div id="body3"/>')
313 .appendTo($groups
.eq(2))
314 .on('shown.bs.collapse', function () {
315 assert
.ok($target1
.hasClass('collapsed'), 'inactive target 1 does have class "collapsed"')
316 assert
.ok($target2
.hasClass('collapsed'), 'inactive target 2 does have class "collapsed"')
317 assert
.ok(!$target3
.hasClass('collapsed'), 'active target 3 does not have class "collapsed"')
322 $target3
.trigger('click')
325 QUnit
.test('should set aria-expanded="true" on target when collapse is shown', function (assert
) {
327 var done
= assert
.async()
329 var $target
= $('<a role="button" data-toggle="collapse" class="collapsed" href="#test1" aria-expanded="false"/>').appendTo('#qunit-fixture')
331 $('<div id="test1"/>')
332 .appendTo('#qunit-fixture')
333 .on('shown.bs.collapse', function () {
334 assert
.strictEqual($target
.attr('aria-expanded'), 'true', 'aria-expanded on target is "true"')
338 $target
.trigger('click')
341 QUnit
.test('should set aria-expanded="false" on target when collapse is hidden', function (assert
) {
343 var done
= assert
.async()
345 var $target
= $('<a role="button" data-toggle="collapse" href="#test1" aria-expanded="true"/>').appendTo('#qunit-fixture')
347 $('<div id="test1" class="show"/>')
348 .appendTo('#qunit-fixture')
349 .on('hidden.bs.collapse', function () {
350 assert
.strictEqual($target
.attr('aria-expanded'), 'false', 'aria-expanded on target is "false"')
354 $target
.trigger('click')
357 QUnit
.test('should set aria-expanded="true" on all triggers targeting the collapse when the collapse is shown', function (assert
) {
359 var done
= assert
.async()
361 var $target
= $('<a role="button" data-toggle="collapse" class="collapsed" href="#test1" aria-expanded="false"/>').appendTo('#qunit-fixture')
362 var $alt
= $('<a role="button" data-toggle="collapse" class="collapsed" href="#test1" aria-expanded="false"/>').appendTo('#qunit-fixture')
364 $('<div id="test1"/>')
365 .appendTo('#qunit-fixture')
366 .on('shown.bs.collapse', function () {
367 assert
.strictEqual($target
.attr('aria-expanded'), 'true', 'aria-expanded on target is "true"')
368 assert
.strictEqual($alt
.attr('aria-expanded'), 'true', 'aria-expanded on alt is "true"')
372 $target
.trigger('click')
375 QUnit
.test('should set aria-expanded="false" on all triggers targeting the collapse when the collapse is hidden', function (assert
) {
377 var done
= assert
.async()
379 var $target
= $('<a role="button" data-toggle="collapse" href="#test1" aria-expanded="true"/>').appendTo('#qunit-fixture')
380 var $alt
= $('<a role="button" data-toggle="collapse" href="#test1" aria-expanded="true"/>').appendTo('#qunit-fixture')
382 $('<div id="test1" class="show"/>')
383 .appendTo('#qunit-fixture')
384 .on('hidden.bs.collapse', function () {
385 assert
.strictEqual($target
.attr('aria-expanded'), 'false', 'aria-expanded on target is "false"')
386 assert
.strictEqual($alt
.attr('aria-expanded'), 'false', 'aria-expanded on alt is "false"')
390 $target
.trigger('click')
393 QUnit
.test('should change aria-expanded from active accordion target to "false" and set the newly active one to "true"', function (assert
) {
395 var done
= assert
.async()
397 var accordionHTML
= '<div id="accordion">'
398 + '<div class="card"/>'
399 + '<div class="card"/>'
400 + '<div class="card"/>'
402 var $groups
= $(accordionHTML
).appendTo('#qunit-fixture').find('.card')
404 var $target1
= $('<a role="button" data-toggle="collapse" href="#body1" data-parent="#accordion"/>').appendTo($groups
.eq(0))
406 $('<div id="body1" aria-expanded="true" class="show"/>').appendTo($groups
.eq(0))
408 var $target2
= $('<a role="button" data-toggle="collapse" href="#body2" data-parent="#accordion" class="collapsed" />').appendTo($groups
.eq(1))
410 $('<div id="body2" aria-expanded="false"/>').appendTo($groups
.eq(1))
412 var $target3
= $('<a class="collapsed" data-toggle="collapse" role="button" href="#body3" data-parent="#accordion"/>').appendTo($groups
.eq(2))
414 $('<div id="body3" aria-expanded="false"/>')
415 .appendTo($groups
.eq(2))
416 .on('shown.bs.collapse', function () {
417 assert
.strictEqual($target1
.attr('aria-expanded'), 'false', 'inactive target 1 has aria-expanded="false"')
418 assert
.strictEqual($target2
.attr('aria-expanded'), 'false', 'inactive target 2 has aria-expanded="false"')
419 assert
.strictEqual($target3
.attr('aria-expanded'), 'true', 'active target 3 has aria-expanded="false"')
424 $target3
.trigger('click')
427 QUnit
.test('should not fire show event if show is prevented because other element is still transitioning', function (assert
) {
429 var done
= assert
.async()
431 var accordionHTML
= '<div id="accordion">'
432 + '<div class="card"/>'
433 + '<div class="card"/>'
435 var showFired
= false
436 var $groups
= $(accordionHTML
).appendTo('#qunit-fixture').find('.card')
438 var $target1
= $('<a role="button" data-toggle="collapse" href="#body1" data-parent="#accordion"/>').appendTo($groups
.eq(0))
440 $('<div id="body1" class="collapse"/>')
441 .appendTo($groups
.eq(0))
442 .on('show.bs.collapse', function () {
446 var $target2
= $('<a role="button" data-toggle="collapse" href="#body2" data-parent="#accordion"/>').appendTo($groups
.eq(1))
447 var $body2
= $('<div id="body2" class="collapse"/>').appendTo($groups
.eq(1))
449 $target2
.trigger('click')
452 .toggleClass('show collapsing')
453 .data('bs.collapse')._isTransitioning
= 1
455 $target1
.trigger('click')
457 setTimeout(function () {
458 assert
.ok(!showFired
, 'show event did not fire')
463 QUnit
.test('should add "collapsed" class to target when collapse is hidden via manual invocation', function (assert
) {
465 var done
= assert
.async()
467 var $target
= $('<a role="button" data-toggle="collapse" href="#test1"/>').appendTo('#qunit-fixture')
469 $('<div id="test1" class="show"/>')
470 .appendTo('#qunit-fixture')
471 .on('hidden.bs.collapse', function () {
472 assert
.ok($target
.hasClass('collapsed'))
475 .bootstrapCollapse('hide')
478 QUnit
.test('should remove "collapsed" class from target when collapse is shown via manual invocation', function (assert
) {
480 var done
= assert
.async()
482 var $target
= $('<a role="button" data-toggle="collapse" class="collapsed" href="#test1"/>').appendTo('#qunit-fixture')
484 $('<div id="test1"/>')
485 .appendTo('#qunit-fixture')
486 .on('shown.bs.collapse', function () {
487 assert
.ok(!$target
.hasClass('collapsed'))
490 .bootstrapCollapse('show')