diff --git a/src/__tests__/events.js b/src/__tests__/events.js
index afe2193f..dc529344 100644
--- a/src/__tests__/events.js
+++ b/src/__tests__/events.js
@@ -153,6 +153,41 @@ eventTypes.forEach(({type, events, elementType, init}) => {
})
})
+eventTypes.forEach(({type, events, elementType, init}) => {
+ describe(`Native ${type} Events`, () => {
+ events.forEach(eventName => {
+ let nativeEventName = eventName.toLowerCase()
+
+ // The doubleClick synthetic event maps to the dblclick native event
+ if (nativeEventName === 'doubleclick') {
+ nativeEventName = 'dblclick'
+ }
+
+ it(`triggers native ${nativeEventName}`, () => {
+ const ref = React.createRef()
+ const spy = jest.fn()
+ const Element = elementType
+
+ const NativeEventElement = () => {
+ React.useEffect(() => {
+ const element = ref.current
+ element.addEventListener(nativeEventName, spy)
+ return () => {
+ element.removeEventListener(nativeEventName, spy)
+ }
+ })
+ return
+ }
+
+ render()
+
+ fireEvent[eventName](ref.current, init)
+ expect(spy).toHaveBeenCalledTimes(1)
+ })
+ })
+ })
+})
+
test('onChange works', () => {
const handleChange = jest.fn()
const {
diff --git a/src/pure.js b/src/pure.js
index 1b1838bf..40588797 100644
--- a/src/pure.js
+++ b/src/pure.js
@@ -128,10 +128,20 @@ Object.keys(dtlFireEvent).forEach(key => {
// React event system tracks native mouseOver/mouseOut events for
// running onMouseEnter/onMouseLeave handlers
// @link https://github.com/facebook/react/blob/b87aabdfe1b7461e7331abb3601d9e6bb27544bc/packages/react-dom/src/events/EnterLeaveEventPlugin.js#L24-L31
-fireEvent.mouseEnter = fireEvent.mouseOver
-fireEvent.mouseLeave = fireEvent.mouseOut
+const mouseEnter = fireEvent.mouseEnter
+const mouseLeave = fireEvent.mouseLeave
+fireEvent.mouseEnter = (...args) => {
+ mouseEnter(...args)
+ return fireEvent.mouseOver(...args)
+}
+fireEvent.mouseLeave = (...args) => {
+ mouseLeave(...args)
+ return fireEvent.mouseOut(...args)
+}
+const select = fireEvent.select
fireEvent.select = (node, init) => {
+ select(node, init)
// React tracks this event only on focused inputs
node.focus()