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
    $tooltip
      .one('shown.bs.tooltip', function () {
121
        assert.ok($('.tooltip').is('.fade.bs-tooltip-bottom.show'), 'has correct classes applied')
122
123
124
        $tooltip.bootstrapTooltip('hide')
      })
      .one('hidden.bs.tooltip', function () {
125
        assert.strictEqual(Data.getData($tooltip[0], 'bs.tooltip').tip.parentNode, null, 'tooltip removed')
126
127
128
        done()
      })
      .bootstrapTooltip('show')
XhmikosR's avatar
XhmikosR committed
129
130
  })

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

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

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

162
163
164
165
166
167
168
169
    $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')
170
171
172
173
  })

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

183
184
185
186
187
188
189
190
    $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')
191
192
  })

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

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

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

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

226
227
228
229
230
231
  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
232
    } catch (err) {
233
234
235
236
237
      assert.strictEqual(err.message, 'Please use show on visible elements')
      done()
    }
  })

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

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

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

fat's avatar
fat committed
256
    $('<div title="tooltip title"></div>')
257
      .appendTo('#qunit-fixture')
fat's avatar
fat committed
258
259
260
261
262
263
264
265
266
267
268
269
      .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
270
271
      .on('show.bs.tooltip', function (e) {
        e.preventDefault()
fat's avatar
fat committed
272
        assert.ok(true, 'show event fired')
273
        done()
XhmikosR's avatar
XhmikosR committed
274
275
      })
      .on('shown.bs.tooltip', function () {
fat's avatar
fat committed
276
        assert.ok(false, 'shown event fired')
XhmikosR's avatar
XhmikosR committed
277
      })
278
      .bootstrapTooltip('show')
XhmikosR's avatar
XhmikosR committed
279
280
  })

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

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

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

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

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

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

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

339
    assert.ok(Data.getData($tooltip[0], 'bs.tooltip'), 'tooltip has data')
Heinrich Fenkart's avatar
Heinrich Fenkart committed
340
341

    $tooltip.bootstrapTooltip('show')
fat's avatar
fat committed
342
    $tooltip.bootstrapTooltip('dispose')
Heinrich Fenkart's avatar
Heinrich Fenkart committed
343

Starsam80's avatar
Starsam80 committed
344
    assert.ok(!$tooltip.hasClass('show'), 'tooltip is hidden')
345
    assert.ok(!Data.getData($tooltip[0], 'bs.tooltip'), 'tooltip does not have data')
XhmikosR's avatar
XhmikosR committed
346
347
  })

348
349
350
351
352
353
354
355
  // 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
356

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

360
361
362
  //   $div.find('a').trigger('click')
  //   assert.strictEqual($div.data('bs.tooltip').tip.parentNode, null, 'tooltip removed')
  // })
XhmikosR's avatar
XhmikosR committed
363

fat's avatar
fat committed
364
365
366
  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
367
      .appendTo('#qunit-fixture')
XhmikosR's avatar
XhmikosR committed
368
369
370
      .bootstrapTooltip({
        trigger: 'manual'
      })
371
      .bootstrapTooltip('toggle')
Heinrich Fenkart's avatar
Heinrich Fenkart committed
372

Starsam80's avatar
Starsam80 committed
373
    assert.ok($('.tooltip').is('.fade.show'), 'tooltip is faded active')
XhmikosR's avatar
XhmikosR committed
374
375
  })

fat's avatar
fat committed
376
377
  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
378
    $('<a href="#" rel="tooltip" title="tooltip on toggle">@ResentedHook</a>')
379
      .appendTo('#qunit-fixture')
XhmikosR's avatar
XhmikosR committed
380
381
382
      .bootstrapTooltip({
        trigger: 'manual'
      })
Heinrich Fenkart's avatar
Heinrich Fenkart committed
383
384
385
      .bootstrapTooltip('show')

    $('.tooltip').bootstrapTooltip('toggle')
Starsam80's avatar
Starsam80 committed
386
    assert.ok($('.tooltip').not('.fade.show'), 'tooltip was faded out')
387
388
  })

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

398
399
400
401
402
403
404
405
406
407
408
    $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
409
410
  })

411
412
413
414
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
  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
457
  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
458
459
    assert.expect(2)
    var done = assert.async()
XhmikosR's avatar
XhmikosR committed
460
461
462
463
    var styles = '<style>' +
      '.bs-tooltip-right { white-space: nowrap; }' +
      '.bs-tooltip-right .tooltip-inner { max-width: none; }' +
      '</style>'
