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
This commit is contained in:
Christoph Purrer 2022-04-28 07:48:54 -07:00 коммит произвёл Facebook GitHub Bot
Родитель 4ea593b756
Коммит eb2a83b0be
3 изменённых файлов: 35 добавлений и 4 удалений

Просмотреть файл

@ -37,7 +37,7 @@ import com.facebook.react.shell.MainReactPackage;
import com.facebook.react.testing.idledetection.ReactBridgeIdleSignaler; import com.facebook.react.testing.idledetection.ReactBridgeIdleSignaler;
import com.facebook.react.testing.idledetection.ReactIdleDetectionUtil; import com.facebook.react.testing.idledetection.ReactIdleDetectionUtil;
import com.facebook.react.uimanager.ViewManagerRegistry; import com.facebook.react.uimanager.ViewManagerRegistry;
import java.util.Arrays; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.concurrent.CountDownLatch; import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
@ -250,7 +250,8 @@ public class ReactAppTestActivity extends FragmentActivity
public List<JSIModuleSpec> getJSIModules( public List<JSIModuleSpec> getJSIModules(
final ReactApplicationContext reactApplicationContext, final ReactApplicationContext reactApplicationContext,
final JavaScriptContextHolder jsContext) { final JavaScriptContextHolder jsContext) {
return Arrays.<JSIModuleSpec>asList( List<JSIModuleSpec> packages = new ArrayList<>();
packages.add(
new JSIModuleSpec() { new JSIModuleSpec() {
@Override @Override
public JSIModuleType getJSIModuleType() { public JSIModuleType getJSIModuleType() {
@ -276,6 +277,10 @@ public class ReactAppTestActivity extends FragmentActivity
}; };
} }
}); });
if (spec.getJSIModuleBuilder() != null) {
packages.addAll(spec.getJSIModuleBuilder().build(reactApplicationContext));
}
return packages;
} }
}); });

Просмотреть файл

@ -11,10 +11,12 @@ import android.annotation.SuppressLint;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import com.facebook.react.ReactPackage; import com.facebook.react.ReactPackage;
import com.facebook.react.ReactPackageTurboModuleManagerDelegate; import com.facebook.react.ReactPackageTurboModuleManagerDelegate;
import com.facebook.react.bridge.JSIModuleSpec;
import com.facebook.react.bridge.JavaScriptExecutorFactory; import com.facebook.react.bridge.JavaScriptExecutorFactory;
import com.facebook.react.bridge.JavaScriptModule; import com.facebook.react.bridge.JavaScriptModule;
import com.facebook.react.bridge.NativeModule; import com.facebook.react.bridge.NativeModule;
import com.facebook.react.bridge.NativeModuleCallExceptionHandler; import com.facebook.react.bridge.NativeModuleCallExceptionHandler;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.uimanager.ViewManager; import com.facebook.react.uimanager.ViewManager;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
@ -28,6 +30,11 @@ import java.util.List;
@SuppressLint("JavatestsIncorrectFolder") @SuppressLint("JavatestsIncorrectFolder")
public class ReactInstanceSpecForTest { public class ReactInstanceSpecForTest {
public abstract static class JSIModuleBuilder {
@Nullable
protected abstract List<JSIModuleSpec> build(ReactApplicationContext context);
}
private final List<NativeModule> mNativeModules = private final List<NativeModule> mNativeModules =
new ArrayList<NativeModule>(Arrays.asList(new FakeWebSocketModule())); new ArrayList<NativeModule>(Arrays.asList(new FakeWebSocketModule()));
private final List<Class<? extends JavaScriptModule>> mJSModuleSpecs = new ArrayList<>(); private final List<Class<? extends JavaScriptModule>> mJSModuleSpecs = new ArrayList<>();
@ -37,6 +44,7 @@ public class ReactInstanceSpecForTest {
@Nullable private FabricUIManagerFactory mFabricUIManagerFactory = null; @Nullable private FabricUIManagerFactory mFabricUIManagerFactory = null;
@Nullable private JavaScriptExecutorFactory mJavaScriptExecutorFactory = null; @Nullable private JavaScriptExecutorFactory mJavaScriptExecutorFactory = null;
@Nullable private ReactPackageTurboModuleManagerDelegate.Builder mTMMDelegateBuilder = null; @Nullable private ReactPackageTurboModuleManagerDelegate.Builder mTMMDelegateBuilder = null;
@Nullable private JSIModuleBuilder mJSIModuleBuilder = null;
public ReactInstanceSpecForTest addNativeModule(NativeModule module) { public ReactInstanceSpecForTest addNativeModule(NativeModule module) {
mNativeModules.add(module); mNativeModules.add(module);
@ -85,11 +93,22 @@ public class ReactInstanceSpecForTest {
return this; return this;
} }
protected @Nullable ReactPackageTurboModuleManagerDelegate.Builder @Nullable
protected ReactPackageTurboModuleManagerDelegate.Builder
getReactPackageTurboModuleManagerDelegateBuilder() { getReactPackageTurboModuleManagerDelegateBuilder() {
return mTMMDelegateBuilder; return mTMMDelegateBuilder;
} }
public ReactInstanceSpecForTest setJSIModuleBuilder(@Nullable JSIModuleBuilder builder) {
mJSIModuleBuilder = builder;
return this;
}
@Nullable
protected JSIModuleBuilder getJSIModuleBuilder() {
return mJSIModuleBuilder;
}
public ReactInstanceSpecForTest addPackages(List<ReactPackage> reactPackages) { public ReactInstanceSpecForTest addPackages(List<ReactPackage> reactPackages) {
mReactPackages.addAll(reactPackages); mReactPackages.addAll(reactPackages);
return this; return this;

Просмотреть файл

@ -96,11 +96,17 @@ public abstract class ReactInstrumentationTest
return getReactContext().getJSModule(jsInterface); return getReactContext().getJSModule(jsInterface);
} }
protected @Nullable ReactPackageTurboModuleManagerDelegate.Builder @Nullable
protected ReactPackageTurboModuleManagerDelegate.Builder
getReactPackageTurboModuleManagerDelegateBuilder() { getReactPackageTurboModuleManagerDelegateBuilder() {
return null; return null;
} }
@Nullable
protected ReactInstanceSpecForTest.JSIModuleBuilder getJSIModuleBuilder() {
return null;
}
/** 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() { protected ReactInstanceSpecForTest createReactInstanceSpecForTest() {
ReactInstanceSpecForTest reactInstanceSpecForTest = ReactInstanceSpecForTest reactInstanceSpecForTest =
@ -113,6 +119,7 @@ public abstract class ReactInstrumentationTest
} }
reactInstanceSpecForTest.setReactPackageTurboModuleManagerDelegateBuilder( reactInstanceSpecForTest.setReactPackageTurboModuleManagerDelegateBuilder(
getReactPackageTurboModuleManagerDelegateBuilder()); getReactPackageTurboModuleManagerDelegateBuilder());
reactInstanceSpecForTest.setJSIModuleBuilder(getJSIModuleBuilder());
return reactInstanceSpecForTest; return reactInstanceSpecForTest;
} }