mirror of
https://github.com/status-im/react-native.git
synced 2025-02-23 06:38:13 +00:00
Summary: Fixes two types of warnings that occur when running E2E tests: 1. A deprecation warning from Jest: 'Option "setupTestFrameworkScriptFile" was replaced by configuration "setupFilesAfterEnv", which supports multiple paths.' 2. YellowBox warnings when running the app in debug mode, about components that are deprecated and that require main queue setup. By fixing these warnings, we increase contributors' confidence that things are working correctly, and draw attention to any warnings that they _should_ pay attention to, if and when they arise. I feel confident that we should hide the deprecated-component warnings; we _want_ to use these components because we want them to be tested, until they're removed entirely. For the warning "Module RCTImagePickerManager requires main queue setup", if that's something that can be fixed with reasonable effort in the RNTester code then I think it would be better to do so. Otherwise, I think it is good to hide the warning, because this is a condition we expect: it's not something a contributor should pay attention to. Pull Request resolved: https://github.com/facebook/react-native/pull/22621 Differential Revision: D13468553 Pulled By: hramos fbshipit-source-id: 1a5952087dd6fcc9ba08ff7a60ad9f5b075bef57
195 lines
5.1 KiB
JavaScript
195 lines
5.1 KiB
JavaScript
/**
|
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*
|
|
* @format
|
|
* @flow
|
|
*/
|
|
|
|
'use strict';
|
|
|
|
const AsyncStorage = require('AsyncStorage');
|
|
const BackHandler = require('BackHandler');
|
|
const Linking = require('Linking');
|
|
const React = require('react');
|
|
const ReactNative = require('react-native');
|
|
const RNTesterActions = require('./RNTesterActions');
|
|
const RNTesterExampleContainer = require('./RNTesterExampleContainer');
|
|
const RNTesterExampleList = require('./RNTesterExampleList');
|
|
const RNTesterList = require('./RNTesterList.ios');
|
|
const RNTesterNavigationReducer = require('./RNTesterNavigationReducer');
|
|
const URIActionMap = require('./URIActionMap');
|
|
|
|
const {
|
|
Button,
|
|
AppRegistry,
|
|
SnapshotViewIOS,
|
|
StyleSheet,
|
|
Text,
|
|
View,
|
|
SafeAreaView,
|
|
YellowBox,
|
|
} = ReactNative;
|
|
|
|
import type {RNTesterExample} from './RNTesterList.ios';
|
|
import type {RNTesterAction} from './RNTesterActions';
|
|
import type {RNTesterNavigationState} from './RNTesterNavigationReducer';
|
|
|
|
type Props = {
|
|
exampleFromAppetizeParams: string,
|
|
};
|
|
|
|
YellowBox.ignoreWarnings([
|
|
'ListView and SwipeableListView are deprecated',
|
|
'ListView is deprecated',
|
|
'Module RCTImagePickerManager requires main queue setup',
|
|
]);
|
|
|
|
const APP_STATE_KEY = 'RNTesterAppState.v2';
|
|
|
|
const Header = ({onBack, title}: {onBack?: () => mixed, title: string}) => (
|
|
<SafeAreaView style={styles.headerContainer}>
|
|
<View style={styles.header}>
|
|
<View style={styles.headerCenter}>
|
|
<Text style={styles.title}>{title}</Text>
|
|
</View>
|
|
{onBack && (
|
|
<View style={styles.headerLeft}>
|
|
<Button title="Back" onPress={onBack} />
|
|
</View>
|
|
)}
|
|
</View>
|
|
</SafeAreaView>
|
|
);
|
|
|
|
class RNTesterApp extends React.Component<Props, RNTesterNavigationState> {
|
|
UNSAFE_componentWillMount() {
|
|
BackHandler.addEventListener('hardwareBackPress', this._handleBack);
|
|
}
|
|
|
|
componentDidMount() {
|
|
Linking.getInitialURL().then(url => {
|
|
AsyncStorage.getItem(APP_STATE_KEY, (err, storedString) => {
|
|
const exampleAction = URIActionMap(
|
|
this.props.exampleFromAppetizeParams,
|
|
);
|
|
const urlAction = URIActionMap(url);
|
|
const launchAction = exampleAction || urlAction;
|
|
const initialAction = launchAction || {type: 'InitialAction'};
|
|
this.setState(RNTesterNavigationReducer(undefined, initialAction));
|
|
});
|
|
});
|
|
|
|
Linking.addEventListener('url', url => {
|
|
this._handleAction(URIActionMap(url));
|
|
});
|
|
}
|
|
|
|
_handleBack = () => {
|
|
this._handleAction(RNTesterActions.Back());
|
|
};
|
|
|
|
_handleAction = (action: ?RNTesterAction) => {
|
|
if (!action) {
|
|
return;
|
|
}
|
|
const newState = RNTesterNavigationReducer(this.state, action);
|
|
if (this.state !== newState) {
|
|
this.setState(newState, () =>
|
|
AsyncStorage.setItem(APP_STATE_KEY, JSON.stringify(this.state)),
|
|
);
|
|
}
|
|
};
|
|
|
|
render() {
|
|
if (!this.state) {
|
|
return null;
|
|
}
|
|
if (this.state.openExample) {
|
|
const Component = RNTesterList.Modules[this.state.openExample];
|
|
if (Component.external) {
|
|
return <Component onExampleExit={this._handleBack} />;
|
|
} else {
|
|
return (
|
|
<View style={styles.exampleContainer}>
|
|
<Header onBack={this._handleBack} title={Component.title} />
|
|
<RNTesterExampleContainer module={Component} />
|
|
</View>
|
|
);
|
|
}
|
|
}
|
|
return (
|
|
<View style={styles.exampleContainer}>
|
|
<Header title="RNTester" />
|
|
<RNTesterExampleList
|
|
onNavigate={this._handleAction}
|
|
list={RNTesterList}
|
|
/>
|
|
</View>
|
|
);
|
|
}
|
|
}
|
|
|
|
const styles = StyleSheet.create({
|
|
headerContainer: {
|
|
borderBottomWidth: StyleSheet.hairlineWidth,
|
|
borderBottomColor: '#96969A',
|
|
backgroundColor: '#F5F5F6',
|
|
},
|
|
header: {
|
|
height: 40,
|
|
flexDirection: 'row',
|
|
},
|
|
headerLeft: {},
|
|
headerCenter: {
|
|
flex: 1,
|
|
position: 'absolute',
|
|
top: 7,
|
|
left: 0,
|
|
right: 0,
|
|
},
|
|
title: {
|
|
fontSize: 19,
|
|
fontWeight: '600',
|
|
textAlign: 'center',
|
|
},
|
|
exampleContainer: {
|
|
flex: 1,
|
|
},
|
|
});
|
|
|
|
AppRegistry.registerComponent('SetPropertiesExampleApp', () =>
|
|
require('./SetPropertiesExampleApp'),
|
|
);
|
|
AppRegistry.registerComponent('RootViewSizeFlexibilityExampleApp', () =>
|
|
require('./RootViewSizeFlexibilityExampleApp'),
|
|
);
|
|
AppRegistry.registerComponent('RNTesterApp', () => RNTesterApp);
|
|
|
|
// Register suitable examples for snapshot tests
|
|
RNTesterList.ComponentExamples.concat(RNTesterList.APIExamples).forEach(
|
|
(Example: RNTesterExample) => {
|
|
const ExampleModule = Example.module;
|
|
if (ExampleModule.displayName) {
|
|
class Snapshotter extends React.Component<{}> {
|
|
render() {
|
|
return (
|
|
<SnapshotViewIOS>
|
|
<RNTesterExampleContainer module={ExampleModule} />
|
|
</SnapshotViewIOS>
|
|
);
|
|
}
|
|
}
|
|
|
|
AppRegistry.registerComponent(
|
|
ExampleModule.displayName,
|
|
() => Snapshotter,
|
|
);
|
|
}
|
|
},
|
|
);
|
|
|
|
module.exports = RNTesterApp;
|