Skip to content

Commit 5581122

Browse files
committed
Add unit test
1 parent bf35ca9 commit 5581122

File tree

1 file changed

+87
-0
lines changed

1 file changed

+87
-0
lines changed

packages/react-dom/src/__tests__/ReactDOMServerIntegrationUserInteraction-test.js

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,12 @@ describe('ReactDOMServerIntegrationUserInteraction', () => {
5252
}
5353
this.setState({value: event.target.value});
5454
}
55+
componentDidMount() {
56+
if (this.props.cascade) {
57+
// Trigger a cascading render immediately upon hydration which rerenders the input.
58+
this.setState({cascade: true});
59+
}
60+
}
5561
render() {
5662
return (
5763
<input
@@ -73,6 +79,12 @@ describe('ReactDOMServerIntegrationUserInteraction', () => {
7379
}
7480
this.setState({value: event.target.value});
7581
}
82+
componentDidMount() {
83+
if (this.props.cascade) {
84+
// Trigger a cascading render immediately upon hydration which rerenders the textarea.
85+
this.setState({cascade: true});
86+
}
87+
}
7688
render() {
7789
return (
7890
<textarea
@@ -93,6 +105,12 @@ describe('ReactDOMServerIntegrationUserInteraction', () => {
93105
}
94106
this.setState({value: event.target.checked});
95107
}
108+
componentDidMount() {
109+
if (this.props.cascade) {
110+
// Trigger a cascading render immediately upon hydration which rerenders the checkbox.
111+
this.setState({cascade: true});
112+
}
113+
}
96114
render() {
97115
return (
98116
<input
@@ -114,6 +132,12 @@ describe('ReactDOMServerIntegrationUserInteraction', () => {
114132
}
115133
this.setState({value: event.target.value});
116134
}
135+
componentDidMount() {
136+
if (this.props.cascade) {
137+
// Trigger a cascading render immediately upon hydration which rerenders the select.
138+
this.setState({cascade: true});
139+
}
140+
}
117141
render() {
118142
return (
119143
<select
@@ -361,5 +385,68 @@ describe('ReactDOMServerIntegrationUserInteraction', () => {
361385
gate(flags => flags.enableHydrationChangeEvent) ? 1 : 0,
362386
);
363387
});
388+
389+
// @gate enableHydrationChangeEvent
390+
it('should not blow away user-entered text cascading hydration to a controlled input', async () => {
391+
let changeCount = 0;
392+
await testUserInteractionBeforeClientRender(
393+
<ControlledInput onChange={() => changeCount++} cascade={true} />,
394+
);
395+
expect(changeCount).toBe(
396+
gate(flags => flags.enableHydrationChangeEvent) ? 1 : 0,
397+
);
398+
});
399+
400+
// @gate enableHydrationChangeEvent
401+
it('should not blow away user-interaction cascading hydration to a controlled range input', async () => {
402+
let changeCount = 0;
403+
await testUserInteractionBeforeClientRender(
404+
<ControlledInput
405+
type="range"
406+
initialValue="0.25"
407+
onChange={() => changeCount++}
408+
cascade={true}
409+
/>,
410+
'0.25',
411+
'1',
412+
);
413+
expect(changeCount).toBe(
414+
gate(flags => flags.enableHydrationChangeEvent) ? 1 : 0,
415+
);
416+
});
417+
418+
// @gate enableHydrationChangeEvent
419+
it('should not blow away user-entered text cascading hydration to a controlled checkbox', async () => {
420+
let changeCount = 0;
421+
await testUserInteractionBeforeClientRender(
422+
<ControlledCheckbox onChange={() => changeCount++} cascade={true} />,
423+
true,
424+
false,
425+
'checked',
426+
);
427+
expect(changeCount).toBe(
428+
gate(flags => flags.enableHydrationChangeEvent) ? 1 : 0,
429+
);
430+
});
431+
432+
// @gate enableHydrationChangeEvent
433+
it('should not blow away user-entered text cascading hydration to a controlled textarea', async () => {
434+
let changeCount = 0;
435+
await testUserInteractionBeforeClientRender(
436+
<ControlledTextArea onChange={() => changeCount++} cascade={true} />,
437+
);
438+
expect(changeCount).toBe(1);
439+
});
440+
441+
// @gate enableHydrationChangeEvent
442+
it('should not blow away user-selected value cascading hydration to an controlled select', async () => {
443+
let changeCount = 0;
444+
await testUserInteractionBeforeClientRender(
445+
<ControlledSelect onChange={() => changeCount++} cascade={true} />,
446+
);
447+
expect(changeCount).toBe(
448+
gate(flags => flags.enableHydrationChangeEvent) ? 1 : 0,
449+
);
450+
});
364451
});
365452
});

0 commit comments

Comments
 (0)