Merge "Minor CSS cleanup for Vector and Monobook skins"
[mediawiki.git] / tests / qunit / suites / resources / jquery / jquery.makeCollapsible.test.js
blob9f34beee9563482ff3d84f2e2fe0aad28d195243
1 ( function ( mw, $ ) {
2         var loremIpsum = 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit.';
4         QUnit.module( 'jquery.makeCollapsible', QUnit.newMwEnvironment() );
6         function prepareCollapsible( html, options ) {
7                 return $( $.parseHTML( html ) )
8                         .appendTo( '#qunit-fixture' )
9                         // options might be undefined here - this is okay
10                         .makeCollapsible( options );
11         }
13         QUnit.asyncTest( 'testing hooks (triggers)', 4, function ( assert ) {
14                 var $collapsible, $content, $toggle;
15                 $collapsible = prepareCollapsible(
16                         '<div class="mw-collapsible">' + loremIpsum + '</div>'
17                 );
18                 $content = $collapsible.find( '.mw-collapsible-content' );
19                 $toggle = $collapsible.find( '.mw-collapsible-toggle' );
21                 // In one full collapse-expand cycle, each event will be fired once
23                 // On collapse...
24                 $collapsible.on( 'beforeCollapse.mw-collapsible', function () {
25                         assert.assertTrue( $content.is( ':visible' ), 'first beforeCollapseExpand: content is visible' );
26                 } );
27                 $collapsible.on( 'afterCollapse.mw-collapsible', function () {
28                         assert.assertTrue( $content.is( ':hidden' ), 'first afterCollapseExpand: content is hidden' );
30                         // On expand...
31                         $collapsible.on( 'beforeExpand.mw-collapsible', function () {
32                                 assert.assertTrue( $content.is( ':hidden' ), 'second beforeCollapseExpand: content is hidden' );
33                         } );
34                         $collapsible.on( 'afterExpand.mw-collapsible', function () {
35                                 assert.assertTrue( $content.is( ':visible' ), 'second afterCollapseExpand: content is visible' );
37                                 QUnit.start();
38                         } );
40                         // ...expanding happens here
41                         $toggle.trigger( 'click' );
42                 } );
44                 // ...collapsing happens here
45                 $toggle.trigger( 'click' );
46         } );
48         QUnit.asyncTest( 'basic operation', 3, function ( assert ) {
49                 var $collapsible, $content;
50                 $collapsible = prepareCollapsible(
51                         '<div class="mw-collapsible">' + loremIpsum + '</div>'
52                 );
53                 $content = $collapsible.find( '.mw-collapsible-content' );
55                 assert.equal( $content.length, 1, 'content is present' );
56                 assert.assertTrue( $content.is( ':visible' ), 'content is visible' );
58                 $collapsible.on( 'afterCollapse.mw-collapsible', function () {
59                         assert.assertTrue( $content.is( ':hidden' ), 'after collapsing: content is hidden' );
60                         QUnit.start();
61                 } );
63                 $collapsible.find( '.mw-collapsible-toggle' ).trigger( 'click' );
64         } );
66         QUnit.test( 'basic operation with instantHide (synchronous test)', 2, function ( assert ) {
67                 var $collapsible, $content;
68                 $collapsible = prepareCollapsible(
69                         '<div class="mw-collapsible">' + loremIpsum + '</div>',
70                         { instantHide: true }
71                 );
72                 $content = $collapsible.find( '.mw-collapsible-content' );
74                 assert.assertTrue( $content.is( ':visible' ), 'content is visible' );
76                 $collapsible.find( '.mw-collapsible-toggle' ).trigger( 'click' );
78                 assert.assertTrue( $content.is( ':hidden' ), 'after collapsing: content is hidden' );
79         } );
81         QUnit.asyncTest( 'initially collapsed - mw-collapsed class', 2, function ( assert ) {
82                 var $collapsible, $content;
83                 $collapsible = prepareCollapsible(
84                         '<div class="mw-collapsible mw-collapsed">' + loremIpsum + '</div>'
85                 );
86                 $content = $collapsible.find( '.mw-collapsible-content' );
88                 // Synchronous - mw-collapsed should cause instantHide: true to be used on initial collapsing
89                 assert.assertTrue( $content.is( ':hidden' ), 'content is hidden' );
91                 $collapsible.on( 'afterExpand.mw-collapsible', function () {
92                         assert.assertTrue( $content.is( ':visible' ), 'after expanding: content is visible' );
93                         QUnit.start();
94                 } );
96                 $collapsible.find( '.mw-collapsible-toggle' ).trigger( 'click' );
97         } );
99         QUnit.asyncTest( 'initially collapsed - options', 2, function ( assert ) {
100                 var $collapsible, $content;
101                 $collapsible = prepareCollapsible(
102                         '<div class="mw-collapsible">' + loremIpsum + '</div>',
103                         { collapsed: true }
104                 );
105                 $content = $collapsible.find( '.mw-collapsible-content' );
107                 // Synchronous - collapsed: true should cause instantHide: true to be used on initial collapsing
108                 assert.assertTrue( $content.is( ':hidden' ), 'content is hidden' );
110                 $collapsible.on( 'afterExpand.mw-collapsible', function () {
111                         assert.assertTrue( $content.is( ':visible' ), 'after expanding: content is visible' );
112                         QUnit.start();
113                 } );
115                 $collapsible.find( '.mw-collapsible-toggle' ).trigger( 'click' );
116         } );
118 }( mediaWiki, jQuery ) );