Skip to content

Commit

Permalink
Convert SelectEventPlugin to createRoot (#28076)
Browse files Browse the repository at this point in the history
  • Loading branch information
eps1lon authored Jan 26, 2024
1 parent b30ec67 commit 0c45e83
Showing 1 changed file with 54 additions and 31 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,16 @@
'use strict';

let React;
let ReactDOM;
let ReactDOMClient;
let act;

describe('SelectEventPlugin', () => {
let container;

beforeEach(() => {
React = require('react');
ReactDOM = require('react-dom');

ReactDOMClient = require('react-dom/client');
act = require('internal-test-utils').act;
container = document.createElement('div');
document.body.appendChild(container);
});
Expand All @@ -29,7 +30,7 @@ describe('SelectEventPlugin', () => {
});

// See https://github.com/facebook/react/pull/3639 for details.
it('does not get confused when dependent events are registered independently', () => {
it('does not get confused when dependent events are registered independently', async () => {
const select = jest.fn();
const onSelect = event => {
expect(typeof event).toBe('object');
Expand All @@ -38,11 +39,14 @@ describe('SelectEventPlugin', () => {
select(event.currentTarget);
};

// Pass `onMouseDown` so React registers a top-level listener.
const node = ReactDOM.render(
<input type="text" onMouseDown={function () {}} />,
container,
);
const root = ReactDOMClient.createRoot(container);
const node = await (async function () {
await act(() => {
// Pass `onMouseDown` so React registers a top-level listener.
root.render(<input type="text" onMouseDown={function () {}} />);
});
return container.firstChild;
})();

// Trigger `mousedown` and `mouseup`. Note that
// React is not currently listening to `mouseup`.
Expand All @@ -59,8 +63,10 @@ describe('SelectEventPlugin', () => {
}),
);

// Now subscribe to `onSelect`.
ReactDOM.render(<input type="text" onSelect={onSelect} />, container);
await act(() => {
// Now subscribe to `onSelect`
root.render(<input type="text" onSelect={onSelect} />);
});
node.focus();

// This triggers a `select` event in our polyfill.
Expand All @@ -74,7 +80,7 @@ describe('SelectEventPlugin', () => {
expect(select).toHaveBeenCalledTimes(1);
});

it('should fire `onSelect` when a listener is present', () => {
it('should fire `onSelect` when a listener is present', async () => {
const select = jest.fn();
const onSelect = event => {
expect(typeof event).toBe('object');
Expand All @@ -83,10 +89,14 @@ describe('SelectEventPlugin', () => {
select(event.currentTarget);
};

const node = ReactDOM.render(
<input type="text" onSelect={onSelect} />,
container,
);
const node = await (async function () {
const root = ReactDOMClient.createRoot(container);
await act(() => {
root.render(<input type="text" onSelect={onSelect} />);
});
return container.firstChild;
})();

node.focus();

let nativeEvent = new MouseEvent('focus', {
Expand All @@ -108,7 +118,7 @@ describe('SelectEventPlugin', () => {
expect(select).toHaveBeenCalledTimes(1);
});

it('should fire `onSelectCapture` when a listener is present', () => {
it('should fire `onSelectCapture` when a listener is present', async () => {
const select = jest.fn();
const onSelectCapture = event => {
expect(typeof event).toBe('object');
Expand All @@ -117,10 +127,14 @@ describe('SelectEventPlugin', () => {
select(event.currentTarget);
};

const node = ReactDOM.render(
<input type="text" onSelectCapture={onSelectCapture} />,
container,
);
const node = await (async function () {
const root = ReactDOMClient.createRoot(container);
await act(() => {
root.render(<input type="text" onSelectCapture={onSelectCapture} />);
});
return container.firstChild;
})();

node.focus();

let nativeEvent = new MouseEvent('focus', {
Expand All @@ -143,7 +157,7 @@ describe('SelectEventPlugin', () => {
});

// Regression test for https://github.com/facebook/react/issues/11379
it('should not wait for `mouseup` after receiving `dragend`', () => {
it('should not wait for `mouseup` after receiving `dragend`', async () => {
const select = jest.fn();
const onSelect = event => {
expect(typeof event).toBe('object');
Expand All @@ -152,10 +166,14 @@ describe('SelectEventPlugin', () => {
select(event.currentTarget);
};

const node = ReactDOM.render(
<input type="text" onSelect={onSelect} />,
container,
);
const node = await (async function () {
const root = ReactDOMClient.createRoot(container);
await act(() => {
root.render(<input type="text" onSelect={onSelect} />);
});
return container.firstChild;
})();

node.focus();

let nativeEvent = new MouseEvent('focus', {
Expand All @@ -177,12 +195,17 @@ describe('SelectEventPlugin', () => {
expect(select).toHaveBeenCalledTimes(1);
});

it('should handle selectionchange events', function () {
it('should handle selectionchange events', async function () {
const onSelect = jest.fn();
const node = ReactDOM.render(
<input type="text" onSelect={onSelect} />,
container,
);

const node = await (async function () {
const root = ReactDOMClient.createRoot(container);
await act(() => {
root.render(<input type="text" onSelect={onSelect} />);
});
return container.firstChild;
})();

node.focus();

// Make sure the event was not called before we emit the selection change event
Expand Down

0 comments on commit 0c45e83

Please sign in to comment.