diff --git a/src/__tests__/mouse-enter-related-target.js b/src/__tests__/mouse-enter-related-target.js new file mode 100644 index 00000000..f3ffda3d --- /dev/null +++ b/src/__tests__/mouse-enter-related-target.js @@ -0,0 +1,74 @@ +import * as React from 'react' +import {render, fireEvent, screen} from '../' + +test('mouseEnter forwards relatedTarget correctly', () => { + const handleMouseEnter = jest.fn() + + render(
Hello
) + + const element = screen.getByText('Hello') + const mockRelatedTarget = document.createElement('div') + + fireEvent.mouseEnter(element, { + relatedTarget: mockRelatedTarget, + }) + + expect(handleMouseEnter).toHaveBeenCalledTimes(1) + expect(handleMouseEnter.mock.calls[0][0].relatedTarget).toBe( + mockRelatedTarget, + ) +}) + +test('mouseOver forwards relatedTarget correctly (for comparison)', () => { + const handleMouseOver = jest.fn() + + render(
Hello
) + + const element = screen.getByText('Hello') + const mockRelatedTarget = document.createElement('div') + + fireEvent.mouseOver(element, { + relatedTarget: mockRelatedTarget, + }) + + expect(handleMouseOver).toHaveBeenCalledTimes(1) + expect(handleMouseOver.mock.calls[0][0].relatedTarget).toBe( + mockRelatedTarget, + ) +}) + +test('pointerEnter forwards relatedTarget correctly', () => { + const handlePointerEnter = jest.fn() + + render(
Hello
) + + const element = screen.getByText('Hello') + const mockRelatedTarget = document.createElement('div') + + fireEvent.pointerEnter(element, { + relatedTarget: mockRelatedTarget, + }) + + expect(handlePointerEnter).toHaveBeenCalledTimes(1) + expect(handlePointerEnter.mock.calls[0][0].relatedTarget).toBe( + mockRelatedTarget, + ) +}) + +test('mouseLeave forwards relatedTarget correctly', () => { + const handleMouseLeave = jest.fn() + + render(
Hello
) + + const element = screen.getByText('Hello') + const mockRelatedTarget = document.createElement('div') + + fireEvent.mouseLeave(element, { + relatedTarget: mockRelatedTarget, + }) + + expect(handleMouseLeave).toHaveBeenCalledTimes(1) + expect(handleMouseLeave.mock.calls[0][0].relatedTarget).toBe( + mockRelatedTarget, + ) +}) \ No newline at end of file diff --git a/src/fire-event.js b/src/fire-event.js index cb790c7f..a18ac379 100644 --- a/src/fire-event.js +++ b/src/fire-event.js @@ -15,24 +15,24 @@ Object.keys(dtlFireEvent).forEach(key => { // @link https://github.com/facebook/react/blob/b87aabdfe1b7461e7331abb3601d9e6bb27544bc/packages/react-dom/src/events/EnterLeaveEventPlugin.js#L24-L31 const mouseEnter = fireEvent.mouseEnter const mouseLeave = fireEvent.mouseLeave -fireEvent.mouseEnter = (...args) => { - mouseEnter(...args) - return fireEvent.mouseOver(...args) +fireEvent.mouseEnter = (node, init) => { + mouseEnter(node, init) + return fireEvent.mouseOver(node, init) } -fireEvent.mouseLeave = (...args) => { - mouseLeave(...args) - return fireEvent.mouseOut(...args) +fireEvent.mouseLeave = (node, init) => { + mouseLeave(node, init) + return fireEvent.mouseOut(node, init) } const pointerEnter = fireEvent.pointerEnter const pointerLeave = fireEvent.pointerLeave -fireEvent.pointerEnter = (...args) => { - pointerEnter(...args) - return fireEvent.pointerOver(...args) +fireEvent.pointerEnter = (node, init) => { + pointerEnter(node, init) + return fireEvent.pointerOver(node, init) } -fireEvent.pointerLeave = (...args) => { - pointerLeave(...args) - return fireEvent.pointerOut(...args) +fireEvent.pointerLeave = (node, init) => { + pointerLeave(node, init) + return fireEvent.pointerOut(node, init) } const select = fireEvent.select @@ -57,13 +57,13 @@ fireEvent.select = (node, init) => { // @link https://github.com/facebook/react/pull/19186 const blur = fireEvent.blur const focus = fireEvent.focus -fireEvent.blur = (...args) => { - fireEvent.focusOut(...args) - return blur(...args) +fireEvent.blur = (node, init) => { + fireEvent.focusOut(node, init) + return blur(node, init) } -fireEvent.focus = (...args) => { - fireEvent.focusIn(...args) - return focus(...args) +fireEvent.focus = (node, init) => { + fireEvent.focusIn(node, init) + return focus(node, init) } export {fireEvent}