464
    var $styles = $(styles).appendTo('head')
Heinrich Fenkart's avatar
Heinrich Fenkart committed
465

fat's avatar
fat committed
466
    var $container = $('<div/>').appendTo('#qunit-fixture')
Johann-S's avatar
Johann-S committed
467
    $('<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
468
469
      .appendTo($container)
      .bootstrapTooltip({
Johann-S's avatar
Johann-S committed
470
471
472
473
        placement: 'right',
        trigger: 'manual'
      })
      .on('inserted.bs.tooltip', function () {
474
        var $tooltip = $(Data.getData(this, 'bs.tooltip').tip)
Johann-S's avatar
Johann-S committed
475
        assert.ok($tooltip.hasClass('bs-tooltip-right'))
XhmikosR's avatar
XhmikosR committed
476
        assert.ok(typeof $tooltip.attr('style') === 'undefined')
Johann-S's avatar
Johann-S committed
477
478
        $styles.remove()
        done()
Heinrich Fenkart's avatar
Heinrich Fenkart committed
479
480
      })
      .bootstrapTooltip('show')
XhmikosR's avatar
XhmikosR committed
481
482
  })

fat's avatar
fat committed
483
484
  QUnit.test('should use title attribute for tooltip text', function (assert) {
    assert.expect(2)
485
    var done = assert.async()
fat's avatar
fat committed
486
    var $tooltip = $('<a href="#" rel="tooltip" title="Simple tooltip"/>')
XhmikosR's avatar
XhmikosR committed
487
      .appendTo('#qunit-fixture')
Heinrich Fenkart's avatar
Heinrich Fenkart committed
488
489
      .bootstrapTooltip()

490
491
492
493
494
495
496
497
498
499
    $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
500
501
  })

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

511
512
513
514
515
516
517
518
519
520
    $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
521
522
  })

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

532
533
534
535
536
537
538
539
540
541
    $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
542
543
  })

544
  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
545
    assert.expect(1)
Heinrich Fenkart's avatar
Heinrich Fenkart committed
546
    var passed = true
fat's avatar
fat committed
547
    var $tooltip = $('<a href="#" rel="tooltip" title="Another tooltip"/>')
Heinrich Fenkart's avatar
Heinrich Fenkart committed
548
      .appendTo('#qunit-fixture')
Chris Rebert's avatar
Chris Rebert committed
549
      .one('show.bs.tooltip', function () {
Heinrich Fenkart's avatar
Heinrich Fenkart committed
550
        $(this).remove()
Chris Rebert's avatar
Chris Rebert committed
551
      })
XhmikosR's avatar
XhmikosR committed
552
553
554
      .bootstrapTooltip({
        placement: 'top'
      })
Chris Rebert's avatar
Chris Rebert committed
555
556

    try {
Heinrich Fenkart's avatar
Heinrich Fenkart committed
557
558
      $tooltip.bootstrapTooltip('show')
    } catch (err) {
Chris Rebert's avatar
Chris Rebert committed
559
560
561
      passed = false
    }

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

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

fat's avatar
fat committed
569
    var $tooltip = $('<a href="#" rel="tooltip" title="Another tooltip"/>')
fat's avatar
fat committed
570
      .appendTo('#qunit-fixture')
XhmikosR's avatar
XhmikosR committed
571
572
573
      .bootstrapTooltip({
        delay: 150
      })
fat's avatar
fat committed
574
575

    setTimeout(function () {
Starsam80's avatar
Starsam80 committed
576
      assert.ok(!$('.tooltip').is('.fade.show'), '100ms: tooltip is not faded active')
577
    }, 100)
fat's avatar
fat committed
578
579

    setTimeout(function () {
Starsam80's avatar
Starsam80 committed
580
      assert.ok($('.tooltip').is('.fade.show'), '200ms: tooltip is faded active')
581
      done()
582
    }, 200)
fat's avatar
fat committed
583

584
    EventHandler.trigger($tooltip[0], 'mouseover')
fat's avatar
fat committed
585
586
  })

