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.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<JSIModuleSpec> getJSIModules(
final ReactApplicationContext reactApplicationContext,
final JavaScriptContextHolder jsContext) {
return Arrays.<JSIModuleSpec>asList(
List<JSIModuleSpec> 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;
}
});

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

@ -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<JSIModuleSpec> build(ReactApplicationContext context);
}
private final List<NativeModule> mNativeModules =
new ArrayList<NativeModule>(Arrays.asList(new FakeWebSocketModule()));
private final List<Class<? extends JavaScriptModule>> 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<ReactPackage> reactPackages) {
mReactPackages.addAll(reactPackages);
return this;

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

@ -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;
}