diff --git a/js/tests/unit/tooltip.js b/js/tests/unit/tooltip.js index 351dd61cb5..01c90a81cf 100644 --- a/js/tests/unit/tooltip.js +++ b/js/tests/unit/tooltip.js @@ -928,6 +928,36 @@ $(function () { $tooltip.trigger('mouseenter') }) + test('should hide tip after hide delay even if moused left before end of fade in', function () { + stop() + + var $tooltip = $('') + .appendTo('#qunit-fixture') + .bootstrapTooltip({ delay: { show: 10, hide: 10 }}) + + setTimeout(function () { + ok(!$tooltip.data('bs.tooltip').$tip, '1ms: tooltip exists') + + setTimeout(function () { + ok($tooltip.data('bs.tooltip').$tip.is('.fade.in'), '10ms: tooltip faded in') + }, 10) + + setTimeout(function () { + ok($tooltip.data('bs.tooltip').$tip.is('.fade.in'), '15ms: tooltip faded in') + + $tooltip.trigger('mouseout') + }, 15) + + setTimeout(function () { + ok(!$tooltip.data('bs.tooltip').$tip.is('.fade.in'), '30ms: tooltip faded out') + + start() + }, 30) + }, 0) + + $tooltip.trigger('mouseenter') + }) + test('should correctly position tooltips on SVG elements', function () { if (!window.SVGElement) { // Skip IE8 since it doesn't support SVG diff --git a/js/tooltip.js b/js/tooltip.js index 08d22971fd..6af0e7d728 100644 --- a/js/tooltip.js +++ b/js/tooltip.js @@ -207,8 +207,11 @@ this.applyPlacement(calculatedOffset, placement) var complete = function () { + var prevHoverState = that.hoverState that.$element.trigger('shown.bs.' + that.type) that.hoverState = null + + if (prevHoverState == 'out') that.leave(that) } $.support.transition && this.$tip.hasClass('fade') ?