Skip to content

Commit 4e544cf

Browse files
authored
[react-events] Split out mixed event responder tests (#16608)
1 parent f61138e commit 4e544cf

File tree

5 files changed

+403
-419
lines changed

5 files changed

+403
-419
lines changed

packages/react-dom/src/events/__tests__/DOMEventResponderSystem-test.internal.js

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -994,4 +994,68 @@ describe('DOMEventResponderSystem', () => {
994994
dispatchClickEvent(ref.current);
995995
expect(log).toEqual([{counter: 1}]);
996996
});
997+
998+
it('should correctly pass through event properties', () => {
999+
const timeStamps = [];
1000+
const ref = React.createRef();
1001+
const eventLog = [];
1002+
const logEvent = event => {
1003+
const propertiesWeCareAbout = {
1004+
counter: event.counter,
1005+
target: event.target,
1006+
timeStamp: event.timeStamp,
1007+
type: event.type,
1008+
};
1009+
timeStamps.push(event.timeStamp);
1010+
eventLog.push(propertiesWeCareAbout);
1011+
};
1012+
let counter = 0;
1013+
1014+
const TestResponder = createEventResponder({
1015+
targetEventTypes: ['click'],
1016+
onEvent(event, context, props) {
1017+
const obj = {
1018+
counter,
1019+
timeStamp: context.getTimeStamp(),
1020+
target: event.responderTarget,
1021+
type: 'click-test',
1022+
};
1023+
context.dispatchEvent(obj, props.onClick, DiscreteEvent);
1024+
},
1025+
});
1026+
1027+
const Component = () => {
1028+
const listener = React.unstable_useResponder(TestResponder, {
1029+
onClick: logEvent,
1030+
});
1031+
return <button ref={ref} listeners={listener} />;
1032+
};
1033+
ReactDOM.render(<Component />, container);
1034+
dispatchClickEvent(ref.current);
1035+
counter++;
1036+
dispatchClickEvent(ref.current);
1037+
counter++;
1038+
dispatchClickEvent(ref.current);
1039+
expect(typeof timeStamps[0] === 'number').toBe(true);
1040+
expect(eventLog).toEqual([
1041+
{
1042+
counter: 0,
1043+
target: ref.current,
1044+
timeStamp: timeStamps[0],
1045+
type: 'click-test',
1046+
},
1047+
{
1048+
counter: 1,
1049+
target: ref.current,
1050+
timeStamp: timeStamps[1],
1051+
type: 'click-test',
1052+
},
1053+
{
1054+
counter: 2,
1055+
target: ref.current,
1056+
timeStamp: timeStamps[2],
1057+
type: 'click-test',
1058+
},
1059+
]);
1060+
});
9971061
});

packages/react-events/src/dom/__tests__/Input-test.internal.js

Lines changed: 0 additions & 92 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ let ReactFeatureFlags;
1414
let ReactDOM;
1515
let InputResponder;
1616
let useInput;
17-
let usePress;
1817
let Scheduler;
1918

2019
const setUntrackedChecked = Object.getOwnPropertyDescriptor(
@@ -42,7 +41,6 @@ const modulesInit = () => {
4241
Scheduler = require('scheduler');
4342
InputResponder = require('react-events/input').InputResponder;
4443
useInput = require('react-events/input').useInput;
45-
usePress = require('react-events/press').usePress;
4644
};
4745

4846
describe('Input event responder', () => {
@@ -948,96 +946,6 @@ describe('Input event responder', () => {
948946
// Value should be the controlled value, not the original one
949947
expect(textarea.value).toBe('changed [!]');
950948
});
951-
952-
it('is async for non-input events', () => {
953-
const root = ReactDOM.unstable_createRoot(container);
954-
let input;
955-
956-
let ops = [];
957-
958-
function Component({
959-
innerRef,
960-
onChange,
961-
controlledValue,
962-
pressListener,
963-
}) {
964-
const inputListener = useInput({
965-
onChange,
966-
});
967-
return (
968-
<input
969-
type="text"
970-
ref={innerRef}
971-
value={controlledValue}
972-
listeners={[inputListener, pressListener]}
973-
/>
974-
);
975-
}
976-
977-
function PressWrapper({innerRef, onPress, onChange, controlledValue}) {
978-
const pressListener = usePress({
979-
onPress,
980-
});
981-
return (
982-
<Component
983-
onChange={onChange}
984-
innerRef={el => (input = el)}
985-
controlledValue={controlledValue}
986-
pressListener={pressListener}
987-
/>
988-
);
989-
}
990-
991-
class ControlledInput extends React.Component {
992-
state = {value: 'initial'};
993-
onChange = event => this.setState({value: event.target.value});
994-
reset = () => {
995-
this.setState({value: ''});
996-
};
997-
render() {
998-
ops.push(`render: ${this.state.value}`);
999-
const controlledValue =
1000-
this.state.value === 'changed' ? 'changed [!]' : this.state.value;
1001-
return (
1002-
<PressWrapper
1003-
onPress={this.reset}
1004-
onChange={this.onChange}
1005-
innerRef={el => (input = el)}
1006-
controlledValue={controlledValue}
1007-
/>
1008-
);
1009-
}
1010-
}
1011-
1012-
// Initial mount. Test that this is async.
1013-
root.render(<ControlledInput />);
1014-
// Should not have flushed yet.
1015-
expect(ops).toEqual([]);
1016-
expect(input).toBe(undefined);
1017-
// Flush callbacks.
1018-
Scheduler.unstable_flushAll();
1019-
expect(ops).toEqual(['render: initial']);
1020-
expect(input.value).toBe('initial');
1021-
1022-
ops = [];
1023-
1024-
// Trigger a click event
1025-
input.dispatchEvent(
1026-
new MouseEvent('mousedown', {bubbles: true, cancelable: true}),
1027-
);
1028-
input.dispatchEvent(
1029-
new MouseEvent('mouseup', {bubbles: true, cancelable: true}),
1030-
);
1031-
// Nothing should have changed
1032-
expect(ops).toEqual([]);
1033-
expect(input.value).toBe('initial');
1034-
1035-
// Flush callbacks.
1036-
Scheduler.unstable_flushAll();
1037-
// Now the click update has flushed.
1038-
expect(ops).toEqual(['render: ']);
1039-
expect(input.value).toBe('');
1040-
});
1041949
});
1042950
});
1043951

0 commit comments

Comments
 (0)