ensure that you can't use Enter to invoke the Switch

And a bunch of keyPress and keyboard related shenanigans
This commit is contained in:
Robin Malfait
2020-10-06 14:00:01 +02:00
parent 6ea5c93457
commit fecd61dff6
6 changed files with 115 additions and 41 deletions
@@ -4,21 +4,21 @@ import { disposables } from '../utils/disposables'
const d = disposables()
export const Keys: Record<string, Partial<KeyboardEvent>> = {
Space: { key: ' ' },
Enter: { key: 'Enter' },
Escape: { key: 'Escape' },
Backspace: { key: 'Backspace' },
Space: { key: ' ', keyCode: 32 },
Enter: { key: 'Enter', keyCode: 13 },
Escape: { key: 'Escape', keyCode: 27 },
Backspace: { key: 'Backspace', keyCode: 8 },
ArrowUp: { key: 'ArrowUp' },
ArrowDown: { key: 'ArrowDown' },
ArrowUp: { key: 'ArrowUp', keyCode: 38 },
ArrowDown: { key: 'ArrowDown', keyCode: 40 },
Home: { key: 'Home' },
End: { key: 'End' },
Home: { key: 'Home', keyCode: 36 },
End: { key: 'End', keyCode: 35 },
PageUp: { key: 'PageUp' },
PageDown: { key: 'PageDown' },
PageUp: { key: 'PageUp', keyCode: 33 },
PageDown: { key: 'PageDown', keyCode: 34 },
Tab: { key: 'Tab' },
Tab: { key: 'Tab', keyCode: 9 },
}
export function shift(event: Partial<KeyboardEvent>) {
@@ -38,11 +38,19 @@ export async function type(events: Partial<KeyboardEvent>[]) {
let element = document.activeElement
events.forEach(event => {
const cancelled = !fireEvent.keyDown(element, event)
if (!cancelled && event.key === Keys.Tab.key) {
const cancelled1 = !fireEvent.keyDown(element, event)
// Special treatment for `Tab` on an element
if (!cancelled1 && event.key === Keys.Tab.key) {
element = focusNext(event)
}
fireEvent.keyPress(element, event)
const cancelled2 = !fireEvent.keyPress(element, event)
// Special treatment for `Enter` on a button element
if (!cancelled2 && event.key === Keys.Enter.key && element instanceof HTMLButtonElement) {
fireEvent.click(element)
}
fireEvent.keyUp(element, event)
})