From eb2a83b0be4658654fc6ca6f4671e45f1898798d Mon Sep 17 00:00:00 2001 From: Christoph Purrer Date: Thu, 28 Apr 2022 07:48:54 -0700 Subject: [PATCH] Allow ReactInstrumentationTest to use custom JSIModules Summary: Update ReactInstrumentationTest to allow passing in custom JSIModules Also: 'Fixed' some improper ordering of Nullable annotations Changelog: Internal Reviewed By: cortinico Differential Revision: D35961806 fbshipit-source-id: aa1513bee34e04ac3aae37f794d9d2771e7cc501 --- .../react/testing/ReactAppTestActivity.java | 9 ++++++-- .../testing/ReactInstanceSpecForTest.java | 21 ++++++++++++++++++- .../testing/ReactInstrumentationTest.java | 9 +++++++- 3 files changed, 35 insertions(+), 4 deletions(-) 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 7d89ab5b2e..0134b10577 100644 --- a/ReactAndroid/src/androidTest/java/com/facebook/react/testing/ReactAppTestActivity.java +++ b/ReactAndroid/src/androidTest/java/com/facebook/react/testing/ReactAppTestActivity.java @@ -37,7 +37,7 @@ import com.facebook.react.shell.MainReactPackage; import com.facebook.react.testing.idledetection.ReactBridgeIdleSignaler; import com.facebook.react.testing.idledetection.ReactIdleDetectionUtil; import com.facebook.react.uimanager.ViewManagerRegistry; -import java.util.Arrays; +import java.util.ArrayList; import java.util.List; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; @@ -250,7 +250,8 @@ public class ReactAppTestActivity extends FragmentActivity public List getJSIModules( final ReactApplicationContext reactApplicationContext, final JavaScriptContextHolder jsContext) { - return Arrays.asList( + List packages = new ArrayList<>(); + packages.add( new JSIModuleSpec() { @Override public JSIModuleType getJSIModuleType() { @@ -276,6 +277,10 @@ public class ReactAppTestActivity extends FragmentActivity }; } }); + if (spec.getJSIModuleBuilder() != null) { + packages.addAll(spec.getJSIModuleBuilder().build(reactApplicationContext)); + } + return packages; } }); 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 8422eb5372..6b96c8232b 100644 --- a/ReactAndroid/src/androidTest/java/com/facebook/react/testing/ReactInstanceSpecForTest.java +++ b/ReactAndroid/src/androidTest/java/com/facebook/react/testing/ReactInstanceSpecForTest.java @@ -11,10 +11,12 @@ import android.annotation.SuppressLint; import androidx.annotation.Nullable; import com.facebook.react.ReactPackage; import com.facebook.react.ReactPackageTurboModuleManagerDelegate; +import com.facebook.react.bridge.JSIModuleSpec; import com.facebook.react.bridge.JavaScriptExecutorFactory; import com.facebook.react.bridge.JavaScriptModule; import com.facebook.react.bridge.NativeModule; import com.facebook.react.bridge.NativeModuleCallExceptionHandler; +import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.uimanager.ViewManager; import java.util.ArrayList; import java.util.Arrays; @@ -28,6 +30,11 @@ import java.util.List; @SuppressLint("JavatestsIncorrectFolder") public class ReactInstanceSpecForTest { + public abstract static class JSIModuleBuilder { + @Nullable + protected abstract List build(ReactApplicationContext context); + } + private final List mNativeModules = new ArrayList(Arrays.asList(new FakeWebSocketModule())); private final List> mJSModuleSpecs = new ArrayList<>(); @@ -37,6 +44,7 @@ public class ReactInstanceSpecForTest { @Nullable private FabricUIManagerFactory mFabricUIManagerFactory = null; @Nullable private JavaScriptExecutorFactory mJavaScriptExecutorFactory = null; @Nullable private ReactPackageTurboModuleManagerDelegate.Builder mTMMDelegateBuilder = null; + @Nullable private JSIModuleBuilder mJSIModuleBuilder = null; public ReactInstanceSpecForTest addNativeModule(NativeModule module) { mNativeModules.add(module); @@ -85,11 +93,22 @@ public class ReactInstanceSpecForTest { return this; } - protected @Nullable ReactPackageTurboModuleManagerDelegate.Builder + @Nullable + protected ReactPackageTurboModuleManagerDelegate.Builder getReactPackageTurboModuleManagerDelegateBuilder() { return mTMMDelegateBuilder; } + public ReactInstanceSpecForTest setJSIModuleBuilder(@Nullable JSIModuleBuilder builder) { + mJSIModuleBuilder = builder; + return this; + } + + @Nullable + protected JSIModuleBuilder getJSIModuleBuilder() { + return mJSIModuleBuilder; + } + 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 40699a74e4..a5ac40a93d 100644 --- a/ReactAndroid/src/androidTest/java/com/facebook/react/testing/ReactInstrumentationTest.java +++ b/ReactAndroid/src/androidTest/java/com/facebook/react/testing/ReactInstrumentationTest.java @@ -96,11 +96,17 @@ public abstract class ReactInstrumentationTest return getReactContext().getJSModule(jsInterface); } - protected @Nullable ReactPackageTurboModuleManagerDelegate.Builder + @Nullable + protected ReactPackageTurboModuleManagerDelegate.Builder getReactPackageTurboModuleManagerDelegateBuilder() { return null; } + @Nullable + protected ReactInstanceSpecForTest.JSIModuleBuilder getJSIModuleBuilder() { + return null; + } + /** Override this method to provide extra native modules to be loaded before the app starts */ protected ReactInstanceSpecForTest createReactInstanceSpecForTest() { ReactInstanceSpecForTest reactInstanceSpecForTest = @@ -113,6 +119,7 @@ public abstract class ReactInstrumentationTest } reactInstanceSpecForTest.setReactPackageTurboModuleManagerDelegateBuilder( getReactPackageTurboModuleManagerDelegateBuilder()); + reactInstanceSpecForTest.setJSIModuleBuilder(getJSIModuleBuilder()); return reactInstanceSpecForTest; }