|
1 | 1 | import ReactDOM from 'react-dom'
|
2 |
| -import {Simulate} from 'react-dom/test-utils' |
3 |
| -import {getQueriesForElement, prettyDOM} from 'dom-testing-library' |
| 2 | +import {getQueriesForElement, prettyDOM, fireEvent} from 'dom-testing-library' |
4 | 3 |
|
5 | 4 | const mountedContainers = new Set()
|
6 | 5 |
|
@@ -59,14 +58,29 @@ function cleanupAtContainer(container) {
|
59 | 58 | mountedContainers.delete(container)
|
60 | 59 | }
|
61 | 60 |
|
62 |
| -// fallback to synthetic events for React events that the DOM doesn't support |
63 |
| -const syntheticEvents = ['select', 'mouseEnter', 'mouseLeave'] |
64 |
| -syntheticEvents.forEach(eventName => { |
65 |
| - document.addEventListener(eventName.toLowerCase(), e => { |
66 |
| - Simulate[eventName](e.target, e) |
67 |
| - }) |
68 |
| -}) |
| 61 | +// React event system tracks native mouseOver/mouseOut events for |
| 62 | +// running onMouseEnter/onMouseLeave handlers |
| 63 | +// @link https://github.com/facebook/react/blob/b87aabdfe1b7461e7331abb3601d9e6bb27544bc/packages/react-dom/src/events/EnterLeaveEventPlugin.js#L24-L31 |
| 64 | +fireEvent.mouseEnter = fireEvent.mouseOver |
| 65 | +fireEvent.mouseLeave = fireEvent.mouseOut |
| 66 | + |
| 67 | +fireEvent.select = (node, init) => { |
| 68 | + // React tracks this event only on focused inputs |
| 69 | + node.focus() |
| 70 | + |
| 71 | + // React creates this event when one of the following native events happens |
| 72 | + // - contextMenu |
| 73 | + // - mouseUp |
| 74 | + // - dragEnd |
| 75 | + // - keyUp |
| 76 | + // - keyDown |
| 77 | + // so we can use any here |
| 78 | + // @link https://github.com/facebook/react/blob/b87aabdfe1b7461e7331abb3601d9e6bb27544bc/packages/react-dom/src/events/SelectEventPlugin.js#L203-L224 |
| 79 | + fireEvent.keyUp(node, init) |
| 80 | +} |
69 | 81 |
|
70 | 82 | // just re-export everything from dom-testing-library
|
71 | 83 | export * from 'dom-testing-library'
|
72 | 84 | export {render, cleanup}
|
| 85 | + |
| 86 | +/* eslint func-name-matching:0 */ |
0 commit comments