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.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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче