2011-12-21 03:02:47 +01:00
$ ( function ( ) {
2016-11-21 15:36:00 +01:00
'use strict'
2011-12-21 03:02:47 +01:00
2015-02-24 07:04:48 +01:00
QUnit . module ( 'collapse plugin' )
2014-02-13 08:55:12 +01:00
2015-02-24 07:04:48 +01:00
QUnit . test ( 'should be defined on jquery object' , function ( assert ) {
2015-03-01 15:33:48 +01:00
assert . expect ( 1 )
2015-02-24 06:55:07 +01:00
assert . ok ( $ ( document . body ) . collapse , 'collapse method is defined' )
2014-02-13 08:55:12 +01:00
} )
2015-02-24 07:04:48 +01:00
QUnit . module ( 'collapse' , {
2015-02-26 08:20:42 +01:00
beforeEach : function ( ) {
2014-04-22 07:03:33 +02:00
// Run all tests in noConflict mode -- it's the only way to ensure that the plugin works in noConflict mode
$ . fn . bootstrapCollapse = $ . fn . collapse . noConflict ( )
} ,
2015-02-26 08:20:42 +01:00
afterEach : function ( ) {
2014-04-22 07:03:33 +02:00
$ . fn . collapse = $ . fn . bootstrapCollapse
delete $ . fn . bootstrapCollapse
}
} )
2015-02-24 07:04:48 +01:00
QUnit . test ( 'should provide no conflict' , function ( assert ) {
2015-03-01 15:33:48 +01:00
assert . expect ( 1 )
2017-07-27 12:39:55 +02:00
assert . strictEqual ( typeof $ . fn . collapse , 'undefined' , 'collapse was set back to undefined (org value)' )
2014-04-22 07:03:33 +02:00
} )
2015-09-16 10:35:29 +02:00
QUnit . test ( 'should throw explicit error on undefined method' , function ( assert ) {
assert . expect ( 1 )
var $el = $ ( '<div/>' )
$el . bootstrapCollapse ( )
try {
$el . bootstrapCollapse ( 'noMethod' )
}
catch ( err ) {
assert . strictEqual ( err . message , 'No method named "noMethod"' )
}
} )
2015-02-24 07:04:48 +01:00
QUnit . test ( 'should return jquery collection containing the element' , function ( assert ) {
2015-03-01 15:33:48 +01:00
assert . expect ( 2 )
2014-06-18 21:34:01 +02:00
var $el = $ ( '<div/>' )
var $collapse = $el . bootstrapCollapse ( )
2015-02-24 06:55:07 +01:00
assert . ok ( $collapse instanceof $ , 'returns jquery collection' )
assert . strictEqual ( $collapse [ 0 ] , $el [ 0 ] , 'collection contains element' )
2014-02-13 08:55:12 +01:00
} )
2015-02-24 07:04:48 +01:00
QUnit . test ( 'should show a collapsed element' , function ( assert ) {
2015-03-01 15:33:48 +01:00
assert . expect ( 2 )
2014-06-18 21:34:01 +02:00
var $el = $ ( '<div class="collapse"/>' ) . bootstrapCollapse ( 'show' )
2016-10-28 00:13:17 +02:00
assert . ok ( $el . hasClass ( 'show' ) , 'has class "show"' )
2015-02-24 06:55:07 +01:00
assert . ok ( ! /height/i . test ( $el . attr ( 'style' ) ) , 'has height reset' )
2014-02-13 08:55:12 +01:00
} )
2017-06-14 13:21:49 +02:00
QUnit . test ( 'should show multiple collapsed elements' , function ( assert ) {
assert . expect ( 4 )
var done = assert . async ( )
var $target = $ ( '<a role="button" data-toggle="collapse" class="collapsed" href=".multi"/>' ) . appendTo ( '#qunit-fixture' )
var $el = $ ( '<div class="collapse multi"/>' ) . appendTo ( '#qunit-fixture' )
var $el2 = $ ( '<div class="collapse multi"/>' ) . appendTo ( '#qunit-fixture' )
$el . one ( 'shown.bs.collapse' , function ( ) {
assert . ok ( $el . hasClass ( 'show' ) , 'has class "show"' )
assert . ok ( ! /height/i . test ( $el . attr ( 'style' ) ) , 'has height reset' )
} )
$el2 . one ( 'shown.bs.collapse' , function ( ) {
assert . ok ( $el2 . hasClass ( 'show' ) , 'has class "show"' )
assert . ok ( ! /height/i . test ( $el2 . attr ( 'style' ) ) , 'has height reset' )
done ( )
} )
$target . trigger ( 'click' )
} )
2016-01-11 20:42:35 +01:00
QUnit . test ( 'should collapse only the first collapse' , function ( assert ) {
assert . expect ( 2 )
2017-06-14 13:21:49 +02:00
var done = assert . async ( )
2016-01-11 20:42:35 +01:00
var html = [
'<div class="panel-group" id="accordion1">' ,
2016-11-21 15:36:00 +01:00
'<div class="panel">' ,
'<div id="collapse1" class="collapse"/>' ,
'</div>' ,
2016-01-11 20:42:35 +01:00
'</div>' ,
'<div class="panel-group" id="accordion2">' ,
2016-11-21 15:36:00 +01:00
'<div class="panel">' ,
2016-10-28 00:13:17 +02:00
'<div id="collapse2" class="collapse show"/>' ,
2016-11-21 15:36:00 +01:00
'</div>' ,
2016-01-11 20:42:35 +01:00
'</div>'
] . join ( '' )
$ ( html ) . appendTo ( '#qunit-fixture' )
var $el1 = $ ( '#collapse1' )
var $el2 = $ ( '#collapse2' )
2017-06-14 13:21:49 +02:00
$el1 . one ( 'shown.bs.collapse' , function ( ) {
assert . ok ( $el1 . hasClass ( 'show' ) )
assert . ok ( $el2 . hasClass ( 'show' ) )
done ( )
} ) . bootstrapCollapse ( 'show' )
2016-01-11 20:42:35 +01:00
} )
2015-02-24 07:04:48 +01:00
QUnit . test ( 'should hide a collapsed element' , function ( assert ) {
2015-03-06 16:01:12 +01:00
assert . expect ( 1 )
2014-06-18 21:34:01 +02:00
var $el = $ ( '<div class="collapse"/>' ) . bootstrapCollapse ( 'hide' )
2016-10-28 00:13:17 +02:00
assert . ok ( ! $el . hasClass ( 'show' ) , 'does not have class "show"' )
2014-02-13 08:55:12 +01:00
} )
2015-02-24 07:04:48 +01:00
QUnit . test ( 'should not fire shown when show is prevented' , function ( assert ) {
2015-03-01 15:33:48 +01:00
assert . expect ( 1 )
2015-01-21 04:40:50 +01:00
var done = assert . async ( )
2014-06-18 21:34:01 +02:00
2014-02-13 08:55:12 +01:00
$ ( '<div class="collapse"/>' )
. on ( 'show.bs.collapse' , function ( e ) {
2014-02-17 20:56:46 +01:00
e . preventDefault ( )
2015-02-24 06:55:07 +01:00
assert . ok ( true , 'show event fired' )
2015-01-21 04:40:50 +01:00
done ( )
2011-12-21 03:02:47 +01:00
} )
2014-02-13 08:55:12 +01:00
. on ( 'shown.bs.collapse' , function ( ) {
2015-02-24 06:55:07 +01:00
assert . ok ( false , 'shown event fired' )
2011-12-21 03:02:47 +01:00
} )
2014-04-22 07:03:33 +02:00
. bootstrapCollapse ( 'show' )
2014-02-13 08:55:12 +01:00
} )
2015-02-24 07:04:48 +01:00
QUnit . test ( 'should reset style to auto after finishing opening collapse' , function ( assert ) {
2015-03-01 15:33:48 +01:00
assert . expect ( 2 )
2015-01-21 04:40:50 +01:00
var done = assert . async ( )
2014-06-18 21:34:01 +02:00
2014-02-13 08:55:12 +01:00
$ ( '<div class="collapse" style="height: 0px"/>' )
. on ( 'show.bs.collapse' , function ( ) {
2015-02-24 07:41:08 +01:00
assert . strictEqual ( this . style . height , '0px' , 'height is 0px' )
2012-03-25 03:20:09 +02:00
} )
2014-02-13 08:55:12 +01:00
. on ( 'shown.bs.collapse' , function ( ) {
2015-02-24 06:55:07 +01:00
assert . strictEqual ( this . style . height , '' , 'height is auto' )
2015-01-21 04:40:50 +01:00
done ( )
2012-04-25 03:06:41 +02:00
} )
2014-04-22 07:03:33 +02:00
. bootstrapCollapse ( 'show' )
2014-02-13 08:55:12 +01:00
} )
2012-04-25 03:06:41 +02:00
2015-09-11 10:45:08 +02:00
QUnit . test ( 'should reset style to auto after finishing closing collapse' , function ( assert ) {
assert . expect ( 1 )
var done = assert . async ( )
$ ( '<div class="collapse"/>' )
. on ( 'shown.bs.collapse' , function ( ) {
$ ( this ) . bootstrapCollapse ( 'hide' )
} )
. on ( 'hidden.bs.collapse' , function ( ) {
assert . strictEqual ( this . style . height , '' , 'height is auto' )
done ( )
} )
. bootstrapCollapse ( 'show' )
} )
2015-02-24 07:04:48 +01:00
QUnit . test ( 'should remove "collapsed" class from target when collapse is shown' , function ( assert ) {
2015-03-01 15:33:48 +01:00
assert . expect ( 1 )
2015-01-21 04:40:50 +01:00
var done = assert . async ( )
2012-06-03 02:28:38 +02:00
2015-03-03 22:18:36 +01:00
var $target = $ ( '<a role="button" data-toggle="collapse" class="collapsed" href="#test1"/>' ) . appendTo ( '#qunit-fixture' )
2012-06-03 02:28:38 +02:00
2014-06-18 21:34:01 +02:00
$ ( '<div id="test1"/>' )
. appendTo ( '#qunit-fixture' )
2014-09-25 23:04:11 +02:00
. on ( 'shown.bs.collapse' , function ( ) {
2015-02-04 23:25:57 +01:00
assert . ok ( ! $target . hasClass ( 'collapsed' ) , 'target does not have collapsed class' )
2015-01-21 04:40:50 +01:00
done ( )
2012-06-03 02:28:38 +02:00
} )
2015-03-06 13:34:28 +01:00
$target . trigger ( 'click' )
2014-02-13 08:55:12 +01:00
} )
2012-06-03 02:28:38 +02:00
2015-02-24 07:04:48 +01:00
QUnit . test ( 'should add "collapsed" class to target when collapse is hidden' , function ( assert ) {
2015-03-01 15:33:48 +01:00
assert . expect ( 1 )
2015-01-21 04:40:50 +01:00
var done = assert . async ( )
2012-06-03 02:28:38 +02:00
2015-03-03 22:18:36 +01:00
var $target = $ ( '<a role="button" data-toggle="collapse" href="#test1"/>' ) . appendTo ( '#qunit-fixture' )
2012-06-03 02:28:38 +02:00
2016-10-28 00:13:17 +02:00
$ ( '<div id="test1" class="show"/>' )
2014-06-18 21:34:01 +02:00
. appendTo ( '#qunit-fixture' )
2014-09-25 23:04:11 +02:00
. on ( 'hidden.bs.collapse' , function ( ) {
2015-02-04 23:25:57 +01:00
assert . ok ( $target . hasClass ( 'collapsed' ) , 'target has collapsed class' )
2015-01-21 04:40:50 +01:00
done ( )
2012-06-03 02:28:38 +02:00
} )
2015-03-06 13:34:28 +01:00
$target . trigger ( 'click' )
2014-02-13 08:55:12 +01:00
} )
2013-03-29 15:55:14 +01:00
2015-02-04 23:25:57 +01:00
QUnit . test ( 'should remove "collapsed" class from all triggers targeting the collapse when the collapse is shown' , function ( assert ) {
2015-03-01 15:33:48 +01:00
assert . expect ( 2 )
2015-01-21 04:40:50 +01:00
var done = assert . async ( )
2014-08-19 04:58:19 +02:00
2015-03-03 22:18:36 +01:00
var $target = $ ( '<a role="button" data-toggle="collapse" class="collapsed" href="#test1"/>' ) . appendTo ( '#qunit-fixture' )
var $alt = $ ( '<a role="button" data-toggle="collapse" class="collapsed" href="#test1"/>' ) . appendTo ( '#qunit-fixture' )
2015-02-04 23:25:57 +01:00
$ ( '<div id="test1"/>' )
. appendTo ( '#qunit-fixture' )
. on ( 'shown.bs.collapse' , function ( ) {
assert . ok ( ! $target . hasClass ( 'collapsed' ) , 'target trigger does not have collapsed class' )
assert . ok ( ! $alt . hasClass ( 'collapsed' ) , 'alt trigger does not have collapsed class' )
done ( )
} )
2015-03-06 13:34:28 +01:00
$target . trigger ( 'click' )
2015-02-04 23:25:57 +01:00
} )
QUnit . test ( 'should add "collapsed" class to all triggers targeting the collapse when the collapse is hidden' , function ( assert ) {
2015-03-01 15:33:48 +01:00
assert . expect ( 2 )
2015-02-04 23:25:57 +01:00
var done = assert . async ( )
2015-03-03 22:18:36 +01:00
var $target = $ ( '<a role="button" data-toggle="collapse" href="#test1"/>' ) . appendTo ( '#qunit-fixture' )
var $alt = $ ( '<a role="button" data-toggle="collapse" href="#test1"/>' ) . appendTo ( '#qunit-fixture' )
2015-02-04 23:25:57 +01:00
2016-10-28 00:13:17 +02:00
$ ( '<div id="test1" class="show"/>' )
2015-02-04 23:25:57 +01:00
. appendTo ( '#qunit-fixture' )
. on ( 'hidden.bs.collapse' , function ( ) {
assert . ok ( $target . hasClass ( 'collapsed' ) , 'target has collapsed class' )
assert . ok ( $alt . hasClass ( 'collapsed' ) , 'alt trigger has collapsed class' )
2015-01-21 04:40:50 +01:00
done ( )
2012-06-03 02:28:38 +02:00
} )
2015-03-06 13:34:28 +01:00
$target . trigger ( 'click' )
2014-02-13 08:55:12 +01:00
} )
2013-03-29 15:55:14 +01:00
2015-03-06 12:05:30 +01:00
QUnit . test ( 'should not close a collapse when initialized with "show" option if already shown' , function ( assert ) {
2015-02-24 06:55:07 +01:00
assert . expect ( 0 )
2015-03-01 15:33:48 +01:00
var done = assert . async ( )
2014-08-19 04:58:19 +02:00
2016-10-28 00:13:17 +02:00
var $test = $ ( '<div id="test1" class="show"/>' )
2014-08-19 04:58:19 +02:00
. appendTo ( '#qunit-fixture' )
. on ( 'hide.bs.collapse' , function ( ) {
2015-02-24 06:55:07 +01:00
assert . ok ( false )
2014-08-19 04:58:19 +02:00
} )
$test . bootstrapCollapse ( 'show' )
2015-01-21 04:40:50 +01:00
setTimeout ( done , 0 )
2014-08-19 04:58:19 +02:00
} )
2015-03-06 12:05:30 +01:00
QUnit . test ( 'should open a collapse when initialized with "show" option if not already shown' , function ( assert ) {
2015-02-24 06:55:07 +01:00
assert . expect ( 1 )
2015-03-01 15:33:48 +01:00
var done = assert . async ( )
2014-08-19 04:58:19 +02:00
var $test = $ ( '<div id="test1" />' )
. appendTo ( '#qunit-fixture' )
. on ( 'show.bs.collapse' , function ( ) {
2015-02-24 06:55:07 +01:00
assert . ok ( true )
2014-08-19 04:58:19 +02:00
} )
$test . bootstrapCollapse ( 'show' )
2015-01-21 04:40:50 +01:00
setTimeout ( done , 0 )
2014-08-19 04:58:19 +02:00
} )
2015-03-06 12:05:30 +01:00
QUnit . test ( 'should not show a collapse when initialized with "hide" option if already hidden' , function ( assert ) {
assert . expect ( 0 )
var done = assert . async ( )
$ ( '<div class="collapse"></div>' )
. appendTo ( '#qunit-fixture' )
. on ( 'show.bs.collapse' , function ( ) {
assert . ok ( false , 'showing a previously-uninitialized hidden collapse when the "hide" method is called' )
} )
. bootstrapCollapse ( 'hide' )
setTimeout ( done , 0 )
} )
QUnit . test ( 'should hide a collapse when initialized with "hide" option if not already hidden' , function ( assert ) {
assert . expect ( 1 )
var done = assert . async ( )
2016-10-28 00:13:17 +02:00
$ ( '<div class="collapse show"></div>' )
2015-03-06 12:05:30 +01:00
. appendTo ( '#qunit-fixture' )
. on ( 'hide.bs.collapse' , function ( ) {
assert . ok ( true , 'hiding a previously-uninitialized shown collapse when the "hide" method is called' )
} )
. bootstrapCollapse ( 'hide' )
setTimeout ( done , 0 )
} )
2015-02-24 07:04:48 +01:00
QUnit . test ( 'should remove "collapsed" class from active accordion target' , function ( assert ) {
2015-03-01 15:33:48 +01:00
assert . expect ( 3 )
2015-01-21 04:40:50 +01:00
var done = assert . async ( )
2013-03-29 15:55:14 +01:00
2015-12-01 23:17:35 +01:00
var accordionHTML = '<div id="accordion">'
+ '<div class="card"/>'
+ '<div class="card"/>'
+ '<div class="card"/>'
2014-07-06 11:56:12 +02:00
+ '</div>'
2015-12-01 23:17:35 +01:00
var $groups = $ ( accordionHTML ) . appendTo ( '#qunit-fixture' ) . find ( '.card' )
2013-03-29 15:55:14 +01:00
2017-03-23 21:15:41 +01:00
var $target1 = $ ( '<a role="button" data-toggle="collapse" href="#body1" />' ) . appendTo ( $groups . eq ( 0 ) )
2013-03-29 15:55:14 +01:00
2017-03-23 21:15:41 +01:00
$ ( '<div id="body1" class="show" data-parent="#accordion"/>' ) . appendTo ( $groups . eq ( 0 ) )
2013-03-29 15:55:14 +01:00
2017-03-23 21:15:41 +01:00
var $target2 = $ ( '<a class="collapsed" data-toggle="collapse" role="button" href="#body2" />' ) . appendTo ( $groups . eq ( 1 ) )
2013-03-29 15:55:14 +01:00
2017-03-23 21:15:41 +01:00
$ ( '<div id="body2" data-parent="#accordion"/>' ) . appendTo ( $groups . eq ( 1 ) )
2013-03-29 15:55:14 +01:00
2017-03-23 21:15:41 +01:00
var $target3 = $ ( '<a class="collapsed" data-toggle="collapse" role="button" href="#body3" />' ) . appendTo ( $groups . eq ( 2 ) )
2013-03-29 15:55:14 +01:00
2017-03-23 21:15:41 +01:00
$ ( '<div id="body3" data-parent="#accordion"/>' )
2014-06-18 21:34:01 +02:00
. appendTo ( $groups . eq ( 2 ) )
2014-09-25 23:04:11 +02:00
. on ( 'shown.bs.collapse' , function ( ) {
2015-02-24 06:55:07 +01:00
assert . ok ( $target1 . hasClass ( 'collapsed' ) , 'inactive target 1 does have class "collapsed"' )
assert . ok ( $target2 . hasClass ( 'collapsed' ) , 'inactive target 2 does have class "collapsed"' )
assert . ok ( ! $target3 . hasClass ( 'collapsed' ) , 'active target 3 does not have class "collapsed"' )
2013-03-29 15:55:14 +01:00
2015-01-21 04:40:50 +01:00
done ( )
2013-03-29 15:55:14 +01:00
} )
2015-03-06 13:34:28 +01:00
$target3 . trigger ( 'click' )
2014-02-13 08:55:12 +01:00
} )
2013-08-05 08:59:30 +02:00
2015-02-24 07:04:48 +01:00
QUnit . test ( 'should allow dots in data-parent' , function ( assert ) {
2015-03-01 15:33:48 +01:00
assert . expect ( 3 )
2015-01-21 04:40:50 +01:00
var done = assert . async ( )
2013-08-05 08:59:30 +02:00
2015-12-01 23:17:35 +01:00
var accordionHTML = '<div class="accordion">'
+ '<div class="card"/>'
+ '<div class="card"/>'
+ '<div class="card"/>'
2014-07-06 11:56:12 +02:00
+ '</div>'
2015-12-01 23:17:35 +01:00
var $groups = $ ( accordionHTML ) . appendTo ( '#qunit-fixture' ) . find ( '.card' )
2013-08-05 08:59:30 +02:00
2017-03-23 21:15:41 +01:00
var $target1 = $ ( '<a role="button" data-toggle="collapse" href="#body1"/>' ) . appendTo ( $groups . eq ( 0 ) )
2013-08-05 08:59:30 +02:00
2017-03-23 21:15:41 +01:00
$ ( '<div id="body1" class="show" data-parent=".accordion"/>' ) . appendTo ( $groups . eq ( 0 ) )
2013-08-05 08:59:30 +02:00
2017-03-23 21:15:41 +01:00
var $target2 = $ ( '<a class="collapsed" data-toggle="collapse" role="button" href="#body2"/>' ) . appendTo ( $groups . eq ( 1 ) )
2013-08-05 08:59:30 +02:00
2017-03-23 21:15:41 +01:00
$ ( '<div id="body2" data-parent=".accordion"/>' ) . appendTo ( $groups . eq ( 1 ) )
2013-08-05 08:59:30 +02:00
2017-03-23 21:15:41 +01:00
var $target3 = $ ( '<a class="collapsed" data-toggle="collapse" role="button" href="#body3"/>' ) . appendTo ( $groups . eq ( 2 ) )
2013-08-05 08:59:30 +02:00
2017-03-23 21:15:41 +01:00
$ ( '<div id="body3" data-parent=".accordion"/>' )
2014-06-18 21:34:01 +02:00
. appendTo ( $groups . eq ( 2 ) )
2014-09-25 23:04:11 +02:00
. on ( 'shown.bs.collapse' , function ( ) {
2015-02-24 06:55:07 +01:00
assert . ok ( $target1 . hasClass ( 'collapsed' ) , 'inactive target 1 does have class "collapsed"' )
assert . ok ( $target2 . hasClass ( 'collapsed' ) , 'inactive target 2 does have class "collapsed"' )
assert . ok ( ! $target3 . hasClass ( 'collapsed' ) , 'active target 3 does not have class "collapsed"' )
2013-08-05 08:59:30 +02:00
2015-01-21 04:40:50 +01:00
done ( )
2013-08-05 08:59:30 +02:00
} )
2015-03-06 13:34:28 +01:00
$target3 . trigger ( 'click' )
2014-02-13 08:55:12 +01:00
} )
2017-04-10 15:51:22 +02:00
QUnit . test ( 'should set aria-expanded="true" on trigger/control when collapse is shown' , function ( assert ) {
2015-03-01 15:33:48 +01:00
assert . expect ( 1 )
2015-01-21 04:40:50 +01:00
var done = assert . async ( )
2014-07-15 12:39:27 +02:00
2015-03-03 22:18:36 +01:00
var $target = $ ( '<a role="button" data-toggle="collapse" class="collapsed" href="#test1" aria-expanded="false"/>' ) . appendTo ( '#qunit-fixture' )
2014-07-15 12:39:27 +02:00
$ ( '<div id="test1"/>' )
. appendTo ( '#qunit-fixture' )
2014-09-25 23:04:11 +02:00
. on ( 'shown.bs.collapse' , function ( ) {
2015-02-24 07:41:08 +01:00
assert . strictEqual ( $target . attr ( 'aria-expanded' ) , 'true' , 'aria-expanded on target is "true"' )
2015-01-21 04:40:50 +01:00
done ( )
2014-07-15 12:39:27 +02:00
} )
2015-03-06 13:34:28 +01:00
$target . trigger ( 'click' )
2014-07-15 12:39:27 +02:00
} )
2017-04-10 15:51:22 +02:00
QUnit . test ( 'should set aria-expanded="false" on trigger/control when collapse is hidden' , function ( assert ) {
2015-03-01 15:33:48 +01:00
assert . expect ( 1 )
2015-01-21 04:40:50 +01:00
var done = assert . async ( )
2014-07-15 12:39:27 +02:00
2015-03-03 22:18:36 +01:00
var $target = $ ( '<a role="button" data-toggle="collapse" href="#test1" aria-expanded="true"/>' ) . appendTo ( '#qunit-fixture' )
2014-07-15 12:39:27 +02:00
2016-10-28 00:13:17 +02:00
$ ( '<div id="test1" class="show"/>' )
2014-07-15 12:39:27 +02:00
. appendTo ( '#qunit-fixture' )
2014-09-25 23:04:11 +02:00
. on ( 'hidden.bs.collapse' , function ( ) {
2015-02-24 07:41:08 +01:00
assert . strictEqual ( $target . attr ( 'aria-expanded' ) , 'false' , 'aria-expanded on target is "false"' )
2015-01-21 04:40:50 +01:00
done ( )
2014-07-15 12:39:27 +02:00
} )
2015-03-06 13:34:28 +01:00
$target . trigger ( 'click' )
2014-07-15 12:39:27 +02:00
} )
2015-02-04 23:25:57 +01:00
QUnit . test ( 'should set aria-expanded="true" on all triggers targeting the collapse when the collapse is shown' , function ( assert ) {
2015-03-01 15:33:48 +01:00
assert . expect ( 2 )
2015-01-21 04:40:50 +01:00
var done = assert . async ( )
2014-07-15 12:39:27 +02:00
2015-03-03 22:18:36 +01:00
var $target = $ ( '<a role="button" data-toggle="collapse" class="collapsed" href="#test1" aria-expanded="false"/>' ) . appendTo ( '#qunit-fixture' )
var $alt = $ ( '<a role="button" data-toggle="collapse" class="collapsed" href="#test1" aria-expanded="false"/>' ) . appendTo ( '#qunit-fixture' )
2014-07-15 12:39:27 +02:00
$ ( '<div id="test1"/>' )
. appendTo ( '#qunit-fixture' )
2014-09-25 23:04:11 +02:00
. on ( 'shown.bs.collapse' , function ( ) {
2017-04-10 15:51:22 +02:00
assert . strictEqual ( $target . attr ( 'aria-expanded' ) , 'true' , 'aria-expanded on trigger/control is "true"' )
assert . strictEqual ( $alt . attr ( 'aria-expanded' ) , 'true' , 'aria-expanded on alternative trigger/control is "true"' )
2015-01-21 04:40:50 +01:00
done ( )
2014-07-15 12:39:27 +02:00
} )
2015-03-06 13:34:28 +01:00
$target . trigger ( 'click' )
2014-07-15 12:39:27 +02:00
} )
2015-02-04 23:25:57 +01:00
QUnit . test ( 'should set aria-expanded="false" on all triggers targeting the collapse when the collapse is hidden' , function ( assert ) {
2015-03-01 15:33:48 +01:00
assert . expect ( 2 )
2015-01-21 04:40:50 +01:00
var done = assert . async ( )
2014-07-15 12:39:27 +02:00
2015-03-03 22:18:36 +01:00
var $target = $ ( '<a role="button" data-toggle="collapse" href="#test1" aria-expanded="true"/>' ) . appendTo ( '#qunit-fixture' )
var $alt = $ ( '<a role="button" data-toggle="collapse" href="#test1" aria-expanded="true"/>' ) . appendTo ( '#qunit-fixture' )
2014-07-15 12:39:27 +02:00
2016-10-28 00:13:17 +02:00
$ ( '<div id="test1" class="show"/>' )
2014-07-15 12:39:27 +02:00
. appendTo ( '#qunit-fixture' )
2014-09-25 23:04:11 +02:00
. on ( 'hidden.bs.collapse' , function ( ) {
2017-04-10 15:51:22 +02:00
assert . strictEqual ( $target . attr ( 'aria-expanded' ) , 'false' , 'aria-expanded on trigger/control is "false"' )
assert . strictEqual ( $alt . attr ( 'aria-expanded' ) , 'false' , 'aria-expanded on alternative trigger/control is "false"' )
2015-01-21 04:40:50 +01:00
done ( )
2014-07-15 12:39:27 +02:00
} )
2015-03-06 13:34:28 +01:00
$target . trigger ( 'click' )
2014-07-15 12:39:27 +02:00
} )
2017-04-10 15:51:22 +02:00
QUnit . test ( 'should change aria-expanded from active accordion trigger/control to "false" and set the trigger/control for the newly active one to "true"' , function ( assert ) {
2015-03-01 15:33:48 +01:00
assert . expect ( 3 )
2015-01-21 04:40:50 +01:00
var done = assert . async ( )
2014-07-15 12:39:27 +02:00
2015-12-01 23:17:35 +01:00
var accordionHTML = '<div id="accordion">'
+ '<div class="card"/>'
+ '<div class="card"/>'
+ '<div class="card"/>'
2014-07-15 12:39:27 +02:00
+ '</div>'
2015-12-01 23:17:35 +01:00
var $groups = $ ( accordionHTML ) . appendTo ( '#qunit-fixture' ) . find ( '.card' )
2014-07-15 12:39:27 +02:00
2017-04-10 15:51:22 +02:00
var $target1 = $ ( '<a role="button" data-toggle="collapse" aria-expanded="true" href="#body1"/>' ) . appendTo ( $groups . eq ( 0 ) )
2014-07-15 12:39:27 +02:00
2017-04-10 15:51:22 +02:00
$ ( '<div id="body1" class="show" data-parent="#accordion"/>' ) . appendTo ( $groups . eq ( 0 ) )
2014-07-15 12:39:27 +02:00
2017-04-10 15:51:22 +02:00
var $target2 = $ ( '<a role="button" data-toggle="collapse" aria-expanded="false" href="#body2" class="collapsed" aria-expanded="false" />' ) . appendTo ( $groups . eq ( 1 ) )
2014-07-15 12:39:27 +02:00
2017-04-10 15:51:22 +02:00
$ ( '<div id="body2" data-parent="#accordion"/>' ) . appendTo ( $groups . eq ( 1 ) )
2014-07-15 12:39:27 +02:00
2017-04-10 15:51:22 +02:00
var $target3 = $ ( '<a class="collapsed" data-toggle="collapse" aria-expanded="false" role="button" href="#body3"/>' ) . appendTo ( $groups . eq ( 2 ) )
2014-07-15 12:39:27 +02:00
2017-04-10 15:51:22 +02:00
$ ( '<div id="body3" data-parent="#accordion"/>' )
2014-07-15 12:39:27 +02:00
. appendTo ( $groups . eq ( 2 ) )
2014-09-25 23:04:11 +02:00
. on ( 'shown.bs.collapse' , function ( ) {
2017-04-10 15:51:22 +02:00
assert . strictEqual ( $target1 . attr ( 'aria-expanded' ) , 'false' , 'inactive trigger/control 1 has aria-expanded="false"' )
assert . strictEqual ( $target2 . attr ( 'aria-expanded' ) , 'false' , 'inactive trigger/control 2 has aria-expanded="false"' )
assert . strictEqual ( $target3 . attr ( 'aria-expanded' ) , 'true' , 'active trigger/control 3 has aria-expanded="true"' )
2014-07-15 12:39:27 +02:00
2015-01-21 04:40:50 +01:00
done ( )
2014-07-15 12:39:27 +02:00
} )
2015-03-06 13:34:28 +01:00
$target3 . trigger ( 'click' )
2014-07-15 12:39:27 +02:00
} )
2015-02-24 07:04:48 +01:00
QUnit . test ( 'should not fire show event if show is prevented because other element is still transitioning' , function ( assert ) {
2015-03-01 15:33:48 +01:00
assert . expect ( 1 )
2015-01-21 04:40:50 +01:00
var done = assert . async ( )
2014-10-22 03:49:03 +02:00
var accordionHTML = '<div id="accordion">'
2015-12-01 23:17:35 +01:00
+ '<div class="card"/>'
+ '<div class="card"/>'
2014-10-22 03:49:03 +02:00
+ '</div>'
var showFired = false
2015-12-01 23:17:35 +01:00
var $groups = $ ( accordionHTML ) . appendTo ( '#qunit-fixture' ) . find ( '.card' )
2014-10-22 03:49:03 +02:00
2017-03-23 21:15:41 +01:00
var $target1 = $ ( '<a role="button" data-toggle="collapse" href="#body1"/>' ) . appendTo ( $groups . eq ( 0 ) )
2014-10-22 03:49:03 +02:00
2017-03-23 21:15:41 +01:00
$ ( '<div id="body1" class="collapse" data-parent="#accordion"/>' )
2014-10-22 03:49:03 +02:00
. appendTo ( $groups . eq ( 0 ) )
. on ( 'show.bs.collapse' , function ( ) {
showFired = true
} )
2017-03-23 21:15:41 +01:00
var $target2 = $ ( '<a role="button" data-toggle="collapse" href="#body2"/>' ) . appendTo ( $groups . eq ( 1 ) )
var $body2 = $ ( '<div id="body2" class="collapse" data-parent="#accordion"/>' ) . appendTo ( $groups . eq ( 1 ) )
2014-10-22 03:49:03 +02:00
2015-03-06 13:34:28 +01:00
$target2 . trigger ( 'click' )
2014-10-22 03:49:03 +02:00
$body2
2016-10-28 00:13:17 +02:00
. toggleClass ( 'show collapsing' )
2015-05-10 08:00:59 +02:00
. data ( 'bs.collapse' ) . _isTransitioning = 1
2014-10-22 03:49:03 +02:00
2015-03-06 13:34:28 +01:00
$target1 . trigger ( 'click' )
2014-10-22 03:49:03 +02:00
setTimeout ( function ( ) {
2015-02-04 23:25:57 +01:00
assert . ok ( ! showFired , 'show event did not fire' )
2015-01-21 04:40:50 +01:00
done ( )
2014-10-22 03:49:03 +02:00
} , 1 )
} )
2015-02-24 07:04:48 +01:00
QUnit . test ( 'should add "collapsed" class to target when collapse is hidden via manual invocation' , function ( assert ) {
2015-03-01 15:33:48 +01:00
assert . expect ( 1 )
2015-01-21 04:40:50 +01:00
var done = assert . async ( )
2014-09-25 23:04:11 +02:00
2015-03-03 22:18:36 +01:00
var $target = $ ( '<a role="button" data-toggle="collapse" href="#test1"/>' ) . appendTo ( '#qunit-fixture' )
2014-09-25 23:04:11 +02:00
2016-10-28 00:13:17 +02:00
$ ( '<div id="test1" class="show"/>' )
2014-09-25 23:04:11 +02:00
. appendTo ( '#qunit-fixture' )
. on ( 'hidden.bs.collapse' , function ( ) {
2015-02-24 06:55:07 +01:00
assert . ok ( $target . hasClass ( 'collapsed' ) )
2015-01-21 04:40:50 +01:00
done ( )
2014-09-25 23:04:11 +02:00
} )
. bootstrapCollapse ( 'hide' )
} )
2015-02-24 07:04:48 +01:00
QUnit . test ( 'should remove "collapsed" class from target when collapse is shown via manual invocation' , function ( assert ) {
2015-03-01 15:33:48 +01:00
assert . expect ( 1 )
2015-01-21 04:40:50 +01:00
var done = assert . async ( )
2014-09-25 23:04:11 +02:00
2015-03-03 22:18:36 +01:00
var $target = $ ( '<a role="button" data-toggle="collapse" class="collapsed" href="#test1"/>' ) . appendTo ( '#qunit-fixture' )
2014-09-25 23:04:11 +02:00
$ ( '<div id="test1"/>' )
. appendTo ( '#qunit-fixture' )
. on ( 'shown.bs.collapse' , function ( ) {
2015-02-24 06:55:07 +01:00
assert . ok ( ! $target . hasClass ( 'collapsed' ) )
2015-01-21 04:40:50 +01:00
done ( )
2014-09-25 23:04:11 +02:00
} )
. bootstrapCollapse ( 'show' )
} )
2017-03-09 11:08:47 +01:00
QUnit . test ( 'should allow accordion to use children other than card' , function ( assert ) {
2017-04-25 09:32:14 +02:00
assert . expect ( 4 )
2017-03-09 11:08:47 +01:00
var done = assert . async ( )
2017-04-25 09:32:14 +02:00
var accordionHTML = '<div id="accordion">'
2017-03-09 11:08:47 +01:00
+ '<div class="item">'
+ '<a id="linkTrigger" data-parent="#accordion" data-toggle="collapse" href="#collapseOne" aria-expanded="false" aria-controls="collapseOne"></a>'
+ '<div id="collapseOne" class="collapse" role="tabpanel" aria-labelledby="headingThree"></div>'
+ '</div>'
+ '<div class="item">'
2017-04-25 09:32:14 +02:00
+ '<a id="linkTriggerTwo" data-toggle="collapse" data-parent="#accordion" href="#collapseTwo" aria-expanded="false" aria-controls="collapseTwo"></a>'
2017-03-09 11:08:47 +01:00
+ '<div id="collapseTwo" class="collapse show" role="tabpanel" aria-labelledby="headingTwo"></div>'
+ '</div>'
+ '</div>'
$ ( accordionHTML ) . appendTo ( '#qunit-fixture' )
2017-04-25 09:32:14 +02:00
var $trigger = $ ( '#linkTrigger' )
var $triggerTwo = $ ( '#linkTriggerTwo' )
var $collapseOne = $ ( '#collapseOne' )
var $collapseTwo = $ ( '#collapseTwo' )
$collapseOne . on ( 'shown.bs.collapse' , function ( ) {
assert . ok ( $collapseOne . hasClass ( 'show' ) , '#collapseOne is shown' )
assert . ok ( ! $collapseTwo . hasClass ( 'show' ) , '#collapseTwo is not shown' )
$collapseTwo . on ( 'shown.bs.collapse' , function ( ) {
assert . ok ( ! $collapseOne . hasClass ( 'show' ) , '#collapseOne is not shown' )
assert . ok ( $collapseTwo . hasClass ( 'show' ) , '#collapseTwo is shown' )
done ( )
} )
$triggerTwo . trigger ( $ . Event ( 'click' ) )
2017-03-09 11:08:47 +01:00
} )
2017-04-25 09:32:14 +02:00
$trigger . trigger ( $ . Event ( 'click' ) )
} )
QUnit . test ( 'should collapse accordion children but not nested accordion children' , function ( assert ) {
assert . expect ( 9 )
var done = assert . async ( )
$ ( '<div id="accordion">'
+ '<div class="item">'
+ '<a id="linkTrigger" data-parent="#accordion" data-toggle="collapse" href="#collapseOne" aria-expanded="false" aria-controls="collapseOne"></a>'
+ '<div id="collapseOne" class="collapse" role="tabpanel" aria-labelledby="headingThree">'
+ '<div id="nestedAccordion">'
+ '<div class="item">'
+ '<a id="nestedLinkTrigger" data-parent="#nestedAccordion" data-toggle="collapse" href="#nestedCollapseOne" aria-expanded="false" aria-controls="nestedCollapseOne"></a>'
+ '<div id="nestedCollapseOne" class="collapse" role="tabpanel" aria-labelledby="headingThree">'
+ '</div>'
+ '</div>'
+ '</div>'
+ '</div>'
+ '</div>'
+ '<div class="item">'
+ '<a id="linkTriggerTwo" data-toggle="collapse" data-parent="#accordion" href="#collapseTwo" aria-expanded="false" aria-controls="collapseTwo"></a>'
+ '<div id="collapseTwo" class="collapse show" role="tabpanel" aria-labelledby="headingTwo"></div>'
+ '</div>'
+ '</div>' ) . appendTo ( '#qunit-fixture' )
var $trigger = $ ( '#linkTrigger' )
var $triggerTwo = $ ( '#linkTriggerTwo' )
var $nestedTrigger = $ ( '#nestedLinkTrigger' )
var $collapseOne = $ ( '#collapseOne' )
var $collapseTwo = $ ( '#collapseTwo' )
var $nestedCollapseOne = $ ( '#nestedCollapseOne' )
$collapseOne . one ( 'shown.bs.collapse' , function ( ) {
assert . ok ( $collapseOne . hasClass ( 'show' ) , '#collapseOne is shown' )
assert . ok ( ! $collapseTwo . hasClass ( 'show' ) , '#collapseTwo is not shown' )
assert . ok ( ! $ ( '#nestedCollapseOne' ) . hasClass ( 'show' ) , '#nestedCollapseOne is not shown' )
$nestedCollapseOne . one ( 'shown.bs.collapse' , function ( ) {
assert . ok ( $collapseOne . hasClass ( 'show' ) , '#collapseOne is shown' )
assert . ok ( ! $collapseTwo . hasClass ( 'show' ) , '#collapseTwo is not shown' )
assert . ok ( $nestedCollapseOne . hasClass ( 'show' ) , '#nestedCollapseOne is shown' )
$collapseTwo . one ( 'shown.bs.collapse' , function ( ) {
assert . ok ( ! $collapseOne . hasClass ( 'show' ) , '#collapseOne is not shown' )
assert . ok ( $collapseTwo . hasClass ( 'show' ) , '#collapseTwo is shown' )
assert . ok ( $nestedCollapseOne . hasClass ( 'show' ) , '#nestedCollapseOne is shown' )
done ( )
} )
$triggerTwo . trigger ( $ . Event ( 'click' ) )
} )
$nestedTrigger . trigger ( $ . Event ( 'click' ) )
} )
$trigger . trigger ( $ . Event ( 'click' ) )
2017-03-09 11:08:47 +01:00
} )
2017-03-27 10:08:39 +02:00
QUnit . test ( 'should not prevent event for input' , function ( assert ) {
2017-03-29 00:10:27 +02:00
assert . expect ( 3 )
2017-03-27 10:08:39 +02:00
var done = assert . async ( )
var $target = $ ( '<input type="checkbox" data-toggle="collapse" data-target="#collapsediv1" />' ) . appendTo ( '#qunit-fixture' )
$ ( '<div id="collapsediv1"/>' )
. appendTo ( '#qunit-fixture' )
. on ( 'shown.bs.collapse' , function ( ) {
2017-03-29 00:10:27 +02:00
assert . ok ( $ ( this ) . hasClass ( 'show' ) )
2017-03-27 10:08:39 +02:00
assert . ok ( $target . attr ( 'aria-expanded' ) === 'true' )
assert . ok ( $target . prop ( 'checked' ) )
done ( )
} )
$target . trigger ( $ . Event ( 'click' ) )
} )
2017-06-14 13:21:49 +02:00
QUnit . test ( 'should add "collapsed" class to triggers only when all the targeted collapse are hidden' , function ( assert ) {
assert . expect ( 9 )
var done = assert . async ( )
var $trigger1 = $ ( '<a role="button" data-toggle="collapse" href="#test1"/>' ) . appendTo ( '#qunit-fixture' )
var $trigger2 = $ ( '<a role="button" data-toggle="collapse" href="#test2"/>' ) . appendTo ( '#qunit-fixture' )
var $trigger3 = $ ( '<a role="button" data-toggle="collapse" href=".multi"/>' ) . appendTo ( '#qunit-fixture' )
var $target1 = $ ( '<div id="test1" class="multi"/>' ) . appendTo ( '#qunit-fixture' )
var $target2 = $ ( '<div id="test2" class="multi"/>' ) . appendTo ( '#qunit-fixture' )
$target2 . one ( 'shown.bs.collapse' , function ( ) {
assert . ok ( ! $trigger1 . hasClass ( 'collapsed' ) , 'trigger1 does not have collapsed class' )
assert . ok ( ! $trigger2 . hasClass ( 'collapsed' ) , 'trigger2 does not have collapsed class' )
assert . ok ( ! $trigger3 . hasClass ( 'collapsed' ) , 'trigger3 does not have collapsed class' )
$target2 . one ( 'hidden.bs.collapse' , function ( ) {
assert . ok ( ! $trigger1 . hasClass ( 'collapsed' ) , 'trigger1 does not have collapsed class' )
assert . ok ( $trigger2 . hasClass ( 'collapsed' ) , 'trigger2 has collapsed class' )
assert . ok ( ! $trigger3 . hasClass ( 'collapsed' ) , 'trigger3 does not have collapsed class' )
$target1 . one ( 'hidden.bs.collapse' , function ( ) {
assert . ok ( $trigger1 . hasClass ( 'collapsed' ) , 'trigger1 has collapsed class' )
assert . ok ( $trigger2 . hasClass ( 'collapsed' ) , 'trigger2 has collapsed class' )
assert . ok ( $trigger3 . hasClass ( 'collapsed' ) , 'trigger3 has collapsed class' )
done ( )
} )
$trigger1 . trigger ( 'click' )
} )
$trigger2 . trigger ( 'click' )
} )
$trigger3 . trigger ( 'click' )
} )
QUnit . test ( 'should set aria-expanded="true" to triggers targetting shown collaspe and aria-expanded="false" only when all the targeted collapses are shown' , function ( assert ) {
assert . expect ( 9 )
var done = assert . async ( )
var $trigger1 = $ ( '<a role="button" data-toggle="collapse" href="#test1"/>' ) . appendTo ( '#qunit-fixture' )
var $trigger2 = $ ( '<a role="button" data-toggle="collapse" href="#test2"/>' ) . appendTo ( '#qunit-fixture' )
var $trigger3 = $ ( '<a role="button" data-toggle="collapse" href=".multi"/>' ) . appendTo ( '#qunit-fixture' )
var $target1 = $ ( '<div id="test1" class="multi collapse"/>' ) . appendTo ( '#qunit-fixture' )
var $target2 = $ ( '<div id="test2" class="multi collapse"/>' ) . appendTo ( '#qunit-fixture' )
$target2 . one ( 'shown.bs.collapse' , function ( ) {
assert . strictEqual ( $trigger1 . attr ( 'aria-expanded' ) , 'true' , 'aria-expanded on trigger1 is "true"' )
assert . strictEqual ( $trigger2 . attr ( 'aria-expanded' ) , 'true' , 'aria-expanded on trigger2 is "true"' )
assert . strictEqual ( $trigger3 . attr ( 'aria-expanded' ) , 'true' , 'aria-expanded on trigger3 is "true"' )
$target2 . one ( 'hidden.bs.collapse' , function ( ) {
assert . strictEqual ( $trigger1 . attr ( 'aria-expanded' ) , 'true' , 'aria-expanded on trigger1 is "true"' )
assert . strictEqual ( $trigger2 . attr ( 'aria-expanded' ) , 'false' , 'aria-expanded on trigger2 is "false"' )
assert . strictEqual ( $trigger3 . attr ( 'aria-expanded' ) , 'true' , 'aria-expanded on trigger3 is "true"' )
$target1 . one ( 'hidden.bs.collapse' , function ( ) {
assert . strictEqual ( $trigger1 . attr ( 'aria-expanded' ) , 'false' , 'aria-expanded on trigger1 is "fasle"' )
assert . strictEqual ( $trigger2 . attr ( 'aria-expanded' ) , 'false' , 'aria-expanded on trigger2 is "false"' )
assert . strictEqual ( $trigger3 . attr ( 'aria-expanded' ) , 'false' , 'aria-expanded on trigger3 is "false"' )
done ( )
} )
$trigger1 . trigger ( 'click' )
} )
$trigger2 . trigger ( 'click' )
} )
$trigger3 . trigger ( 'click' )
} )
2017-08-25 10:14:18 +02:00
QUnit . test ( 'should not prevent interactions inside the collapse element' , function ( assert ) {
assert . expect ( 2 )
var done = assert . async ( )
var $target = $ ( '<input type="checkbox" data-toggle="collapse" data-target="#collapsediv1" />' ) . appendTo ( '#qunit-fixture' )
var htmlCollapse =
'<div id="collapsediv1" class="collapse">' +
' <input type="checkbox" id="testCheckbox" />' +
'</div>'
$ ( htmlCollapse )
. appendTo ( '#qunit-fixture' )
. on ( 'shown.bs.collapse' , function ( ) {
assert . ok ( $target . prop ( 'checked' ) , '$trigger is checked' )
var $testCheckbox = $ ( '#testCheckbox' )
$testCheckbox . trigger ( $ . Event ( 'click' ) )
setTimeout ( function ( ) {
assert . ok ( $testCheckbox . prop ( 'checked' ) , '$testCheckbox is checked too' )
done ( )
} , 5 )
} )
$target . trigger ( $ . Event ( 'click' ) )
} )
2014-09-09 01:23:48 +02:00
} )