diff --git a/ReactAndroid/src/androidTest/java/com/facebook/react/testing/BUCK b/ReactAndroid/src/androidTest/java/com/facebook/react/testing/BUCK
index f0b24945f3b..ce91a2147e9 100644
--- a/ReactAndroid/src/androidTest/java/com/facebook/react/testing/BUCK
+++ b/ReactAndroid/src/androidTest/java/com/facebook/react/testing/BUCK
@@ -13,8 +13,6 @@ rn_android_library(
"PUBLIC",
],
deps = [
- react_native_dep("java/com/facebook/fbreact/fabricxx:fabricxx"),
- react_native_dep("java/com/facebook/fbreact/fabricxx/jsi:jsi"),
react_native_dep("libraries/soloader/java/com/facebook/soloader:soloader"),
react_native_dep("third-party/android/support/v4:lib-support-v4"),
react_native_dep("third-party/java/buck-android-support:buck-android-support"),
@@ -39,5 +37,3 @@ rn_android_library(
react_native_target("res:uimanager"),
],
)
-
-# /Users/dvacca/fbsource/fbandroid/xplat_cell/ReactAndroid/src/androidTest/java/com/facebook/react/testing/BUCK
diff --git a/ReactAndroid/src/androidTest/java/com/facebook/react/testing/FabricUIManagerFactory.java b/ReactAndroid/src/androidTest/java/com/facebook/react/testing/FabricUIManagerFactory.java
new file mode 100644
index 00000000000..2dedfa9006e
--- /dev/null
+++ b/ReactAndroid/src/androidTest/java/com/facebook/react/testing/FabricUIManagerFactory.java
@@ -0,0 +1,21 @@
+/**
+ * Copyright (c) 2014-present, Facebook, Inc.
+ *
+ *
This source code is licensed under the MIT license found in the LICENSE file in the root
+ * directory of this source tree.
+ */
+package com.facebook.react.testing;
+
+import com.facebook.react.bridge.JavaScriptContextHolder;
+import com.facebook.react.bridge.ReactApplicationContext;
+import com.facebook.react.bridge.UIManager;
+import com.facebook.react.uimanager.ViewManagerRegistry;
+
+/** Factory used to create FabricUIManager in Testing infrastructure. */
+public interface FabricUIManagerFactory {
+
+ UIManager getFabricUIManager(
+ ReactApplicationContext reactApplicationContext,
+ ViewManagerRegistry viewManagerRegistry,
+ JavaScriptContextHolder jsContext);
+}
diff --git a/ReactAndroid/src/androidTest/java/com/facebook/react/testing/ReactAppTestActivity.java b/ReactAndroid/src/androidTest/java/com/facebook/react/testing/ReactAppTestActivity.java
index edb099f8769..3dce0330d0b 100644
--- a/ReactAndroid/src/androidTest/java/com/facebook/react/testing/ReactAppTestActivity.java
+++ b/ReactAndroid/src/androidTest/java/com/facebook/react/testing/ReactAppTestActivity.java
@@ -15,7 +15,6 @@ import android.support.v4.app.FragmentActivity;
import android.view.View;
import android.view.ViewTreeObserver;
import android.widget.FrameLayout;
-import com.facebook.fbreact.fabricxx.jsi.Binding;
import com.facebook.infer.annotation.Assertions;
import com.facebook.react.ReactInstanceManager;
import com.facebook.react.ReactInstanceManagerBuilder;
@@ -29,8 +28,6 @@ import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContext;
import com.facebook.react.bridge.UIManager;
import com.facebook.react.common.LifecycleState;
-import com.facebook.react.fabric.FabricBinder;
-import com.facebook.react.fabric.FabricBinding;
import com.facebook.react.modules.core.DefaultHardwareBackBtnHandler;
import com.facebook.react.modules.core.PermissionAwareActivity;
import com.facebook.react.modules.core.PermissionListener;
@@ -199,7 +196,7 @@ public class ReactAppTestActivity extends FragmentActivity
throw new RuntimeException("Layout never occurred for component " + appKey, e);}
}
- public void loadBundle(ReactInstanceSpecForTest spec, String bundleName, boolean useDevSupport) {
+ public void loadBundle(final ReactInstanceSpecForTest spec, String bundleName, boolean useDevSupport) {
mBridgeIdleSignaler = new ReactBridgeIdleSignaler();
@@ -243,25 +240,12 @@ public class ReactAppTestActivity extends FragmentActivity
return new JSIModuleProvider() {
@Override
public UIManager get() {
- List viewManagers =
- mReactInstanceManager.getOrCreateViewManagers(
- reactApplicationContext);
- EventDispatcher eventDispatcher =
- reactApplicationContext
- .getNativeModule(UIManagerModule.class)
- .getEventDispatcher();
-
ViewManagerRegistry viewManagerRegistry =
new ViewManagerRegistry(
mReactInstanceManager.getOrCreateViewManagers(reactApplicationContext));
- UIManager uiManager =
- new com.facebook.fbreact.fabricxx.UIManager(
- reactApplicationContext, viewManagerRegistry, jsContext);
-
- FabricBinding binding = new Binding();
- binding.installFabric(jsContext, (FabricBinder) uiManager);
- return uiManager;
+ FabricUIManagerFactory factory = spec.getFabricUIManagerFactory();
+ return factory != null ? factory.getFabricUIManager(reactApplicationContext, viewManagerRegistry, jsContext) : null;
}
};
}
diff --git a/ReactAndroid/src/androidTest/java/com/facebook/react/testing/ReactInstanceSpecForTest.java b/ReactAndroid/src/androidTest/java/com/facebook/react/testing/ReactInstanceSpecForTest.java
index 8a638c03acc..f26917dc3de 100644
--- a/ReactAndroid/src/androidTest/java/com/facebook/react/testing/ReactInstanceSpecForTest.java
+++ b/ReactAndroid/src/androidTest/java/com/facebook/react/testing/ReactInstanceSpecForTest.java
@@ -1,10 +1,9 @@
/**
* 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.
+ * This source code is licensed under the MIT license found in the LICENSE file in the root
+ * directory of this source tree.
*/
-
package com.facebook.react.testing;
import android.annotation.SuppressLint;
@@ -27,10 +26,11 @@ import javax.annotation.Nullable;
public class ReactInstanceSpecForTest {
private final List mNativeModules =
- new ArrayList(Arrays.asList(new FakeWebSocketModule()));
+ new ArrayList(Arrays.asList(new FakeWebSocketModule()));
private final List> mJSModuleSpecs = new ArrayList<>();
private final List mViewManagers = new ArrayList<>();
private final ArrayList mReactPackages = new ArrayList<>();
+ @Nullable private FabricUIManagerFactory mFabricUIManagerFactory = null;
@Nullable private JavaScriptExecutorFactory mJavaScriptExecutorFactory = null;
public ReactInstanceSpecForTest addNativeModule(NativeModule module) {
@@ -38,7 +38,8 @@ public class ReactInstanceSpecForTest {
return this;
}
- public ReactInstanceSpecForTest setJavaScriptExecutorFactory(JavaScriptExecutorFactory javaScriptExecutorFactory) {
+ public ReactInstanceSpecForTest setJavaScriptExecutorFactory(
+ JavaScriptExecutorFactory javaScriptExecutorFactory) {
mJavaScriptExecutorFactory = javaScriptExecutorFactory;
return this;
}
@@ -52,6 +53,16 @@ public class ReactInstanceSpecForTest {
return this;
}
+ public ReactInstanceSpecForTest setFabricUIManagerFactory(@Nullable FabricUIManagerFactory fabricUIManagerFactory) {
+ mFabricUIManagerFactory = fabricUIManagerFactory;
+ return this;
+ }
+
+ @Nullable
+ public FabricUIManagerFactory getFabricUIManagerFactory() {
+ return mFabricUIManagerFactory;
+ }
+
public ReactInstanceSpecForTest addPackages(List reactPackages) {
mReactPackages.addAll(reactPackages);
return this;
diff --git a/ReactAndroid/src/androidTest/java/com/facebook/react/testing/ReactInstrumentationTest.java b/ReactAndroid/src/androidTest/java/com/facebook/react/testing/ReactInstrumentationTest.java
index dcfd33e014e..9e3e489c959 100644
--- a/ReactAndroid/src/androidTest/java/com/facebook/react/testing/ReactInstrumentationTest.java
+++ b/ReactAndroid/src/androidTest/java/com/facebook/react/testing/ReactInstrumentationTest.java
@@ -1,10 +1,9 @@
/**
* 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.
+ * This source code is licensed under the MIT license found in the LICENSE file in the root
+ * directory of this source tree.
*/
-
package com.facebook.react.testing;
import android.content.Intent;
@@ -20,17 +19,18 @@ import javax.annotation.Nullable;
/**
* Base class for instrumentation tests that runs React based application.
*
- * This is similar to ReactAppInstrumentationTestCase except ReactInstrumentationTest allows
+ *
This is similar to ReactAppInstrumentationTestCase except ReactInstrumentationTest allows
* optional rendering of components. A test case can render no components or render multiple
* components.
*/
-public abstract class ReactInstrumentationTest extends
- ActivityInstrumentationTestCase2 implements IdleWaiter {
+public abstract class ReactInstrumentationTest
+ extends ActivityInstrumentationTestCase2 implements IdleWaiter {
protected StringRecordingModule mRecordingModule;
- @Nullable
- protected JavaScriptExecutorFactory mJavaScriptExecutorFactory = null;
+ @Nullable protected FabricUIManagerFactory mFabricUIManagerFactory = null;
+
+ @Nullable protected JavaScriptExecutorFactory mJavaScriptExecutorFactory = null;
public ReactInstrumentationTest() {
super(ReactAppTestActivity.class);
@@ -45,15 +45,10 @@ public abstract class ReactInstrumentationTest extends
setActivityIntent(intent);
mRecordingModule = new StringRecordingModule();
final ReactAppTestActivity activity = getActivity();
- activity.loadBundle(
- createReactInstanceSpecForTest(),
- getBundleName(),
- getEnableDevSupport());
+ activity.loadBundle(createReactInstanceSpecForTest(), getBundleName(), getEnableDevSupport());
}
- /**
- * Renders this component within this test's activity
- */
+ /** Renders this component within this test's activity */
public void renderComponent(final String componentName) {
getActivity().renderComponent(componentName, null);
waitForBridgeAndUIIdle();
@@ -71,8 +66,8 @@ public abstract class ReactInstrumentationTest extends
}
public T getViewByTestId(String testID) {
- return (T) ReactTestHelper
- .getViewWithReactTestId((ViewGroup) getRootView().getParent(), testID);
+ return (T)
+ ReactTestHelper.getViewWithReactTestId((ViewGroup) getRootView().getParent(), testID);
}
public SingleTouchGestureGenerator createGestureGenerator() {
@@ -99,21 +94,20 @@ public abstract class ReactInstrumentationTest extends
return getReactContext().getJSModule(jsInterface);
}
- /**
- * Override this method to provide extra native modules to be loaded before the app starts
- */
+ /** Override this method to provide extra native modules to be loaded before the app starts */
protected ReactInstanceSpecForTest createReactInstanceSpecForTest() {
ReactInstanceSpecForTest reactInstanceSpecForTest =
- new ReactInstanceSpecForTest().addNativeModule(mRecordingModule);
+ new ReactInstanceSpecForTest().addNativeModule(mRecordingModule);
if (mJavaScriptExecutorFactory != null) {
reactInstanceSpecForTest.setJavaScriptExecutorFactory(mJavaScriptExecutorFactory);
}
+ if (mFabricUIManagerFactory != null) {
+ reactInstanceSpecForTest.setFabricUIManagerFactory(mFabricUIManagerFactory);
+ }
return reactInstanceSpecForTest;
}
- /**
- * Implement this method to provide the bundle for this test
- */
+ /** Implement this method to provide the bundle for this test */
protected abstract String getBundleName();
protected ReactContext getReactContext() {