Skip to content
300 changes: 168 additions & 132 deletions ReactAndroid/src/androidTest/js/UIManagerTestModule.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,216 +9,252 @@

'use strict';

var BatchedBridge = require('BatchedBridge');
var React = require('React');
Comment thread
ronal2do marked this conversation as resolved.
Resolved
Comment thread
ronal2do marked this conversation as resolved.
Resolved
Comment thread
ronal2do marked this conversation as resolved.
Resolved
var StyleSheet = require('StyleSheet');
Comment thread
ronal2do marked this conversation as resolved.
Resolved
var View = require('View');
Comment thread
ronal2do marked this conversation as resolved.
Resolved
var Text = require('Text');

var createReactClass = require('create-react-class');
var renderApplication = require('renderApplication');

var FlexTestApp = createReactClass({
Comment thread
ronal2do marked this conversation as resolved.
Resolved
displayName: 'FlexTestApp',
_styles: StyleSheet.create({
Comment thread
ronal2do marked this conversation as resolved.
Resolved
container: {
width: 200,
height: 200,
flexDirection: 'row',
},
Comment thread
ronal2do marked this conversation as resolved.
Resolved
Comment thread
ronal2do marked this conversation as resolved.
Resolved
child: {
flex: 1,
},
absolute: {
position: 'absolute',
top: 15,
left: 10,
width: 50,
Comment thread
ronal2do marked this conversation as resolved.
Resolved
Comment thread
ronal2do marked this conversation as resolved.
Resolved
height: 60,
Comment thread
ronal2do marked this conversation as resolved.
Resolved
},
Comment thread
ronal2do marked this conversation as resolved.
Resolved
}),
Comment thread
ronal2do marked this conversation as resolved.
Resolved
render: function() {
const BatchedBridge = require('BatchedBridge');
const React = require('React');
const StyleSheet = require('StyleSheet');
const View = require('View');
const Text = require('Text');
Comment thread
ronal2do marked this conversation as resolved.
Resolved
Comment thread
ronal2do marked this conversation as resolved.
Resolved

const renderApplication = require('renderApplication');
Comment thread
ronal2do marked this conversation as resolved.
Resolved

Comment thread
ronal2do marked this conversation as resolved.
Resolved
Comment thread
ronal2do marked this conversation as resolved.
Resolved
Comment thread
ronal2do marked this conversation as resolved.
Resolved
type FlexTestAppProps = $ReadOnly<{||}>;
Comment thread
ronal2do marked this conversation as resolved.
Resolved
class FlexTestApp extends React.Component<FlexTestAppProps> {
render() {
return (
Comment thread
ronal2do marked this conversation as resolved.
Resolved
Comment thread
ronal2do marked this conversation as resolved.
Resolved
<View
Comment thread
ronal2do marked this conversation as resolved.
Resolved
Comment thread
ronal2do marked this conversation as resolved.
Resolved
style={this._styles.container}
style={FlexTestAppStyles.container}
testID="container"
Comment thread
ronal2do marked this conversation as resolved.
Resolved
collapsable={false}>
<View
style={[this._styles.child, {backgroundColor: '#ff0000'}]}
style={[FlexTestAppStyles.child, FlexTestAppStyles.bgRed]}
Comment thread
ronal2do marked this conversation as resolved.
Resolved
collapsable={false}
Comment thread
ronal2do marked this conversation as resolved.
Resolved
Comment thread
ronal2do marked this conversation as resolved.
Resolved
/>
<View
style={[this._styles.child, {backgroundColor: '#0000ff'}]}
style={[FlexTestAppStyles.child, FlexTestAppStyles.bgBlue]}
collapsable={false}
/>
</View>
Comment thread
ronal2do marked this conversation as resolved.
Resolved
);
}
Comment thread
ronal2do marked this conversation as resolved.
Resolved
Comment thread
ronal2do marked this conversation as resolved.
Resolved
}

const FlexTestAppStyles = StyleSheet.create({
container: {
width: 200,
height: 200,
flexDirection: 'row',
},
child: {
Comment thread
ronal2do marked this conversation as resolved.
Resolved
Comment thread
ronal2do marked this conversation as resolved.
Resolved
flex: 1,
},
absolute: {
position: 'absolute',
top: 15,
left: 10,
width: 50,
height: 60,
},
bgRed: {
backgroundColor: '#ff0000',
},
bgBlue: {
backgroundColor: '#0000ff',
},
});

var FlexWithText = createReactClass({
displayName: 'FlexWithText',
_styles: StyleSheet.create({
container: {
flexDirection: 'column',
margin: 20,
},
row: {
flexDirection: 'row',
alignItems: 'flex-end',
height: 300,
},
inner: {
flex: 1,
margin: 10,
},
}),
render: function() {
type FlexWithTextProps = $ReadOnly<{||}>;
class FlexWithText extends React.Component<FlexWithTextProps> {
render() {
return (
<View
style={this._styles.container}
style={FlexWithTextStyles.container}
testID="container"
collapsable={false}>
<View style={this._styles.row} collapsable={false}>
<Text style={this._styles.inner}>Hello</Text>
<Text style={this._styles.inner}>World</Text>
<View style={FlexWithTextStyles.row} collapsable={false}>
<Text style={FlexWithTextStyles.inner}>Hello</Text>
<Text style={FlexWithTextStyles.inner}>World</Text>
</View>
</View>
);
}
}

const FlexWithTextStyles = StyleSheet.create({
container: {
flexDirection: 'column',
margin: 20,
},
row: {
flexDirection: 'row',
alignItems: 'flex-end',
height: 300,
},
inner: {
flex: 1,
margin: 10,
},
});

var AbsolutePositionTestApp = createReactClass({
displayName: 'AbsolutePositionTestApp',
_styles: StyleSheet.create({
absolute: {
position: 'absolute',
top: 15,
left: 10,
width: 50,
height: 60,
},
Comment thread
ronal2do marked this conversation as resolved.
Resolved
}),
render: function() {
type AbsolutePositionTestAppProps = $ReadOnly<{||}>;
class AbsolutePositionTestApp extends React.Component<
AbsolutePositionTestAppProps,
> {
render() {
return (
Comment thread
ronal2do marked this conversation as resolved.
Resolved
<View
style={this._styles.absolute}
style={AbsolutePositionTestAppStyles.absolute}
testID="absolute"
collapsable={false}
/>
);
}
}

const AbsolutePositionTestAppStyles = StyleSheet.create({
absolute: {
position: 'absolute',
top: 15,
left: 10,
width: 50,
height: 60,
},
});

var AbsolutePositionBottomRightTestApp = createReactClass({
displayName: 'AbsolutePositionBottomRightTestApp',
_styles: StyleSheet.create({
container: {
width: 100,
height: 100,
},
absolute: {
position: 'absolute',
bottom: 15,
right: 10,
width: 50,
height: 60,
},
}),
render: function() {
type AbsolutePositionBottomRightTestAppProps = $ReadOnly<{||}>;
class AbsolutePositionBottomRightTestApp extends React.Component<
AbsolutePositionBottomRightTestAppProps,
> {
render() {
return (
<View
style={this._styles.container}
style={AbsolutePositionBottomRightTestAppStyles.container}
testID="container"
collapsable={false}>
<View style={this._styles.absolute} collapsable={false} />
<View
style={AbsolutePositionBottomRightTestAppStyles.absolute}
collapsable={false}
/>
</View>
);
}
}

const AbsolutePositionBottomRightTestAppStyles = StyleSheet.create({
container: {
width: 100,
height: 100,
},
absolute: {
position: 'absolute',
bottom: 15,
right: 10,
width: 50,
height: 60,
},
});

var CenteredTextView = createReactClass({
displayName: 'CenteredTextView',
_styles: StyleSheet.create({
parent: {
width: 200,
height: 100,
backgroundColor: '#aa3311',
justifyContent: 'center',
alignItems: 'center',
},
text: {
fontSize: 15,
color: '#672831',
},
}),
render: function() {
type CenteredTextViewProps = $ReadOnly<{|
text?: ?string,
|}>;
class CenteredTextView extends React.Component<CenteredTextViewProps> {
render() {
return (
<View collapsable={false}>
<View style={this._styles.parent} collapsable={false}>
<Text style={this._styles.text} testID="text">
<View style={CenteredTextViewStyles.parent} collapsable={false}>
<Text style={CenteredTextViewStyles.text} testID="text">
{this.props.text}
</Text>
</View>
</View>
);
}
}

const CenteredTextViewStyles = StyleSheet.create({
parent: {
width: 200,
height: 100,
backgroundColor: '#aa3311',
justifyContent: 'center',
alignItems: 'center',
},
text: {
fontSize: 15,
color: '#672831',
},
});

var flushUpdatePositionInList = null;
var UpdatePositionInListTestApp = createReactClass({
displayName: 'UpdatePositionInListTestApp',
_styles: StyleSheet.create({
element: {
height: 10,
},
active: {
height: 50,
},
}),
getInitialState: function() {
let flushUpdatePositionInList = null;

type UpdatePositionInListTestAppProps = $ReadOnly<{||}>;
type UpdatePositionInListTestAppState = $ReadOnly<{|
active: boolean,
|}>;
class UpdatePositionInListTestApp extends React.Component<
UpdatePositionInListTestAppProps,
UpdatePositionInListTestAppState,
> {
state = {
active: false,
};

constructor(...args) {
super(...args);
flushUpdatePositionInList = () => this.setState({active: true});
return {active: false};
},
render: function() {
}

Comment thread
ronal2do marked this conversation as resolved.
Resolved
render() {
return (
<View collapsable={false} testID="container">
<View style={this._styles.element} collapsable={false} />
<View
style={UpdatePositionInListTestAppStyles.element}
collapsable={false}
/>
<View
style={[
this._styles.element,
this.state.active && this._styles.active,
UpdatePositionInListTestAppStyles.element,
this.state.active && UpdatePositionInListTestAppStyles.active,
]}
collapsable={false}
/>
<View style={this._styles.element} collapsable={false} />
<View
style={UpdatePositionInListTestAppStyles.element}
collapsable={false}
/>
</View>
);
}
}

const UpdatePositionInListTestAppStyles = StyleSheet.create({
element: {
height: 10,
},
active: {
height: 50,
},
});

var UIManagerTestModule = {
renderFlexTestApplication: function(rootTag) {
const UIManagerTestModule = {
renderFlexTestApplication(rootTag) {
renderApplication(FlexTestApp, {}, rootTag);
},
renderFlexWithTextApplication: function(rootTag) {
renderFlexWithTextApplication(rootTag) {
renderApplication(FlexWithText, {}, rootTag);
},
renderAbsolutePositionBottomRightTestApplication: function(rootTag) {
renderAbsolutePositionBottomRightTestApplication(rootTag) {
renderApplication(AbsolutePositionBottomRightTestApp, {}, rootTag);
},
renderAbsolutePositionTestApplication: function(rootTag) {
renderAbsolutePositionTestApplication(rootTag) {
renderApplication(AbsolutePositionTestApp, {}, rootTag);
},
renderCenteredTextViewTestApplication: function(rootTag, text) {
renderCenteredTextViewTestApplication(rootTag, text) {
renderApplication(CenteredTextView, {text: text}, rootTag);
},
renderUpdatePositionInListTestApplication: function(rootTag) {
renderUpdatePositionInListTestApplication(rootTag) {
renderApplication(UpdatePositionInListTestApp, {}, rootTag);
},
flushUpdatePositionInList: function() {
flushUpdatePositionInList();
},
flushUpdatePositionInList,
};

BatchedBridge.registerCallableModule(
Expand Down