aboutsummaryrefslogtreecommitdiff
path: root/js/tests
diff options
context:
space:
mode:
authorMark Otto <[email protected]>2017-05-26 21:22:08 -0700
committerMark Otto <[email protected]>2017-05-26 21:22:08 -0700
commit04724939a39d68b495da638e58eb794dafe8ab93 (patch)
tree7648460f56c35778514e388fc2933b8d55c6cce8 /js/tests
parente0e1e849e6cda0d4af88a46f7e7e5a91f8b8498d (diff)
parentf2829dd6ea10d1af7e451397f7228087cff95b8a (diff)
downloadbootstrap-04724939a39d68b495da638e58eb794dafe8ab93.tar.xz
bootstrap-04724939a39d68b495da638e58eb794dafe8ab93.zip
Merge branch 'v4-dev' into form-tweaks
Diffstat (limited to 'js/tests')
-rw-r--r--js/tests/index.html2
-rw-r--r--js/tests/unit/dropdown.js48
-rw-r--r--js/tests/unit/popover.js15
-rw-r--r--js/tests/unit/tooltip.js130
-rw-r--r--js/tests/visual/dropdown.html60
-rw-r--r--js/tests/visual/modal.html2
-rw-r--r--js/tests/visual/popover.html8
-rw-r--r--js/tests/visual/scrollspy.html1
-rw-r--r--js/tests/visual/tooltip.html26
9 files changed, 154 insertions, 138 deletions
diff --git a/js/tests/index.html b/js/tests/index.html
index 81efd5876..d17608e4a 100644
--- a/js/tests/index.html
+++ b/js/tests/index.html
@@ -7,7 +7,7 @@
<!-- jQuery -->
<script src="../../docs/assets/js/vendor/jquery-slim.min.js"></script>
- <script src="../../docs/assets/js/vendor/tether.min.js"></script>
+ <script src="../../docs/assets/js/vendor/popper.min.js"></script>
<!-- QUnit -->
<link rel="stylesheet" href="vendor/qunit.css" media="screen">
diff --git a/js/tests/unit/dropdown.js b/js/tests/unit/dropdown.js
index a15eb5245..1dd675b0b 100644
--- a/js/tests/unit/dropdown.js
+++ b/js/tests/unit/dropdown.js
@@ -275,20 +275,20 @@ $(function () {
$first.parent('.dropdown')
.on('shown.bs.dropdown', function () {
assert.strictEqual($first.parents('.show').length, 1, '"show" class added on click')
- assert.strictEqual($('#qunit-fixture .show').length, 1, 'only one dropdown is shown')
+ assert.strictEqual($('#qunit-fixture .dropdown-menu.show').length, 1, 'only one dropdown is shown')
$(document.body).trigger('click')
}).on('hidden.bs.dropdown', function () {
- assert.strictEqual($('#qunit-fixture .show').length, 0, '"show" class removed')
+ assert.strictEqual($('#qunit-fixture .dropdown-menu.show').length, 0, '"show" class removed')
$last.trigger('click')
})
$last.parent('.btn-group')
.on('shown.bs.dropdown', function () {
assert.strictEqual($last.parent('.show').length, 1, '"show" class added on click')
- assert.strictEqual($('#qunit-fixture .show').length, 1, 'only one dropdown is shown')
+ assert.strictEqual($('#qunit-fixture .dropdown-menu.show').length, 1, 'only one dropdown is shown')
$(document.body).trigger('click')
}).on('hidden.bs.dropdown', function () {
- assert.strictEqual($('#qunit-fixture .show').length, 0, '"show" class removed')
+ assert.strictEqual($('#qunit-fixture .dropdown-menu.show').length, 0, '"show" class removed')
done()
})
$first.trigger('click')
@@ -321,24 +321,24 @@ $(function () {
$first.parent('.dropdown')
.on('shown.bs.dropdown', function () {
assert.strictEqual($first.parents('.show').length, 1, '"show" class added on click')
- assert.strictEqual($('#qunit-fixture .show').length, 1, 'only one dropdown is shown')
+ assert.strictEqual($('#qunit-fixture .dropdown-menu.show').length, 1, 'only one dropdown is shown')
var e = $.Event('keyup')
e.which = 9 // Tab
$(document.body).trigger(e)
}).on('hidden.bs.dropdown', function () {
- assert.strictEqual($('#qunit-fixture .show').length, 0, '"show" class removed')
+ assert.strictEqual($('#qunit-fixture .dropdown-menu.show').length, 0, '"show" class removed')
$last.trigger('click')
})
$last.parent('.btn-group')
.on('shown.bs.dropdown', function () {
assert.strictEqual($last.parent('.show').length, 1, '"show" class added on click')
- assert.strictEqual($('#qunit-fixture .show').length, 1, 'only one dropdown is shown')
+ assert.strictEqual($('#qunit-fixture .dropdown-menu.show').length, 1, 'only one dropdown is shown')
var e = $.Event('keyup')
e.which = 9 // Tab
$(document.body).trigger(e)
}).on('hidden.bs.dropdown', function () {
- assert.strictEqual($('#qunit-fixture .show').length, 0, '"show" class removed')
+ assert.strictEqual($('#qunit-fixture .dropdown-menu.show').length, 0, '"show" class removed')
done()
})
$first.trigger('click')
@@ -552,7 +552,7 @@ $(function () {
})
QUnit.test('should not close the dropdown if the user clicks on a text field', function (assert) {
- assert.expect(1)
+ assert.expect(2)
var done = assert.async()
var dropdownHTML = '<div class="dropdown">'
+ '<button type="button" data-toggle="dropdown">Dropdown</button>'
@@ -565,23 +565,23 @@ $(function () {
.find('[data-toggle="dropdown"]')
.bootstrapDropdown()
+ var $textfield = $('#textField')
+ $textfield.on('click', function () {
+ assert.ok($dropdown.parent('.dropdown').hasClass('show'), 'dropdown menu is shown')
+ done()
+ })
+
$dropdown
.parent('.dropdown')
.on('shown.bs.dropdown', function () {
- $('#textField').trigger('click')
- assert.ok($dropdown.parent('.dropdown').hasClass('show'), 'dropdown menu is shown')
- setTimeout(function () {
- done()
- }, 300)
- })
- .on('hidden.bs.dropdown', function () {
assert.ok($dropdown.parent('.dropdown').hasClass('show'), 'dropdown menu is shown')
+ $textfield.trigger($.Event('click'))
})
$dropdown.trigger('click')
})
QUnit.test('should not close the dropdown if the user clicks on a textarea', function (assert) {
- assert.expect(1)
+ assert.expect(2)
var done = assert.async()
var dropdownHTML = '<div class="dropdown">'
+ '<button type="button" data-toggle="dropdown">Dropdown</button>'
@@ -594,17 +594,17 @@ $(function () {
.find('[data-toggle="dropdown"]')
.bootstrapDropdown()
+ var $textarea = $('#textArea')
+ $textarea.on('click', function () {
+ assert.ok($dropdown.parent('.dropdown').hasClass('show'), 'dropdown menu is shown')
+ done()
+ })
+
$dropdown
.parent('.dropdown')
.on('shown.bs.dropdown', function () {
- $('#textArea').trigger('click')
- assert.ok($dropdown.parent('.dropdown').hasClass('show'), 'dropdown menu is shown')
- setTimeout(function () {
- done()
- }, 300)
- })
- .on('hidden.bs.dropdown', function () {
assert.ok($dropdown.parent('.dropdown').hasClass('show'), 'dropdown menu is shown')
+ $textarea.trigger($.Event('click'))
})
$dropdown.trigger('click')
})
diff --git a/js/tests/unit/popover.js b/js/tests/unit/popover.js
index eaa9fa0c0..a7762bfab 100644
--- a/js/tests/unit/popover.js
+++ b/js/tests/unit/popover.js
@@ -47,13 +47,18 @@ $(function () {
QUnit.test('should render popover element', function (assert) {
assert.expect(2)
- var $popover = $('<a href="#" title="mdo" data-content="https://twitter.com/mdo">@mdo</a>')
+ var done = assert.async()
+ $('<a href="#" title="mdo" data-content="https://twitter.com/mdo">@mdo</a>')
.appendTo('#qunit-fixture')
+ .on('shown.bs.popover', function () {
+ assert.notEqual($('.popover').length, 0, 'popover was inserted')
+ $(this).bootstrapPopover('hide')
+ })
+ .on('hidden.bs.popover', function () {
+ assert.strictEqual($('.popover').length, 0, 'popover removed')
+ done()
+ })
.bootstrapPopover('show')
-
- assert.notEqual($('.popover').length, 0, 'popover was inserted')
- $popover.bootstrapPopover('hide')
- assert.strictEqual($('.popover').length, 0, 'popover removed')
})
QUnit.test('should store popover instance in popover data object', function (assert) {
diff --git a/js/tests/unit/tooltip.js b/js/tests/unit/tooltip.js
index 8cb1a6fdf..c0cafefe5 100644
--- a/js/tests/unit/tooltip.js
+++ b/js/tests/unit/tooltip.js
@@ -111,7 +111,7 @@ $(function () {
assert
.ok($('.tooltip')
- .is('.fade.bs-tether-element-attached-top.bs-tether-element-attached-center.show'), 'has correct classes applied')
+ .is('.fade.bs-tooltip-bottom.show'), 'has correct classes applied')
$tooltip.bootstrapTooltip('hide')
@@ -364,32 +364,29 @@ $(function () {
})
QUnit.test('should add position class before positioning so that position-specific styles are taken into account', function (assert) {
- assert.expect(1)
+ assert.expect(2)
+ var done = assert.async()
var styles = '<style>'
- + '.tooltip.right { white-space: nowrap; }'
- + '.tooltip.right .tooltip-inner { max-width: none; }'
+ + '.bs-tooltip-right { white-space: nowrap; }'
+ + '.bs-tooltip-right .tooltip-inner { max-width: none; }'
+ '</style>'
var $styles = $(styles).appendTo('head')
var $container = $('<div/>').appendTo('#qunit-fixture')
- var $target = $('<a href="#" rel="tooltip" title="very very very very very very very very long tooltip in one line"/>')
+ $('<a href="#" rel="tooltip" title="very very very very very very very very long tooltip in one line"/>')
.appendTo($container)
.bootstrapTooltip({
- placement: 'right'
+ placement: 'right',
+ trigger: 'manual'
+ })
+ .on('inserted.bs.tooltip', function () {
+ var $tooltip = $($(this).data('bs.tooltip').tip)
+ assert.ok($tooltip.hasClass('bs-tooltip-right'))
+ assert.ok($tooltip.attr('style') === undefined)
+ $styles.remove()
+ done()
})
.bootstrapTooltip('show')
-
- var $tooltip = $($target.data('bs.tooltip').tip)
-
- // this is some dumb hack stuff because sub pixels in firefox
- var top = Math.round($target.offset().top + $target[0].offsetHeight / 2 - $tooltip[0].offsetHeight / 2)
- var top2 = Math.round($tooltip.offset().top)
- var topDiff = top - top2
- assert.ok(topDiff <= 1 && topDiff >= -1)
- $target.bootstrapTooltip('hide')
-
- $container.remove()
- $styles.remove()
})
QUnit.test('should use title attribute for tooltip text', function (assert) {
@@ -459,7 +456,7 @@ $(function () {
assert.expect(1)
var done = assert.async()
- var containerHTML = '<div>'
+ var containerHTML = '<div id="test">'
+ '<p style="margin-top: 200px">'
+ '<a href="#" title="very very very very very very very long tooltip">Hover me</a>'
+ '</p>'
@@ -476,21 +473,24 @@ $(function () {
})
.appendTo('#qunit-fixture')
- var $trigger = $container
+ $container
.find('a')
.css('margin-top', 200)
.bootstrapTooltip({
placement: 'top',
animate: false
})
+ .on('shown.bs.tooltip', function () {
+ var $tooltip = $($(this).data('bs.tooltip').tip)
+ if (/iPhone|iPad|iPod/.test(navigator.userAgent)) {
+ assert.ok(Math.round($tooltip.offset().top + $tooltip.outerHeight()) <= Math.round($(this).offset().top))
+ }
+ else {
+ assert.ok(Math.round($tooltip.offset().top + $tooltip.outerHeight()) >= Math.round($(this).offset().top))
+ }
+ done()
+ })
.bootstrapTooltip('show')
-
- var $tooltip = $($trigger.data('bs.tooltip').tip)
-
- setTimeout(function () {
- assert.ok(Math.round($tooltip.offset().top + $tooltip.outerHeight()) <= Math.round($trigger.offset().top))
- done()
- }, 0)
})
QUnit.test('should show tooltip if leave event hasn\'t occurred before delay expires', function (assert) {
@@ -629,45 +629,6 @@ $(function () {
$tooltip.trigger('mouseenter')
})
- QUnit.test('should correctly position tooltips on SVG elements', function (assert) {
- if (!window.SVGElement) {
- // Skip IE8 since it doesn't support SVG
- assert.expect(0)
- return
- }
- assert.expect(2)
-
- var done = assert.async()
-
- var styles = '<style>'
- + '.tooltip, .tooltip *, .tooltip *:before, .tooltip *:after { box-sizing: border-box; }'
- + '.tooltip { position: absolute; }'
- + '.tooltip .tooltip-inner { width: 24px; height: 24px; font-family: Helvetica; }'
- + '</style>'
- var $styles = $(styles).appendTo('head')
-
- $('#qunit-fixture').append(
- '<div style="position: fixed; top: 0; left: 0;">'
- + ' <svg width="200" height="200">'
- + ' <circle cx="100" cy="100" r="10" title="m" id="theCircle" />'
- + ' </svg>'
- + '</div>')
- var $circle = $('#theCircle')
-
- $circle
- .on('shown.bs.tooltip', function () {
- var offset = $('.tooltip').offset()
- $styles.remove()
- assert.ok(Math.abs(offset.left - 88) <= 1, 'tooltip has correct horizontal location')
- $circle.bootstrapTooltip('hide')
- assert.strictEqual($('.tooltip').length, 0, 'tooltip removed from dom')
- done()
- })
- .bootstrapTooltip({ placement: 'top', trigger: 'manual' })
-
- $circle.bootstrapTooltip('show')
- })
-
QUnit.test('should not reload the tooltip on subsequent mouseenter events', function (assert) {
assert.expect(1)
var titleHtml = function () {
@@ -731,43 +692,6 @@ $(function () {
assert.strictEqual(currentUid, $('#tt-content').text())
})
- QUnit.test('should correctly position tooltips on transformed elements', function (assert) {
- var styleProps = document.documentElement.style
- if (!('transform' in styleProps) && !('webkitTransform' in styleProps) && !('msTransform' in styleProps)) {
- assert.expect(0)
- return
- }
- assert.expect(2)
-
- var done = assert.async()
-
- var styles = '<style>'
- + '#qunit-fixture { top: 0; left: 0; }'
- + '.tooltip, .tooltip *, .tooltip *:before, .tooltip *:after { box-sizing: border-box; }'
- + '.tooltip { position: absolute; }'
- + '.tooltip .tooltip-inner { width: 24px; height: 24px; font-family: Helvetica; }'
- + '#target { position: absolute; top: 100px; left: 50px; width: 100px; height: 200px; -webkit-transform: rotate(270deg); -ms-transform: rotate(270deg); transform: rotate(270deg); }'
- + '</style>'
- var $styles = $(styles).appendTo('head')
-
- var $element = $('<div id="target" title="1"/>').appendTo('#qunit-fixture')
-
- $element
- .on('shown.bs.tooltip', function () {
- var offset = $('.tooltip').offset()
- $styles.remove()
- assert.ok(Math.abs(offset.left - 88) <= 1, 'tooltip has correct horizontal location')
- assert.ok(Math.abs(offset.top - 126) <= 1, 'tooltip has correct vertical location')
- $element.bootstrapTooltip('hide')
- done()
- })
- .bootstrapTooltip({
- trigger: 'manual'
- })
-
- $element.bootstrapTooltip('show')
- })
-
QUnit.test('should do nothing when an attempt is made to hide an uninitialized tooltip', function (assert) {
assert.expect(1)
diff --git a/js/tests/visual/dropdown.html b/js/tests/visual/dropdown.html
index cc8a6e709..fee096c6c 100644
--- a/js/tests/visual/dropdown.html
+++ b/js/tests/visual/dropdown.html
@@ -58,9 +58,67 @@
</div>
</li>
</ul>
- </div>
+
+ <div class="row">
+ <div class="col-sm-12 mt-4">
+ <div class="btn-group dropup">
+ <button type="button" class="btn btn-secondary">Dropup split</button>
+ <button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
+ <span class="sr-only">Dropup split</span>
+ </button>
+ <div class="dropdown-menu">
+ <a class="dropdown-item" href="#">Action</a>
+ <a class="dropdown-item" href="#">Another action</a>
+ <a class="dropdown-item" href="#">Something else here</a>
+ </div>
+ </div>
+
+ <div class="btn-group dropup">
+ <button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Dropup</button>
+ <div class="dropdown-menu">
+ <a class="dropdown-item" href="#">Action</a>
+ <a class="dropdown-item" href="#">Another action</a>
+ <a class="dropdown-item" href="#">Something else here</a>
+ </div>
+ </div>
+
+ <div class="btn-group">
+ <button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
+ This dropdown's menu is right-aligned
+ </button>
+ <div class="dropdown-menu dropdown-menu-right">
+ <button class="dropdown-item" type="button">Action</button>
+ <button class="dropdown-item" type="button">Another action</button>
+ <button class="dropdown-item" type="button">Something else here</button>
+ </div>
+ </div>
+ </div>
+ <div class="col-sm-12 mt-4">
+ <div class="btn-group dropup" role="group">
+ <a href="#" class="btn btn-secondary">Dropup split align right</a>
+ <button type="button" id="dropdown-page-subheader-button-3" class="btn btn-secondary dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
+ <span class="sr-only">Product actions</span>
+ </button>
+ <div class="dropdown-menu dropdown-menu-right">
+ <button class="dropdown-item" type="button">Action</button>
+ <button class="dropdown-item" type="button">Another action</button>
+ <button class="dropdown-item" type="button">Something else here with a long text</button>
+ </div>
+ </div>
+ <div class="btn-group dropup">
+ <button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Dropup align right</button>
+ <div class="dropdown-menu dropdown-menu-right">
+ <button class="dropdown-item" type="button">Action</button>
+ <button class="dropdown-item" type="button">Another action</button>
+ <button class="dropdown-item" type="button">Something else here with a long text</button>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
<script src="../../../docs/assets/js/vendor/jquery-slim.min.js"></script>
+ <script src="../../../docs/assets/js/vendor/popper.min.js"></script>
<script src="../../dist/util.js"></script>
<script src="../../dist/dropdown.js"></script>
<script src="../../dist/collapse.js"></script>
diff --git a/js/tests/visual/modal.html b/js/tests/visual/modal.html
index e999514f7..90b814e67 100644
--- a/js/tests/visual/modal.html
+++ b/js/tests/visual/modal.html
@@ -170,7 +170,7 @@
</div>
<script src="../../../docs/assets/js/vendor/jquery-slim.min.js"></script>
- <script src="../../../docs/assets/js/vendor/tether.min.js"></script>
+ <script src="../../../docs/assets/js/vendor/popper.min.js"></script>
<script src="../../dist/util.js"></script>
<script src="../../dist/modal.js"></script>
<script src="../../dist/collapse.js"></script>
diff --git a/js/tests/visual/popover.html b/js/tests/visual/popover.html
index 51b5fe506..2354abf42 100644
--- a/js/tests/visual/popover.html
+++ b/js/tests/visual/popover.html
@@ -10,7 +10,11 @@
<div class="container">
<h1>Popover <small>Bootstrap Visual Test</small></h1>
- <button type="button" class="btn btn-secondary" data-container="body" data-toggle="popover" data-placement="top" data-content="Vivamus sagittis lacus vel augue laoreet rutrum faucibus.">
+ <button type="button" class="btn btn-secondary" data-container="body" data-toggle="popover" data-placement="auto" data-content="Vivamus sagittis lacus vel augue laoreet rutrum faucibus.">
+ Popover on auto
+ </button>
+
+ <button type="button" class="btn btn-secondary" data-container="body" data-toggle="popover" data-placement="top" data-content="Default placement was on top but not enough place">
Popover on top
</button>
@@ -29,7 +33,7 @@
</div>
<script src="../../../docs/assets/js/vendor/jquery-slim.min.js"></script>
- <script src="../../../docs/assets/js/vendor/tether.min.js"></script>
+ <script src="../../../docs/assets/js/vendor/popper.min.js"></script>
<script src="../../dist/util.js"></script>
<script src="../../dist/tooltip.js"></script>
<script src="../../dist/popover.js"></script>
diff --git a/js/tests/visual/scrollspy.html b/js/tests/visual/scrollspy.html
index c0c3dc749..0f115e035 100644
--- a/js/tests/visual/scrollspy.html
+++ b/js/tests/visual/scrollspy.html
@@ -87,6 +87,7 @@
</div>
<script src="../../../docs/assets/js/vendor/jquery-slim.min.js"></script>
+ <script src="../../../docs/assets/js/vendor/popper.min.js"></script>
<script src="../../dist/util.js"></script>
<script src="../../dist/scrollspy.js"></script>
<script src="../../dist/dropdown.js"></script>
diff --git a/js/tests/visual/tooltip.html b/js/tests/visual/tooltip.html
index f447a533b..172cb29ad 100644
--- a/js/tests/visual/tooltip.html
+++ b/js/tests/visual/tooltip.html
@@ -5,6 +5,19 @@
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link rel="stylesheet" href="../../../dist/css/bootstrap.min.css">
<title>Tooltip</title>
+ <style>
+ #target {
+ border: 1px solid;
+ width: 100px;
+ height: 50px;
+ border: 1px solid;
+ margin-left: 50px;
+ -webkit-transform: rotate(270deg);
+ -ms-transform: rotate(270deg);
+ transform: rotate(270deg);
+ margin-top: 100px;
+ }
+ </style>
</head>
<body>
<div class="container">
@@ -15,6 +28,9 @@
<hr>
<p>
+ <button type="button" class="btn btn-secondary" data-toggle="tooltip" data-placement="auto" title="Tooltip on auto">
+ Tooltip on auto
+ </button>
<button type="button" class="btn btn-secondary" data-toggle="tooltip" data-placement="top" title="Tooltip on top">
Tooltip on top
</button>
@@ -30,17 +46,25 @@
<button type="button" class="btn btn-secondary" data-toggle="tooltip" data-html="true" title="<em>Tooltip</em> <u>with</u> <b>HTML</b>">
Tooltip with HTML
</button>
+ <svg width="30" height="20">
+ <circle cx="15" cy="10" r="10" fill="#62448F" data-toggle="tooltip" data-placement="top" title="Tooltip on SVG" />
+ </svg>
</p>
+ <div id="target" title="Test tooltip on transformed element"></div>
</div>
<script src="../../../docs/assets/js/vendor/jquery-slim.min.js"></script>
- <script src="../../../docs/assets/js/vendor/tether.min.js"></script>
+ <script src="../../../docs/assets/js/vendor/popper.min.js"></script>
<script src="../../dist/util.js"></script>
<script src="../../dist/tooltip.js"></script>
<script>
$(function () {
$('[data-toggle="tooltip"]').tooltip()
+ $('#target').tooltip({
+ placement : 'top',
+ trigger : 'manual'
+ }).tooltip('show')
})
</script>
</body>