diff --git a/__tests__/react/click.js b/__tests__/react/click.js index a7a7edf9..6136919e 100644 --- a/__tests__/react/click.js +++ b/__tests__/react/click.js @@ -321,4 +321,22 @@ describe("userEvent.click", () => { userEvent.click(getByText("Submit")); expect(onSubmit).not.toHaveBeenCalled(); }); + + it.each(["input", "textarea"])( + "should not give focus for <%s> when mouseDown is prevented", + type => { + const { getByTestId } = render( + React.createElement(type, { + "data-testid": "element", + onMouseDown: (evt) => { + evt.preventDefault(); + }, + }) + ); + + userEvent.click(getByTestId("element")); + + expect(getByTestId("element")).not.toHaveFocus(); + } + ); }); diff --git a/src/index.js b/src/index.js index ae9c6f0f..caf7e0a5 100644 --- a/src/index.js +++ b/src/index.js @@ -44,8 +44,10 @@ function clickBooleanElement(element) { function clickElement(element) { fireEvent.mouseOver(element); fireEvent.mouseMove(element); - fireEvent.mouseDown(element); - element.focus(); + const continueDefaultHandling = fireEvent.mouseDown(element); + if (continueDefaultHandling) { + element.focus(); + } fireEvent.mouseUp(element); fireEvent.click(element);