mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/48097 Changelog: [internal] As per title, this allows us to specify both common and JS-only feature flags for tests in the docblock as pragmas (in the same pragma separated by spaces, or in different pragmas). E.g.: ``` /** * fantom_flags commonTestFlag:true * fantom_flags jsOnlyTestFlag:true */ ``` The feature flags are overridden automatically for us before the tests start. Reviewed By: javache Differential Revision: D66760121 fbshipit-source-id: 7e227e0035a170dab81b1e6ce39600a01a748867
98 lines
2.6 KiB
JavaScript
98 lines
2.6 KiB
JavaScript
/**
|
|
* 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.
|
|
*
|
|
* @flow strict-local
|
|
* @format
|
|
* @oncall react_native
|
|
* @fantom_flags enableFixForViewCommandRace:true
|
|
*/
|
|
|
|
import '../../../Core/InitializeCore.js';
|
|
import * as ReactNativeTester from '../../../../src/private/__tests__/ReactNativeTester';
|
|
import TextInput from '../TextInput';
|
|
import * as React from 'react';
|
|
import {useEffect, useLayoutEffect, useRef} from 'react';
|
|
|
|
describe('TextInput', () => {
|
|
it('creates view before dispatching view command from ref function', () => {
|
|
const root = ReactNativeTester.createRoot();
|
|
|
|
ReactNativeTester.runTask(() => {
|
|
root.render(
|
|
<TextInput
|
|
ref={node => {
|
|
if (node) {
|
|
node.focus();
|
|
}
|
|
}}
|
|
/>,
|
|
);
|
|
});
|
|
|
|
const mountingLogs = root.getMountingLogs();
|
|
|
|
expect(mountingLogs.length).toBe(2);
|
|
expect(mountingLogs[0]).toBe('create view type: `AndroidTextInput`');
|
|
expect(mountingLogs[1]).toBe(
|
|
'dispatch command `focus` on component `AndroidTextInput`',
|
|
);
|
|
});
|
|
|
|
it('creates view before dispatching view command from useLayoutEffect', () => {
|
|
const root = ReactNativeTester.createRoot();
|
|
|
|
function Component() {
|
|
const textInputRef = useRef<null | React.ElementRef<typeof TextInput>>(
|
|
null,
|
|
);
|
|
|
|
useLayoutEffect(() => {
|
|
textInputRef.current?.focus();
|
|
});
|
|
|
|
return <TextInput ref={textInputRef} />;
|
|
}
|
|
ReactNativeTester.runTask(() => {
|
|
root.render(<Component />);
|
|
});
|
|
|
|
const mountingLogs = root.getMountingLogs();
|
|
|
|
expect(mountingLogs.length).toBe(2);
|
|
expect(mountingLogs[0]).toBe('create view type: `AndroidTextInput`');
|
|
expect(mountingLogs[1]).toBe(
|
|
'dispatch command `focus` on component `AndroidTextInput`',
|
|
);
|
|
});
|
|
|
|
it('creates view before dispatching view command from useEffect', () => {
|
|
const root = ReactNativeTester.createRoot();
|
|
|
|
function Component() {
|
|
const textInputRef = useRef<null | React.ElementRef<typeof TextInput>>(
|
|
null,
|
|
);
|
|
|
|
useEffect(() => {
|
|
textInputRef.current?.focus();
|
|
});
|
|
|
|
return <TextInput ref={textInputRef} />;
|
|
}
|
|
ReactNativeTester.runTask(() => {
|
|
root.render(<Component />);
|
|
});
|
|
|
|
const mountingLogs = root.getMountingLogs();
|
|
|
|
expect(mountingLogs.length).toBe(2);
|
|
expect(mountingLogs[0]).toBe('create view type: `AndroidTextInput`');
|
|
expect(mountingLogs[1]).toBe(
|
|
'dispatch command `focus` on component `AndroidTextInput`',
|
|
);
|
|
});
|
|
});
|