fat's avatar
fat committed
587
588
  QUnit.test('should not show tooltip if leave event occurs before delay expires', function (assert) {
    assert.expect(2)
589
    var done = assert.async()
fat's avatar
fat committed
590

fat's avatar
fat committed
591
    var $tooltip = $('<a href="#" rel="tooltip" title="Another tooltip"/>')
fat's avatar
fat committed
592
      .appendTo('#qunit-fixture')
XhmikosR's avatar
XhmikosR committed
593
594
595
      .bootstrapTooltip({
        delay: 150
      })
fat's avatar
fat committed
596
597

    setTimeout(function () {
Starsam80's avatar
Starsam80 committed
598
      assert.ok(!$('.tooltip').is('.fade.show'), '100ms: tooltip not faded active')
599
      EventHandler.trigger($tooltip[0], 'mouseout')
600
    }, 100)
fat's avatar
fat committed
601
602

    setTimeout(function () {
Starsam80's avatar
Starsam80 committed
603
      assert.ok(!$('.tooltip').is('.fade.show'), '200ms: tooltip not faded active')
604
      done()
605
    }, 200)
fat's avatar
fat committed
606

607
    EventHandler.trigger($tooltip[0], 'mouseover')
fat's avatar
fat committed
608
609
  })

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

fat's avatar
fat committed
614
    var $tooltip = $('<a href="#" rel="tooltip" title="Another tooltip"/>')
fat's avatar
fat committed
615
      .appendTo('#qunit-fixture')
XhmikosR's avatar
XhmikosR committed
616
617
618
619
620
621
      .bootstrapTooltip({
        delay: {
          show: 0,
          hide: 150
        }
      })
fat's avatar
fat committed
622
623

    setTimeout(function () {
Starsam80's avatar
Starsam80 committed
624
      assert.ok($('.tooltip').is('.fade.show'), '1ms: tooltip faded active')
625
      EventHandler.trigger($tooltip[0], 'mouseout')
fat's avatar
fat committed
626
627

      setTimeout(function () {
Starsam80's avatar
Starsam80 committed
628
        assert.ok($('.tooltip').is('.fade.show'), '100ms: tooltip still faded active')
629
        EventHandler.trigger($tooltip[0], 'mouseover')
630
      }, 100)
fat's avatar
fat committed
631
632

      setTimeout(function () {
Starsam80's avatar
Starsam80 committed
633
        assert.ok($('.tooltip').is('.fade.show'), '200ms: tooltip still faded active')
634
        done()
635
      }, 200)
fat's avatar
fat committed
636
637
    }, 0)

638
    EventHandler.trigger($tooltip[0], 'mouseover')
fat's avatar
fat committed
639
640
  })

fat's avatar
fat committed
641
642
  QUnit.test('should not show tooltip if leave event occurs before delay expires', function (assert) {
    assert.expect(2)
643
    var done = assert.async()
fat's avatar
fat committed
644

fat's avatar
fat committed
645
    var $tooltip = $('<a href="#" rel="tooltip" title="Another tooltip"/>')
fat's avatar
fat committed
646
      .appendTo('#qunit-fixture')
XhmikosR's avatar
XhmikosR committed
647
648
649
      .bootstrapTooltip({
        delay: 150
      })
fat's avatar
fat committed
650
651

    setTimeout(function () {
Starsam80's avatar
Starsam80 committed
652
      assert.ok(!$('.tooltip').is('.fade.show'), '100ms: tooltip not faded active')
653
      EventHandler.trigger($tooltip[0], 'mouseout')
654
    }, 100)
fat's avatar
fat committed
655
656

    setTimeout(function () {
Starsam80's avatar
Starsam80 committed
657
      assert.ok(!$('.tooltip').is('.fade.show'), '200ms: tooltip not faded active')
658
      done()
659
    }, 200)
fat's avatar
fat committed
660

661
    EventHandler.trigger($tooltip[0], 'mouseover')
fat's avatar
fat committed
662
663
  })

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

fat's avatar
fat committed
668
    var $tooltip = $('<a href="#" rel="tooltip" title="Another tooltip"/>')
fat's avatar
fat committed
669
      .appendTo('#qunit-fixture')
XhmikosR's avatar
XhmikosR committed
670
671
672
673
674
675
      .bootstrapTooltip({
        delay: {
          show: 150,
          hide: 0
        }
      })
fat's avatar
fat committed
676
677

    setTimeout(function () {
Starsam80's avatar
Starsam80 committed
678
      assert.ok(!$('.tooltip').is('.fade.show'), '100ms: tooltip not faded active')
679
      EventHandler.trigger($tooltip[0], 'mouseout')
680
    }, 100)
fat's avatar
fat committed
681
682

    setTimeout(function () {
Starsam80's avatar
Starsam80 committed
683
      assert.ok(!$('.tooltip').is('.fade.show'), '250ms: tooltip not faded active')
684
      done()
685
    }, 250)
fat's avatar
fat committed
686

687
    EventHandler.trigger($tooltip[0], 'mouseover')
fat's avatar
fat committed
688
689
  })

fat's avatar
fat committed
690
691
  QUnit.test('should wait 200ms before hiding the tooltip', function (assert) {
    assert.expect(3)
692
    var done = assert.async()
fat's avatar
fat committed
693

fat's avatar
fat committed
694
    var $tooltip = $('<a href="#" rel="tooltip" title="Another tooltip"/>')
fat's avatar
fat committed
695
      .appendTo('#qunit-fixture')
XhmikosR's avatar
XhmikosR committed
696
697
698
699
700
701
      .bootstrapTooltip({
        delay: {
          show: 0,
          hide: 150
        }
      })
fat's avatar
fat committed
702
703

    setTimeout(function () {
704
      assert.ok($(Data.getData($tooltip[0], 'bs.tooltip').tip).is('.fade.show'), '1ms: tooltip faded active')
fat's avatar
fat committed
705

706
      EventHandler.trigger($tooltip[0], 'mouseout')
fat's avatar
fat committed
707
708

      setTimeout(function () {
709
        assert.ok($(Data.getData($tooltip[0], 'bs.tooltip').tip).is('.fade.show'), '100ms: tooltip still faded active')
710
      }, 100)
fat's avatar
fat committed
711
712

      setTimeout(function () {
713
        assert.ok(!$(Data.getData($tooltip[0], 'bs.tooltip').tip).is('.show'), '200ms: tooltip removed')
fat's avatar
fat committed
714
        done()
715
      }, 200)
fat's avatar
fat committed
716
717
    }, 0)

718
    EventHandler.trigger($tooltip[0], 'mouseover')
fat's avatar
fat committed
719
720
  })

fat's avatar
fat committed
721
722
  QUnit.test('should not reload the tooltip on subsequent mouseenter events', function (assert) {
    assert.expect(1)
723
    var titleHtml = function () {
724
      var uid = Util.getUID('tooltip')
725
726
727
      return '<p id="tt-content">' + uid + '</p><p>' + uid + '</p><p>' + uid + '</p>'
    }

fat's avatar
fat committed
728
    var $tooltip = $('<span id="tt-outer" rel="tooltip" data-trigger="hover" data-placement="top">some text</span>')
729
730
731
732
733
734
      .appendTo('#qunit-fixture')

    $tooltip.bootstrapTooltip({
      html: true,
      animation: false,
      trigger: 'hover',
XhmikosR's avatar
XhmikosR committed
735
736
737
738
      delay: {
        show: 0,
        hide: 500
      },
739
740
741
742
      container: $tooltip,
      title: titleHtml
    })

743
    EventHandler.trigger($('#tt-outer')[0], 'mouseover')
744
745
746

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

747
    EventHandler.trigger($('#tt-outer')[0], 'mouseover')
fat's avatar
fat committed
748
    assert.strictEqual(currentUid, $('#tt-content').text())
749
750
  })

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

754
    var titleHtml = function () {
755
      var uid = Util.getUID('tooltip')
756
757
758
      return '<p id="tt-content">' + uid + '</p><p>' + uid + '</p><p>' + uid + '</p>'
    }

fat's avatar
fat committed
759
    var $tooltip = $('<span id="tt-outer" rel="tooltip" data-trigger="hover" data-placement="top">some text</span>')
760
761
762
763
764
765
      .appendTo('#qunit-fixture')

    $tooltip.bootstrapTooltip({
      html: true,
      animation: false,
      trigger: 'hover',
XhmikosR's avatar
XhmikosR committed
766
767
768
769
      delay: {
        show: 0,
        hide: 500
      },
770
771
772
      title: titleHtml
    })

773
    var obj = Data.getData($tooltip[0], 'bs.tooltip')
774

775
    EventHandler.trigger($('#tt-outer')[0], 'mouseover')
776
777
778

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

779
    EventHandler.trigger($('#tt-outer')[0], 'mouseout')
fat's avatar
fat committed
780
    assert.strictEqual(currentUid, $('#tt-content').text())
fat's avatar
fat committed
781

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

784
    EventHandler.trigger($('#tt-outer')[0], 'mouseover')
Starsam80's avatar
Starsam80 committed
785
    assert.ok(obj._hoverState === 'show', 'the tooltip hoverState should be set to "show"')
786

fat's avatar
fat committed
787
    assert.strictEqual(currentUid, $('#tt-content').text())
788
789
  })

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

fat's avatar
fat committed
793
794
795
796
797
798
    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')
799
    assert.ok(Data.getData($tooltip[0], 'bs.tooltip') === null, 'should not initialize the tooltip')
