aboutsummaryrefslogtreecommitdiff
path: root/js/tests
diff options
context:
space:
mode:
authorMark Otto <[email protected]>2017-04-16 14:03:25 -0700
committerMark Otto <[email protected]>2017-04-16 14:03:25 -0700
commit570efe1df6620c9bd6e70cf0bd8d87e42ac6e892 (patch)
treee4a0600341e579a45d4e2fe550362656d503490d /js/tests
parent0cb2576bf25220d35a5f4e1d33c16c2e6f3abaee (diff)
parentea1d69c64be168bb644ae9fc4450a5c85b51609b (diff)
downloadbootstrap-570efe1df6620c9bd6e70cf0bd8d87e42ac6e892.tar.xz
bootstrap-570efe1df6620c9bd6e70cf0bd8d87e42ac6e892.zip
Merge branch 'v4-dev' into form-tweaks
Diffstat (limited to 'js/tests')
-rw-r--r--js/tests/unit/button.js18
-rw-r--r--js/tests/unit/collapse.js32
-rw-r--r--js/tests/unit/dropdown.js522
-rw-r--r--js/tests/visual/carousel.html2
4 files changed, 354 insertions, 220 deletions
diff --git a/js/tests/unit/button.js b/js/tests/unit/button.js
index c67cea345..abc04e10a 100644
--- a/js/tests/unit/button.js
+++ b/js/tests/unit/button.js
@@ -138,4 +138,22 @@ $(function () {
assert.ok($btn2.find('input').prop('checked'), 'btn2 is checked')
})
+ QUnit.test('should not add aria-pressed on labels for radio/checkbox inputs in a data-toggle="buttons" group', function (assert) {
+ assert.expect(2)
+ var groupHTML = '<div class="btn-group" data-toggle="buttons">'
+ + '<label class="btn btn-primary"><input type="checkbox" autocomplete="off"> Checkbox</label>'
+ + '<label class="btn btn-primary"><input type="radio" name="options" autocomplete="off"> Radio</label>'
+ + '</div>'
+ var $group = $(groupHTML).appendTo('#qunit-fixture')
+
+ var $btn1 = $group.children().eq(0)
+ var $btn2 = $group.children().eq(1)
+
+ $btn1.find('input').trigger('click')
+ assert.ok($btn1.is(':not([aria-pressed])'), 'label for nested checkbox input has not been given an aria-pressed attribute')
+
+ $btn2.find('input').trigger('click')
+ assert.ok($btn2.is(':not([aria-pressed])'), 'label for nested radio input has not been given an aria-pressed attribute')
+ })
+
})
diff --git a/js/tests/unit/collapse.js b/js/tests/unit/collapse.js
index e7083f56d..35fcf2108 100644
--- a/js/tests/unit/collapse.js
+++ b/js/tests/unit/collapse.js
@@ -322,7 +322,7 @@ $(function () {
$target3.trigger('click')
})
- QUnit.test('should set aria-expanded="true" on target when collapse is shown', function (assert) {
+ QUnit.test('should set aria-expanded="true" on trigger/control when collapse is shown', function (assert) {
assert.expect(1)
var done = assert.async()
@@ -338,7 +338,7 @@ $(function () {
$target.trigger('click')
})
- QUnit.test('should set aria-expanded="false" on target when collapse is hidden', function (assert) {
+ QUnit.test('should set aria-expanded="false" on trigger/control when collapse is hidden', function (assert) {
assert.expect(1)
var done = assert.async()
@@ -364,8 +364,8 @@ $(function () {
$('<div id="test1"/>')
.appendTo('#qunit-fixture')
.on('shown.bs.collapse', function () {
- assert.strictEqual($target.attr('aria-expanded'), 'true', 'aria-expanded on target is "true"')
- assert.strictEqual($alt.attr('aria-expanded'), 'true', 'aria-expanded on alt is "true"')
+ assert.strictEqual($target.attr('aria-expanded'), 'true', 'aria-expanded on trigger/control is "true"')
+ assert.strictEqual($alt.attr('aria-expanded'), 'true', 'aria-expanded on alternative trigger/control is "true"')
done()
})
@@ -382,15 +382,15 @@ $(function () {
$('<div id="test1" class="show"/>')
.appendTo('#qunit-fixture')
.on('hidden.bs.collapse', function () {
- assert.strictEqual($target.attr('aria-expanded'), 'false', 'aria-expanded on target is "false"')
- assert.strictEqual($alt.attr('aria-expanded'), 'false', 'aria-expanded on alt is "false"')
+ assert.strictEqual($target.attr('aria-expanded'), 'false', 'aria-expanded on trigger/control is "false"')
+ assert.strictEqual($alt.attr('aria-expanded'), 'false', 'aria-expanded on alternative trigger/control is "false"')
done()
})
$target.trigger('click')
})
- QUnit.test('should change aria-expanded from active accordion target to "false" and set the newly active one to "true"', function (assert) {
+ QUnit.test('should change aria-expanded from active accordion trigger/control to "false" and set the trigger/control for the newly active one to "true"', function (assert) {
assert.expect(3)
var done = assert.async()
@@ -401,22 +401,22 @@ $(function () {
+ '</div>'
var $groups = $(accordionHTML).appendTo('#qunit-fixture').find('.card')
- var $target1 = $('<a role="button" data-toggle="collapse" href="#body1"/>').appendTo($groups.eq(0))
+ var $target1 = $('<a role="button" data-toggle="collapse" aria-expanded="true" href="#body1"/>').appendTo($groups.eq(0))
- $('<div id="body1" aria-expanded="true" class="show" data-parent="#accordion"/>').appendTo($groups.eq(0))
+ $('<div id="body1" class="show" data-parent="#accordion"/>').appendTo($groups.eq(0))
- var $target2 = $('<a role="button" data-toggle="collapse" href="#body2" class="collapsed" aria-expanded="false" />').appendTo($groups.eq(1))
+ var $target2 = $('<a role="button" data-toggle="collapse" aria-expanded="false" href="#body2" class="collapsed" aria-expanded="false" />').appendTo($groups.eq(1))
- $('<div id="body2" aria-expanded="false" data-parent="#accordion"/>').appendTo($groups.eq(1))
+ $('<div id="body2" data-parent="#accordion"/>').appendTo($groups.eq(1))
- var $target3 = $('<a class="collapsed" data-toggle="collapse" role="button" href="#body3"/>').appendTo($groups.eq(2))
+ var $target3 = $('<a class="collapsed" data-toggle="collapse" aria-expanded="false" role="button" href="#body3"/>').appendTo($groups.eq(2))
- $('<div id="body3" aria-expanded="false" data-parent="#accordion"/>')
+ $('<div id="body3" data-parent="#accordion"/>')
.appendTo($groups.eq(2))
.on('shown.bs.collapse', function () {
- assert.strictEqual($target1.attr('aria-expanded'), 'false', 'inactive target 1 has aria-expanded="false"')
- assert.strictEqual($target2.attr('aria-expanded'), 'false', 'inactive target 2 has aria-expanded="false"')
- assert.strictEqual($target3.attr('aria-expanded'), 'true', 'active target 3 has aria-expanded="false"')
+ assert.strictEqual($target1.attr('aria-expanded'), 'false', 'inactive trigger/control 1 has aria-expanded="false"')
+ assert.strictEqual($target2.attr('aria-expanded'), 'false', 'inactive trigger/control 2 has aria-expanded="false"')
+ assert.strictEqual($target3.attr('aria-expanded'), 'true', 'active trigger/control 3 has aria-expanded="true"')
done()
})
diff --git a/js/tests/unit/dropdown.js b/js/tests/unit/dropdown.js
index 9a34fc0c9..a15eb5245 100644
--- a/js/tests/unit/dropdown.js
+++ b/js/tests/unit/dropdown.js
@@ -45,58 +45,62 @@ $(function () {
})
QUnit.test('should not open dropdown if target is disabled via attribute', function (assert) {
- assert.expect(1)
- var dropdownHTML = '<ul class="tabs">'
- + '<li class="dropdown">'
+ assert.expect(0)
+ var dropdownHTML = '<div class="tabs">'
+ + '<div class="dropdown">'
+ '<button disabled href="#" class="btn dropdown-toggle" data-toggle="dropdown">Dropdown</button>'
- + '<ul class="dropdown-menu">'
- + '<li><a href="#">Secondary link</a></li>'
- + '<li><a href="#">Something else here</a></li>'
- + '<li class="divider"/>'
- + '<li><a href="#">Another link</a></li>'
- + '</ul>'
- + '</li>'
- + '</ul>'
- var $dropdown = $(dropdownHTML).find('[data-toggle="dropdown"]').bootstrapDropdown().trigger('click')
-
- assert.ok(!$dropdown.parent('.dropdown').hasClass('show'), '"show" class added on click')
+ + '<div class="dropdown-menu">'
+ + '<a class="dropdown-item" href="#">Secondary link</a>'
+ + '<a class="dropdown-item" href="#">Something else here</a>'
+ + '<div class="divider"/>'
+ + '<a class="dropdown-item" href="#">Another link</a>'
+ + '</div>'
+ + '</div>'
+ + '</div>'
+ var $dropdown = $(dropdownHTML).find('[data-toggle="dropdown"]').bootstrapDropdown()
+ setTimeout(function () {
+ assert.ok(!$dropdown.parent('.dropdown').hasClass('show'), '"show" class added on click')
+ }, 300)
})
QUnit.test('should set aria-expanded="true" on target when dropdown menu is shown', function (assert) {
assert.expect(1)
- var dropdownHTML = '<ul class="tabs">'
- + '<li class="dropdown">'
+ var done = assert.async()
+ var dropdownHTML = '<div class="tabs">'
+ + '<div class="dropdown">'
+ '<a href="#" class="dropdown-toggle" data-toggle="dropdown" aria-expanded="false">Dropdown</a>'
- + '<ul class="dropdown-menu">'
- + '<li><a href="#">Secondary link</a></li>'
- + '<li><a href="#">Something else here</a></li>'
- + '<li class="divider"/>'
- + '<li><a href="#">Another link</a></li>'
- + '</ul>'
- + '</li>'
- + '</ul>'
- var $dropdown = $(dropdownHTML)
- .find('[data-toggle="dropdown"]')
- .bootstrapDropdown()
- .trigger('click')
-
- assert.strictEqual($dropdown.attr('aria-expanded'), 'true', 'aria-expanded is set to string "true" on click')
+ + '<div class="dropdown-menu">'
+ + '<a class="dropdown-item" href="#">Secondary link</a>'
+ + '<a class="dropdown-item" href="#">Something else here</a>'
+ + '<div class="divider"/>'
+ + '<a class="dropdown-item" href="#">Another link</a>'
+ + '</div>'
+ + '</div>'
+ + '</div>'
+ var $dropdown = $(dropdownHTML).find('[data-toggle="dropdown"]').bootstrapDropdown()
+ $dropdown
+ .parent('.dropdown')
+ .on('shown.bs.dropdown', function () {
+ assert.strictEqual($dropdown.attr('aria-expanded'), 'true', 'aria-expanded is set to string "true" on click')
+ done()
+ })
+ $dropdown.trigger('click')
})
QUnit.test('should set aria-expanded="false" on target when dropdown menu is hidden', function (assert) {
assert.expect(1)
var done = assert.async()
- var dropdownHTML = '<ul class="tabs">'
- + '<li class="dropdown">'
+ var dropdownHTML = '<div class="tabs">'
+ + '<div class="dropdown">'
+ '<a href="#" class="dropdown-toggle" aria-expanded="false" data-toggle="dropdown">Dropdown</a>'
- + '<ul class="dropdown-menu">'
- + '<li><a href="#">Secondary link</a></li>'
- + '<li><a href="#">Something else here</a></li>'
- + '<li class="divider"/>'
- + '<li><a href="#">Another link</a></li>'
- + '</ul>'
- + '</li>'
- + '</ul>'
+ + '<div class="dropdown-menu">'
+ + '<a class="dropdown-item" href="#">Secondary link</a>'
+ + '<a class="dropdown-item" href="#">Something else here</a>'
+ + '<div class="divider"/>'
+ + '<a class="dropdown-item" href="#">Another link</a>'
+ + '</div>'
+ + '</div>'
+ + '</div>'
var $dropdown = $(dropdownHTML)
.appendTo('#qunit-fixture')
.find('[data-toggle="dropdown"]')
@@ -114,86 +118,107 @@ $(function () {
})
QUnit.test('should not open dropdown if target is disabled via class', function (assert) {
- assert.expect(1)
- var dropdownHTML = '<ul class="tabs">'
- + '<li class="dropdown">'
+ assert.expect(0)
+ var dropdownHTML = '<div class="tabs">'
+ + '<div class="dropdown">'
+ '<button href="#" class="btn dropdown-toggle disabled" data-toggle="dropdown">Dropdown</button>'
- + '<ul class="dropdown-menu">'
- + '<li><a href="#">Secondary link</a></li>'
- + '<li><a href="#">Something else here</a></li>'
- + '<li class="divider"/>'
- + '<li><a href="#">Another link</a></li>'
- + '</ul>'
- + '</li>'
- + '</ul>'
+ + '<div class="dropdown-menu">'
+ + '<a class="dropdown-item" href="#">Secondary link</a>'
+ + '<a class="dropdown-item" href="#">Something else here</a>'
+ + '<div class="divider"/>'
+ + '<a class="dropdown-item" href="#">Another link</a>'
+ + '</div>'
+ + '</div>'
+ + '</div>'
var $dropdown = $(dropdownHTML).find('[data-toggle="dropdown"]').bootstrapDropdown().trigger('click')
-
- assert.ok(!$dropdown.parent('.dropdown').hasClass('show'), '"show" class added on click')
+ setTimeout(function () {
+ assert.ok(!$dropdown.parent('.dropdown').hasClass('show'), '"show" class added on click')
+ }, 300)
})
QUnit.test('should add class show to menu if clicked', function (assert) {
assert.expect(1)
- var dropdownHTML = '<ul class="tabs">'
- + '<li class="dropdown">'
+ var done = assert.async()
+ var dropdownHTML = '<div class="tabs">'
+ + '<div class="dropdown">'
+ '<a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown</a>'
- + '<ul class="dropdown-menu">'
- + '<li><a href="#">Secondary link</a></li>'
- + '<li><a href="#">Something else here</a></li>'
- + '<li class="divider"/>'
- + '<li><a href="#">Another link</a></li>'
- + '</ul>'
- + '</li>'
- + '</ul>'
- var $dropdown = $(dropdownHTML).find('[data-toggle="dropdown"]').bootstrapDropdown().trigger('click')
-
- assert.ok($dropdown.parent('.dropdown').hasClass('show'), '"show" class added on click')
+ + '<div class="dropdown-menu">'
+ + '<a class="dropdown-item" href="#">Secondary link</a>'
+ + '<a class="dropdown-item" href="#">Something else here</a>'
+ + '<div class="divider"/>'
+ + '<a class="dropdown-item" href="#">Another link</a>'
+ + '</div>'
+ + '</div>'
+ + '</div>'
+ var $dropdown = $(dropdownHTML).find('[data-toggle="dropdown"]').bootstrapDropdown()
+ $dropdown
+ .parent('.dropdown')
+ .on('shown.bs.dropdown', function () {
+ assert.ok($dropdown.parent('.dropdown').hasClass('show'), '"show" class added on click')
+ done()
+ })
+ $dropdown.trigger('click')
})
QUnit.test('should test if element has a # before assuming it\'s a selector', function (assert) {
assert.expect(1)
- var dropdownHTML = '<ul class="tabs">'
- + '<li class="dropdown">'
+ var done = assert.async()
+ var dropdownHTML = '<div class="tabs">'
+ + '<div class="dropdown">'
+ '<a href="/foo/" class="dropdown-toggle" data-toggle="dropdown">Dropdown</a>'
- + '<ul class="dropdown-menu">'
- + '<li><a href="#">Secondary link</a></li>'
- + '<li><a href="#">Something else here</a></li>'
- + '<li class="divider"/>'
- + '<li><a href="#">Another link</a></li>'
- + '</ul>'
- + '</li>'
- + '</ul>'
- var $dropdown = $(dropdownHTML).find('[data-toggle="dropdown"]').bootstrapDropdown().trigger('click')
-
- assert.ok($dropdown.parent('.dropdown').hasClass('show'), '"show" class added on click')
+ + '<div class="dropdown-menu">'
+ + '<a class="dropdown-item" href="#">Secondary link</a>'
+ + '<a class="dropdown-item" href="#">Something else here</a>'
+ + '<div class="divider"/>'
+ + '<a class="dropdown-item" href="#">Another link</a>'
+ + '</div>'
+ + '</div>'
+ + '</div>'
+ var $dropdown = $(dropdownHTML).find('[data-toggle="dropdown"]').bootstrapDropdown()
+ $dropdown
+ .parent('.dropdown')
+ .on('shown.bs.dropdown', function () {
+ assert.ok($dropdown.parent('.dropdown').hasClass('show'), '"show" class added on click')
+ done()
+ })
+ $dropdown.trigger('click')
})
QUnit.test('should remove "show" class if body is clicked', function (assert) {
assert.expect(2)
- var dropdownHTML = '<ul class="tabs">'
- + '<li class="dropdown">'
+ var done = assert.async()
+ var dropdownHTML = '<div class="tabs">'
+ + '<div class="dropdown">'
+ '<a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown</a>'
- + '<ul class="dropdown-menu">'
- + '<li><a href="#">Secondary link</a></li>'
- + '<li><a href="#">Something else here</a></li>'
- + '<li class="divider"/>'
- + '<li><a href="#">Another link</a></li>'
- + '</ul>'
- + '</li>'
- + '</ul>'
+ + '<div class="dropdown-menu">'
+ + '<a class="dropdown-item" href="#">Secondary link</a>'
+ + '<a class="dropdown-item" href="#">Something else here</a>'
+ + '<div class="divider"/>'
+ + '<a class="dropdown-item" href="#">Another link</a>'
+ + '</div>'
+ + '</div>'
+ + '</div>'
var $dropdown = $(dropdownHTML)
.appendTo('#qunit-fixture')
.find('[data-toggle="dropdown"]')
.bootstrapDropdown()
- .trigger('click')
- assert.ok($dropdown.parent('.dropdown').hasClass('show'), '"show" class added on click')
- $(document.body).trigger('click')
- assert.ok(!$dropdown.parent('.dropdown').hasClass('show'), '"show" class removed')
+ $dropdown
+ .parent('.dropdown')
+ .on('shown.bs.dropdown', function () {
+ assert.ok($dropdown.parent('.dropdown').hasClass('show'), '"show" class added on click')
+ $(document.body).trigger('click')
+ }).on('hidden.bs.dropdown', function () {
+ assert.ok(!$dropdown.parent('.dropdown').hasClass('show'), '"show" class removed')
+ done()
+ })
+ $dropdown.trigger('click')
})
- QUnit.test('should remove "show" class if body is focused', function (assert) {
+ QUnit.test('should remove "show" class if tabbing outside of menu', function (assert) {
assert.expect(2)
+ var done = assert.async()
var dropdownHTML = '<div class="tabs">'
+ '<div class="dropdown">'
+ '<a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown</a>'
@@ -209,30 +234,37 @@ $(function () {
.appendTo('#qunit-fixture')
.find('[data-toggle="dropdown"]')
.bootstrapDropdown()
- .trigger('click')
-
- assert.ok($dropdown.parent('.dropdown').hasClass('show'), '"show" class added on click')
- $(document.body).trigger('focusin')
- assert.ok(!$dropdown.parent('.dropdown').hasClass('show'), '"show" class removed')
+ $dropdown
+ .parent('.dropdown')
+ .on('shown.bs.dropdown', function () {
+ assert.ok($dropdown.parent('.dropdown').hasClass('show'), '"show" class added on click')
+ var e = $.Event('keyup')
+ e.which = 9 // Tab
+ $(document.body).trigger(e)
+ }).on('hidden.bs.dropdown', function () {
+ assert.ok(!$dropdown.parent('.dropdown').hasClass('show'), '"show" class removed')
+ done()
+ })
+ $dropdown.trigger('click')
})
QUnit.test('should remove "show" class if body is clicked, with multiple dropdowns', function (assert) {
assert.expect(7)
- var dropdownHTML = '<ul class="nav">'
- + '<li><a href="#menu1">Menu 1</a></li>'
- + '<li class="dropdown" id="testmenu">'
+ var done = assert.async()
+ var dropdownHTML = '<div class="nav">'
+ + '<div class="dropdown" id="testmenu">'
+ '<a class="dropdown-toggle" data-toggle="dropdown" href="#testmenu">Test menu <span class="caret"/></a>'
- + '<ul class="dropdown-menu">'
- + '<li><a href="#sub1">Submenu 1</a></li>'
- + '</ul>'
- + '</li>'
- + '</ul>'
+ + '<div class="dropdown-menu">'
+ + '<a class="dropdown-item" href="#sub1">Submenu 1</a>'
+ + '</div>'
+ + '</div>'
+ + '</div>'
+ '<div class="btn-group">'
+ '<button class="btn">Actions</button>'
- + '<button class="btn dropdown-toggle" data-toggle="dropdown"><span class="caret"/></button>'
- + '<ul class="dropdown-menu">'
- + '<li><a href="#">Action 1</a></li>'
- + '</ul>'
+ + '<button class="btn dropdown-toggle" data-toggle="dropdown"></button>'
+ + '<div class="dropdown-menu">'
+ + '<a class="dropdown-item" href="#">Action 1</a>'
+ + '</div>'
+ '</div>'
var $dropdowns = $(dropdownHTML).appendTo('#qunit-fixture').find('[data-toggle="dropdown"]')
var $first = $dropdowns.first()
@@ -240,21 +272,31 @@ $(function () {
assert.strictEqual($dropdowns.length, 2, 'two dropdowns')
+ $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')
+ $(document.body).trigger('click')
+ }).on('hidden.bs.dropdown', function () {
+ assert.strictEqual($('#qunit-fixture .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')
+ $(document.body).trigger('click')
+ }).on('hidden.bs.dropdown', function () {
+ assert.strictEqual($('#qunit-fixture .show').length, 0, '"show" class removed')
+ done()
+ })
$first.trigger('click')
- assert.strictEqual($first.parents('.show').length, 1, '"show" class added on click')
- assert.strictEqual($('#qunit-fixture .show').length, 1, 'only one dropdown is shown')
- $(document.body).trigger('click')
- assert.strictEqual($('#qunit-fixture .show').length, 0, '"show" class removed')
-
- $last.trigger('click')
- assert.strictEqual($last.parent('.show').length, 1, '"show" class added on click')
- assert.strictEqual($('#qunit-fixture .show').length, 1, 'only one dropdown is shown')
- $(document.body).trigger('click')
- assert.strictEqual($('#qunit-fixture .show').length, 0, '"show" class removed')
})
- QUnit.test('should remove "show" class if body is focused, with multiple dropdowns', function (assert) {
+ QUnit.test('should remove "show" class if body if tabbing outside of menu, with multiple dropdowns', function (assert) {
assert.expect(7)
+ var done = assert.async()
var dropdownHTML = '<div class="nav">'
+ '<div class="dropdown" id="testmenu">'
+ '<a class="dropdown-toggle" data-toggle="dropdown" href="#testmenu">Test menu <span class="caret"/></a>'
@@ -276,32 +318,45 @@ $(function () {
assert.strictEqual($dropdowns.length, 2, 'two dropdowns')
+ $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')
+ 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')
+ $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')
+ 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')
+ done()
+ })
$first.trigger('click')
- assert.strictEqual($first.parents('.show').length, 1, '"show" class added on click')
- assert.strictEqual($('#qunit-fixture .show').length, 1, 'only one dropdown is show')
- $(document.body).trigger('focusin')
- assert.strictEqual($('#qunit-fixture .show').length, 0, '"show" class removed')
-
- $last.trigger('click')
- assert.strictEqual($last.parent('.show').length, 1, '"show" class added on click')
- assert.strictEqual($('#qunit-fixture .show').length, 1, 'only one dropdown is show')
- $(document.body).trigger('focusin')
- assert.strictEqual($('#qunit-fixture .show').length, 0, '"show" class removed')
})
QUnit.test('should fire show and hide event', function (assert) {
assert.expect(2)
- var dropdownHTML = '<ul class="tabs">'
- + '<li class="dropdown">'
+ var dropdownHTML = '<div class="tabs">'
+ + '<div class="dropdown">'
+ '<a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown</a>'
- + '<ul class="dropdown-menu">'
- + '<li><a href="#">Secondary link</a></li>'
- + '<li><a href="#">Something else here</a></li>'
- + '<li class="divider"/>'
- + '<li><a href="#">Another link</a></li>'
- + '</ul>'
- + '</li>'
- + '</ul>'
+ + '<div class="dropdown-menu">'
+ + '<a class="dropdown-item" href="#">Secondary link</a>'
+ + '<a class="dropdown-item" href="#">Something else here</a>'
+ + '<div class="divider"/>'
+ + '<a class="dropdown-item" href="#">Another link</a>'
+ + '</div>'
+ + '</div>'
+ + '</div>'
var $dropdown = $(dropdownHTML)
.appendTo('#qunit-fixture')
.find('[data-toggle="dropdown"]')
@@ -326,17 +381,17 @@ $(function () {
QUnit.test('should fire shown and hidden event', function (assert) {
assert.expect(2)
- var dropdownHTML = '<ul class="tabs">'
- + '<li class="dropdown">'
+ var dropdownHTML = '<div class="tabs">'
+ + '<div class="dropdown">'
+ '<a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown</a>'
- + '<ul class="dropdown-menu">'
- + '<li><a href="#">Secondary link</a></li>'
- + '<li><a href="#">Something else here</a></li>'
- + '<li class="divider"/>'
- + '<li><a href="#">Another link</a></li>'
- + '</ul>'
- + '</li>'
- + '</ul>'
+ + '<div class="dropdown-menu">'
+ + '<a class="dropdown-item" href="#">Secondary link</a>'
+ + '<a class="dropdown-item" href="#">Something else here</a>'
+ + '<div class="divider"/>'
+ + '<a class="dropdown-item" href="#">Another link</a>'
+ + '</div>'
+ + '</div>'
+ + '</div>'
var $dropdown = $(dropdownHTML)
.appendTo('#qunit-fixture')
.find('[data-toggle="dropdown"]')
@@ -360,17 +415,17 @@ $(function () {
QUnit.test('should fire shown and hidden event with a relatedTarget', function (assert) {
assert.expect(2)
- var dropdownHTML = '<ul class="tabs">'
- + '<li class="dropdown">'
+ var dropdownHTML = '<div class="tabs">'
+ + '<div class="dropdown">'
+ '<a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown</a>'
- + '<ul class="dropdown-menu">'
- + '<li><a href="#">Secondary link</a></li>'
- + '<li><a href="#">Something else here</a></li>'
- + '<li class="divider"/>'
- + '<li><a href="#">Another link</a></li>'
- + '</ul>'
- + '</li>'
- + '</ul>'
+ + '<div class="dropdown-menu">'
+ + '<a class="dropdown-item" href="#">Secondary link</a>'
+ + '<a class="dropdown-item" href="#">Something else here</a>'
+ + '<div class="divider"/>'
+ + '<a class="dropdown-item" href="#">Another link</a>'
+ + '</div>'
+ + '</div>'
+ + '</div>'
var $dropdown = $(dropdownHTML)
.appendTo('#qunit-fixture')
.find('[data-toggle="dropdown"]')
@@ -394,19 +449,19 @@ $(function () {
assert.expect(3)
var done = assert.async()
- var dropdownHTML = '<ul class="tabs">'
- + '<li class="dropdown">'
+ var dropdownHTML = '<div class="tabs">'
+ + '<div class="dropdown">'
+ '<a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown</a>'
- + '<ul class="dropdown-menu">'
- + '<li><a href="#">Secondary link</a></li>'
- + '<li><a href="#">Something else here</a></li>'
- + '<li class="divider"/>'
- + '<li><a href="#">Another link</a></li>'
- + '<li><input type="text" id="input"></li>'
- + '<li><textarea id="textarea"/></li>'
- + '</ul>'
- + '</li>'
- + '</ul>'
+ + '<div class="dropdown-menu">'
+ + '<a class="dropdown-item" href="#">Secondary link</a>'
+ + '<a class="dropdown-item" href="#">Something else here</a>'
+ + '<div class="divider"/>'
+ + '<a class="dropdown-item" href="#">Another link</a>'
+ + '<input type="text" id="input">'
+ + '<textarea id="textarea"/>'
+ + '</div>'
+ + '</div>'
+ + '</div>'
var $dropdown = $(dropdownHTML)
.appendTo('#qunit-fixture')
.find('[data-toggle="dropdown"]')
@@ -433,63 +488,124 @@ $(function () {
})
QUnit.test('should skip disabled element when using keyboard navigation', function (assert) {
- assert.expect(1)
- var dropdownHTML = '<ul class="tabs">'
- + '<li class="dropdown">'
+ assert.expect(2)
+ var done = assert.async()
+ var dropdownHTML = '<div class="tabs">'
+ + '<div class="dropdown">'
+ + '<a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown</a>'
+ + '<div class="dropdown-menu">'
+ + '<a class="dropdown-item disabled" href="#">Disabled link</a>'
+ + '<a class="dropdown-item" href="#">Another link</a>'
+ + '</div>'
+ + '</div>'
+ + '</div>'
+ var $dropdown = $(dropdownHTML)
+ .appendTo('#qunit-fixture')
+ .find('[data-toggle="dropdown"]')
+ .bootstrapDropdown()
+
+ $dropdown
+ .parent('.dropdown')
+ .on('shown.bs.dropdown', function () {
+ assert.ok(true, 'shown was fired')
+ $dropdown.trigger($.Event('keydown', { which: 40 }))
+ $dropdown.trigger($.Event('keydown', { which: 40 }))
+ assert.ok(!$(document.activeElement).is('.disabled'), '.disabled is not focused')
+ done()
+ })
+ $dropdown.trigger('click')
+ })
+
+ QUnit.test('should focus next/previous element when using keyboard navigation', function (assert) {
+ assert.expect(4)
+ var done = assert.async()
+ var dropdownHTML = '<div class="tabs">'
+ + '<div class="dropdown">'
+ '<a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown</a>'
- + '<ul class="dropdown-menu">'
- + '<li class="disabled"><a href="#">Disabled link</a></li>'
- + '<li><a href="#">Another link</a></li>'
- + '</ul>'
- + '</li>'
- + '</ul>'
+ + '<div class="dropdown-menu">'
+ + '<a id="item1" class="dropdown-item" href="#">A link</a>'
+ + '<a id="item2" class="dropdown-item" href="#">Another link</a>'
+ + '</div>'
+ + '</div>'
+ + '</div>'
var $dropdown = $(dropdownHTML)
.appendTo('#qunit-fixture')
.find('[data-toggle="dropdown"]')
.bootstrapDropdown()
- .trigger('click')
- $dropdown.trigger($.Event('keydown', { which: 40 }))
- $dropdown.trigger($.Event('keydown', { which: 40 }))
+ $dropdown
+ .parent('.dropdown')
+ .on('shown.bs.dropdown', function () {
+ assert.ok(true, 'shown was fired')
+ $dropdown.trigger($.Event('keydown', { which: 40 }))
+ assert.ok($(document.activeElement).is($('#item1')), 'item1 is focused')
+
+ $(document.activeElement).trigger($.Event('keydown', { which: 40 }))
+ assert.ok($(document.activeElement).is($('#item2')), 'item2 is focused')
+
+ $(document.activeElement).trigger($.Event('keydown', { which: 38 }))
+ assert.ok($(document.activeElement).is($('#item1')), 'item1 is focused')
+ done()
+ })
+ $dropdown.trigger('click')
- assert.ok(!$(document.activeElement).parent().is('.disabled'), '.disabled is not focused')
})
QUnit.test('should not close the dropdown if the user clicks on a text field', function (assert) {
assert.expect(1)
- var dropdownHTML = '<div class="btn-group">'
+ var done = assert.async()
+ var dropdownHTML = '<div class="dropdown">'
+ '<button type="button" data-toggle="dropdown">Dropdown</button>'
- + '<ul class="dropdown-menu">'
- + '<li><input id="textField" type="text" /></li>'
- + '</ul>'
+ + '<div class="dropdown-menu">'
+ + '<input id="textField" type="text" />'
+ + '</div>'
+ '</div>'
var $dropdown = $(dropdownHTML)
.appendTo('#qunit-fixture')
.find('[data-toggle="dropdown"]')
.bootstrapDropdown()
- .trigger('click')
- $('#textField').trigger('click')
-
- assert.ok($dropdown.parent('.btn-group').hasClass('show'), 'dropdown menu is shown')
+ $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')
+ })
+ $dropdown.trigger('click')
})
QUnit.test('should not close the dropdown if the user clicks on a textarea', function (assert) {
assert.expect(1)
- var dropdownHTML = '<div class="btn-group">'
+ var done = assert.async()
+ var dropdownHTML = '<div class="dropdown">'
+ '<button type="button" data-toggle="dropdown">Dropdown</button>'
- + '<ul class="dropdown-menu">'
- + '<li><textarea id="textArea"></textarea></li>'
- + '</ul>'
+ + '<div class="dropdown-menu">'
+ + '<textarea id="textArea"></textarea>'
+ + '</div>'
+ '</div>'
var $dropdown = $(dropdownHTML)
.appendTo('#qunit-fixture')
.find('[data-toggle="dropdown"]')
.bootstrapDropdown()
- .trigger('click')
-
- $('#textArea').trigger('click')
- assert.ok($dropdown.parent('.btn-group').hasClass('show'), 'dropdown menu is shown')
+ $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')
+ })
+ $dropdown.trigger('click')
})
})
diff --git a/js/tests/visual/carousel.html b/js/tests/visual/carousel.html
index ad249d874..8d71a97bd 100644
--- a/js/tests/visual/carousel.html
+++ b/js/tests/visual/carousel.html
@@ -18,7 +18,7 @@
<li data-target="#carousel-example-generic" data-slide-to="1"></li>
<li data-target="#carousel-example-generic" data-slide-to="2"></li>
</ol>
- <div class="carousel-inner" role="listbox">
+ <div class="carousel-inner">
<div class="carousel-item active">
<img src="https://37.media.tumblr.com/tumblr_m8tay0JcfG1qa42jro1_1280.jpg" alt="First slide">
</div>