2015-03-14 01:32:38 +00:00
|
|
|
/**
|
2015-03-23 20:35:08 +00:00
|
|
|
* Copyright (c) 2015-present, Facebook, Inc.
|
|
|
|
*
|
2018-02-17 02:24:55 +00:00
|
|
|
* This source code is licensed under the MIT license found in the
|
|
|
|
* LICENSE file in the root directory of this source tree.
|
2015-03-14 01:32:38 +00:00
|
|
|
*
|
2015-11-18 16:25:30 +00:00
|
|
|
* @flow
|
2015-03-14 01:32:38 +00:00
|
|
|
*/
|
|
|
|
'use strict';
|
|
|
|
|
2016-04-09 03:36:40 +00:00
|
|
|
var React = require('react');
|
|
|
|
var ReactNative = require('react-native');
|
2015-03-14 01:32:38 +00:00
|
|
|
var {
|
|
|
|
AppRegistry,
|
|
|
|
ScrollView,
|
|
|
|
StyleSheet,
|
|
|
|
Text,
|
|
|
|
TouchableOpacity,
|
|
|
|
View,
|
2016-04-09 03:36:40 +00:00
|
|
|
} = ReactNative;
|
2015-03-14 01:32:38 +00:00
|
|
|
|
2017-05-06 03:50:47 +00:00
|
|
|
// Keep this list in sync with RNTesterIntegrationTests.m
|
2015-03-14 01:32:38 +00:00
|
|
|
var TESTS = [
|
|
|
|
require('./IntegrationTestHarnessTest'),
|
2015-03-18 20:37:14 +00:00
|
|
|
require('./TimersTest'),
|
2015-03-18 20:37:16 +00:00
|
|
|
require('./AsyncStorageTest'),
|
[ReactNative] Introduce onLayout events
Summary:
Simply add an `onLayout` callback to a native view component, and the callback
will be invoked with the current layout information when the view is mounted and
whenever the layout changes.
The only limitation is that scroll position and other stuff the layout system
isn't aware of is not taken into account. This is because onLayout events
wouldn't be triggered for these changes and if they are desired they should be
tracked separately (e.g. with `onScroll`) and combined.
Also fixes some bugs with LayoutAnimation callbacks.
@public
Test Plan:
- Run new LayoutEventsExample in UIExplorer and see it work correctly.
- New integration test passes internally (IntegrationTest project seems busted).
- New jest test case passes.
{F22318433}
```
2015-05-06 15:45:05.848 [info][tid:com.facebook.React.JavaScript] "Running application "UIExplorerApp" with appParams: {"rootTag":1,"initialProps":{}}. __DEV__ === true, development-level warning are ON, performance optimizations are OFF"
2015-05-06 15:45:05.881 [info][tid:com.facebook.React.JavaScript] "received text layout event
", {"target":27,"layout":{"y":123,"x":12.5,"width":140.5,"height":18}}
2015-05-06 15:45:05.882 [info][tid:com.facebook.React.JavaScript] "received image layout event
", {"target":23,"layout":{"y":12.5,"x":122,"width":50,"height":50}}
2015-05-06 15:45:05.883 [info][tid:com.facebook.React.JavaScript] "received view layout event
", {"target":22,"layout":{"y":70.5,"x":20,"width":294,"height":204}}
2015-05-06 15:45:05.897 [info][tid:com.facebook.React.JavaScript] "received text layout event
", {"target":27,"layout":{"y":206.5,"x":12.5,"width":140.5,"height":18}}
2015-05-06 15:45:05.897 [info][tid:com.facebook.React.JavaScript] "received view layout event
", {"target":22,"layout":{"y":70.5,"x":20,"width":294,"height":287.5}}
2015-05-06 15:45:09.847 [info][tid:com.facebook.React.JavaScript] "layout animation done."
2015-05-06 15:45:09.847 [info][tid:com.facebook.React.JavaScript] "received image layout event
", {"target":23,"layout":{"y":12.5,"x":82,"width":50,"height":50}}
2015-05-06 15:45:09.848 [info][tid:com.facebook.React.JavaScript] "received view layout event
", {"target":22,"layout":{"y":110.5,"x":60,"width":214,"height":287.5}}
2015-05-06 15:45:09.862 [info][tid:com.facebook.React.JavaScript] "received text layout event
", {"target":27,"layout":{"y":206.5,"x":12.5,"width":120,"height":68}}
2015-05-06 15:45:09.863 [info][tid:com.facebook.React.JavaScript] "received image layout event
", {"target":23,"layout":{"y":12.5,"x":55,"width":50,"height":50}}
2015-05-06 15:45:09.863 [info][tid:com.facebook.React.JavaScript] "received view layout event
", {"target":22,"layout":{"y":128,"x":60,"width":160,"height":337.5}}
```
2015-05-07 19:11:02 +00:00
|
|
|
require('./LayoutEventsTest'),
|
2015-05-20 06:47:38 +00:00
|
|
|
require('./AppEventsTest'),
|
2015-03-24 17:20:13 +00:00
|
|
|
require('./SimpleSnapshotTest'),
|
2017-01-18 00:58:27 +00:00
|
|
|
require('./ImageCachePolicyTest'),
|
2015-10-19 17:24:01 +00:00
|
|
|
require('./ImageSnapshotTest'),
|
2015-06-09 21:26:49 +00:00
|
|
|
require('./PromiseTest'),
|
2017-07-28 18:32:00 +00:00
|
|
|
require('./WebViewTest'),
|
2017-04-27 18:49:50 +00:00
|
|
|
require('./SyncMethodTest'),
|
2017-01-16 21:23:33 +00:00
|
|
|
require('./WebSocketTest'),
|
2017-06-21 01:42:46 +00:00
|
|
|
require('./AccessibilityManagerTest'),
|
2015-03-14 01:32:38 +00:00
|
|
|
];
|
|
|
|
|
|
|
|
TESTS.forEach(
|
2017-09-06 10:25:01 +00:00
|
|
|
/* $FlowFixMe(>=0.54.0 site=react_native_fb,react_native_oss) This comment
|
|
|
|
* suppresses an error found when Flow v0.54 was deployed. To see the error
|
|
|
|
* delete this comment and run Flow. */
|
2015-03-14 01:32:38 +00:00
|
|
|
(test) => AppRegistry.registerComponent(test.displayName, () => test)
|
|
|
|
);
|
|
|
|
|
2015-11-20 11:33:07 +00:00
|
|
|
// Modules required for integration tests
|
|
|
|
require('LoggingTestModule');
|
|
|
|
|
2015-12-02 03:09:01 +00:00
|
|
|
type Test = any;
|
|
|
|
|
2017-08-18 01:36:54 +00:00
|
|
|
class IntegrationTestsApp extends React.Component<{}, $FlowFixMeState> {
|
2016-07-26 08:00:02 +00:00
|
|
|
state = {
|
|
|
|
test: (null: ?Test),
|
|
|
|
};
|
|
|
|
|
|
|
|
render() {
|
2015-03-14 01:32:38 +00:00
|
|
|
if (this.state.test) {
|
|
|
|
return (
|
|
|
|
<ScrollView>
|
2017-08-29 21:54:33 +00:00
|
|
|
{/* $FlowFixMe(>=0.53.0 site=react_native_fb,react_native_oss) This
|
|
|
|
* comment suppresses an error when upgrading Flow's support for
|
|
|
|
* React. To see the error delete this comment and run Flow. */}
|
2015-03-14 01:32:38 +00:00
|
|
|
<this.state.test />
|
|
|
|
</ScrollView>
|
|
|
|
);
|
|
|
|
}
|
|
|
|
return (
|
|
|
|
<View style={styles.container}>
|
|
|
|
<Text style={styles.row}>
|
|
|
|
Click on a test to run it in this shell for easier debugging and
|
2015-07-07 23:19:40 +00:00
|
|
|
development. Run all tests in the testing environment with cmd+U in
|
2015-03-14 01:32:38 +00:00
|
|
|
Xcode.
|
|
|
|
</Text>
|
|
|
|
<View style={styles.separator} />
|
|
|
|
<ScrollView>
|
|
|
|
{TESTS.map((test) => [
|
2015-07-20 23:29:40 +00:00
|
|
|
<TouchableOpacity
|
|
|
|
onPress={() => this.setState({test})}
|
|
|
|
style={styles.row}>
|
|
|
|
<Text style={styles.testName}>
|
|
|
|
{test.displayName}
|
|
|
|
</Text>
|
2015-03-14 01:32:38 +00:00
|
|
|
</TouchableOpacity>,
|
|
|
|
<View style={styles.separator} />
|
|
|
|
])}
|
|
|
|
</ScrollView>
|
|
|
|
</View>
|
|
|
|
);
|
|
|
|
}
|
2016-07-26 08:00:02 +00:00
|
|
|
}
|
2015-03-14 01:32:38 +00:00
|
|
|
|
|
|
|
var styles = StyleSheet.create({
|
|
|
|
container: {
|
|
|
|
backgroundColor: 'white',
|
|
|
|
marginTop: 40,
|
|
|
|
margin: 15,
|
|
|
|
},
|
|
|
|
row: {
|
|
|
|
padding: 10,
|
|
|
|
},
|
|
|
|
testName: {
|
2015-03-25 23:22:59 +00:00
|
|
|
fontWeight: '500',
|
2015-03-14 01:32:38 +00:00
|
|
|
},
|
|
|
|
separator: {
|
|
|
|
height: 1,
|
|
|
|
backgroundColor: '#bbbbbb',
|
|
|
|
},
|
|
|
|
});
|
|
|
|
|
|
|
|
AppRegistry.registerComponent('IntegrationTestsApp', () => IntegrationTestsApp);
|