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

4
5
  var Tooltip = typeof window.bootstrap !== 'undefined' ? window.bootstrap.Tooltip : window.Tooltip

fat's avatar
fat committed
6
  QUnit.module('tooltip plugin')
XhmikosR's avatar
XhmikosR committed
7

fat's avatar
fat committed
8
9
10
  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
11
12
  })

fat's avatar
fat committed
13
14
  QUnit.module('tooltip', {
    beforeEach: function () {
15
16
17
      // 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
18
    afterEach: function () {
19
20
      $.fn.tooltip = $.fn.bootstrapTooltip
      delete $.fn.bootstrapTooltip
21
      $('.tooltip').remove()
22
      $('#qunit-fixture').html('')
23
24
25
    }
  })

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

31
32
33
34
35
36
  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
37
    } catch (err) {
38
39
40
41
      assert.strictEqual(err.message, 'No method named "noMethod"')
    }
  })

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

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

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

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

fat's avatar
fat committed
67
68
69
  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
70
      .bootstrapTooltip()
71
72
      .appendTo('#qunit-fixture')
      .bootstrapTooltip('show')
Heinrich Fenkart's avatar
Heinrich Fenkart committed
73

74
75
    var id = $('.tooltip').attr('id')

fat's avatar
fat committed
76
77
78
    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')
79
80
  })

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

88
89
90
91
92
93
94
95
96
97
    $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')
98
99
  })

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

XhmikosR's avatar
XhmikosR committed
106
    var id = $('.tooltip').attr('id')
107

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

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

121
122
    $tooltip
      .one('shown.bs.tooltip', function () {
123
        assert.ok($('.tooltip').is('.fade.bs-tooltip-bottom.show'), 'has correct classes applied')
124
125
126
        $tooltip.bootstrapTooltip('hide')
      })
      .one('hidden.bs.tooltip', function () {
127
        assert.strictEqual(Tooltip._getInstance($tooltip[0]).tip.parentNode, null, 'tooltip removed')
128
129
130
        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
    $tooltip
      .one('shown.bs.tooltip', function () {
        assert.notEqual($('.tooltip b').length, 0, 'b tag was inserted')
        $tooltip.bootstrapTooltip('hide')
      })
      .one('hidden.bs.tooltip', function () {
148
        assert.strictEqual(Tooltip._getInstance($tooltip[0]).tip.parentNode, null, 'tooltip removed')
149
150
151
        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
    $tooltip
      .one('shown.bs.tooltip', function () {
        assert.ok($('.tooltip').hasClass('some-class'), 'custom class is present')
        $tooltip.bootstrapTooltip('hide')
      })
      .one('hidden.bs.tooltip', function () {
210
        assert.strictEqual(Tooltip._getInstance($tooltip[0]).tip.parentNode, null, 'tooltip removed')
211
212
213
        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
  QUnit.test('should destroy tooltip', function (assert) {
336
    assert.expect(3)
fat's avatar
fat committed
337
    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

341
    assert.ok(Tooltip._getInstance($tooltip[0]), 'tooltip has data')
Heinrich Fenkart's avatar
Heinrich Fenkart committed
342
343

    $tooltip.bootstrapTooltip('show')
fat's avatar
fat committed
344
    $tooltip.bootstrapTooltip('dispose')
Heinrich Fenkart's avatar
Heinrich Fenkart committed
345

Starsam80's avatar
Starsam80 committed
346
    assert.ok(!$tooltip.hasClass('show'), 'tooltip is hidden')
347
    assert.ok(!Tooltip._getInstance($tooltip[0]), 'tooltip does not have data')
XhmikosR's avatar
XhmikosR committed
348
349
  })

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

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

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

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

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

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

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

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

400
401
402
403
404
405
406
407
408
409
410
    $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
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
457
458
  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
459
  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
460
461
    assert.expect(2)
    var done = assert.async()
XhmikosR's avatar
XhmikosR committed
462
463
464
465
    var styles = '<style>' +
      '.bs-tooltip-right { white-space: nowrap; }' +
      '.bs-tooltip-right .tooltip-inner { max-width: none; }' +
      '</style>'
466
    var $styles = $(styles).appendTo('head')
Heinrich Fenkart's avatar
Heinrich Fenkart committed
467

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

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

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

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

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

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

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

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

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

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

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

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

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

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

586
    $tooltip[0].dispatchEvent(new Event('mouseover'))
fat's avatar
fat committed
587
588
  })

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

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

    setTimeout(function () {
Starsam80's avatar
Starsam80 committed
600
      assert.ok(!$('.tooltip').is('.fade.show'), '100ms: tooltip not faded active')
601
      $tooltip[0].dispatchEvent(new Event('mouseout'))
602
    }, 100)
fat's avatar
fat committed
603
604

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

609
    $tooltip[0].dispatchEvent(new Event('mouseover'))
fat's avatar
fat committed
610
611
  })

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

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

    setTimeout(function () {
Starsam80's avatar
Starsam80 committed
626
      assert.ok($('.tooltip').is('.fade.show'), '1ms: tooltip faded active')
627
      $tooltip[0].dispatchEvent(new Event('mouseout'))
fat's avatar
fat committed
628
629

      setTimeout(function () {
Starsam80's avatar
Starsam80 committed
630
        assert.ok($('.tooltip').is('.fade.show'), '100ms: tooltip still faded active')
631
        $tooltip[0].dispatchEvent(new Event('mouseover'))
632
      }, 100)
fat's avatar
fat committed
633
634

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

640
    $tooltip[0].dispatchEvent(new Event('mouseover'))
fat's avatar
fat committed
641
642
  })

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

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

    setTimeout(function () {
Starsam80's avatar
Starsam80 committed
654
      assert.ok(!$('.tooltip').is('.fade.show'), '100ms: tooltip not faded active')
655
      $tooltip[0].dispatchEvent(new Event('mouseout'))
656
    }, 100)
fat's avatar
fat committed
657
658

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

663
    $tooltip[0].dispatchEvent(new Event('mouseover'))
fat's avatar
fat committed
664
665
  })

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

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

    setTimeout(function () {
Starsam80's avatar
Starsam80 committed
680
      assert.ok(!$('.tooltip').is('.fade.show'), '100ms: tooltip not faded active')
681
      $tooltip[0].dispatchEvent(new Event('mouseout'))
682
    }, 100)
fat's avatar
fat committed
683
684

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

689
    $tooltip[0].dispatchEvent(new Event('mouseover'))
fat's avatar
fat committed
690
691
  })

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

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

    setTimeout(function () {
706
      assert.ok($(Tooltip._getInstance($tooltip[0]).tip).is('.fade.show'), '1ms: tooltip faded active')
fat's avatar
fat committed
707

708
      $tooltip[0].dispatchEvent(new Event('mouseout'))
fat's avatar
fat committed
709
710

      setTimeout(function () {
711
        assert.ok($(Tooltip._getInstance($tooltip[0]).tip).is('.fade.show'), '100ms: tooltip still faded active')
712
      }, 100)
fat's avatar
fat committed
713
714

      setTimeout(function () {
715
        assert.ok(!$(Tooltip._getInstance($tooltip[0]).tip).is('.show'), '200ms: tooltip removed')
fat's avatar
fat committed
716
        done()
717
      }, 200)
fat's avatar
fat committed
718
719
    }, 0)

720
    $tooltip[0].dispatchEvent(new Event('mouseover'))
fat's avatar
fat committed
721
722
  })

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

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

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

745
    $('#tt-outer')[0].dispatchEvent(new Event('mouseover'))
746
747
748

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

749
    $('#tt-outer')[0].dispatchEvent(new Event('mouseover'))
fat's avatar
fat committed
750
    assert.strictEqual(currentUid, $('#tt-content').text())
751
752
  })

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

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

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

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

775
    var obj = Tooltip._getInstance($tooltip[0])
776

777
    $('#tt-outer')[0].dispatchEvent(new Event('mouseover'))
778
779
780

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

781
    $('#tt-outer')[0].dispatchEvent(new Event('mouseout'))
fat's avatar
fat committed
782
    assert.strictEqual(currentUid, $('#tt-content').text())
fat's avatar
fat committed
783

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

786
    $('#tt-outer')[0].dispatchEvent(new Event('mouseover'))
Starsam80's avatar
Starsam80 committed
787
    assert.ok(obj._hoverState === 'show', 'the tooltip hoverState should be set to "show"')
788

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

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

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

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

813
    var tooltip = Tooltip._getInstance($el[0])
814
    var $tooltip = $(tooltip.getTipElement())
fat's avatar
fat committed
815

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

    var tests = [
821
      ['mouseover', 'mouseout'],
822

XhmikosR's avatar
XhmikosR committed
823
      ['focusin', 'focusout'],
fat's avatar
fat committed
824

XhmikosR's avatar
XhmikosR committed
825
      ['click', 'click'],
fat's avatar
fat committed
826

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

830
831
      ['focusin', 'mouseover', 'mouseout', 'focusout'],
      ['focusin', 'mouseover', 'focusout', 'mouseout'],
fat's avatar
fat committed
832

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

    assert.ok(!showingTooltip())

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

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

857
    var tooltip = Tooltip._getInstance($el[0])
858
859
    var $tooltip = $(tooltip.getTipElement())

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

864
    $el[0].click()
865
866
867
868
869
    assert.ok(showingTooltip(), 'tooltip is faded in')

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

870
    $el[0].click()
871
872
873
    assert.ok(showingTooltip(), 'tooltip is faded in again')
  })

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

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

    $el.bootstrapTooltip('hide')
  })
961
962
963
964
965
966
967

  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 () {
968
        var tooltip = Tooltip._getInstance($el[0])
969
970
971
972
973
974
975
        var $tooltip = $(tooltip.getTipElement())
        assert.strictEqual($tooltip.children().text(), '7')
        done()
      })

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

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

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

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