/** * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * * @emails react-core */ 'use strict'; const ReactDOMServerIntegrationUtils = require('./utils/ReactDOMServerIntegrationTestUtils'); let React; let ReactDOMClient; let ReactDOMServer; function initModules() { // Reset warning cache. jest.resetModules(); React = require('react'); ReactDOMClient = require('react-dom/client'); ReactDOMServer = require('react-dom/server'); // Make them available to the helpers. return { ReactDOMClient, ReactDOMServer, }; } const {resetModules, itClientRenders, renderIntoDom, serverRender} = ReactDOMServerIntegrationUtils(initModules); describe('ReactDOMServerIntegrationUserInteraction', () => { let ControlledInput, ControlledTextArea, ControlledCheckbox, ControlledSelect; beforeEach(() => { resetModules(); ControlledInput = class extends React.Component { static defaultProps = { type: 'text', initialValue: 'Hello', }; constructor() { super(...arguments); this.state = {value: this.props.initialValue}; } handleChange(event) { if (this.props.onChange) { this.props.onChange(event); } this.setState({value: event.target.value}); } componentDidMount() { if (this.props.cascade) { // Trigger a cascading render immediately upon hydration which rerenders the input. this.setState({cascade: true}); } } render() { return ( ); } }; ControlledTextArea = class extends React.Component { constructor() { super(); this.state = {value: 'Hello'}; } handleChange(event) { if (this.props.onChange) { this.props.onChange(event); } this.setState({value: event.target.value}); } componentDidMount() { if (this.props.cascade) { // Trigger a cascading render immediately upon hydration which rerenders the textarea. this.setState({cascade: true}); } } render() { return (