-
Notifications
You must be signed in to change notification settings - Fork 455
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
chore: move things to individual files
- Loading branch information
1 parent
d658112
commit 373cec8
Showing
10 changed files
with
494 additions
and
504 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,151 @@ | ||
import {wrapAsync} from '../wrap-async' | ||
import { | ||
fireEvent, | ||
getMouseEventOptions, | ||
getPreviouslyFocusedElement, | ||
} from './utils' | ||
|
||
async function clickLabel(label, init) { | ||
await fireEvent.mouseOver(label, getMouseEventOptions('mouseover', init)) | ||
await fireEvent.mouseMove(label, getMouseEventOptions('mousemove', init)) | ||
await fireEvent.mouseDown(label, getMouseEventOptions('mousedown', init)) | ||
await fireEvent.mouseUp(label, getMouseEventOptions('mouseup', init)) | ||
await fireEvent.click(label, getMouseEventOptions('click', init)) | ||
|
||
// clicking the label will trigger a click of the label.control | ||
// however, it will not focus the label.control so we have to do it | ||
// ourselves. | ||
if (label.control) label.control.focus() | ||
} | ||
|
||
async function clickBooleanElement(element, init) { | ||
if (element.disabled) return | ||
|
||
await fireEvent.mouseOver(element, getMouseEventOptions('mouseover', init)) | ||
await fireEvent.mouseMove(element, getMouseEventOptions('mousemove', init)) | ||
await fireEvent.mouseDown(element, getMouseEventOptions('mousedown', init)) | ||
await fireEvent.focus(element) | ||
await fireEvent.mouseUp(element, getMouseEventOptions('mouseup', init)) | ||
await fireEvent.click(element, getMouseEventOptions('click', init)) | ||
} | ||
|
||
async function clickElement(element, previousElement, init) { | ||
await fireEvent.mouseOver(element, getMouseEventOptions('mouseover', init)) | ||
await fireEvent.mouseMove(element, getMouseEventOptions('mousemove', init)) | ||
const continueDefaultHandling = await fireEvent.mouseDown( | ||
element, | ||
getMouseEventOptions('mousedown', init), | ||
) | ||
const shouldFocus = element.ownerDocument.activeElement !== element | ||
if (continueDefaultHandling) { | ||
if (previousElement) previousElement.blur() | ||
if (shouldFocus) element.focus() | ||
} | ||
await fireEvent.mouseUp(element, getMouseEventOptions('mouseup', init)) | ||
await fireEvent.click(element, getMouseEventOptions('click', init, 1)) | ||
const parentLabel = element.closest('label') | ||
if (parentLabel?.control) parentLabel?.control.focus?.() | ||
} | ||
|
||
async function dblClickElement(element, previousElement, init) { | ||
await fireEvent.mouseOver(element, getMouseEventOptions('mouseover', init)) | ||
await fireEvent.mouseMove(element, getMouseEventOptions('mousemove', init)) | ||
const continueDefaultHandling = await fireEvent.mouseDown( | ||
element, | ||
getMouseEventOptions('mousedown', init), | ||
) | ||
const shouldFocus = element.ownerDocument.activeElement !== element | ||
if (continueDefaultHandling) { | ||
if (previousElement) previousElement.blur() | ||
if (shouldFocus) element.focus() | ||
} | ||
await fireEvent.mouseUp(element, getMouseEventOptions('mouseup', init)) | ||
await fireEvent.click(element, getMouseEventOptions('click', init, 1)) | ||
const parentLabel = element.closest('label') | ||
if (parentLabel?.control) parentLabel?.control.focus?.() | ||
|
||
await fireEvent.mouseDown(element, getMouseEventOptions('mousedown', init, 1)) | ||
await fireEvent.mouseUp(element, getMouseEventOptions('mouseup', init, 1)) | ||
await fireEvent.click(element, getMouseEventOptions('click', init, 2)) | ||
await fireEvent.dblClick(element, getMouseEventOptions('dblclick', init, 2)) | ||
} | ||
|
||
async function dblClickCheckbox(checkbox, init) { | ||
await fireEvent.mouseOver(checkbox, getMouseEventOptions('mouseover', init)) | ||
await fireEvent.mouseMove(checkbox, getMouseEventOptions('mousemove', init)) | ||
await fireEvent.mouseDown(checkbox, getMouseEventOptions('mousedown', init)) | ||
await fireEvent.focus(checkbox) | ||
await fireEvent.mouseUp(checkbox, getMouseEventOptions('mouseup', init)) | ||
await fireEvent.click(checkbox, getMouseEventOptions('click', init, 1)) | ||
await fireEvent.mouseDown( | ||
checkbox, | ||
getMouseEventOptions('mousedown', init, 1), | ||
) | ||
await fireEvent.mouseUp(checkbox, getMouseEventOptions('mouseup', init, 1)) | ||
await fireEvent.click(checkbox, getMouseEventOptions('click', init, 2)) | ||
} | ||
|
||
async function click(element, init) { | ||
const previouslyFocusedElement = getPreviouslyFocusedElement(element) | ||
if (previouslyFocusedElement) { | ||
await fireEvent.mouseMove( | ||
previouslyFocusedElement, | ||
getMouseEventOptions('mousemove', init), | ||
) | ||
await fireEvent.mouseLeave( | ||
previouslyFocusedElement, | ||
getMouseEventOptions('mouseleave', init), | ||
) | ||
} | ||
|
||
switch (element.tagName) { | ||
case 'LABEL': | ||
await clickLabel(element, init) | ||
break | ||
case 'INPUT': | ||
if (element.type === 'checkbox' || element.type === 'radio') { | ||
await clickBooleanElement(element, init) | ||
break | ||
} | ||
// eslint-disable-next-line no-fallthrough | ||
default: | ||
await clickElement(element, previouslyFocusedElement, init) | ||
} | ||
} | ||
click = wrapAsync(click) | ||
|
||
async function dblClick(element, init) { | ||
const previouslyFocusedElement = getPreviouslyFocusedElement(element) | ||
if (previouslyFocusedElement) { | ||
await fireEvent.mouseMove( | ||
previouslyFocusedElement, | ||
getMouseEventOptions('mousemove', init), | ||
) | ||
await fireEvent.mouseLeave( | ||
previouslyFocusedElement, | ||
getMouseEventOptions('mouseleave', init), | ||
) | ||
} | ||
|
||
switch (element.tagName) { | ||
case 'INPUT': | ||
if (element.type === 'checkbox') { | ||
await dblClickCheckbox(element, previouslyFocusedElement, init) | ||
break | ||
} | ||
// eslint-disable-next-line no-fallthrough | ||
default: | ||
await dblClickElement(element, previouslyFocusedElement, init) | ||
} | ||
} | ||
dblClick = wrapAsync(dblClick) | ||
|
||
export { | ||
click, | ||
dblClick, | ||
clickLabel, | ||
clickBooleanElement, | ||
clickElement, | ||
dblClickElement, | ||
dblClickCheckbox, | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
import {wrapAsync} from '../wrap-async' | ||
import {fireEvent, getMouseEventOptions} from './utils' | ||
|
||
async function hover(element, init) { | ||
await fireEvent.mouseOver(element, getMouseEventOptions('mouseover', init)) | ||
await fireEvent.mouseEnter(element, getMouseEventOptions('mouseenter', init)) | ||
await fireEvent.mouseMove(element, getMouseEventOptions('mousemove', init)) | ||
} | ||
hover = wrapAsync(hover) | ||
|
||
async function unhover(element, init) { | ||
await fireEvent.mouseMove(element, getMouseEventOptions('mousemove', init)) | ||
await fireEvent.mouseOut(element, getMouseEventOptions('mouseout', init)) | ||
await fireEvent.mouseLeave(element, getMouseEventOptions('mouseleave', init)) | ||
} | ||
unhover = wrapAsync(unhover) | ||
|
||
export {hover, unhover} |
Oops, something went wrong.