collapse.js 8.58 KB
Newer Older
1
$(function () {
XhmikosR's avatar
XhmikosR committed
2
  'use strict';
3

4
  module('collapse plugin')
XhmikosR's avatar
XhmikosR committed
5
6
7
8
9

  test('should be defined on jquery object', function () {
    ok($(document.body).collapse, 'collapse method is defined')
  })

10
  module('collapse', {
XhmikosR's avatar
XhmikosR committed
11
    setup: function () {
12
13
14
      // 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()
    },
XhmikosR's avatar
XhmikosR committed
15
    teardown: function () {
16
17
18
19
20
21
      $.fn.collapse = $.fn.bootstrapCollapse
      delete $.fn.bootstrapCollapse
    }
  })

  test('should provide no conflict', function () {
22
    strictEqual($.fn.collapse, undefined, 'collapse was set back to undefined (org value)')
23
24
  })

25
26
27
28
29
  test('should return jquery collection containing the element', function () {
    var $el = $('<div/>')
    var $collapse = $el.bootstrapCollapse()
    ok($collapse instanceof $, 'returns jquery collection')
    strictEqual($collapse[0], $el[0], 'collection contains element')
XhmikosR's avatar
XhmikosR committed
30
31
32
  })

  test('should show a collapsed element', function () {
33
34
35
    var $el = $('<div class="collapse"/>').bootstrapCollapse('show')

    ok($el.hasClass('in'), 'has class "in"')
36
    ok(!/height/i.test($el.attr('style')), 'has height reset')
XhmikosR's avatar
XhmikosR committed
37
38
39
  })

  test('should hide a collapsed element', function () {
40
41
42
    var $el = $('<div class="collapse"/>').bootstrapCollapse('hide')

    ok(!$el.hasClass('in'), 'does not have class "in"')
43
    ok(/height/i.test($el.attr('style')), 'has height set')
XhmikosR's avatar
XhmikosR committed
44
45
46
47
  })

  test('should not fire shown when show is prevented', function () {
    stop()
48

XhmikosR's avatar
XhmikosR committed
49
50
    $('<div class="collapse"/>')
      .on('show.bs.collapse', function (e) {
51
        e.preventDefault()
52
        ok(true, 'show event fired')
53
        start()
54
      })
XhmikosR's avatar
XhmikosR committed
55
      .on('shown.bs.collapse', function () {
56
        ok(false, 'shown event fired')
57
      })
58
      .bootstrapCollapse('show')
XhmikosR's avatar
XhmikosR committed
59
60
61
62
  })

  test('should reset style to auto after finishing opening collapse', function () {
    stop()
63

XhmikosR's avatar
XhmikosR committed
64
65
    $('<div class="collapse" style="height: 0px"/>')
      .on('show.bs.collapse', function () {
66
        equal(this.style.height, '0px', 'height is 0px')
67
      })
XhmikosR's avatar
XhmikosR committed
68
      .on('shown.bs.collapse', function () {
69
        strictEqual(this.style.height, '', 'height is auto')
XhmikosR's avatar
XhmikosR committed
70
        start()
71
      })
72
      .bootstrapCollapse('show')
XhmikosR's avatar
XhmikosR committed
73
  })
74

75
  test('should remove "collapsed" class from target when collapse is shown', function () {
XhmikosR's avatar
XhmikosR committed
76
    stop()
77

Patrick H. Lauke's avatar
Patrick H. Lauke committed
78
    var $target = $('<a data-toggle="collapse" class="collapsed" href="#test1"/>').appendTo('#qunit-fixture')
79

80
81
    $('<div id="test1"/>')
      .appendTo('#qunit-fixture')
XhmikosR's avatar
XhmikosR committed
82
      .on('show.bs.collapse', function () {
83
        ok(!$target.hasClass('collapsed'))
XhmikosR's avatar
XhmikosR committed
84
        start()
85
86
      })

87
    $target.click()
XhmikosR's avatar
XhmikosR committed
88
  })
89

90
  test('should add "collapsed" class to target when collapse is hidden', function () {
XhmikosR's avatar
XhmikosR committed
91
    stop()
92

93
    var $target = $('<a data-toggle="collapse" href="#test1"/>').appendTo('#qunit-fixture')
94

95
96
    $('<div id="test1" class="in"/>')
      .appendTo('#qunit-fixture')
XhmikosR's avatar
XhmikosR committed
97
      .on('hide.bs.collapse', function () {
98
        ok($target.hasClass('collapsed'))
XhmikosR's avatar
XhmikosR committed
99
        start()
100
101
      })

102
    $target.click()
XhmikosR's avatar
XhmikosR committed
103
  })
104

105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
  test('should not close a collapse when initialized with "show" if already shown', function () {
    stop()

    expect(0)

    var $test = $('<div id="test1" class="in"/>')
      .appendTo('#qunit-fixture')
      .on('hide.bs.collapse', function () {
        ok(false)
      })

    $test.bootstrapCollapse('show')

    setTimeout(start, 0)
  })

  test('should open a collapse when initialized with "show" if not already shown', function () {
    stop()

    expect(1)

    var $test = $('<div id="test1" />')
      .appendTo('#qunit-fixture')
      .on('show.bs.collapse', function () {
        ok(true)
      })

    $test.bootstrapCollapse('show')

    setTimeout(start, 0)
  })

137
  test('should remove "collapsed" class from active accordion target', function () {
XhmikosR's avatar
XhmikosR committed
138
    stop()
139

Heinrich Fenkart's avatar
Heinrich Fenkart committed
140
141
142
143
144
    var accordionHTML = '<div id="accordion">'
        + '<div class="accordion-group"/>'
        + '<div class="accordion-group"/>'
        + '<div class="accordion-group"/>'
        + '</div>'
145
    var $groups = $(accordionHTML).appendTo('#qunit-fixture').find('.accordion-group')
146

147
    var $target1 = $('<a data-toggle="collapse" href="#body1" data-parent="#accordion"/>').appendTo($groups.eq(0))
148

149
    $('<div id="body1" class="in"/>').appendTo($groups.eq(0))
150

151
    var $target2 = $('<a class="collapsed" data-toggle="collapse" href="#body2" data-parent="#accordion"/>').appendTo($groups.eq(1))
152

153
    $('<div id="body2"/>').appendTo($groups.eq(1))
154

155
    var $target3 = $('<a class="collapsed" data-toggle="collapse" href="#body3" data-parent="#accordion"/>').appendTo($groups.eq(2))
156

157
158
    $('<div id="body3"/>')
      .appendTo($groups.eq(2))
XhmikosR's avatar
XhmikosR committed
159
      .on('show.bs.collapse', function () {
160
161
162
        ok($target1.hasClass('collapsed'), 'inactive target 1 does have class "collapsed"')
        ok($target2.hasClass('collapsed'), 'inactive target 2 does have class "collapsed"')
        ok(!$target3.hasClass('collapsed'), 'active target 3 does not have class "collapsed"')
163

XhmikosR's avatar
XhmikosR committed
164
        start()
165
166
      })

167
    $target3.click()
XhmikosR's avatar
XhmikosR committed
168
  })
169

XhmikosR's avatar
XhmikosR committed
170
171
  test('should allow dots in data-parent', function () {
    stop()
172

Heinrich Fenkart's avatar
Heinrich Fenkart committed
173
174
175
176
177
    var accordionHTML = '<div class="accordion">'
        + '<div class="accordion-group"/>'
        + '<div class="accordion-group"/>'
        + '<div class="accordion-group"/>'
        + '</div>'
178
    var $groups = $(accordionHTML).appendTo('#qunit-fixture').find('.accordion-group')
179

180
    var $target1 = $('<a data-toggle="collapse" href="#body1" data-parent=".accordion"/>').appendTo($groups.eq(0))
181

182
    $('<div id="body1" class="in"/>').appendTo($groups.eq(0))
183

184
    var $target2 = $('<a class="collapsed" data-toggle="collapse" href="#body2" data-parent=".accordion"/>').appendTo($groups.eq(1))
185

186
    $('<div id="body2"/>').appendTo($groups.eq(1))
187

188
    var $target3 = $('<a class="collapsed" data-toggle="collapse" href="#body3" data-parent=".accordion"/>').appendTo($groups.eq(2))
189

190
191
    $('<div id="body3"/>')
      .appendTo($groups.eq(2))
XhmikosR's avatar
XhmikosR committed
192
      .on('show.bs.collapse', function () {
193
194
195
        ok($target1.hasClass('collapsed'), 'inactive target 1 does have class "collapsed"')
        ok($target2.hasClass('collapsed'), 'inactive target 2 does have class "collapsed"')
        ok(!$target3.hasClass('collapsed'), 'active target 3 does not have class "collapsed"')
196

XhmikosR's avatar
XhmikosR committed
197
        start()
198
199
      })

200
    $target3.click()
XhmikosR's avatar
XhmikosR committed
201
202
  })

Patrick H. Lauke's avatar
Patrick H. Lauke committed
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
  test('should set aria-expanded="true" on target when collapse is shown', function () {
    stop()

    var $target = $('<a data-toggle="collapse" class="collapsed" href="#test1" aria-expanded="false"/>').appendTo('#qunit-fixture')

    $('<div id="test1"/>')
      .appendTo('#qunit-fixture')
      .on('show.bs.collapse', function () {
        equal($target.attr('aria-expanded'), 'true', 'aria-expanded on target is "true"')
        start()
      })

    $target.click()
  })

  test('should set aria-expanded="false" on target when collapse is hidden', function () {
    stop()

    var $target = $('<a data-toggle="collapse" href="#test1" aria-expanded="true"/>').appendTo('#qunit-fixture')

    $('<div id="test1" class="in"/>')
      .appendTo('#qunit-fixture')
      .on('hide.bs.collapse', function () {
        equal($target.attr('aria-expanded'), 'false', 'aria-expanded on target is "false"')
        start()
      })

    $target.click()
  })

  test('should change aria-expanded from active accordion target to "false" and set the newly active one to "true"', function () {
    stop()

    var accordionHTML = '<div id="accordion">'
        + '<div class="accordion-group"/>'
        + '<div class="accordion-group"/>'
        + '<div class="accordion-group"/>'
        + '</div>'
    var $groups = $(accordionHTML).appendTo('#qunit-fixture').find('.accordion-group')

    var $target1 = $('<a data-toggle="collapse" href="#body1" data-parent="#accordion"/>').appendTo($groups.eq(0))

    $('<div id="body1" aria-expanded="true" class="in"/>').appendTo($groups.eq(0))

    var $target2 = $('<a class="collapsed" data-toggle="collapse" href="#body2" data-parent="#accordion"/>').appendTo($groups.eq(1))

    $('<div id="body2" aria-expanded="false"/>').appendTo($groups.eq(1))

    var $target3 = $('<a class="collapsed" data-toggle="collapse" href="#body3" data-parent="#accordion"/>').appendTo($groups.eq(2))

    $('<div id="body3" aria-expanded="false"/>')
      .appendTo($groups.eq(2))
      .on('show.bs.collapse', function () {
        equal($target1.attr('aria-expanded'), 'false', 'inactive target 1 has aria-expanded="false"')
        equal($target2.attr('aria-expanded'), 'false', 'inactive target 2 has aria-expanded="false"')
        equal($target3.attr('aria-expanded'), 'true', 'active target 3 has aria-expanded="false"')

        start()
      })

    $target3.click()
  })

Heinrich Fenkart's avatar
Heinrich Fenkart committed
266
})