diff options
| author | Mark Otto <[email protected]> | 2017-05-26 21:22:08 -0700 |
|---|---|---|
| committer | Mark Otto <[email protected]> | 2017-05-26 21:22:08 -0700 |
| commit | 04724939a39d68b495da638e58eb794dafe8ab93 (patch) | |
| tree | 7648460f56c35778514e388fc2933b8d55c6cce8 /js/tests | |
| parent | e0e1e849e6cda0d4af88a46f7e7e5a91f8b8498d (diff) | |
| parent | f2829dd6ea10d1af7e451397f7228087cff95b8a (diff) | |
| download | bootstrap-04724939a39d68b495da638e58eb794dafe8ab93.tar.xz bootstrap-04724939a39d68b495da638e58eb794dafe8ab93.zip | |
Merge branch 'v4-dev' into form-tweaks
Diffstat (limited to 'js/tests')
| -rw-r--r-- | js/tests/index.html | 2 | ||||
| -rw-r--r-- | js/tests/unit/dropdown.js | 48 | ||||
| -rw-r--r-- | js/tests/unit/popover.js | 15 | ||||
| -rw-r--r-- | js/tests/unit/tooltip.js | 130 | ||||
| -rw-r--r-- | js/tests/visual/dropdown.html | 60 | ||||
| -rw-r--r-- | js/tests/visual/modal.html | 2 | ||||
| -rw-r--r-- | js/tests/visual/popover.html | 8 | ||||
| -rw-r--r-- | js/tests/visual/scrollspy.html | 1 | ||||
| -rw-r--r-- | js/tests/visual/tooltip.html | 26 |
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> |
