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:
Родитель
4ea593b756
Коммит
eb2a83b0be
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче