Files
react-native/IntegrationTests/SyncMethodTest.js
Spencer Ahrens 3155ddf2e8 Support callbacks in synchronous native functions
Summary:
We need to move animated native module calls to synchronous so we can properly thread them in with mounting instructions in Fabric. Some of them take callbacks so we need to add support for that when switching to synchronous.

A side benefit is that we can unify codepaths a little more with async callbacks.

Reviewed By: shergin

Differential Revision: D14790898

fbshipit-source-id: dc222b9e74375e046e8a9b1b19d72f652dc6722c
2019-04-08 09:15:13 -07:00

54 lines
1.4 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 strict-local
*/
'use strict';
const React = require('react');
const ReactNative = require('react-native');
const {View} = ReactNative;
const {TestModule, RNTesterTestModule} = ReactNative.NativeModules;
class SyncMethodTest extends React.Component<{}> {
componentDidMount() {
if (
RNTesterTestModule.echoString('test string value') !== 'test string value'
) {
throw new Error('Something wrong with echoString sync method');
}
if (RNTesterTestModule.methodThatReturnsNil() != null) {
throw new Error('Something wrong with methodThatReturnsNil sync method');
}
let response;
RNTesterTestModule.methodThatCallsCallbackWithString('test', echo => {
response = echo;
});
requestAnimationFrame(() => {
if (response === 'test') {
TestModule.markTestCompleted();
} else {
throw new Error(
'Something wrong with methodThatCallsCallbackWithString sync method, ' +
'got response ' +
JSON.stringify(response),
);
}
});
}
render(): React.Node {
return <View />;
}
}
SyncMethodTest.displayName = 'SyncMethodTest';
module.exports = SyncMethodTest;