]>
git.ipfire.org Git - ipfire.org.git/blob - static/scss/bootstrap-4.0.0-alpha.6/js/tests/unit/popover.js
4 QUnit
.module('popover plugin')
6 QUnit
.test('should be defined on jquery object', function (assert
) {
8 assert
.ok($(document
.body
).popover
, 'popover method is defined')
11 QUnit
.module('popover', {
12 beforeEach: function () {
13 // Run all tests in noConflict mode -- it's the only way to ensure that the plugin works in noConflict mode
14 $.fn
.bootstrapPopover
= $.fn
.popover
.noConflict()
16 afterEach: function () {
17 $.fn
.popover
= $.fn
.bootstrapPopover
18 delete $.fn
.bootstrapPopover
19 $('.popover').remove()
23 QUnit
.test('should provide no conflict', function (assert
) {
25 assert
.strictEqual($.fn
.popover
, undefined, 'popover was set back to undefined (org value)')
28 QUnit
.test('should throw explicit error on undefined method', function (assert
) {
31 $el
.bootstrapPopover()
33 $el
.bootstrapPopover('noMethod')
36 assert
.strictEqual(err
.message
, 'No method named "noMethod"')
40 QUnit
.test('should return jquery collection containing the element', function (assert
) {
43 var $popover
= $el
.bootstrapPopover()
44 assert
.ok($popover
instanceof $, 'returns jquery collection')
45 assert
.strictEqual($popover
[0], $el
[0], 'collection contains element')
48 QUnit
.test('should render popover element', function (assert
) {
50 var $popover
= $('<a href="#" title="mdo" data-content="https://twitter.com/mdo">@mdo</a>')
51 .appendTo('#qunit-fixture')
52 .bootstrapPopover('show')
54 assert
.notEqual($('.popover').length
, 0, 'popover was inserted')
55 $popover
.bootstrapPopover('hide')
56 assert
.strictEqual($('.popover').length
, 0, 'popover removed')
59 QUnit
.test('should store popover instance in popover data object', function (assert
) {
61 var $popover
= $('<a href="#" title="mdo" data-content="https://twitter.com/mdo">@mdo</a>').bootstrapPopover()
63 assert
.ok($popover
.data('bs.popover'), 'popover instance exists')
66 QUnit
.test('should store popover trigger in popover instance data object', function (assert
) {
68 var $popover
= $('<a href="#" title="ResentedHook">@ResentedHook</a>')
69 .appendTo('#qunit-fixture')
72 $popover
.bootstrapPopover('show')
74 assert
.ok($('.popover').data('bs.popover'), 'popover trigger stored in instance data')
77 QUnit
.test('should get title and content from options', function (assert
) {
79 var $popover
= $('<a href="#">@fat</a>')
80 .appendTo('#qunit-fixture')
85 content: function () {
86 return 'loves writing tests (╯°□°)╯︵ ┻━┻'
90 $popover
.bootstrapPopover('show')
92 assert
.notEqual($('.popover').length
, 0, 'popover was inserted')
93 assert
.strictEqual($('.popover .popover-title').text(), '@fat', 'title correctly inserted')
94 assert
.strictEqual($('.popover .popover-content').text(), 'loves writing tests (╯°□°)╯︵ ┻━┻', 'content correctly inserted')
96 $popover
.bootstrapPopover('hide')
98 assert
.strictEqual($('.popover').length
, 0, 'popover was removed')
101 QUnit
.test('should allow DOMElement title and content (html: true)', function (assert
) {
103 var title
= document
.createTextNode('@glebm <3 writing tests')
104 var content
= $('<i>¯\\_(ツ)_/¯</i>').get(0)
105 var $popover
= $('<a href="#" rel="tooltip"/>')
106 .appendTo('#qunit-fixture')
107 .bootstrapPopover({ html
: true, title
: title
, content
: content
})
109 $popover
.bootstrapPopover('show')
111 assert
.notEqual($('.popover').length
, 0, 'popover inserted')
112 assert
.strictEqual($('.popover .popover-title').text(), '@glebm <3 writing tests', 'title inserted')
113 assert
.ok($.contains($('.popover').get(0), title
), 'title node moved, not copied')
114 // toLowerCase because IE8 will return <I>...</I>
115 assert
.strictEqual($('.popover .popover-content').html().toLowerCase(), '<i>¯\\_(ツ)_/¯</i>', 'content inserted')
116 assert
.ok($.contains($('.popover').get(0), content
), 'content node moved, not copied')
119 QUnit
.test('should allow DOMElement title and content (html: false)', function (assert
) {
121 var title
= document
.createTextNode('@glebm <3 writing tests')
122 var content
= $('<i>¯\\_(ツ)_/¯</i>').get(0)
123 var $popover
= $('<a href="#" rel="tooltip"/>')
124 .appendTo('#qunit-fixture')
125 .bootstrapPopover({ title
: title
, content
: content
})
127 $popover
.bootstrapPopover('show')
129 assert
.notEqual($('.popover').length
, 0, 'popover inserted')
130 assert
.strictEqual($('.popover .popover-title').text(), '@glebm <3 writing tests', 'title inserted')
131 assert
.ok(!$.contains($('.popover').get(0), title
), 'title node copied, not moved')
132 assert
.strictEqual($('.popover .popover-content').html(), '¯\\_(ツ)_/¯', 'content inserted')
133 assert
.ok(!$.contains($('.popover').get(0), content
), 'content node copied, not moved')
137 QUnit
.test('should not duplicate HTML object', function (assert
) {
139 var $div
= $('<div/>').html('loves writing tests (╯°□°)╯︵ ┻━┻')
141 var $popover
= $('<a href="#">@fat</a>')
142 .appendTo('#qunit-fixture')
145 content: function () {
150 $popover
.bootstrapPopover('show')
151 assert
.notEqual($('.popover').length
, 0, 'popover was inserted')
152 assert
.equal($('.popover .popover-content').html(), $div
[0].outerHTML
, 'content correctly inserted')
154 $popover
.bootstrapPopover('hide')
155 assert
.strictEqual($('.popover').length
, 0, 'popover was removed')
157 $popover
.bootstrapPopover('show')
158 assert
.notEqual($('.popover').length
, 0, 'popover was inserted')
159 assert
.equal($('.popover .popover-content').html(), $div
[0].outerHTML
, 'content correctly inserted')
161 $popover
.bootstrapPopover('hide')
162 assert
.strictEqual($('.popover').length
, 0, 'popover was removed')
165 QUnit
.test('should get title and content from attributes', function (assert
) {
167 var $popover
= $('<a href="#" title="@mdo" data-content="loves data attributes (づ。◕‿‿◕。)づ ︵ ┻━┻" >@mdo</a>')
168 .appendTo('#qunit-fixture')
170 .bootstrapPopover('show')
172 assert
.notEqual($('.popover').length
, 0, 'popover was inserted')
173 assert
.strictEqual($('.popover .popover-title').text(), '@mdo', 'title correctly inserted')
174 assert
.strictEqual($('.popover .popover-content').text(), 'loves data attributes (づ。◕‿‿◕。)づ ︵ ┻━┻', 'content correctly inserted')
176 $popover
.bootstrapPopover('hide')
177 assert
.strictEqual($('.popover').length
, 0, 'popover was removed')
180 QUnit
.test('should get title and content from attributes ignoring options passed via js', function (assert
) {
182 var $popover
= $('<a href="#" title="@mdo" data-content="loves data attributes (づ。◕‿‿◕。)づ ︵ ┻━┻" >@mdo</a>')
183 .appendTo('#qunit-fixture')
185 title
: 'ignored title option',
186 content
: 'ignored content option'
188 .bootstrapPopover('show')
190 assert
.notEqual($('.popover').length
, 0, 'popover was inserted')
191 assert
.strictEqual($('.popover .popover-title').text(), '@mdo', 'title correctly inserted')
192 assert
.strictEqual($('.popover .popover-content').text(), 'loves data attributes (づ。◕‿‿◕。)づ ︵ ┻━┻', 'content correctly inserted')
194 $popover
.bootstrapPopover('hide')
195 assert
.strictEqual($('.popover').length
, 0, 'popover was removed')
198 QUnit
.test('should respect custom template', function (assert
) {
200 var $popover
= $('<a href="#">@fat</a>')
201 .appendTo('#qunit-fixture')
205 template
: '<div class="popover foobar"><div class="arrow"></div><div class="inner"><h3 class="title"/><div class="content"><p/></div></div></div>'
208 $popover
.bootstrapPopover('show')
210 assert
.notEqual($('.popover').length
, 0, 'popover was inserted')
211 assert
.ok($('.popover').hasClass('foobar'), 'custom class is present')
213 $popover
.bootstrapPopover('hide')
214 assert
.strictEqual($('.popover').length
, 0, 'popover was removed')
217 QUnit
.test('should destroy popover', function (assert
) {
219 var $popover
= $('<div/>')
223 .on('click.foo', $.noop
)
225 assert
.ok($popover
.data('bs.popover'), 'popover has data')
226 assert
.ok($._data($popover
[0], 'events').mouseover
&& $._data($popover
[0], 'events').mouseout
, 'popover has hover event')
227 assert
.strictEqual($._data($popover
[0], 'events').click
[0].namespace, 'foo', 'popover has extra click.foo event')
229 $popover
.bootstrapPopover('show')
230 $popover
.bootstrapPopover('dispose')
232 assert
.ok(!$popover
.hasClass('show'), 'popover is hidden')
233 assert
.ok(!$popover
.data('popover'), 'popover does not have data')
234 assert
.strictEqual($._data($popover
[0], 'events').click
[0].namespace, 'foo', 'popover still has click.foo')
235 assert
.ok(!$._data($popover
[0], 'events').mouseover
&& !$._data($popover
[0], 'events').mouseout
, 'popover does not have any events')
238 QUnit
.test('should render popover element using delegated selector', function (assert
) {
240 var $div
= $('<div><a href="#" title="mdo" data-content="http://twitter.com/mdo">@mdo</a></div>')
241 .appendTo('#qunit-fixture')
247 $div
.find('a').trigger('click')
248 assert
.notEqual($('.popover').length
, 0, 'popover was inserted')
250 $div
.find('a').trigger('click')
251 assert
.strictEqual($('.popover').length
, 0, 'popover was removed')
254 QUnit
.test('should detach popover content rather than removing it so that event handlers are left intact', function (assert
) {
256 var $content
= $('<div class="content-with-handler"><a class="btn btn-warning">Button with event handler</a></div>').appendTo('#qunit-fixture')
258 var handlerCalled
= false
259 $('.content-with-handler .btn').on('click', function () {
263 var $div
= $('<div><a href="#">Show popover</a></div>')
264 .appendTo('#qunit-fixture')
269 content: function () {
274 var done
= assert
.async()
276 .one('shown.bs.popover', function () {
278 .one('hidden.bs.popover', function () {
280 .one('shown.bs.popover', function () {
281 $('.content-with-handler .btn').trigger('click')
282 $div
.bootstrapPopover('dispose')
283 assert
.ok(handlerCalled
, 'content\'s event handler still present')
286 .bootstrapPopover('show')
288 .bootstrapPopover('hide')
290 .bootstrapPopover('show')
293 QUnit
.test('should do nothing when an attempt is made to hide an uninitialized popover', function (assert
) {
296 var $popover
= $('<span data-toggle="popover" data-title="some title" data-content="some content">some text</span>')
297 .appendTo('#qunit-fixture')
298 .on('hidden.bs.popover shown.bs.popover', function () {
299 assert
.ok(false, 'should not fire any popover events')
301 .bootstrapPopover('hide')
302 assert
.strictEqual($popover
.data('bs.popover'), undefined, 'should not initialize the popover')
305 QUnit
.test('should fire inserted event', function (assert
) {
307 var done
= assert
.async()
309 $('<a href="#">@Johann-S</a>')
310 .appendTo('#qunit-fixture')
311 .on('inserted.bs.popover', function () {
312 assert
.notEqual($('.popover').length
, 0, 'popover was inserted')
313 assert
.ok(true, 'inserted event fired')
320 .bootstrapPopover('show')
323 QUnit
.test('should throw an error when show is called on hidden elements', function (assert
) {
325 var done
= assert
.async()
328 $('<div data-toggle="popover" data-title="some title" data-content="@Johann-S" style="display: none"/>').bootstrapPopover('show')
331 assert
.strictEqual(err
.message
, 'Please use show on visible elements')
336 QUnit
.test('should hide popovers when their containing modal is closed', function (assert
) {
338 var done
= assert
.async()
339 var templateHTML
= '<div id="modal-test" class="modal">' +
340 '<div class="modal-dialog" role="document">' +
341 '<div class="modal-content">' +
342 '<div class="modal-body">' +
343 '<button id="popover-test" type="button" class="btn btn-secondary" data-toggle="popover" data-placement="top" data-content="Popover">' +
351 $(templateHTML
).appendTo('#qunit-fixture')
353 .on('shown.bs.popover', function () {
354 $('#modal-test').modal('hide')
356 .on('hide.bs.popover', function () {
357 assert
.ok(true, 'popover hide')
362 .on('shown.bs.modal', function () {
363 $('#popover-test').bootstrapPopover('show')