fat's avatar
fat committed
800
801
802
803
804
805
  })

  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
806
807
808
809
      .bootstrapTooltip({
        trigger: 'click hover focus',
        animation: false
      })
810
811

    var tooltip = Data.getData($el[0], 'bs.tooltip')
812
    var $tooltip = $(tooltip.getTipElement())
fat's avatar
fat committed
813

XhmikosR's avatar
XhmikosR committed
814
815
816
    function showingTooltip() {
      return $tooltip.hasClass('show') || tooltip._hoverState === 'show'
    }
fat's avatar
fat committed
817
818

    var tests = [
819
      ['mouseover', 'mouseout'],
820

XhmikosR's avatar
XhmikosR committed
821
      ['focusin', 'focusout'],
fat's avatar
fat committed
822

XhmikosR's avatar
XhmikosR committed
823
      ['click', 'click'],
fat's avatar
fat committed
824

825
826
      ['mouseover', 'focusin', 'focusout', 'mouseout'],
      ['mouseover', 'focusin', 'mouseout', 'focusout'],
fat's avatar
fat committed
827

828
829
      ['focusin', 'mouseover', 'mouseout', 'focusout'],
      ['focusin', 'mouseover', 'focusout', 'mouseout'],
fat's avatar
fat committed
830

831
832
833
      ['click', 'focusin', 'mouseover', 'focusout', 'mouseout', 'click'],
      ['mouseover', 'click', 'focusin', 'focusout', 'mouseout', 'click'],
      ['mouseover', 'focusin', 'click', 'click', 'mouseout', 'focusout']
fat's avatar
fat committed
834
835
836
837
838
839
    ]

    assert.ok(!showingTooltip())

    $.each(tests, function (idx, triggers) {
      for (var i = 0, len = triggers.length; i < len; i++) {
840
        EventHandler.trigger($el[0], triggers[i])
841
        assert.equal(i < len - 1, showingTooltip())
fat's avatar
fat committed
842
843
      }
    })
844
845
  })

846
847
848
849
  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
850
851
852
853
      .bootstrapTooltip({
        trigger: 'click hover focus',
        animation: false
      })
854

855
    var tooltip = Data.getData($el[0], 'bs.tooltip')
856
857
    var $tooltip = $(tooltip.getTipElement())

XhmikosR's avatar
XhmikosR committed
858
859
860
    function showingTooltip() {
      return $tooltip.hasClass('show') || tooltip._hoverState === 'show'
    }
861

862
    EventHandler.trigger($el[0], 'click')
863
864
865
866
867
    assert.ok(showingTooltip(), 'tooltip is faded in')

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

868
    EventHandler.trigger($el[0], 'click')
869
870
871
    assert.ok(showingTooltip(), 'tooltip is faded in again')
  })

872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
  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
887
888
889
      .bootstrapTooltip({
        trigger: 'manuel'
      })
890
891
892
893
894
895
896
897
898
899
900
901
902
903
      .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')
  })
904

905
906
907
908
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
  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')
  })

943
944
945
946
947
948
949
  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 () {
950
        var tooltip = Data.getData($el[0], 'bs.tooltip')
951
952
953
954
955
956
957
958
        var $tooltip = $(tooltip.getTipElement())
        assert.ok($tooltip.hasClass('tooltip'))
        assert.ok($tooltip.hasClass('fade'))
        done()
      })

    $el.bootstrapTooltip('hide')
  })
959
960
961
962
963
964
965

  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 () {
966
        var tooltip = Data.getData($el[0], 'bs.tooltip')
967
968
969
970
971
972
973
        var $tooltip = $(tooltip.getTipElement())
        assert.strictEqual($tooltip.children().text(), '7')
        done()
      })

    $el.bootstrapTooltip('show')
  })
974
975
976
977
978
979
980
981
982
983
984
985
986
987

  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')
988
    EventHandler.trigger($trigger[0], 'click')
989
990
991
    setTimeout(function () {
      assert.strictEqual($('.tooltip').length === 0, true)
      $trigger.bootstrapTooltip('enable')
992
      EventHandler.trigger($trigger[0], 'click')
993
994
    }, 200)
  })
Johann-S's avatar
Johann-S committed
995
996
997
998
999
1000

  QUnit.test('should call Popper.js to update', function (assert) {
    assert.expect(2)

    var $tooltip = $('<a href="#" rel="tooltip" data-trigger="click" title="Another tooltip"/>')
      .appendTo('#qunit-fixture')
For faster browsing, not all history is shown. View entire blame