tooltip.js 40 KB
Newer Older
Jacob Thornton's avatar
Jacob Thornton committed
1
$(function () {
2
  'use strict'
Jacob Thornton's avatar
Jacob Thornton committed
3

fat's avatar
fat committed
4
  QUnit.module('tooltip plugin')
XhmikosR's avatar
XhmikosR committed
5

fat's avatar
fat committed
6
7
8
  QUnit.test('should be defined on jquery object', function (assert) {
    assert.expect(1)
    assert.ok($(document.body).tooltip, 'tooltip method is defined')
XhmikosR's avatar
XhmikosR committed
9
10
  })

fat's avatar
fat committed
11
12
  QUnit.module('tooltip', {
    beforeEach: function () {
13
14
15
      // Run all tests in noConflict mode -- it's the only way to ensure that the plugin works in noConflict mode
      $.fn.bootstrapTooltip = $.fn.tooltip.noConflict()
    },
fat's avatar
fat committed
16
    afterEach: function () {
17
18
      $.fn.tooltip = $.fn.bootstrapTooltip
      delete $.fn.bootstrapTooltip
19
      $('.tooltip').remove()
20
      $('#qunit-fixture').html('')
21
22
23
    }
  })

fat's avatar
fat committed
24
25
  QUnit.test('should provide no conflict', function (assert) {
    assert.expect(1)
XhmikosR's avatar
XhmikosR committed
26
    assert.strictEqual(typeof $.fn.tooltip, 'undefined', 'tooltip was set back to undefined (org value)')
27
28
  })

29
30
31
32
33
34
  QUnit.test('should throw explicit error on undefined method', function (assert) {
    assert.expect(1)
    var $el = $('<div/>')
    $el.bootstrapTooltip()
    try {
      $el.bootstrapTooltip('noMethod')
XhmikosR's avatar
XhmikosR committed
35
    } catch (err) {
36
37
38
39
      assert.strictEqual(err.message, 'No method named "noMethod"')
    }
  })

fat's avatar
fat committed
40
41
  QUnit.test('should return jquery collection containing the element', function (assert) {
    assert.expect(2)
Heinrich Fenkart's avatar
Heinrich Fenkart committed
42
43
    var $el = $('<div/>')
    var $tooltip = $el.bootstrapTooltip()
fat's avatar
fat committed
44
45
    assert.ok($tooltip instanceof $, 'returns jquery collection')
    assert.strictEqual($tooltip[0], $el[0], 'collection contains element')
XhmikosR's avatar
XhmikosR committed
46
47
  })

fat's avatar
fat committed
48
49
  QUnit.test('should expose default settings', function (assert) {
    assert.expect(1)
50
    assert.ok($.fn.bootstrapTooltip.Constructor.Default, 'defaults is defined')
XhmikosR's avatar
XhmikosR committed
51
52
  })

fat's avatar
fat committed
53
54
  QUnit.test('should empty title attribute', function (assert) {
    assert.expect(1)
Heinrich Fenkart's avatar
Heinrich Fenkart committed
55
    var $trigger = $('<a href="#" rel="tooltip" title="Another tooltip"/>').bootstrapTooltip()
fat's avatar
fat committed
56
    assert.strictEqual($trigger.attr('title'), '', 'title attribute was emptied')
XhmikosR's avatar
XhmikosR committed
57
58
  })

fat's avatar
fat committed
59
60
  QUnit.test('should add data attribute for referencing original title', function (assert) {
    assert.expect(1)
Heinrich Fenkart's avatar
Heinrich Fenkart committed
61
    var $trigger = $('<a href="#" rel="tooltip" title="Another tooltip"/>').bootstrapTooltip()
fat's avatar
fat committed
62
    assert.strictEqual($trigger.attr('data-original-title'), 'Another tooltip', 'original title preserved in data attribute')
XhmikosR's avatar
XhmikosR committed
63
64
  })

fat's avatar
fat committed
65
66
67
  QUnit.test('should add aria-describedby to the trigger on show', function (assert) {
    assert.expect(3)
    var $trigger = $('<a href="#" rel="tooltip" title="Another tooltip"/>')
Heinrich Fenkart's avatar
Heinrich Fenkart committed
68
      .bootstrapTooltip()
69
70
      .appendTo('#qunit-fixture')
      .bootstrapTooltip('show')
Heinrich Fenkart's avatar
Heinrich Fenkart committed
71

72
73
    var id = $('.tooltip').attr('id')

fat's avatar
fat committed
74
75
76
    assert.strictEqual($('#' + id).length, 1, 'has a unique id')
    assert.strictEqual($('.tooltip').attr('aria-describedby'), $trigger.attr('id'), 'tooltip id and aria-describedby on trigger match')
    assert.ok($trigger[0].hasAttribute('aria-describedby'), 'trigger has aria-describedby')
77
78
  })

fat's avatar
fat committed
79
80
  QUnit.test('should remove aria-describedby from trigger on hide', function (assert) {
    assert.expect(2)
81
    var done = assert.async()
fat's avatar
fat committed
82
    var $trigger = $('<a href="#" rel="tooltip" title="Another tooltip"/>')
Heinrich Fenkart's avatar
Heinrich Fenkart committed
83
      .bootstrapTooltip()
84
      .appendTo('#qunit-fixture')
Heinrich Fenkart's avatar
Heinrich Fenkart committed
85

86
87
88
89
90
91
92
93
94
95
    $trigger
      .one('shown.bs.tooltip', function () {
        assert.ok($trigger[0].hasAttribute('aria-describedby'), 'trigger has aria-describedby')
        $trigger.bootstrapTooltip('hide')
      })
      .one('hidden.bs.tooltip', function () {
        assert.ok(!$trigger[0].hasAttribute('aria-describedby'), 'trigger does not have aria-describedby')
        done()
      })
      .bootstrapTooltip('show')
96
97
  })

fat's avatar
fat committed
98
99
100
  QUnit.test('should assign a unique id tooltip element', function (assert) {
    assert.expect(2)
    $('<a href="#" rel="tooltip" title="Another tooltip"/>')
101
      .appendTo('#qunit-fixture')
XhmikosR's avatar
XhmikosR committed
102
      .bootstrapTooltip('show')
Heinrich Fenkart's avatar
Heinrich Fenkart committed
103

XhmikosR's avatar
XhmikosR committed
104
    var id = $('.tooltip').attr('id')
105

fat's avatar
fat committed
106
107
    assert.strictEqual($('#' + id).length, 1, 'tooltip has unique id')
    assert.strictEqual(id.indexOf('tooltip'), 0, 'tooltip id has prefix')
108
109
  })

fat's avatar
fat committed
110
  QUnit.test('should place tooltips relative to placement option', function (assert) {
fat's avatar
fat committed
111
    assert.expect(2)
112
    var done = assert.async()
fat's avatar
fat committed
113
    var $tooltip = $('<a href="#" rel="tooltip" title="Another tooltip"/>')
XhmikosR's avatar
XhmikosR committed
114
      .appendTo('#qunit-fixture')
XhmikosR's avatar
XhmikosR committed
115
116
117
      .bootstrapTooltip({
        placement: 'bottom'
      })
XhmikosR's avatar
XhmikosR committed
118

119
120
121
122
    $tooltip
      .one('shown.bs.tooltip', function () {
        assert.ok($('.tooltip')
          .is('.fade.bs-tooltip-bottom.show'), 'has correct classes applied')
123

124
125
126
127
128
129
130
        $tooltip.bootstrapTooltip('hide')
      })
      .one('hidden.bs.tooltip', function () {
        assert.strictEqual($tooltip.data('bs.tooltip').tip.parentNode, null, 'tooltip removed')
        done()
      })
      .bootstrapTooltip('show')
XhmikosR's avatar
XhmikosR committed
131
132
  })

fat's avatar
fat committed
133
134
  QUnit.test('should allow html entities', function (assert) {
    assert.expect(2)
135
    var done = assert.async()
fat's avatar
fat committed
136
    var $tooltip = $('<a href="#" rel="tooltip" title="&lt;b&gt;@fat&lt;/b&gt;"/>')
XhmikosR's avatar
XhmikosR committed
137
      .appendTo('#qunit-fixture')
XhmikosR's avatar
XhmikosR committed
138
139
140
      .bootstrapTooltip({
        html: true
      })
XhmikosR's avatar
XhmikosR committed
141

142
143
144
145
146
147
148
149
150
151
    $tooltip
      .one('shown.bs.tooltip', function () {
        assert.notEqual($('.tooltip b').length, 0, 'b tag was inserted')
        $tooltip.bootstrapTooltip('hide')
      })
      .one('hidden.bs.tooltip', function () {
        assert.strictEqual($tooltip.data('bs.tooltip').tip.parentNode, null, 'tooltip removed')
        done()
      })
      .bootstrapTooltip('show')
XhmikosR's avatar
XhmikosR committed
152
153
  })

154
155
  QUnit.test('should allow DOMElement title (html: false)', function (assert) {
    assert.expect(3)
156
    var done = assert.async()
157
158
159
    var title = document.createTextNode('<3 writing tests')
    var $tooltip = $('<a href="#" rel="tooltip"/>')
      .appendTo('#qunit-fixture')
XhmikosR's avatar
XhmikosR committed
160
161
162
      .bootstrapTooltip({
        title: title
      })
163

164
165
166
167
168
169
170
171
    $tooltip
      .one('shown.bs.tooltip', function () {
        assert.notEqual($('.tooltip').length, 0, 'tooltip inserted')
        assert.strictEqual($('.tooltip').text(), '<3 writing tests', 'title inserted')
        assert.ok(!$.contains($('.tooltip').get(0), title), 'title node copied, not moved')
        done()
      })
      .bootstrapTooltip('show')
172
173
174
175
  })

  QUnit.test('should allow DOMElement title (html: true)', function (assert) {
    assert.expect(3)
176
    var done = assert.async()
177
178
179
    var title = document.createTextNode('<3 writing tests')
    var $tooltip = $('<a href="#" rel="tooltip"/>')
      .appendTo('#qunit-fixture')
XhmikosR's avatar
XhmikosR committed
180
181
182
183
      .bootstrapTooltip({
        html: true,
        title: title
      })
184

185
186
187
188
189
190
191
192
    $tooltip
      .one('shown.bs.tooltip', function () {
        assert.notEqual($('.tooltip').length, 0, 'tooltip inserted')
        assert.strictEqual($('.tooltip').text(), '<3 writing tests', 'title inserted')
        assert.ok($.contains($('.tooltip').get(0), title), 'title node moved, not copied')
        done()
      })
      .bootstrapTooltip('show')
193
194
  })

fat's avatar
fat committed
195
196
  QUnit.test('should respect custom classes', function (assert) {
    assert.expect(2)
197
    var done = assert.async()
fat's avatar
fat committed
198
    var $tooltip = $('<a href="#" rel="tooltip" title="Another tooltip"/>')
XhmikosR's avatar
XhmikosR committed
199
      .appendTo('#qunit-fixture')
XhmikosR's avatar
XhmikosR committed
200
201
202
      .bootstrapTooltip({
        template: '<div class="tooltip some-class"><div class="tooltip-arrow"/><div class="tooltip-inner"/></div>'
      })
XhmikosR's avatar
XhmikosR committed
203

204
205
206
207
208
209
210
211
212
213
    $tooltip
      .one('shown.bs.tooltip', function () {
        assert.ok($('.tooltip').hasClass('some-class'), 'custom class is present')
        $tooltip.bootstrapTooltip('hide')
      })
      .one('hidden.bs.tooltip', function () {
        assert.strictEqual($tooltip.data('bs.tooltip').tip.parentNode, null, 'tooltip removed')
        done()
      })
      .bootstrapTooltip('show')
XhmikosR's avatar
XhmikosR committed
214
215
  })

fat's avatar
fat committed
216
217
  QUnit.test('should fire show event', function (assert) {
    assert.expect(1)
218
    var done = assert.async()
Heinrich Fenkart's avatar
Heinrich Fenkart committed
219

fat's avatar
fat committed
220
    $('<div title="tooltip title"/>')
XhmikosR's avatar
XhmikosR committed
221
      .on('show.bs.tooltip', function () {
fat's avatar
fat committed
222
        assert.ok(true, 'show event fired')
223
        done()
XhmikosR's avatar
XhmikosR committed
224
      })
225
      .bootstrapTooltip('show')
XhmikosR's avatar
XhmikosR committed
226
227
  })

228
229
230
231
232
233
  QUnit.test('should throw an error when show is called on hidden elements', function (assert) {
    assert.expect(1)
    var done = assert.async()

    try {
      $('<div title="tooltip title" style="display: none"/>').bootstrapTooltip('show')
XhmikosR's avatar
XhmikosR committed
234
    } catch (err) {
235
236
237
238
239
      assert.strictEqual(err.message, 'Please use show on visible elements')
      done()
    }
  })

fat's avatar
fat committed
240
241
  QUnit.test('should fire inserted event', function (assert) {
    assert.expect(2)
242
    var done = assert.async()
Heinrich Fenkart's avatar
Heinrich Fenkart committed
243

fat's avatar
fat committed
244
    $('<div title="tooltip title"/>')
Heinrich Fenkart's avatar
Heinrich Fenkart committed
245
      .appendTo('#qunit-fixture')
fat's avatar
fat committed
246
247
248
      .on('inserted.bs.tooltip', function () {
        assert.notEqual($('.tooltip').length, 0, 'tooltip was inserted')
        assert.ok(true, 'inserted event fired')
249
        done()
XhmikosR's avatar
XhmikosR committed
250
      })
251
      .bootstrapTooltip('show')
XhmikosR's avatar
XhmikosR committed
252
253
  })

fat's avatar
fat committed
254
255
  QUnit.test('should fire shown event', function (assert) {
    assert.expect(1)
256
    var done = assert.async()
Heinrich Fenkart's avatar
Heinrich Fenkart committed
257

fat's avatar
fat committed
258
    $('<div title="tooltip title"></div>')
259
      .appendTo('#qunit-fixture')
fat's avatar
fat committed
260
261
262
263
264
265
266
267
268
269
270
271
      .on('shown.bs.tooltip', function () {
        assert.ok(true, 'shown was called')
        done()
      })
      .bootstrapTooltip('show')
  })

  QUnit.test('should not fire shown event when show was prevented', function (assert) {
    assert.expect(1)
    var done = assert.async()

    $('<div title="tooltip title"/>')
XhmikosR's avatar
XhmikosR committed
272
273
      .on('show.bs.tooltip', function (e) {
        e.preventDefault()
fat's avatar
fat committed
274
        assert.ok(true, 'show event fired')
275
        done()
XhmikosR's avatar
XhmikosR committed
276
277
      })
      .on('shown.bs.tooltip', function () {
fat's avatar
fat committed
278
        assert.ok(false, 'shown event fired')
XhmikosR's avatar
XhmikosR committed
279
      })
280
      .bootstrapTooltip('show')
XhmikosR's avatar
XhmikosR committed
281
282
  })

fat's avatar
fat committed
283
284
  QUnit.test('should fire hide event', function (assert) {
    assert.expect(1)
285
    var done = assert.async()
Heinrich Fenkart's avatar
Heinrich Fenkart committed
286

fat's avatar
fat committed
287
    $('<div title="tooltip title"/>')
Heinrich Fenkart's avatar
Heinrich Fenkart committed
288
      .appendTo('#qunit-fixture')
XhmikosR's avatar
XhmikosR committed
289
      .on('shown.bs.tooltip', function () {
290
        $(this).bootstrapTooltip('hide')
XhmikosR's avatar
XhmikosR committed
291
292
      })
      .on('hide.bs.tooltip', function () {
fat's avatar
fat committed
293
        assert.ok(true, 'hide event fired')
294
        done()
XhmikosR's avatar
XhmikosR committed
295
      })
296
      .bootstrapTooltip('show')
XhmikosR's avatar
XhmikosR committed
297
298
  })

fat's avatar
fat committed
299
300
  QUnit.test('should fire hidden event', function (assert) {
    assert.expect(1)
301
    var done = assert.async()
Heinrich Fenkart's avatar
Heinrich Fenkart committed
302

fat's avatar
fat committed
303
    $('<div title="tooltip title"/>')
Heinrich Fenkart's avatar
Heinrich Fenkart committed
304
      .appendTo('#qunit-fixture')
XhmikosR's avatar
XhmikosR committed
305
      .on('shown.bs.tooltip', function () {
306
        $(this).bootstrapTooltip('hide')
XhmikosR's avatar
XhmikosR committed
307
308
      })
      .on('hidden.bs.tooltip', function () {
fat's avatar
fat committed
309
        assert.ok(true, 'hidden event fired')
310
        done()
XhmikosR's avatar
XhmikosR committed
311
      })
312
      .bootstrapTooltip('show')
XhmikosR's avatar
XhmikosR committed
313
314
  })

fat's avatar
fat committed
315
316
  QUnit.test('should not fire hidden event when hide was prevented', function (assert) {
    assert.expect(1)
317
    var done = assert.async()
Heinrich Fenkart's avatar
Heinrich Fenkart committed
318

fat's avatar
fat committed
319
    $('<div title="tooltip title"/>')
Heinrich Fenkart's avatar
Heinrich Fenkart committed
320
      .appendTo('#qunit-fixture')
XhmikosR's avatar
XhmikosR committed
321
      .on('shown.bs.tooltip', function () {
322
        $(this).bootstrapTooltip('hide')
XhmikosR's avatar
XhmikosR committed
323
324
325
      })
      .on('hide.bs.tooltip', function (e) {
        e.preventDefault()
fat's avatar
fat committed
326
        assert.ok(true, 'hide event fired')
327
        done()
XhmikosR's avatar
XhmikosR committed
328
329
      })
      .on('hidden.bs.tooltip', function () {
fat's avatar
fat committed
330
        assert.ok(false, 'hidden event fired')
XhmikosR's avatar
XhmikosR committed
331
      })
332
      .bootstrapTooltip('show')
XhmikosR's avatar
XhmikosR committed
333
334
  })

fat's avatar
fat committed
335
336
337
  QUnit.test('should destroy tooltip', function (assert) {
    assert.expect(7)
    var $tooltip = $('<div/>')
Heinrich Fenkart's avatar
Heinrich Fenkart committed
338
      .bootstrapTooltip()
XhmikosR's avatar
XhmikosR committed
339
      .on('click.foo', function () {})  // eslint-disable-line no-empty-function
Heinrich Fenkart's avatar
Heinrich Fenkart committed
340

fat's avatar
fat committed
341
342
343
    assert.ok($tooltip.data('bs.tooltip'), 'tooltip has data')
    assert.ok($._data($tooltip[0], 'events').mouseover && $._data($tooltip[0], 'events').mouseout, 'tooltip has hover events')
    assert.strictEqual($._data($tooltip[0], 'events').click[0].namespace, 'foo', 'tooltip has extra click.foo event')
Heinrich Fenkart's avatar
Heinrich Fenkart committed
344
345

    $tooltip.bootstrapTooltip('show')
fat's avatar
fat committed
346
    $tooltip.bootstrapTooltip('dispose')
Heinrich Fenkart's avatar
Heinrich Fenkart committed
347

Starsam80's avatar
Starsam80 committed
348
    assert.ok(!$tooltip.hasClass('show'), 'tooltip is hidden')
fat's avatar
fat committed
349
350
351
    assert.ok(!$._data($tooltip[0], 'bs.tooltip'), 'tooltip does not have data')
    assert.strictEqual($._data($tooltip[0], 'events').click[0].namespace, 'foo', 'tooltip still has click.foo')
    assert.ok(!$._data($tooltip[0], 'events').mouseover && !$._data($tooltip[0], 'events').mouseout, 'tooltip does not have hover events')
XhmikosR's avatar
XhmikosR committed
352
353
  })

354
355
356
357
358
359
360
361
  // QUnit.test('should show tooltip with delegate selector on click', function (assert) {
  //   assert.expect(2)
  //   var $div = $('<div><a href="#" rel="tooltip" title="Another tooltip"/></div>')
  //     .appendTo('#qunit-fixture')
  //     .bootstrapTooltip({
  //       selector: 'a[rel="tooltip"]',
  //       trigger: 'click'
  //     })
Heinrich Fenkart's avatar
Heinrich Fenkart committed
362

363
364
  //   $div.find('a').trigger('click')
  //   assert.ok($('.tooltip').is('.fade.in'), 'tooltip is faded in')
Heinrich Fenkart's avatar
Heinrich Fenkart committed
365

366
367
368
  //   $div.find('a').trigger('click')
  //   assert.strictEqual($div.data('bs.tooltip').tip.parentNode, null, 'tooltip removed')
  // })
XhmikosR's avatar
XhmikosR committed
369

fat's avatar
fat committed
370
371
372
  QUnit.test('should show tooltip when toggle is called', function (assert) {
    assert.expect(1)
    $('<a href="#" rel="tooltip" title="tooltip on toggle"/>')
XhmikosR's avatar
XhmikosR committed
373
      .appendTo('#qunit-fixture')
XhmikosR's avatar
XhmikosR committed
374
375
376
      .bootstrapTooltip({
        trigger: 'manual'
      })
377
      .bootstrapTooltip('toggle')
Heinrich Fenkart's avatar
Heinrich Fenkart committed
378

Starsam80's avatar
Starsam80 committed
379
    assert.ok($('.tooltip').is('.fade.show'), 'tooltip is faded active')
XhmikosR's avatar
XhmikosR committed
380
381
  })

fat's avatar
fat committed
382
383
  QUnit.test('should hide previously shown tooltip when toggle is called on tooltip', function (assert) {
    assert.expect(1)
Heinrich Fenkart's avatar
Heinrich Fenkart committed
384
    $('<a href="#" rel="tooltip" title="tooltip on toggle">@ResentedHook</a>')
385
      .appendTo('#qunit-fixture')
XhmikosR's avatar
XhmikosR committed
386
387
388
      .bootstrapTooltip({
        trigger: 'manual'
      })
Heinrich Fenkart's avatar
Heinrich Fenkart committed
389
390
391
      .bootstrapTooltip('show')

    $('.tooltip').bootstrapTooltip('toggle')
Starsam80's avatar
Starsam80 committed
392
    assert.ok($('.tooltip').not('.fade.show'), 'tooltip was faded out')
393
394
  })

fat's avatar
fat committed
395
396
  QUnit.test('should place tooltips inside body when container is body', function (assert) {
    assert.expect(3)
397
    var done = assert.async()
fat's avatar
fat committed
398
    var $tooltip = $('<a href="#" rel="tooltip" title="Another tooltip"/>')
XhmikosR's avatar
XhmikosR committed
399
      .appendTo('#qunit-fixture')
XhmikosR's avatar
XhmikosR committed
400
401
402
      .bootstrapTooltip({
        container: 'body'
      })
Heinrich Fenkart's avatar
Heinrich Fenkart committed
403

404
405
406
407
408
409
410
411
412
413
414
    $tooltip
      .one('shown.bs.tooltip', function () {
        assert.notEqual($('body > .tooltip').length, 0, 'tooltip is direct descendant of body')
        assert.strictEqual($('#qunit-fixture > .tooltip').length, 0, 'tooltip is not in parent')
        $tooltip.bootstrapTooltip('hide')
      })
      .one('hidden.bs.tooltip', function () {
        assert.strictEqual($('body > .tooltip').length, 0, 'tooltip was removed from dom')
        done()
      })
      .bootstrapTooltip('show')
XhmikosR's avatar
XhmikosR committed
415
416
  })

417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
  QUnit.test('should place tooltips inside a specific container when container is an element', function (assert) {
    assert.expect(3)
    var done = assert.async()
    var $container = $('<div></div>').appendTo('#qunit-fixture')
    var $tooltip = $('<a href="#" rel="tooltip" title="Another tooltip"/>')
      .appendTo('#qunit-fixture')
      .bootstrapTooltip({
        container: $container[0]
      })

    $tooltip
      .one('shown.bs.tooltip', function () {
        assert.strictEqual($container.find('.tooltip').length, 1)
        assert.strictEqual($('#qunit-fixture > .tooltip').length, 0, 'tooltip is not in parent')
        $tooltip.bootstrapTooltip('hide')
      })
      .one('hidden.bs.tooltip', function () {
        assert.strictEqual($container.find('.tooltip').length, 0, 'tooltip was removed from dom')
        done()
      })
      .bootstrapTooltip('show')
  })

  QUnit.test('should place tooltips inside a specific container when container is a selector', function (assert) {
    assert.expect(3)
    var done = assert.async()
    var $container = $('<div id="container"></div>').appendTo('#qunit-fixture')
    var $tooltip = $('<a href="#" rel="tooltip" title="Another tooltip"/>')
      .appendTo('#qunit-fixture')
      .bootstrapTooltip({
        container: '#container'
      })

    $tooltip
      .one('shown.bs.tooltip', function () {
        assert.strictEqual($container.find('.tooltip').length, 1)
        assert.strictEqual($('#qunit-fixture > .tooltip').length, 0, 'tooltip is not in parent')
        $tooltip.bootstrapTooltip('hide')
      })
      .one('hidden.bs.tooltip', function () {
        assert.strictEqual($container.find('.tooltip').length, 0, 'tooltip was removed from dom')
        done()
      })
      .bootstrapTooltip('show')
  })

fat's avatar
fat committed
463
  QUnit.test('should add position class before positioning so that position-specific styles are taken into account', function (assert) {
Johann-S's avatar
Johann-S committed
464
465
    assert.expect(2)
    var done = assert.async()
XhmikosR's avatar
XhmikosR committed
466
467
468
469
    var styles = '<style>' +
      '.bs-tooltip-right { white-space: nowrap; }' +
      '.bs-tooltip-right .tooltip-inner { max-width: none; }' +
      '</style>'
470
    var $styles = $(styles).appendTo('head')
Heinrich Fenkart's avatar
Heinrich Fenkart committed
471

fat's avatar
fat committed
472
    var $container = $('<div/>').appendTo('#qunit-fixture')
Johann-S's avatar
Johann-S committed
473
    $('<a href="#" rel="tooltip" title="very very very very very very very very long tooltip in one line"/>')
Heinrich Fenkart's avatar
Heinrich Fenkart committed
474
475
      .appendTo($container)
      .bootstrapTooltip({
Johann-S's avatar
Johann-S committed
476
477
478
479
480
481
        placement: 'right',
        trigger: 'manual'
      })
      .on('inserted.bs.tooltip', function () {
        var $tooltip = $($(this).data('bs.tooltip').tip)
        assert.ok($tooltip.hasClass('bs-tooltip-right'))
XhmikosR's avatar
XhmikosR committed
482
        assert.ok(typeof $tooltip.attr('style') === 'undefined')
Johann-S's avatar
Johann-S committed
483
484
        $styles.remove()
        done()
Heinrich Fenkart's avatar
Heinrich Fenkart committed
485
486
      })
      .bootstrapTooltip('show')
XhmikosR's avatar
XhmikosR committed
487
488
  })

fat's avatar
fat committed
489
490
  QUnit.test('should use title attribute for tooltip text', function (assert) {
    assert.expect(2)
491
    var done = assert.async()
fat's avatar
fat committed
492
    var $tooltip = $('<a href="#" rel="tooltip" title="Simple tooltip"/>')
XhmikosR's avatar
XhmikosR committed
493
      .appendTo('#qunit-fixture')
Heinrich Fenkart's avatar
Heinrich Fenkart committed
494
495
      .bootstrapTooltip()

496
497
498
499
500
501
502
503
504
505
    $tooltip
      .one('shown.bs.tooltip', function () {
        assert.strictEqual($('.tooltip').children('.tooltip-inner').text(), 'Simple tooltip', 'title from title attribute is set')
        $tooltip.bootstrapTooltip('hide')
      })
      .one('hidden.bs.tooltip', function () {
        assert.strictEqual($('.tooltip').length, 0, 'tooltip removed from dom')
        done()
      })
      .bootstrapTooltip('show')
XhmikosR's avatar
XhmikosR committed
506
507
  })

fat's avatar
fat committed
508
509
  QUnit.test('should prefer title attribute over title option', function (assert) {
    assert.expect(2)
510
    var done = assert.async()
fat's avatar
fat committed
511
    var $tooltip = $('<a href="#" rel="tooltip" title="Simple tooltip"/>')
XhmikosR's avatar
XhmikosR committed
512
      .appendTo('#qunit-fixture')
513
      .bootstrapTooltip({
XhmikosR's avatar
XhmikosR committed
514
515
        title: 'This is a tooltip with some content'
      })
Heinrich Fenkart's avatar
Heinrich Fenkart committed
516

517
518
519
520
521
522
523
524
525
526
    $tooltip
      .one('shown.bs.tooltip', function () {
        assert.strictEqual($('.tooltip').children('.tooltip-inner').text(), 'Simple tooltip', 'title is set from title attribute while preferred over title option')
        $tooltip.bootstrapTooltip('hide')
      })
      .one('hidden.bs.tooltip', function () {
        assert.strictEqual($('.tooltip').length, 0, 'tooltip removed from dom')
        done()
      })
      .bootstrapTooltip('show')
XhmikosR's avatar
XhmikosR committed
527
528
  })

fat's avatar
fat committed
529
530
  QUnit.test('should use title option', function (assert) {
    assert.expect(2)
531
    var done = assert.async()
fat's avatar
fat committed
532
    var $tooltip = $('<a href="#" rel="tooltip"/>')
XhmikosR's avatar
XhmikosR committed
533
      .appendTo('#qunit-fixture')
534
      .bootstrapTooltip({
XhmikosR's avatar
XhmikosR committed
535
536
        title: 'This is a tooltip with some content'
      })
Heinrich Fenkart's avatar
Heinrich Fenkart committed
537

538
539
540
541
542
543
544
545
546
547
    $tooltip
      .one('shown.bs.tooltip', function () {
        assert.strictEqual($('.tooltip').children('.tooltip-inner').text(), 'This is a tooltip with some content', 'title from title option is set')
        $tooltip.bootstrapTooltip('hide')
      })
      .one('hidden.bs.tooltip', function () {
        assert.strictEqual($('.tooltip').length, 0, 'tooltip removed from dom')
        done()
      })
      .bootstrapTooltip('show')
Heinrich Fenkart's avatar
Heinrich Fenkart committed
548
549
  })

550
  QUnit.test('should not error when trying to show an top-placed tooltip that has been removed from the dom', function (assert) {
fat's avatar
fat committed
551
    assert.expect(1)
Heinrich Fenkart's avatar
Heinrich Fenkart committed
552
    var passed = true
fat's avatar
fat committed
553
    var $tooltip = $('<a href="#" rel="tooltip" title="Another tooltip"/>')
Heinrich Fenkart's avatar
Heinrich Fenkart committed
554
      .appendTo('#qunit-fixture')
Chris Rebert's avatar
Chris Rebert committed
555
      .one('show.bs.tooltip', function () {
Heinrich Fenkart's avatar
Heinrich Fenkart committed
556
        $(this).remove()
Chris Rebert's avatar
Chris Rebert committed
557
      })
XhmikosR's avatar
XhmikosR committed
558
559
560
      .bootstrapTooltip({
        placement: 'top'
      })
Chris Rebert's avatar
Chris Rebert committed
561
562

    try {
Heinrich Fenkart's avatar
Heinrich Fenkart committed
563
564
      $tooltip.bootstrapTooltip('show')
    } catch (err) {
Chris Rebert's avatar
Chris Rebert committed
565
566
567
      passed = false
    }

fat's avatar
fat committed
568
    assert.ok(passed, '.tooltip(\'show\') should not throw an error if element no longer is in dom')
Chris Rebert's avatar
Chris Rebert committed
569
  })
fat's avatar
fat committed
570

fat's avatar
fat committed
571
572
  QUnit.test('should show tooltip if leave event hasn\'t occurred before delay expires', function (assert) {
    assert.expect(2)
573
    var done = assert.async()
fat's avatar
fat committed
574

fat's avatar
fat committed
575
    var $tooltip = $('<a href="#" rel="tooltip" title="Another tooltip"/>')
fat's avatar
fat committed
576
      .appendTo('#qunit-fixture')
XhmikosR's avatar
XhmikosR committed
577
578
579
      .bootstrapTooltip({
        delay: 150
      })
fat's avatar
fat committed
580
581

    setTimeout(function () {
Starsam80's avatar
Starsam80 committed
582
      assert.ok(!$('.tooltip').is('.fade.show'), '100ms: tooltip is not faded active')
583
    }, 100)
fat's avatar
fat committed
584
585

    setTimeout(function () {
Starsam80's avatar
Starsam80 committed
586
      assert.ok($('.tooltip').is('.fade.show'), '200ms: tooltip is faded active')
587
      done()
588
    }, 200)
fat's avatar
fat committed
589
590
591
592

    $tooltip.trigger('mouseenter')
  })

fat's avatar
fat committed
593
594
  QUnit.test('should not show tooltip if leave event occurs before delay expires', function (assert) {
    assert.expect(2)
595
    var done = assert.async()
fat's avatar
fat committed
596

fat's avatar
fat committed
597
    var $tooltip = $('<a href="#" rel="tooltip" title="Another tooltip"/>')
fat's avatar
fat committed
598
      .appendTo('#qunit-fixture')
XhmikosR's avatar
XhmikosR committed
599
600
601
      .bootstrapTooltip({
        delay: 150
      })
fat's avatar
fat committed
602
603

    setTimeout(function () {
Starsam80's avatar
Starsam80 committed
604
      assert.ok(!$('.tooltip').is('.fade.show'), '100ms: tooltip not faded active')
fat's avatar
fat committed
605
      $tooltip.trigger('mouseout')
606
    }, 100)
fat's avatar
fat committed
607
608

    setTimeout(function () {
Starsam80's avatar
Starsam80 committed
609
      assert.ok(!$('.tooltip').is('.fade.show'), '200ms: tooltip not faded active')
610
      done()
611
    }, 200)
fat's avatar
fat committed
612
613
614
615

    $tooltip.trigger('mouseenter')
  })

fat's avatar
fat committed
616
617
  QUnit.test('should not hide tooltip if leave event occurs and enter event occurs within the hide delay', function (assert) {
    assert.expect(3)
618
    var done = assert.async()
fat's avatar
fat committed
619

fat's avatar
fat committed
620
    var $tooltip = $('<a href="#" rel="tooltip" title="Another tooltip"/>')
fat's avatar
fat committed
621
      .appendTo('#qunit-fixture')
XhmikosR's avatar
XhmikosR committed
622
623
624
625
626
627
      .bootstrapTooltip({
        delay: {
          show: 0,
          hide: 150
        }
      })
fat's avatar
fat committed
628
629

    setTimeout(function () {
Starsam80's avatar
Starsam80 committed
630
      assert.ok($('.tooltip').is('.fade.show'), '1ms: tooltip faded active')
fat's avatar
fat committed
631
632
633
      $tooltip.trigger('mouseout')

      setTimeout(function () {
Starsam80's avatar
Starsam80 committed
634
        assert.ok($('.tooltip').is('.fade.show'), '100ms: tooltip still faded active')
fat's avatar
fat committed
635
        $tooltip.trigger('mouseenter')
636
      }, 100)
fat's avatar
fat committed
637
638

      setTimeout(function () {
Starsam80's avatar
Starsam80 committed
639
        assert.ok($('.tooltip').is('.fade.show'), '200ms: tooltip still faded active')
640
        done()
641
      }, 200)
fat's avatar
fat committed
642
643
644
645
646
    }, 0)

    $tooltip.trigger('mouseenter')
  })

fat's avatar
fat committed
647
648
  QUnit.test('should not show tooltip if leave event occurs before delay expires', function (assert) {
    assert.expect(2)
649
    var done = assert.async()
fat's avatar
fat committed
650

fat's avatar
fat committed
651
    var $tooltip = $('<a href="#" rel="tooltip" title="Another tooltip"/>')
fat's avatar
fat committed
652
      .appendTo('#qunit-fixture')
XhmikosR's avatar
XhmikosR committed
653
654
655
      .bootstrapTooltip({
        delay: 150
      })
fat's avatar
fat committed
656
657

    setTimeout(function () {
Starsam80's avatar
Starsam80 committed
658
      assert.ok(!$('.tooltip').is('.fade.show'), '100ms: tooltip not faded active')
fat's avatar
fat committed
659
      $tooltip.trigger('mouseout')
660
    }, 100)
fat's avatar
fat committed
661
662

    setTimeout(function () {
Starsam80's avatar
Starsam80 committed
663
      assert.ok(!$('.tooltip').is('.fade.show'), '200ms: tooltip not faded active')
664
      done()
665
    }, 200)
fat's avatar
fat committed
666
667
668
669

    $tooltip.trigger('mouseenter')
  })

fat's avatar
fat committed
670
671
  QUnit.test('should not show tooltip if leave event occurs before delay expires, even if hide delay is 0', function (assert) {
    assert.expect(2)
672
    var done = assert.async()
fat's avatar
fat committed
673

fat's avatar
fat committed
674
    var $tooltip = $('<a href="#" rel="tooltip" title="Another tooltip"/>')
fat's avatar
fat committed
675
      .appendTo('#qunit-fixture')
XhmikosR's avatar
XhmikosR committed
676
677
678
679
680
681
      .bootstrapTooltip({
        delay: {
          show: 150,
          hide: 0
        }
      })
fat's avatar
fat committed
682
683

    setTimeout(function () {
Starsam80's avatar
Starsam80 committed
684
      assert.ok(!$('.tooltip').is('.fade.show'), '100ms: tooltip not faded active')
fat's avatar
fat committed
685
      $tooltip.trigger('mouseout')
686
    }, 100)
fat's avatar
fat committed
687
688

    setTimeout(function () {
Starsam80's avatar
Starsam80 committed
689
      assert.ok(!$('.tooltip').is('.fade.show'), '250ms: tooltip not faded active')
690
      done()
691
    }, 250)
fat's avatar
fat committed
692
693
694
695

    $tooltip.trigger('mouseenter')
  })

fat's avatar
fat committed
696
697
  QUnit.test('should wait 200ms before hiding the tooltip', function (assert) {
    assert.expect(3)
698
    var done = assert.async()
fat's avatar
fat committed
699

fat's avatar
fat committed
700
    var $tooltip = $('<a href="#" rel="tooltip" title="Another tooltip"/>')
fat's avatar
fat committed
701
      .appendTo('#qunit-fixture')
XhmikosR's avatar
XhmikosR committed
702
703
704
705
706
707
      .bootstrapTooltip({
        delay: {
          show: 0,
          hide: 150
        }
      })
fat's avatar
fat committed
708
709

    setTimeout(function () {
Starsam80's avatar
Starsam80 committed
710
      assert.ok($($tooltip.data('bs.tooltip').tip).is('.fade.show'), '1ms: tooltip faded active')
fat's avatar
fat committed
711
712
713
714

      $tooltip.trigger('mouseout')

      setTimeout(function () {
Starsam80's avatar
Starsam80 committed
715
        assert.ok($($tooltip.data('bs.tooltip').tip).is('.fade.show'), '100ms: tooltip still faded active')
716
      }, 100)
fat's avatar
fat committed
717
718

      setTimeout(function () {
Starsam80's avatar
Starsam80 committed
719
        assert.ok(!$($tooltip.data('bs.tooltip').tip).is('.show'), '200ms: tooltip removed')
fat's avatar
fat committed
720
        done()
721
      }, 200)
fat's avatar
fat committed
722
723
724
725
726
    }, 0)

    $tooltip.trigger('mouseenter')
  })

fat's avatar
fat committed
727
728
  QUnit.test('should not reload the tooltip on subsequent mouseenter events', function (assert) {
    assert.expect(1)
729
    var titleHtml = function () {
730
      var uid = Util.getUID('tooltip')
731
732
733
      return '<p id="tt-content">' + uid + '</p><p>' + uid + '</p><p>' + uid + '</p>'
    }

fat's avatar
fat committed
734
    var $tooltip = $('<span id="tt-outer" rel="tooltip" data-trigger="hover" data-placement="top">some text</span>')
735
736
737
738
739
740
      .appendTo('#qunit-fixture')

    $tooltip.bootstrapTooltip({
      html: true,
      animation: false,
      trigger: 'hover',
XhmikosR's avatar
XhmikosR committed
741
742
743
744
      delay: {
        show: 0,
        hide: 500
      },
745
746
747
748
749
750
751
752
753
      container: $tooltip,
      title: titleHtml
    })

    $('#tt-outer').trigger('mouseenter')

    var currentUid = $('#tt-content').text()

    $('#tt-content').trigger('mouseenter')
fat's avatar
fat committed
754
    assert.strictEqual(currentUid, $('#tt-content').text())
755
756
  })

fat's avatar
fat committed
757
758
  QUnit.test('should not reload the tooltip if the mouse leaves and re-enters before hiding', function (assert) {
    assert.expect(4)
759

760
    var titleHtml = function () {
761
      var uid = Util.getUID('tooltip')
762
763
764
      return '<p id="tt-content">' + uid + '</p><p>' + uid + '</p><p>' + uid + '</p>'
    }

fat's avatar
fat committed
765
    var $tooltip = $('<span id="tt-outer" rel="tooltip" data-trigger="hover" data-placement="top">some text</span>')
766
767
768
769
770
771
      .appendTo('#qunit-fixture')

    $tooltip.bootstrapTooltip({
      html: true,
      animation: false,
      trigger: 'hover',
XhmikosR's avatar
XhmikosR committed
772
773
774
775
      delay: {
        show: 0,
        hide: 500
      },
776
777
778
779
780
781
782
783
784
785
      title: titleHtml
    })

    var obj = $tooltip.data('bs.tooltip')

    $('#tt-outer').trigger('mouseenter')

    var currentUid = $('#tt-content').text()

    $('#tt-outer').trigger('mouseleave')
fat's avatar
fat committed
786
    assert.strictEqual(currentUid, $('#tt-content').text())
fat's avatar
fat committed
787

788
    assert.ok(obj._hoverState === 'out', 'the tooltip hoverState should be set to "out"')
789

790
    $('#tt-outer').trigger('mouseenter')
Starsam80's avatar
Starsam80 committed
791
    assert.ok(obj._hoverState === 'show', 'the tooltip hoverState should be set to "show"')
792

fat's avatar
fat committed
793
    assert.strictEqual(currentUid, $('#tt-content').text())
794
795
  })

fat's avatar
fat committed
796
  QUnit.test('should do nothing when an attempt is made to hide an uninitialized tooltip', function (assert) {
797
798
    assert.expect(1)

fat's avatar
fat committed
799
800
801
802
803
804
    var $tooltip = $('<span data-toggle="tooltip" title="some tip">some text</span>')
      .appendTo('#qunit-fixture')
      .on('hidden.bs.tooltip shown.bs.tooltip', function () {
        assert.ok(false, 'should not fire any tooltip events')
      })
      .bootstrapTooltip('hide')
XhmikosR's avatar
XhmikosR committed
805
    assert.strictEqual(typeof $tooltip.data('bs.tooltip'), 'undefined', 'should not initialize the tooltip')
fat's avatar
fat committed
806
807
808
809
810
811
  })

  QUnit.test('should not remove tooltip if multiple triggers are set and one is still active', function (assert) {
    assert.expect(41)
    var $el = $('<button>Trigger</button>')
      .appendTo('#qunit-fixture')
XhmikosR's avatar
XhmikosR committed
812
813
814
815
      .bootstrapTooltip({
        trigger: 'click hover focus',
        animation: false
      })
fat's avatar
fat committed
816
    var tooltip = $el.data('bs.tooltip')
817
    var $tooltip = $(tooltip.getTipElement())
fat's avatar
fat committed
818

XhmikosR's avatar
XhmikosR committed
819
820
821
    function showingTooltip() {
      return $tooltip.hasClass('show') || tooltip._hoverState === 'show'
    }
fat's avatar
fat committed
822
823

    var tests = [
XhmikosR's avatar
XhmikosR committed
824
      ['mouseenter', 'mouseleave'],
825

XhmikosR's avatar
XhmikosR committed
826
      ['focusin', 'focusout'],
fat's avatar
fat committed
827

XhmikosR's avatar
XhmikosR committed
828
      ['click', 'click'],
fat's avatar
fat committed
829

XhmikosR's avatar
XhmikosR committed
830
831
      ['mouseenter', 'focusin', 'focusout', 'mouseleave'],
      ['mouseenter', 'focusin', 'mouseleave', 'focusout'],
fat's avatar
fat committed
832

XhmikosR's avatar
XhmikosR committed
833
834
      ['focusin', 'mouseenter', 'mouseleave', 'focusout'],
      ['focusin', 'mouseenter', 'focusout', 'mouseleave'],
fat's avatar
fat committed
835

XhmikosR's avatar
XhmikosR committed
836
837
838
      ['click', 'focusin', 'mouseenter', 'focusout', 'mouseleave', 'click'],
      ['mouseenter', 'click', 'focusin', 'focusout', 'mouseleave', 'click'],
      ['mouseenter', 'focusin', 'click', 'click', 'mouseleave', 'focusout']
fat's avatar
fat committed
839
840
841
842
843
844
    ]

    assert.ok(!showingTooltip())

    $.each(tests, function (idx, triggers) {
      for (var i = 0, len = triggers.length; i < len; i++) {
845
846
        $el.trigger(triggers[i])
        assert.equal(i < len - 1, showingTooltip())
fat's avatar
fat committed
847
848
      }
    })
849
850
  })

851
852
853
854
  QUnit.test('should show on first trigger after hide', function (assert) {
    assert.expect(3)
    var $el = $('<a href="#" rel="tooltip" title="Test tooltip"/>')
      .appendTo('#qunit-fixture')
XhmikosR's avatar
XhmikosR committed
855
856
857
858
      .bootstrapTooltip({
        trigger: 'click hover focus',
        animation: false
      })
859
860
861
862

    var tooltip = $el.data('bs.tooltip')
    var $tooltip = $(tooltip.getTipElement())

XhmikosR's avatar
XhmikosR committed
863
864
865
    function showingTooltip() {
      return $tooltip.hasClass('show') || tooltip._hoverState === 'show'
    }
866
867
868
869
870
871
872
873
874
875
876

    $el.trigger('click')
    assert.ok(showingTooltip(), 'tooltip is faded in')

    $el.bootstrapTooltip('hide')
    assert.ok(!showingTooltip(), 'tooltip was faded out')

    $el.trigger('click')
    assert.ok(showingTooltip(), 'tooltip is faded in again')
  })

877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
  QUnit.test('should hide tooltip when their containing modal is closed', function (assert) {
    assert.expect(1)
    var done = assert.async()
    var templateHTML = '<div id="modal-test" class="modal">' +
                          '<div class="modal-dialog" role="document">' +
                            '<div class="modal-content">' +
                              '<div class="modal-body">' +
                                '<a id="tooltipTest" href="#" data-toggle="tooltip" title="Some tooltip text!">Tooltip</a>' +
                              '</div>' +
                            '</div>' +
                          '</div>' +
                        '</div>'

    $(templateHTML).appendTo('#qunit-fixture')
    $('#tooltipTest')
XhmikosR's avatar
XhmikosR committed
892
893
894
      .bootstrapTooltip({
        trigger: 'manuel'
      })
895
896
897
898
899
900
901
902
903
904
905
906
907
908
      .on('shown.bs.tooltip', function () {
        $('#modal-test').modal('hide')
      })
      .on('hide.bs.tooltip', function () {
        assert.ok(true, 'tooltip hide')
        done()
      })

    $('#modal-test')
      .on('shown.bs.modal', function () {
        $('#tooltipTest').bootstrapTooltip('show')
      })
      .modal('show')
  })
909

910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
  QUnit.test('should allow to close modal if the tooltip element is detached', function (assert) {
    assert.expect(1)
    var done = assert.async()
    var templateHTML = [
      '<div id="modal-test" class="modal">',
      '  <div class="modal-dialog" role="document">',
      '    <div class="modal-content">',
      '      <div class="modal-body">',
      '        <a id="tooltipTest" href="#" data-toggle="tooltip" title="Some tooltip text!">Tooltip</a>',
      '      </div>',
      '    </div>',
      '  </div>',
      '</div>'
    ].join('')

    $(templateHTML).appendTo('#qunit-fixture')
    var $tooltip = $('#tooltipTest')
    var $modal = $('#modal-test')

    $tooltip.on('shown.bs.tooltip', function () {
      $tooltip.detach()
      $tooltip.bootstrapTooltip('dispose')
      $modal.modal('hide')
    })

    $modal.on('shown.bs.modal', function () {
      $tooltip.bootstrapTooltip({
        trigger: 'manuel'
      })
        .bootstrapTooltip('show')
    })
      .on('hidden.bs.modal', function () {
        assert.ok(true, 'modal hidden')
        done()
      })
      .modal('show')
  })

948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
  QUnit.test('should reset tip classes when hidden event triggered', function (assert) {
    assert.expect(2)
    var done = assert.async()
    var $el = $('<a href="#" rel="tooltip" title="Test tooltip"/>')
      .appendTo('#qunit-fixture')
      .bootstrapTooltip('show')
      .on('hidden.bs.tooltip', function () {
        var tooltip = $el.data('bs.tooltip')
        var $tooltip = $(tooltip.getTipElement())
        assert.ok($tooltip.hasClass('tooltip'))
        assert.ok($tooltip.hasClass('fade'))
        done()
      })

    $el.bootstrapTooltip('hide')
  })
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978

  QUnit.test('should convert number in title to string', function (assert) {
    assert.expect(1)
    var done = assert.async()
    var $el = $('<a href="#" rel="tooltip" title="7"/>')
      .appendTo('#qunit-fixture')
      .on('shown.bs.tooltip', function () {
        var tooltip = $el.data('bs.tooltip')
        var $tooltip = $(tooltip.getTipElement())
        assert.strictEqual($tooltip.children().text(), '7')
        done()
      })

    $el.bootstrapTooltip('show')
  })
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999

  QUnit.test('tooltip should be shown right away after the call of disable/enable', function (assert) {
    assert.expect(2)
    var done = assert.async()

    var $trigger = $('<a href="#" rel="tooltip" data-trigger="click" title="Another tooltip"/>')
      .appendTo('#qunit-fixture')
      .bootstrapTooltip()
      .on('shown.bs.tooltip', function () {
        assert.strictEqual($('.tooltip').hasClass('show'), true)
        done()
      })

    $trigger.bootstrapTooltip('disable')
    $trigger.trigger($.Event('click'))
    setTimeout(function () {
      assert.strictEqual($('.tooltip').length === 0, true)
      $trigger.bootstrapTooltip('enable')
      $trigger.trigger($.Event('click'))
    }, 200)
  })
Johann-S's avatar
Johann-S committed
1000

For faster browsing, not all history is shown. View entire blame