aboutsummaryrefslogtreecommitdiff
path: root/js/tests/unit/modal.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/tests/unit/modal.js')
-rw-r--r--js/tests/unit/modal.js135
1 files changed, 107 insertions, 28 deletions
diff --git a/js/tests/unit/modal.js b/js/tests/unit/modal.js
index 84492cec2..fc6c4f38c 100644
--- a/js/tests/unit/modal.js
+++ b/js/tests/unit/modal.js
@@ -9,6 +9,19 @@ $(function () {
})
QUnit.module('modal', {
+ before: function () {
+ // Enable the scrollbar measurer
+ $('<style type="text/css"> .modal-scrollbar-measure { position: absolute; top: -9999px; width: 50px; height: 50px; overflow: scroll; } </style>').appendTo('head')
+ // Function to calculate the scrollbar width which is then compared to the padding or margin changes
+ $.fn.getScrollbarWidth = function () {
+ var scrollDiv = document.createElement('div')
+ scrollDiv.className = 'modal-scrollbar-measure'
+ document.body.appendChild(scrollDiv)
+ var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth
+ document.body.removeChild(scrollDiv)
+ return scrollbarWidth
+ }
+ },
beforeEach: function () {
// Run all tests in noConflict mode -- it's the only way to ensure that the plugin works in noConflict mode
$.fn.bootstrapModal = $.fn.modal.noConflict()
@@ -336,81 +349,147 @@ $(function () {
$toggleBtn.trigger('click')
})
- QUnit.test('should restore inline body padding after closing', function (assert) {
+ QUnit.test('should adjust the inline body padding when opening and restore when closing', function (assert) {
assert.expect(2)
var done = assert.async()
- var originalBodyPad = 0
var $body = $(document.body)
-
- $body.css('padding-right', originalBodyPad)
+ var originalPadding = $body.css('padding-right')
$('<div id="modal-test"/>')
.on('hidden.bs.modal', function () {
- var currentBodyPad = parseInt($body.css('padding-right'), 10)
- assert.notStrictEqual($body.attr('style'), '', 'body has non-empty style attribute')
- assert.strictEqual(currentBodyPad, originalBodyPad, 'original body padding was not changed')
+ var currentPadding = $body.css('padding-right')
+ assert.strictEqual(currentPadding, originalPadding, 'body padding should be reset after closing')
$body.removeAttr('style')
done()
})
.on('shown.bs.modal', function () {
+ var expectedPadding = parseFloat(originalPadding) + $(this).getScrollbarWidth() + 'px'
+ var currentPadding = $body.css('padding-right')
+ assert.strictEqual(currentPadding, expectedPadding, 'body padding should be adjusted while opening')
$(this).bootstrapModal('hide')
})
.bootstrapModal('show')
})
- QUnit.test('should ignore values set via CSS when trying to restore body padding after closing', function (assert) {
- assert.expect(1)
+ QUnit.test('should store the original body padding in data-padding-right before showing', function (assert) {
+ assert.expect(2)
var done = assert.async()
var $body = $(document.body)
- var $style = $('<style>body { padding-right: 42px; }</style>').appendTo('head')
+ var originalPadding = '0px'
+ $body.css('padding-right', originalPadding)
$('<div id="modal-test"/>')
.on('hidden.bs.modal', function () {
- assert.ok(!$body.attr('style'), 'body does not have inline padding set')
- $style.remove()
+ assert.strictEqual($body.data('padding-right'), undefined, 'data-padding-right should be cleared after closing')
+ $body.removeAttr('style')
done()
})
.on('shown.bs.modal', function () {
+ assert.strictEqual($body.data('padding-right'), originalPadding, 'original body padding should be stored in data-padding-right')
$(this).bootstrapModal('hide')
})
.bootstrapModal('show')
})
- QUnit.test('should have a paddingRight when the modal is taller than the viewport', function (assert) {
+ QUnit.test('should adjust the inline padding of fixed elements when opening and restore when closing', function (assert) {
assert.expect(2)
var done = assert.async()
- $('<div class="fixed-top fixed-bottom sticky-top is-fixed">@Johann-S</div>').appendTo('#qunit-fixture')
- $('.fixed-top, .fixed-bottom, .is-fixed, .sticky-top').css('padding-right', '10px')
+ var $element = $('<div class="fixed-top"></div>').appendTo('#qunit-fixture')
+ var originalPadding = $element.css('padding-right')
$('<div id="modal-test"/>')
+ .on('hidden.bs.modal', function () {
+ var currentPadding = $element.css('padding-right')
+ assert.strictEqual(currentPadding, originalPadding, 'fixed element padding should be reset after closing')
+ $element.remove()
+ done()
+ })
.on('shown.bs.modal', function () {
- var paddingRight = parseInt($(document.body).css('padding-right'), 10)
- assert.strictEqual(isNaN(paddingRight), false)
- assert.strictEqual(paddingRight !== 0, true)
- $(document.body).css('padding-right', '') // Because test case "should ignore other inline styles when trying to restore body padding after closing" fail if not
+ var expectedPadding = parseFloat(originalPadding) + $(this).getScrollbarWidth() + 'px'
+ var currentPadding = $element.css('padding-right')
+ assert.strictEqual(currentPadding, expectedPadding, 'fixed element padding should be adjusted while opening')
+ $(this).bootstrapModal('hide')
+ })
+ .bootstrapModal('show')
+ })
+
+ QUnit.test('should store the original padding of fixed elements in data-padding-right before showing', function (assert) {
+ assert.expect(2)
+ var done = assert.async()
+ var $element = $('<div class="fixed-top"></div>').appendTo('#qunit-fixture')
+ var originalPadding = '0px'
+ $element.css('padding-right', originalPadding)
+
+ $('<div id="modal-test"/>')
+ .on('hidden.bs.modal', function () {
+ assert.strictEqual($element.data('padding-right'), undefined, 'data-padding-right should be cleared after closing')
+ $element.remove()
done()
})
+ .on('shown.bs.modal', function () {
+ assert.strictEqual($element.data('padding-right'), originalPadding, 'original fixed element padding should be stored in data-padding-right')
+ $(this).bootstrapModal('hide')
+ })
.bootstrapModal('show')
})
- QUnit.test('should remove padding-right on modal after closing', function (assert) {
- assert.expect(3)
+ QUnit.test('should adjust the inline margin of the navbar-toggler when opening and restore when closing', function (assert) {
+ assert.expect(2)
+ var done = assert.async()
+ var $element = $('<div class="navbar-toggler"></div>').appendTo('#qunit-fixture')
+ var originalMargin = $element.css('margin-right')
+
+ $('<div id="modal-test"/>')
+ .on('hidden.bs.modal', function () {
+ var currentMargin = $element.css('margin-right')
+ assert.strictEqual(currentMargin, originalMargin, 'navbar-toggler margin should be reset after closing')
+ $element.remove()
+ done()
+ })
+ .on('shown.bs.modal', function () {
+ var expectedMargin = parseFloat(originalMargin) + $(this).getScrollbarWidth() + 'px'
+ var currentMargin = $element.css('margin-right')
+ assert.strictEqual(currentMargin, expectedMargin, 'navbar-toggler margin should be adjusted while opening')
+ $(this).bootstrapModal('hide')
+ })
+ .bootstrapModal('show')
+ })
+
+ QUnit.test('should store the original margin of the navbar-toggler in data-margin-right before showing', function (assert) {
+ assert.expect(2)
var done = assert.async()
- $('<div class="fixed-top fixed-bottom is-fixed sticky-top">@Johann-S</div>').appendTo('#qunit-fixture')
- $('.fixed-top, .fixed-bottom, .is-fixed, .sticky-top').css('padding-right', '10px')
+ var $element = $('<div class="navbar-toggler"></div>').appendTo('#qunit-fixture')
+ var originalMargin = '0px'
+ $element.css('margin-right', originalMargin)
$('<div id="modal-test"/>')
+ .on('hidden.bs.modal', function () {
+ assert.strictEqual($element.data('margin-right'), undefined, 'data-margin-right should be cleared after closing')
+ $element.remove()
+ done()
+ })
.on('shown.bs.modal', function () {
- var paddingRight = parseInt($(document.body).css('padding-right'), 10)
- assert.strictEqual(isNaN(paddingRight), false)
- assert.strictEqual(paddingRight !== 0, true)
+ assert.strictEqual($element.data('margin-right'), originalMargin, 'original navbar-toggler margin should be stored in data-margin-right')
$(this).bootstrapModal('hide')
})
+ .bootstrapModal('show')
+ })
+
+ QUnit.test('should ignore values set via CSS when trying to restore body padding after closing', function (assert) {
+ assert.expect(1)
+ var done = assert.async()
+ var $body = $(document.body)
+ var $style = $('<style>body { padding-right: 42px; }</style>').appendTo('head')
+
+ $('<div id="modal-test"/>')
.on('hidden.bs.modal', function () {
- var paddingRight = parseInt($(document.body).css('padding-right'), 10)
- assert.strictEqual(paddingRight, 0)
+ assert.ok(!$body.attr('style'), 'body does not have inline padding set')
+ $style.remove()
done()
})
+ .on('shown.bs.modal', function () {
+ $(this).bootstrapModal('hide')
+ })
.bootstrapModal('show')
})