aboutsummaryrefslogtreecommitdiff
path: root/js/tests/unit/dropdown.spec.js
diff options
context:
space:
mode:
authoralpadev <[email protected]>2021-05-22 09:58:52 +0200
committerGitHub <[email protected]>2021-05-22 10:58:52 +0300
commitb39b665072a2d36914e741b2c11620323924be89 (patch)
treecaaf6f2f815901efff78bdca9796fb7a46d5f785 /js/tests/unit/dropdown.spec.js
parent803397554836dcba736eb50020ed3cea07b3a3ea (diff)
downloadbootstrap-b39b665072a2d36914e741b2c11620323924be89.tar.xz
bootstrap-b39b665072a2d36914e741b2c11620323924be89.zip
Automatically select an item in the dropdown when using arrow keys (#34052)
Diffstat (limited to 'js/tests/unit/dropdown.spec.js')
-rw-r--r--js/tests/unit/dropdown.spec.js41
1 files changed, 33 insertions, 8 deletions
diff --git a/js/tests/unit/dropdown.spec.js b/js/tests/unit/dropdown.spec.js
index 5275f1a55..390cddfbf 100644
--- a/js/tests/unit/dropdown.spec.js
+++ b/js/tests/unit/dropdown.spec.js
@@ -1561,7 +1561,7 @@ describe('Dropdown', () => {
triggerDropdown.click()
})
- it('should focus on the first element when using ArrowUp for the first time', done => {
+ it('should open the dropdown and focus on the last item when using ArrowUp for the first time', done => {
fixtureEl.innerHTML = [
'<div class="dropdown">',
' <button class="btn dropdown-toggle" data-bs-toggle="dropdown">Dropdown</button>',
@@ -1573,19 +1573,44 @@ describe('Dropdown', () => {
].join('')
const triggerDropdown = fixtureEl.querySelector('[data-bs-toggle="dropdown"]')
- const item1 = fixtureEl.querySelector('#item1')
+ const lastItem = fixtureEl.querySelector('#item2')
triggerDropdown.addEventListener('shown.bs.dropdown', () => {
- const keydown = createEvent('keydown')
- keydown.key = 'ArrowUp'
+ setTimeout(() => {
+ expect(document.activeElement).toEqual(lastItem, 'item2 is focused')
+ done()
+ })
+ })
- document.activeElement.dispatchEvent(keydown)
- expect(document.activeElement).toEqual(item1, 'item1 is focused')
+ const keydown = createEvent('keydown')
+ keydown.key = 'ArrowUp'
+ triggerDropdown.dispatchEvent(keydown)
+ })
- done()
+ it('should open the dropdown and focus on the first item when using ArrowDown for the first time', done => {
+ fixtureEl.innerHTML = [
+ '<div class="dropdown">',
+ ' <button class="btn dropdown-toggle" data-bs-toggle="dropdown">Dropdown</button>',
+ ' <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>'
+ ].join('')
+
+ const triggerDropdown = fixtureEl.querySelector('[data-bs-toggle="dropdown"]')
+ const firstItem = fixtureEl.querySelector('#item1')
+
+ triggerDropdown.addEventListener('shown.bs.dropdown', () => {
+ setTimeout(() => {
+ expect(document.activeElement).toEqual(firstItem, 'item1 is focused')
+ done()
+ })
})
- triggerDropdown.click()
+ const keydown = createEvent('keydown')
+ keydown.key = 'ArrowDown'
+ triggerDropdown.dispatchEvent(keydown)
})
it('should not close the dropdown if the user clicks on a text field within dropdown-menu', done => {