]> git.ipfire.org Git - thirdparty/bootstrap.git/commitdiff
No propagating escape event in an open dropdown.
authorlouismaxime.piton <louismaxime.piton@orange.com>
Wed, 16 Mar 2022 16:51:43 +0000 (17:51 +0100)
committerGeoSot <geo.sotis@gmail.com>
Fri, 18 Mar 2022 23:43:43 +0000 (01:43 +0200)
js/tests/unit/dropdown.spec.js

index ef97fc71bc8d49f2b006a37294ca52bb8b8154d6..bde5697d049399b15566bf43de9b6643136c989f 100644 (file)
@@ -1943,6 +1943,41 @@ describe('Dropdown', () => {
       })
     })
 
+    it('should not propagate escape key events if dropdown is open', () => {
+      return new Promise(resolve => {
+        fixtureEl.innerHTML = [
+          '<div class="parent">',
+          '  <div class="dropdown">',
+          '    <button class="btn dropdown-toggle" data-bs-toggle="dropdown">Dropdown</button>',
+          '    <div class="dropdown-menu">',
+          '      <a class="dropdown-item" href="#">Some Item</a>',
+          '    </div>',
+          '  </div>',
+          '</div>'
+        ].join('')
+
+        const parent = fixtureEl.querySelector('.parent')
+        const toggle = fixtureEl.querySelector('[data-bs-toggle="dropdown"]')
+
+        const parentKeyHandler = jasmine.createSpy('parentKeyHandler')
+
+        parent.addEventListener('keydown', parentKeyHandler)
+        parent.addEventListener('keyup', () => {
+          expect(parentKeyHandler).not.toHaveBeenCalled()
+          resolve()
+        })
+
+        const keydownEscape = createEvent('keydown', { bubbles: true })
+        keydownEscape.key = 'Escape'
+        const keyupEscape = createEvent('keyup', { bubbles: true })
+        keyupEscape.key = 'Escape'
+
+        toggle.click()
+        toggle.dispatchEvent(keydownEscape)
+        toggle.dispatchEvent(keyupEscape)
+      })
+    })
+
     it('should close dropdown using `escape` button, and return focus to its trigger', () => {
       return new Promise(resolve => {
         fixtureEl.innerHTML = [