Move bridge dependencies into a single ReactTestFactory

Reviewed By: cjhopman

Differential Revision: D2816291

fb-gh-sync-id: 0eb654541cac7816922d948cc38a26fab44fad70
This commit is contained in:
Marc Horowitz
2016-01-29 00:56:51 -08:00
committed by facebook-github-bot-6
parent b9ceecb31f
commit 5e82094fcb
4 changed files with 129 additions and 60 deletions

View File

@@ -24,7 +24,7 @@ import com.facebook.infer.annotation.Assertions;
import com.facebook.react.bridge.BaseJavaModule;
import com.facebook.react.bridge.ReactContext;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.CatalystInstanceImpl;
import com.facebook.react.bridge.CatalystInstance;
import com.facebook.react.bridge.LifecycleEventListener;
import com.facebook.react.bridge.SoftAssertions;
import com.facebook.react.bridge.UiThreadUtil;
@@ -41,17 +41,16 @@ import com.facebook.react.modules.core.Timing;
*
* In order to write catalyst integration:
* 1) Make {@link ReactIntegrationTestCase} a base class of your test case
* 2) Use {@link ReactIntegrationTestCase.ReactTestInstanceBuilder}
* 2) Use {@link ReactTestHelper#catalystInstanceBuilder()}
* instead of {@link com.facebook.react.bridge.CatalystInstanceImpl.Builder} to build catalyst
* instance for testing purposes
*
*/
public abstract class ReactIntegrationTestCase extends AndroidTestCase {
private static final long SETUP_TIMEOUT_MS = 5000;
private static final long IDLE_TIMEOUT_MS = 15000;
private @Nullable CatalystInstanceImpl mInstance;
private @Nullable CatalystInstance mInstance;
private @Nullable ReactBridgeIdleSignaler mBridgeIdleSignaler;
private @Nullable ReactApplicationContext mReactContext;
@@ -143,31 +142,12 @@ public abstract class ReactIntegrationTestCase extends AndroidTestCase {
}
}
public class ReactTestInstanceBuilder extends CatalystInstanceImpl.Builder {
@Override
public CatalystInstanceImpl build() {
// Call build in separate looper and wait for it to finish before returning
final Event setupEvent = new Event();
UiThreadUtil.runOnUiThread(
new Runnable() {
@Override
public void run() {
mInstance = ReactTestInstanceBuilder.super.build();
mBridgeIdleSignaler = new ReactBridgeIdleSignaler();
mInstance.addBridgeIdleDebugListener(mBridgeIdleSignaler);
getContext().initializeWithInstance(mInstance);
ApplicationHolder.setApplication((Application) getContext().getApplicationContext());
setupEvent.occur();
}
});
if (!setupEvent.await(SETUP_TIMEOUT_MS)) {
throw new RuntimeException(
"Instance setup should take less than " + SETUP_TIMEOUT_MS + "ms");
}
return mInstance;
}
public void initializeWithInstance(CatalystInstance instance) {
mInstance = instance;
mBridgeIdleSignaler = new ReactBridgeIdleSignaler();
mInstance.addBridgeIdleDebugListener(mBridgeIdleSignaler);
getContext().initializeWithInstance(mInstance);
ApplicationHolder.setApplication((Application) getContext().getApplicationContext());
}
public boolean waitForBridgeIdle(long millis) {