From 7cfad0ca0bb0e6b5f188fc9c94b7d29fe7ff6403 Mon Sep 17 00:00:00 2001 From: Christoph Purrer Date: Sun, 25 Oct 2026 11:41:27 -0700 Subject: [PATCH 01/20] Bridgeless-context ReactScrollViewInvertedScrollTest Summary: Replace the deprecated `BridgeReactContext` + mock `CatalystInstance` setup with `createTestReactApplicationContext` and add the `ShadowSoLoader` Robolectric shadow the bridgeless helper needs. Changelog: [Internal] Differential Revision: D126570688 --- .../views/scroll/ReactScrollViewInvertedScrollTest.kt | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/views/scroll/ReactScrollViewInvertedScrollTest.kt b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/views/scroll/ReactScrollViewInvertedScrollTest.kt index 32fcb811a2a3..67cd1770ecc5 100644 --- a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/views/scroll/ReactScrollViewInvertedScrollTest.kt +++ b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/views/scroll/ReactScrollViewInvertedScrollTest.kt @@ -16,10 +16,9 @@ import android.view.InputDevice import android.view.MotionEvent import android.view.View import android.widget.FrameLayout -import com.facebook.react.bridge.BridgeReactContext import com.facebook.react.bridge.JavaOnlyArray import com.facebook.react.bridge.JavaOnlyMap -import com.facebook.react.bridge.ReactTestHelper.createMockCatalystInstance +import com.facebook.react.bridge.ReactTestHelper.createTestReactApplicationContext import com.facebook.react.internal.featureflags.ReactNativeFeatureFlagsForTests import com.facebook.react.uimanager.DisplayMetricsHolder import com.facebook.react.uimanager.ReactStylesDiffMap @@ -27,6 +26,7 @@ import com.facebook.react.uimanager.ThemedReactContext import com.facebook.react.uimanager.UIManagerHelper import com.facebook.react.uimanager.events.EventDispatcher import com.facebook.soloader.SoLoader +import com.facebook.testutils.shadows.ShadowSoLoader import org.assertj.core.api.Assertions.assertThat import org.junit.After import org.junit.Before @@ -38,10 +38,12 @@ import org.mockito.kotlin.any import org.mockito.kotlin.mock import org.robolectric.RobolectricTestRunner import org.robolectric.RuntimeEnvironment +import org.robolectric.annotation.Config /** Verifies the direction of wheel and joystick scrolling in regular and inverted ScrollViews. */ @SuppressLint("DeprecatedClass", "DeprecatedMethod") @RunWith(RobolectricTestRunner::class) +@Config(shadows = [ShadowSoLoader::class]) class ReactScrollViewInvertedScrollTest { private lateinit var themedContext: ThemedReactContext @@ -51,8 +53,7 @@ class ReactScrollViewInvertedScrollTest { fun setup() { ReactNativeFeatureFlagsForTests.setUp() SoLoader.setInTestMode() - val context = BridgeReactContext(RuntimeEnvironment.getApplication()) - context.initializeWithInstance(createMockCatalystInstance()) + val context = createTestReactApplicationContext(RuntimeEnvironment.getApplication()) themedContext = ThemedReactContext(context, context, null, -1) DisplayMetricsHolder.setScreenDisplayMetrics(DisplayMetrics()) uiManagerHelperMock = mockStatic(UIManagerHelper::class.java) From d0c8c1a330b6b8d530dacb5a3c814b51a74e5aea Mon Sep 17 00:00:00 2001 From: Christoph Purrer Date: Sun, 25 Oct 2026 11:41:30 -0700 Subject: [PATCH 02/20] Bridgeless-context MountingManagerTest Summary: Replace the deprecated `BridgeReactContext` + mock `CatalystInstance` setup with `createTestReactApplicationContext` and add the `ShadowSoLoader` Robolectric shadow the bridgeless helper needs. Changelog: [Internal] Differential Revision: D126570689 --- .../com/facebook/react/fabric/MountingManagerTest.kt | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/fabric/MountingManagerTest.kt b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/fabric/MountingManagerTest.kt index 473e2eb4c0ba..0b023ad697d7 100644 --- a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/fabric/MountingManagerTest.kt +++ b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/fabric/MountingManagerTest.kt @@ -5,13 +5,10 @@ * LICENSE file in the root directory of this source tree. */ -@file:Suppress("DEPRECATION") - package com.facebook.react.fabric import com.facebook.react.ReactRootView -import com.facebook.react.bridge.BridgeReactContext -import com.facebook.react.bridge.ReactTestHelper.createMockCatalystInstance +import com.facebook.react.bridge.ReactTestHelper.createTestReactApplicationContext import com.facebook.react.fabric.mounting.MountingManager import com.facebook.react.fabric.mounting.MountingManager.MountItemExecutor import com.facebook.react.internal.featureflags.ReactNativeFeatureFlagsForTests @@ -19,15 +16,18 @@ import com.facebook.react.uimanager.ThemedReactContext import com.facebook.react.uimanager.ViewManager import com.facebook.react.uimanager.ViewManagerRegistry import com.facebook.react.views.view.ReactViewManager +import com.facebook.testutils.shadows.ShadowSoLoader import org.assertj.core.api.Assertions.assertThat import org.junit.Before import org.junit.Test import org.junit.runner.RunWith import org.robolectric.RobolectricTestRunner import org.robolectric.RuntimeEnvironment +import org.robolectric.annotation.Config /** Tests [FabricUIManager] */ @RunWith(RobolectricTestRunner::class) +@Config(shadows = [ShadowSoLoader::class]) class MountingManagerTest { private lateinit var mountingManager: MountingManager private lateinit var mountItemExecutor: MountItemExecutor @@ -37,8 +37,7 @@ class MountingManagerTest { @Before fun setUp() { ReactNativeFeatureFlagsForTests.setUp() - val reactContext = BridgeReactContext(RuntimeEnvironment.getApplication()) - reactContext.initializeWithInstance(createMockCatalystInstance()) + val reactContext = createTestReactApplicationContext(RuntimeEnvironment.getApplication()) themedReactContext = ThemedReactContext(reactContext, reactContext, null, -1) val viewManagers = listOf>(ReactViewManager()) mountItemExecutor = MountItemExecutor { From 38dea2ac131e3cc3eb9c16fb65099ebc89317811 Mon Sep 17 00:00:00 2001 From: Christoph Purrer Date: Sun, 25 Oct 2026 11:41:32 -0700 Subject: [PATCH 03/20] Bridgeless-context DeviceInfoModuleTest Summary: Replace the deprecated `BridgeReactContext` + mock `CatalystInstance` setup with a spied `createTestReactApplicationContext`, stubbing `hasActiveReactInstance` and no-opping `emitDeviceEvent` to preserve emission verification. Changelog: [Internal] Differential Revision: D126570690 --- .../modules/deviceinfo/DeviceInfoModuleTest.kt | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/modules/deviceinfo/DeviceInfoModuleTest.kt b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/modules/deviceinfo/DeviceInfoModuleTest.kt index 2341e17b738f..cb18b25f8ee3 100644 --- a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/modules/deviceinfo/DeviceInfoModuleTest.kt +++ b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/modules/deviceinfo/DeviceInfoModuleTest.kt @@ -5,8 +5,6 @@ * LICENSE file in the root directory of this source tree. */ -@file:Suppress("DEPRECATION") - package com.facebook.react.modules.deviceinfo import android.app.Activity @@ -20,10 +18,10 @@ import androidx.core.view.WindowInsetsCompat import androidx.window.layout.WindowMetrics import androidx.window.layout.WindowMetricsCalculator import androidx.window.layout.WindowMetricsCalculatorDecorator -import com.facebook.react.bridge.BridgeReactContext import com.facebook.react.bridge.JavaOnlyMap +import com.facebook.react.bridge.ReactApplicationContext import com.facebook.react.bridge.ReactContext -import com.facebook.react.bridge.ReactTestHelper +import com.facebook.react.bridge.ReactTestHelper.createTestReactApplicationContext import com.facebook.react.bridge.WritableMap import com.facebook.react.internal.featureflags.ReactNativeFeatureFlagsForTests import com.facebook.react.uimanager.DisplayMetricsHolder @@ -42,6 +40,7 @@ import org.mockito.ArgumentCaptor import org.mockito.ArgumentMatchers import org.mockito.MockedStatic import org.mockito.Mockito.mockStatic +import org.mockito.kotlin.doNothing import org.mockito.kotlin.doReturn import org.mockito.kotlin.mock import org.mockito.kotlin.spy @@ -68,7 +67,7 @@ class DeviceInfoModuleTest { private lateinit var deviceInfoModule: DeviceInfoModule private lateinit var fakePortraitDisplayMetrics: WritableMap private lateinit var fakeLandscapeDisplayMetrics: WritableMap - private lateinit var reactContext: BridgeReactContext + private lateinit var reactContext: ReactApplicationContext private lateinit var displayMetricsHolder: MockedStatic @Before @@ -82,9 +81,11 @@ class DeviceInfoModuleTest { fakeLandscapeDisplayMetrics.putInt("height", 100) displayMetricsHolder = mockStatic(DisplayMetricsHolder::class.java) - reactContext = spy(BridgeReactContext(RuntimeEnvironment.getApplication())) - val catalystInstanceMock = ReactTestHelper.createMockCatalystInstance() - reactContext.initializeWithInstance(catalystInstanceMock) + reactContext = spy(createTestReactApplicationContext(RuntimeEnvironment.getApplication())) + doReturn(true).whenever(reactContext).hasActiveReactInstance() + doNothing() + .whenever(reactContext) + .emitDeviceEvent(ArgumentMatchers.anyString(), ArgumentMatchers.any()) deviceInfoModule = spy(DeviceInfoModule(reactContext)) } From 183b831e580af5505c2ac958295af3cef9f17b1c Mon Sep 17 00:00:00 2001 From: Christoph Purrer Date: Sun, 25 Oct 2026 11:41:34 -0700 Subject: [PATCH 04/20] Bridgeless-context RootViewTest Summary: Replace the deprecated `BridgeReactContext` + mock `CatalystInstance` setup with a spied `createTestReactApplicationContext`, moving the `UIManagerModule` stub onto the context spy and no-opping `emitDeviceEvent`. Changelog: [Internal] Differential Revision: D126570692 --- .../java/com/facebook/react/RootViewTest.kt | 24 ++++++++++--------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/RootViewTest.kt b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/RootViewTest.kt index 75099fe23416..277b3754e26d 100644 --- a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/RootViewTest.kt +++ b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/RootViewTest.kt @@ -17,17 +17,20 @@ import android.view.ViewGroup import android.view.WindowInsets import android.view.WindowManager import com.facebook.react.bridge.Arguments -import com.facebook.react.bridge.BridgeReactContext -import com.facebook.react.bridge.CatalystInstance -import com.facebook.react.bridge.ReactTestHelper +import com.facebook.react.bridge.ReactApplicationContext +import com.facebook.react.bridge.ReactTestHelper.createTestReactApplicationContext import com.facebook.react.internal.featureflags.ReactNativeFeatureFlagsForTests import com.facebook.react.uimanager.DisplayMetricsHolder import com.facebook.react.uimanager.UIManagerModule import com.facebook.testutils.shadows.ShadowArguments +import com.facebook.testutils.shadows.ShadowSoLoader import org.assertj.core.api.Assertions.* import org.junit.Before import org.junit.Test import org.junit.runner.RunWith +import org.mockito.kotlin.any +import org.mockito.kotlin.doNothing +import org.mockito.kotlin.doReturn import org.mockito.kotlin.mock import org.mockito.kotlin.spy import org.mockito.kotlin.times @@ -38,25 +41,24 @@ import org.robolectric.RobolectricTestRunner import org.robolectric.RuntimeEnvironment import org.robolectric.annotation.Config -@Config(shadows = [ShadowArguments::class]) +@Config(shadows = [ShadowArguments::class, ShadowSoLoader::class]) @RunWith(RobolectricTestRunner::class) class RootViewTest { - private lateinit var reactContext: BridgeReactContext - private lateinit var catalystInstanceMock: CatalystInstance + private lateinit var reactContext: ReactApplicationContext @Before fun setUp() { ReactNativeFeatureFlagsForTests.setUp() - catalystInstanceMock = ReactTestHelper.createMockCatalystInstance() - reactContext = spy(BridgeReactContext(RuntimeEnvironment.getApplication())) - reactContext.initializeWithInstance(catalystInstanceMock) + reactContext = spy(createTestReactApplicationContext(RuntimeEnvironment.getApplication())) + doNothing().whenever(reactContext).emitDeviceEvent(any(), any()) DisplayMetricsHolder.initDisplayMetricsIfNotInitialized(reactContext) val uiManagerModuleMock: UIManagerModule = mock() - whenever(catalystInstanceMock.getNativeModule(UIManagerModule::class.java)) - .thenReturn(uiManagerModuleMock) + doReturn(uiManagerModuleMock) + .whenever(reactContext) + .getNativeModule(UIManagerModule::class.java) } @Test From 70d65010c5936614146ba42e67f4ba13050a9530 Mon Sep 17 00:00:00 2001 From: Christoph Purrer Date: Sun, 25 Oct 2026 11:41:39 -0700 Subject: [PATCH 05/20] Bridgeless-context FabricUIManagerPullModelTest Summary: Migrate `FabricUIManagerPullModelTest` from the deprecated `createCatalystContextForTest` helper to `createTestReactApplicationContext`, so the test builds a bridgeless context directly. Changelog: [Internal] Differential Revision: D126574347 --- .../com/facebook/react/fabric/FabricUIManagerPullModelTest.kt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/fabric/FabricUIManagerPullModelTest.kt b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/fabric/FabricUIManagerPullModelTest.kt index e0796289dfc3..ee4ae40079e6 100644 --- a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/fabric/FabricUIManagerPullModelTest.kt +++ b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/fabric/FabricUIManagerPullModelTest.kt @@ -39,6 +39,7 @@ import org.junit.Test import org.junit.runner.RunWith import org.mockito.kotlin.mock import org.robolectric.RobolectricTestRunner +import org.robolectric.RuntimeEnvironment import org.robolectric.Shadows.shadowOf import org.robolectric.annotation.Config import org.robolectric.shadow.api.Shadow @@ -76,7 +77,8 @@ class FabricUIManagerPullModelTest { fun setup() { ReactNativeFeatureFlagsForTests.setUp() overrideFeatureFlags() - reactContext = ReactTestHelper.createCatalystContextForTest() + reactContext = + ReactTestHelper.createTestReactApplicationContext(RuntimeEnvironment.getApplication()) underTest = FabricUIManager( reactContext, From 791492bda7a75847b5ab5debfcd449b2f8f26425 Mon Sep 17 00:00:00 2001 From: Christoph Purrer Date: Sun, 25 Oct 2026 11:41:39 -0700 Subject: [PATCH 06/20] Bridgeless-context MountingManagerAnimatedPropsTest Summary: Migrate `MountingManagerAnimatedPropsTest` from the deprecated `createCatalystContextForTest` helper to `createTestReactApplicationContext`, so the test builds a bridgeless context directly. Changelog: [Internal] Differential Revision: D126574351 --- .../facebook/react/fabric/MountingManagerAnimatedPropsTest.kt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/fabric/MountingManagerAnimatedPropsTest.kt b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/fabric/MountingManagerAnimatedPropsTest.kt index f9f4f59e5795..4a3f6f936d3c 100644 --- a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/fabric/MountingManagerAnimatedPropsTest.kt +++ b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/fabric/MountingManagerAnimatedPropsTest.kt @@ -31,6 +31,7 @@ import org.junit.Before import org.junit.Test import org.junit.runner.RunWith import org.robolectric.RobolectricTestRunner +import org.robolectric.RuntimeEnvironment import org.robolectric.annotation.Config @RunWith(RobolectricTestRunner::class) @@ -54,7 +55,8 @@ class MountingManagerAnimatedPropsTest { @Before fun setUp() { ReactNativeFeatureFlagsForTests.setUp() - val reactContext = ReactTestHelper.createCatalystContextForTest() + val reactContext = + ReactTestHelper.createTestReactApplicationContext(RuntimeEnvironment.getApplication()) themedReactContext = ThemedReactContext(reactContext, reactContext, null, -1) mountingManager = MountingManager(ViewManagerRegistry(listOf>(ReactViewManager())), {}) From 5a6ac1d789efe71241dbfde50317a27c45d559f3 Mon Sep 17 00:00:00 2001 From: Christoph Purrer Date: Sun, 25 Oct 2026 11:41:39 -0700 Subject: [PATCH 07/20] Bridgeless-context SurfaceMountingManagerSynchronousMountPropsTest Summary: Migrate `SurfaceMountingManagerSynchronousMountPropsTest` from the deprecated `createCatalystContextForTest` helper to `createTestReactApplicationContext`, so the test builds a bridgeless context directly. Changelog: [Internal] Differential Revision: D126574353 --- .../fabric/SurfaceMountingManagerSynchronousMountPropsTest.kt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/fabric/SurfaceMountingManagerSynchronousMountPropsTest.kt b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/fabric/SurfaceMountingManagerSynchronousMountPropsTest.kt index 884078cdc72c..1e7e51deb722 100644 --- a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/fabric/SurfaceMountingManagerSynchronousMountPropsTest.kt +++ b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/fabric/SurfaceMountingManagerSynchronousMountPropsTest.kt @@ -34,6 +34,7 @@ import org.junit.Before import org.junit.Test import org.junit.runner.RunWith import org.robolectric.RobolectricTestRunner +import org.robolectric.RuntimeEnvironment import org.robolectric.annotation.Config /** @@ -65,7 +66,8 @@ class SurfaceMountingManagerSynchronousMountPropsTest { @Before fun setUp() { ReactNativeFeatureFlagsForTests.setUp() - val reactContext = ReactTestHelper.createCatalystContextForTest() + val reactContext = + ReactTestHelper.createTestReactApplicationContext(RuntimeEnvironment.getApplication()) themedReactContext = ThemedReactContext(reactContext, reactContext, null, -1) mountingManager = MountingManager( From 30277cf55e7e4b154364c7bc8ee9c4235b8b2413 Mon Sep 17 00:00:00 2001 From: Christoph Purrer Date: Sun, 25 Oct 2026 11:41:39 -0700 Subject: [PATCH 08/20] Bridgeless-context SurfaceMountingManagerTest Summary: Migrate `SurfaceMountingManagerTest` from the deprecated `createCatalystContextForTest` helper to `createTestReactApplicationContext`, so the test builds a bridgeless context directly. Add the `ShadowSoLoader` Robolectric shadow, which the new helper needs to mock the component factory. Changelog: [Internal] Differential Revision: D126574354 --- .../facebook/react/fabric/SurfaceMountingManagerTest.kt | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/fabric/SurfaceMountingManagerTest.kt b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/fabric/SurfaceMountingManagerTest.kt index f7372288b68f..a1282668eb23 100644 --- a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/fabric/SurfaceMountingManagerTest.kt +++ b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/fabric/SurfaceMountingManagerTest.kt @@ -20,11 +20,14 @@ import com.facebook.react.uimanager.ThemedReactContext import com.facebook.react.uimanager.ViewManager import com.facebook.react.uimanager.ViewManagerRegistry import com.facebook.react.views.view.ReactViewManager +import com.facebook.testutils.shadows.ShadowSoLoader import org.assertj.core.api.Assertions.assertThat import org.junit.Before import org.junit.Test import org.junit.runner.RunWith import org.robolectric.RobolectricTestRunner +import org.robolectric.RuntimeEnvironment +import org.robolectric.annotation.Config /** * Tests for [SurfaceMountingManager] view lifecycle around preallocateView, deleteView, and @@ -42,6 +45,7 @@ import org.robolectric.RobolectricTestRunner * See T223288217. */ @RunWith(RobolectricTestRunner::class) +@Config(shadows = [ShadowSoLoader::class]) class SurfaceMountingManagerTest { private lateinit var mountingManager: MountingManager private lateinit var themedReactContext: ThemedReactContext @@ -50,7 +54,8 @@ class SurfaceMountingManagerTest { @Before fun setUp() { ReactNativeFeatureFlagsForTests.setUp() - val reactContext = ReactTestHelper.createCatalystContextForTest() + val reactContext = + ReactTestHelper.createTestReactApplicationContext(RuntimeEnvironment.getApplication()) themedReactContext = ThemedReactContext(reactContext, reactContext, null, -1) mountingManager = MountingManager( From 53aa017009990d0d61ee742d6bfc0f3ab1c635e6 Mon Sep 17 00:00:00 2001 From: Christoph Purrer Date: Sun, 25 Oct 2026 11:41:39 -0700 Subject: [PATCH 09/20] Bridgeless-context BaseViewManagerDelegateTest Summary: Migrate `BaseViewManagerDelegateTest` from the deprecated `createCatalystContextForTest` helper to `createTestReactApplicationContext`, so the test builds a bridgeless context directly. Add the `ShadowSoLoader` Robolectric shadow, which the new helper needs to mock the component factory. Changelog: [Internal] Differential Revision: D126574355 --- .../react/uimanager/BaseViewManagerDelegateTest.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/uimanager/BaseViewManagerDelegateTest.java b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/uimanager/BaseViewManagerDelegateTest.java index 13ad5c6a95c3..329f88e2fee8 100644 --- a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/uimanager/BaseViewManagerDelegateTest.java +++ b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/uimanager/BaseViewManagerDelegateTest.java @@ -16,13 +16,17 @@ import com.facebook.react.internal.featureflags.ReactNativeFeatureFlagsForTests; import com.facebook.react.views.view.ReactViewGroup; import com.facebook.react.views.view.ReactViewManager; +import com.facebook.testutils.shadows.ShadowSoLoader; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; +import org.robolectric.RuntimeEnvironment; +import org.robolectric.annotation.Config; @RunWith(RobolectricTestRunner.class) +@Config(shadows = ShadowSoLoader.class) public class BaseViewManagerDelegateTest { private ReactViewManager viewManager; private ReactViewGroup view; @@ -34,7 +38,9 @@ public void setUp() { // (non-JNI) accessor so Robolectric doesn't try to load react_featureflagsjni. ReactNativeFeatureFlagsForTests.INSTANCE.setUp(); viewManager = mock(ReactViewManager.class); - ReactApplicationContext context = ReactTestHelper.createCatalystContextForTest(); + ReactApplicationContext context = + ReactTestHelper.INSTANCE.createTestReactApplicationContext( + RuntimeEnvironment.getApplication()); ThemedReactContext themedReactContext = new ThemedReactContext(context, context, null, -1); view = new ReactViewGroup(themedReactContext); delegate = new BaseViewManagerDelegate<>(viewManager) {}; From ab70930670cc8fcbcacfdcd79463e8b9e1a5b81c Mon Sep 17 00:00:00 2001 From: Christoph Purrer Date: Sun, 25 Oct 2026 11:41:39 -0700 Subject: [PATCH 10/20] Bridgeless-context ImageLoaderModuleTest Summary: Migrate `ImageLoaderModuleTest` from the deprecated `createCatalystContextForTest` helper to `createTestReactApplicationContext`, so the test builds a bridgeless context directly. Stub the feature flags before context creation, since the bridgeless context reads them during init. Changelog: [Internal] Differential Revision: D126574356 --- .../facebook/react/modules/image/ImageLoaderModuleTest.kt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/modules/image/ImageLoaderModuleTest.kt b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/modules/image/ImageLoaderModuleTest.kt index 45f1f7f59b69..f12159fe9e57 100644 --- a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/modules/image/ImageLoaderModuleTest.kt +++ b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/modules/image/ImageLoaderModuleTest.kt @@ -25,6 +25,7 @@ import com.facebook.react.bridge.ReactApplicationContext import com.facebook.react.bridge.ReactTestHelper import com.facebook.react.bridge.ReadableMap import com.facebook.react.bridge.WritableMap +import com.facebook.react.internal.featureflags.ReactNativeFeatureFlagsForTests import com.facebook.react.views.image.ReactCallerContextFactory import com.facebook.react.views.imagehelper.ResourceDrawableIdHelper import com.facebook.testutils.shadows.ShadowArguments @@ -45,6 +46,7 @@ import org.mockito.kotlin.never import org.mockito.kotlin.verify import org.mockito.kotlin.whenever import org.robolectric.RobolectricTestRunner +import org.robolectric.RuntimeEnvironment import org.robolectric.annotation.Config /** The payload is never decoded — every test here mocks the image pipeline. */ @@ -60,7 +62,9 @@ class ImageLoaderModuleTest { @Before fun setUp() { - reactContext = ReactTestHelper.createCatalystContextForTest() + ReactNativeFeatureFlagsForTests.setUp() + reactContext = + ReactTestHelper.createTestReactApplicationContext(RuntimeEnvironment.getApplication()) imageLoaderModule = ImageLoaderModule(reactContext) mockedHelper = mockStatic(ResourceDrawableIdHelper::class.java) From 040aa8f61268892438ca9cc597b5ae6a94760912 Mon Sep 17 00:00:00 2001 From: Christoph Purrer Date: Sun, 25 Oct 2026 11:41:39 -0700 Subject: [PATCH 11/20] Bridgeless-context ShareModuleTest Summary: Migrate `ShareModuleTest` from the deprecated `createCatalystContextForTest` helper to `createTestReactApplicationContext`, so the test builds a bridgeless context directly. Add the `ShadowSoLoader` Robolectric shadow and stub the feature flags before context creation, since the bridgeless context reads them during init. Changelog: [Internal] Differential Revision: D126574357 --- .../com/facebook/react/modules/share/ShareModuleTest.kt | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/modules/share/ShareModuleTest.kt b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/modules/share/ShareModuleTest.kt index 95db0bd69577..72f7292aac17 100644 --- a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/modules/share/ShareModuleTest.kt +++ b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/modules/share/ShareModuleTest.kt @@ -13,7 +13,9 @@ import com.facebook.react.bridge.JavaOnlyMap import com.facebook.react.bridge.Promise import com.facebook.react.bridge.ReactTestHelper import com.facebook.react.bridge.WritableMap +import com.facebook.react.internal.featureflags.ReactNativeFeatureFlagsForTests import com.facebook.testutils.shadows.ShadowArguments +import com.facebook.testutils.shadows.ShadowSoLoader import org.assertj.core.api.Assertions.assertThat import org.junit.Before import org.junit.Test @@ -25,7 +27,7 @@ import org.robolectric.Shadows.shadowOf import org.robolectric.android.controller.ActivityController import org.robolectric.annotation.Config -@Config(shadows = [ShadowArguments::class]) +@Config(shadows = [ShadowArguments::class, ShadowSoLoader::class]) @RunWith(RobolectricTestRunner::class) class ShareModuleTest { @@ -34,9 +36,11 @@ class ShareModuleTest { @Before fun prepareModules() { + ReactNativeFeatureFlagsForTests.setUp() activityController = Robolectric.buildActivity(FragmentActivity::class.java) val activity = activityController.create().start().resume().get() - val applicationContext = ReactTestHelper.createCatalystContextForTest() + val applicationContext = + ReactTestHelper.createTestReactApplicationContext(RuntimeEnvironment.getApplication()) applicationContext.onNewIntent(activity, Intent()) shareModule = ShareModule(applicationContext) } From 1bccf2179c11e87c3d6482f91b5f9541551748b3 Mon Sep 17 00:00:00 2001 From: Christoph Purrer Date: Sun, 25 Oct 2026 11:41:39 -0700 Subject: [PATCH 12/20] Bridgeless-context ReactScrollViewHelperFlingAnimatorTest Summary: Migrate `ReactScrollViewHelperFlingAnimatorTest` from the deprecated `createCatalystContextForTest` helper to `createTestReactApplicationContext`, so the test builds a bridgeless context directly. Stub the feature flags before context creation, since the bridgeless context reads them during init. Changelog: [Internal] Differential Revision: D126574358 --- .../views/scroll/ReactScrollViewHelperFlingAnimatorTest.kt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/views/scroll/ReactScrollViewHelperFlingAnimatorTest.kt b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/views/scroll/ReactScrollViewHelperFlingAnimatorTest.kt index f8fe3b37b616..f02176b93a03 100644 --- a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/views/scroll/ReactScrollViewHelperFlingAnimatorTest.kt +++ b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/views/scroll/ReactScrollViewHelperFlingAnimatorTest.kt @@ -13,6 +13,7 @@ import android.view.View import android.view.ViewGroup import com.facebook.react.bridge.ReactContext import com.facebook.react.bridge.ReactTestHelper +import com.facebook.react.internal.featureflags.ReactNativeFeatureFlagsForTests import com.facebook.react.uimanager.StateWrapper import com.facebook.react.uimanager.UIManagerHelper import com.facebook.react.uimanager.events.Event @@ -63,10 +64,12 @@ class ReactScrollViewHelperFlingAnimatorTest { @Before @Suppress("UNCHECKED_CAST") fun setUp() { + ReactNativeFeatureFlagsForTests.setUp() mockChild = mock() mockAnimator = ValueAnimator() mockEventDispatcher = mock() - mockContext = ReactTestHelper.createCatalystContextForTest() + mockContext = + ReactTestHelper.createTestReactApplicationContext(RuntimeEnvironment.getApplication()) mockScrollView = mock() From a2d40803043e1455cc64214b42af300301c19b44 Mon Sep 17 00:00:00 2001 From: Christoph Purrer Date: Sun, 25 Oct 2026 11:41:39 -0700 Subject: [PATCH 13/20] Bridgeless-context SurfaceMountingManagerEventOrderingTest Summary: Migrate `SurfaceMountingManagerEventOrderingTest` from the deprecated `createCatalystContextForTest` helper to `createTestReactApplicationContext`, so the test builds a bridgeless context directly. Changelog: [Internal] Differential Revision: D126574360 --- .../react/fabric/SurfaceMountingManagerEventOrderingTest.kt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/fabric/SurfaceMountingManagerEventOrderingTest.kt b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/fabric/SurfaceMountingManagerEventOrderingTest.kt index af0e1893d3f9..f38ef84da6cf 100644 --- a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/fabric/SurfaceMountingManagerEventOrderingTest.kt +++ b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/fabric/SurfaceMountingManagerEventOrderingTest.kt @@ -34,6 +34,7 @@ import org.mockito.kotlin.any import org.mockito.kotlin.mock import org.mockito.kotlin.never import org.robolectric.RobolectricTestRunner +import org.robolectric.RuntimeEnvironment import org.robolectric.annotation.Config import org.robolectric.annotation.LooperMode @@ -59,7 +60,8 @@ class SurfaceMountingManagerEventOrderingTest { @Before fun setUp() { ReactNativeFeatureFlagsForTests.setUp() - val reactContext = ReactTestHelper.createCatalystContextForTest() + val reactContext = + ReactTestHelper.createTestReactApplicationContext(RuntimeEnvironment.getApplication()) themedReactContext = ThemedReactContext(reactContext, reactContext, null, -1) mountingManager = MountingManager( From 32b8ee191e9d224edfcd1439f44dc1037f0fb086 Mon Sep 17 00:00:00 2001 From: Christoph Purrer Date: Sun, 25 Oct 2026 11:41:39 -0700 Subject: [PATCH 14/20] Bridgeless-context ThemedReactContextTest Summary: Migrate `ThemedReactContextTest` from the deprecated `createCatalystContextForTest` helper to `createTestReactApplicationContext`, so the test builds a bridgeless context directly. Stub the feature flags before context creation, since the bridgeless context reads them during init. Changelog: [Internal] Differential Revision: D126574361 --- .../com/facebook/react/uimanager/ThemedReactContextTest.kt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/uimanager/ThemedReactContextTest.kt b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/uimanager/ThemedReactContextTest.kt index b0e05900d1ba..45661c6d0f76 100644 --- a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/uimanager/ThemedReactContextTest.kt +++ b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/uimanager/ThemedReactContextTest.kt @@ -11,6 +11,7 @@ import android.view.Window import com.facebook.react.bridge.ReactApplicationContext import com.facebook.react.bridge.ReactTestHelper import com.facebook.react.interfaces.ExtraWindowEventListener +import com.facebook.react.internal.featureflags.ReactNativeFeatureFlagsForTests import com.facebook.testutils.shadows.ShadowSoLoader import org.junit.Before import org.junit.Test @@ -31,7 +32,9 @@ class ThemedReactContextTest { @Before fun setUp() { - reactApplicationContext = ReactTestHelper.createCatalystContextForTest() + ReactNativeFeatureFlagsForTests.setUp() + reactApplicationContext = + ReactTestHelper.createTestReactApplicationContext(RuntimeEnvironment.getApplication()) themedReactContext = ThemedReactContext(reactApplicationContext, RuntimeEnvironment.getApplication(), null, -1) window = mock() From 73c3ddd4f9c967e5c8c9c3bb092d60e7d33b0fff Mon Sep 17 00:00:00 2001 From: Christoph Purrer Date: Sun, 25 Oct 2026 11:41:39 -0700 Subject: [PATCH 15/20] Bridgeless-context BlobModuleTest Summary: Migrate `BlobModuleTest` from the deprecated `createCatalystContextForTest` helper to `createTestReactApplicationContext`, so the test builds a bridgeless context directly. Add the `ShadowSoLoader` Robolectric shadow and stub the feature flags before context creation, since the bridgeless context reads them during init. Changelog: [Internal] Differential Revision: D126574362 --- .../com/facebook/react/modules/blob/BlobModuleTest.kt | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/modules/blob/BlobModuleTest.kt b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/modules/blob/BlobModuleTest.kt index b64f1595c5be..ba826cb7aa63 100644 --- a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/modules/blob/BlobModuleTest.kt +++ b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/modules/blob/BlobModuleTest.kt @@ -12,8 +12,10 @@ import com.facebook.react.bridge.JavaOnlyArray import com.facebook.react.bridge.JavaOnlyMap import com.facebook.react.bridge.ReactApplicationContext import com.facebook.react.bridge.ReactTestHelper +import com.facebook.react.internal.featureflags.ReactNativeFeatureFlagsForTests import com.facebook.soloader.SoLoader import com.facebook.testutils.shadows.ShadowArguments +import com.facebook.testutils.shadows.ShadowSoLoader import java.io.ByteArrayInputStream import java.nio.ByteBuffer import java.util.UUID @@ -26,11 +28,12 @@ import org.junit.runner.RunWith import org.mockito.MockedStatic import org.mockito.Mockito.mockStatic import org.robolectric.RobolectricTestRunner +import org.robolectric.RuntimeEnvironment import org.robolectric.Shadows.shadowOf import org.robolectric.annotation.Config @RunWith(RobolectricTestRunner::class) -@Config(manifest = Config.NONE, shadows = [ShadowArguments::class]) +@Config(manifest = Config.NONE, shadows = [ShadowArguments::class, ShadowSoLoader::class]) class BlobModuleTest { private lateinit var bytes: ByteArray private lateinit var blobId: String @@ -40,6 +43,7 @@ class BlobModuleTest { @Before fun prepareModules() { + ReactNativeFeatureFlagsForTests.setUp() mockedStaticSoLoader = mockStatic(SoLoader::class.java) mockedStaticSoLoader .`when` { SoLoader.loadLibrary("reactnativeblob") } @@ -48,7 +52,7 @@ class BlobModuleTest { bytes = ByteArray(120) Random.Default.nextBytes(bytes) - context = ReactTestHelper.createCatalystContextForTest() + context = ReactTestHelper.createTestReactApplicationContext(RuntimeEnvironment.getApplication()) blobModule = BlobModule(context) blobId = blobModule.store(bytes) } From a43f201e287571f7cc70e48b5d93e5bfff9440ae Mon Sep 17 00:00:00 2001 From: Christoph Purrer Date: Sun, 25 Oct 2026 11:41:39 -0700 Subject: [PATCH 16/20] Bridgeless-context TouchEventDispatchTest Summary: Migrate `TouchEventDispatchTest` from the deprecated `createCatalystContextForTest` helper to `createTestReactApplicationContext`, so the test builds a bridgeless context directly. Install a mocked `ReactQueueConfiguration` via `initializeMessageQueueThreads` to satisfy the UI-thread check in `FabricEventDispatcher`, which the mock catalyst previously provided. Changelog: [Internal] Differential Revision: D126574364 --- .../react/fabric/events/TouchEventDispatchTest.kt | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/fabric/events/TouchEventDispatchTest.kt b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/fabric/events/TouchEventDispatchTest.kt index ebecb3a9ef97..5e7516b42a5e 100644 --- a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/fabric/events/TouchEventDispatchTest.kt +++ b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/fabric/events/TouchEventDispatchTest.kt @@ -16,6 +16,8 @@ import com.facebook.react.bridge.JavaOnlyMap import com.facebook.react.bridge.ReactTestHelper import com.facebook.react.bridge.ReadableMap import com.facebook.react.bridge.WritableMap +import com.facebook.react.bridge.queue.MessageQueueThread +import com.facebook.react.bridge.queue.ReactQueueConfiguration import com.facebook.react.internal.featureflags.ReactNativeFeatureFlagsForTests import com.facebook.react.modules.core.ReactChoreographer import com.facebook.react.uimanager.DisplayMetricsHolder @@ -36,7 +38,9 @@ import org.mockito.ArgumentMatchers.* import org.mockito.kotlin.mock import org.mockito.kotlin.times import org.mockito.kotlin.verify +import org.mockito.kotlin.whenever import org.robolectric.RobolectricTestRunner +import org.robolectric.RuntimeEnvironment import org.robolectric.annotation.Config @RunWith(RobolectricTestRunner::class) @@ -516,7 +520,15 @@ class TouchEventDispatchTest { metrics.density = 1f DisplayMetricsHolder.setScreenDisplayMetrics(metrics) - val reactContext = ReactTestHelper.createCatalystContextForTest() + val reactContext = + ReactTestHelper.createTestReactApplicationContext(RuntimeEnvironment.getApplication()) + val uiQueueThread: MessageQueueThread = mock() + whenever(uiQueueThread.isOnThread()).thenReturn(true) + val queueConfig: ReactQueueConfiguration = mock() + whenever(queueConfig.getUIQueueThread()).thenReturn(uiQueueThread) + whenever(queueConfig.getNativeModulesQueueThread()).thenReturn(uiQueueThread) + whenever(queueConfig.getJSQueueThread()).thenReturn(uiQueueThread) + reactContext.initializeMessageQueueThreads(queueConfig) eventEmitter = mock() eventDispatcher = FabricEventDispatcher(reactContext, eventEmitter) From adf30afd63dd9fd41fa63cde5dbe7162c847a97f Mon Sep 17 00:00:00 2001 From: Christoph Purrer Date: Sun, 25 Oct 2026 11:41:39 -0700 Subject: [PATCH 17/20] Bridgeless-context ReactScrollViewTouchCancelTest Summary: Migrate `ReactScrollViewTouchCancelTest` from the deprecated `BridgeReactContext` + mock `CatalystInstance` setup to `createTestReactApplicationContext`, so the test builds a bridgeless context directly. Add the `ShadowSoLoader` Robolectric shadow the bridgeless helper needs. Changelog: [Internal] Differential Revision: D127469706 --- .../views/scroll/ReactScrollViewTouchCancelTest.kt | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/views/scroll/ReactScrollViewTouchCancelTest.kt b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/views/scroll/ReactScrollViewTouchCancelTest.kt index 82965533b0b4..140ce583a08f 100644 --- a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/views/scroll/ReactScrollViewTouchCancelTest.kt +++ b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/views/scroll/ReactScrollViewTouchCancelTest.kt @@ -17,8 +17,8 @@ import android.view.MotionEvent import android.view.View import android.view.ViewGroup import android.widget.FrameLayout -import com.facebook.react.bridge.BridgeReactContext -import com.facebook.react.bridge.ReactTestHelper.createMockCatalystInstance +import com.facebook.react.bridge.ReactApplicationContext +import com.facebook.react.bridge.ReactTestHelper.createTestReactApplicationContext import com.facebook.react.bridge.ScrollEndedListener import com.facebook.react.internal.featureflags.ReactNativeFeatureFlagsForTests import com.facebook.react.uimanager.DisplayMetricsHolder @@ -27,6 +27,7 @@ import com.facebook.react.uimanager.ThemedReactContext import com.facebook.react.uimanager.UIManagerHelper import com.facebook.react.uimanager.events.EventDispatcher import com.facebook.soloader.SoLoader +import com.facebook.testutils.shadows.ShadowSoLoader import java.time.Duration import org.assertj.core.api.Assertions.assertThat import org.junit.After @@ -43,14 +44,16 @@ import org.robolectric.Robolectric import org.robolectric.RuntimeEnvironment import org.robolectric.Shadows.shadowOf import org.robolectric.android.controller.ActivityController +import org.robolectric.annotation.Config import org.robolectric.annotation.LooperMode /** Cancelled drags must emit END_DRAG once and complete native scrolling cleanup. */ @SuppressLint("DeprecatedClass", "DeprecatedMethod") +@Config(shadows = [ShadowSoLoader::class]) @RunWith(ParameterizedRobolectricTestRunner::class) @LooperMode(LooperMode.Mode.PAUSED) class ReactScrollViewTouchCancelTest(private val kind: String) { - private lateinit var context: BridgeReactContext + private lateinit var context: ReactApplicationContext private lateinit var themedContext: ThemedReactContext private lateinit var uiManagerHelperMock: MockedStatic private lateinit var root: TestRoot @@ -78,8 +81,7 @@ class ReactScrollViewTouchCancelTest(private val kind: String) { fun setup() { ReactNativeFeatureFlagsForTests.setUp() SoLoader.setInTestMode() - context = BridgeReactContext(RuntimeEnvironment.getApplication()) - context.initializeWithInstance(createMockCatalystInstance()) + context = createTestReactApplicationContext(RuntimeEnvironment.getApplication()) context.scrollEndedListeners.addListener(scrollEndedListener) themedContext = ThemedReactContext(context, context, null, -1) DisplayMetricsHolder.setScreenDisplayMetrics(DisplayMetrics()) From 6a24d65a92a4cbe10e0e50ef4cb37a33e8715ec2 Mon Sep 17 00:00:00 2001 From: Christoph Purrer Date: Sun, 25 Oct 2026 11:41:39 -0700 Subject: [PATCH 18/20] Bridgeless-context ReactEditTextOutlineTest Summary: Migrate `ReactEditTextOutlineTest` from the deprecated `createCatalystContextForTest` helper to `createTestReactApplicationContext`, so the test builds a bridgeless context directly. Add the `ShadowSoLoader` Robolectric shadow the bridgeless helper needs. Changelog: [Internal] Differential Revision: D127469707 --- .../react/views/textinput/ReactEditTextOutlineTest.kt | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/views/textinput/ReactEditTextOutlineTest.kt b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/views/textinput/ReactEditTextOutlineTest.kt index fceb7ddfc492..5a9dc1926a3d 100644 --- a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/views/textinput/ReactEditTextOutlineTest.kt +++ b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/views/textinput/ReactEditTextOutlineTest.kt @@ -25,10 +25,11 @@ import android.view.ViewGroup import android.view.ViewOutlineProvider import androidx.annotation.RequiresApi import androidx.core.graphics.drawable.toDrawable -import com.facebook.react.bridge.ReactTestHelper.createCatalystContextForTest +import com.facebook.react.bridge.ReactTestHelper.createTestReactApplicationContext import com.facebook.react.internal.featureflags.ReactNativeFeatureFlagsForTests import com.facebook.react.uimanager.DisplayMetricsHolder import com.facebook.react.uimanager.ThemedReactContext +import com.facebook.testutils.shadows.ShadowSoLoader import org.assertj.core.api.Assertions.assertThat import org.junit.Before import org.junit.Test @@ -37,8 +38,10 @@ import org.robolectric.Robolectric import org.robolectric.RobolectricTestRunner import org.robolectric.RuntimeEnvironment import org.robolectric.Shadows.shadowOf +import org.robolectric.annotation.Config @RunWith(RobolectricTestRunner::class) +@Config(shadows = [ShadowSoLoader::class]) @RequiresApi(Build.VERSION_CODES.N) class ReactEditTextOutlineTest { @@ -47,7 +50,7 @@ class ReactEditTextOutlineTest { @Before fun setup() { ReactNativeFeatureFlagsForTests.setUp() - val context = createCatalystContextForTest() + val context = createTestReactApplicationContext(RuntimeEnvironment.getApplication()) DisplayMetricsHolder.setScreenDisplayMetrics(DisplayMetrics()) view = ReactTextInputManager().createViewInstance(ThemedReactContext(context, context, null, -1)) From e8f1aef582a1dd5bb15ff9f443bfa2dde7546101 Mon Sep 17 00:00:00 2001 From: Facebook Employee Date: Sun, 25 Oct 2026 11:41:39 -0700 Subject: [PATCH 19/20] Delete legacy catalyst test helpers Summary: Delete the deprecated `createCatalystContextForTest` and `createMockCatalystInstance` helpers from `ReactTestHelper`, now that every caller has migrated to `createTestReactApplicationContext`. Drop the file-level deprecation suppression and its TODO, which only existed for the removed helpers. Changelog: [Internal] Differential Revision: D126576088 --- .../facebook/react/bridge/ReactTestHelper.kt | 42 ++----------------- 1 file changed, 4 insertions(+), 38 deletions(-) diff --git a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/bridge/ReactTestHelper.kt b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/bridge/ReactTestHelper.kt index 53c328427a61..e58740604171 100644 --- a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/bridge/ReactTestHelper.kt +++ b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/bridge/ReactTestHelper.kt @@ -5,59 +5,25 @@ * LICENSE file in the root directory of this source tree. */ -// TODO T207169925: Migrate CatalystInstance to Reacthost and remove the Suppress("DEPRECATION") -// annotation -@file:Suppress("DEPRECATION") - package com.facebook.react.bridge import android.app.Application -import com.facebook.react.bridge.queue.MessageQueueThreadSpec -import com.facebook.react.bridge.queue.ReactQueueConfiguration -import com.facebook.react.bridge.queue.ReactQueueConfigurationImpl -import com.facebook.react.bridge.queue.ReactQueueConfigurationSpec import com.facebook.react.common.annotations.UnstableReactNativeAPI import com.facebook.react.runtime.BridgelessReactContext import com.facebook.react.runtime.ReactHostImpl import com.facebook.react.runtime.internal.bolts.Task -import com.facebook.react.uimanager.UIManagerModule import org.mockito.kotlin.mock import org.mockito.kotlin.spy -import org.mockito.kotlin.whenever import org.robolectric.RuntimeEnvironment /** Utility for creating pre-configured instances of core react components for tests. */ object ReactTestHelper { - /** - * @return a ReactApplicationContext that has a CatalystInstance mock returned by - * [createMockCatalystInstance] - */ - @JvmStatic - fun createCatalystContextForTest(): ReactApplicationContext = - BridgeReactContext(RuntimeEnvironment.getApplication()).apply { - initializeWithInstance(createMockCatalystInstance()) - } - - /** @return a CatalystInstance mock that has a default working ReactQueueConfiguration. */ - @JvmStatic - fun createMockCatalystInstance(): CatalystInstance { - val spec: ReactQueueConfigurationSpec = - ReactQueueConfigurationSpec.builder() - .setJSQueueThreadSpec(MessageQueueThreadSpec.mainThreadSpec()) - .setNativeModulesQueueThreadSpec(MessageQueueThreadSpec.mainThreadSpec()) - .build() - val reactQueueConfiguration: ReactQueueConfiguration = - ReactQueueConfigurationImpl.create(spec) { e -> throw RuntimeException(e) } - val reactInstance: CatalystInstance = mock() - whenever(reactInstance.reactQueueConfiguration).thenReturn(reactQueueConfiguration) - whenever(reactInstance.getNativeModule(UIManagerModule::class.java)) - .thenReturn(mock()) - whenever(reactInstance.isDestroyed).thenReturn(false) - return reactInstance - } @OptIn(UnstableReactNativeAPI::class) - fun createTestReactApplicationContext(application: Application): ReactApplicationContext { + @JvmOverloads + fun createTestReactApplicationContext( + application: Application = RuntimeEnvironment.getApplication() + ): ReactApplicationContext { val reactHost = spy( ReactHostImpl( From 34386b66c1c0209f03cc1e2663cfa6cd7f6306c8 Mon Sep 17 00:00:00 2001 From: Christoph Purrer Date: Mon, 26 Oct 2026 08:31:27 -0700 Subject: [PATCH 20/20] Simplify createTestReactApplicationContext calls Summary: Use the default `application` argument of `createTestReactApplicationContext` at every call site instead of passing `RuntimeEnvironment.getApplication()` explicitly, and expose the helper as `JvmStatic` so the remaining Java test no longer needs `INSTANCE`. Migrating that test to Kotlin is blocked by inherited JVM signature clashes when subclassing `BaseViewManagerDelegate` from Kotlin. Changelog: [Internal] Differential Revision: D127584468 --- .../src/test/java/com/facebook/react/RootViewTest.kt | 3 +-- .../test/java/com/facebook/react/bridge/ReactTestHelper.kt | 1 + .../facebook/react/fabric/FabricUIManagerPullModelTest.kt | 4 +--- .../react/fabric/MountingManagerAnimatedPropsTest.kt | 4 +--- .../java/com/facebook/react/fabric/MountingManagerTest.kt | 3 +-- .../react/fabric/SurfaceMountingManagerEventOrderingTest.kt | 4 +--- .../SurfaceMountingManagerSynchronousMountPropsTest.kt | 4 +--- .../com/facebook/react/fabric/SurfaceMountingManagerTest.kt | 4 +--- .../facebook/react/fabric/events/TouchEventDispatchTest.kt | 4 +--- .../react/interfaces/ExtraWindowEventListenerTest.kt | 4 +--- .../java/com/facebook/react/modules/blob/BlobModuleTest.kt | 3 +-- .../facebook/react/modules/clipboard/ClipboardModuleTest.kt | 3 +-- .../react/modules/deviceinfo/DeviceInfoModuleTest.kt | 3 +-- .../facebook/react/modules/image/ImageLoaderModuleTest.kt | 4 +--- .../java/com/facebook/react/modules/share/ShareModuleTest.kt | 3 +-- .../react/uimanager/BaseViewManagerDelegateTest.java | 5 +---- .../react/uimanager/ReactAccessibilityDelegateTest.kt | 3 +-- .../com/facebook/react/uimanager/SimpleViewPropertyTest.kt | 3 +-- .../com/facebook/react/uimanager/ThemedReactContextTest.kt | 3 +-- .../com/facebook/react/views/image/ReactImagePropertyTest.kt | 3 +-- .../views/scroll/ReactScrollViewHelperFlingAnimatorTest.kt | 3 +-- .../react/views/scroll/ReactScrollViewInvertedScrollTest.kt | 3 +-- .../react/views/scroll/ReactScrollViewPropertyTest.kt | 3 +-- .../react/views/scroll/ReactScrollViewTouchCancelTest.kt | 3 +-- .../facebook/react/views/text/ReactTextViewPropertyTest.kt | 3 +-- .../react/views/textinput/ReactEditTextKeyEventTest.kt | 3 +-- .../react/views/textinput/ReactEditTextOutlineTest.kt | 2 +- .../react/views/textinput/ReactTextInputPropertyTest.kt | 2 +- 28 files changed, 28 insertions(+), 62 deletions(-) diff --git a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/RootViewTest.kt b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/RootViewTest.kt index 277b3754e26d..29f17a0fe3b4 100644 --- a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/RootViewTest.kt +++ b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/RootViewTest.kt @@ -38,7 +38,6 @@ import org.mockito.kotlin.verify import org.mockito.kotlin.whenever import org.robolectric.Robolectric import org.robolectric.RobolectricTestRunner -import org.robolectric.RuntimeEnvironment import org.robolectric.annotation.Config @Config(shadows = [ShadowArguments::class, ShadowSoLoader::class]) @@ -51,7 +50,7 @@ class RootViewTest { fun setUp() { ReactNativeFeatureFlagsForTests.setUp() - reactContext = spy(createTestReactApplicationContext(RuntimeEnvironment.getApplication())) + reactContext = spy(createTestReactApplicationContext()) doNothing().whenever(reactContext).emitDeviceEvent(any(), any()) DisplayMetricsHolder.initDisplayMetricsIfNotInitialized(reactContext) diff --git a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/bridge/ReactTestHelper.kt b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/bridge/ReactTestHelper.kt index e58740604171..c797c73c01ea 100644 --- a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/bridge/ReactTestHelper.kt +++ b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/bridge/ReactTestHelper.kt @@ -21,6 +21,7 @@ object ReactTestHelper { @OptIn(UnstableReactNativeAPI::class) @JvmOverloads + @JvmStatic fun createTestReactApplicationContext( application: Application = RuntimeEnvironment.getApplication() ): ReactApplicationContext { diff --git a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/fabric/FabricUIManagerPullModelTest.kt b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/fabric/FabricUIManagerPullModelTest.kt index ee4ae40079e6..f1b4656a4cc5 100644 --- a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/fabric/FabricUIManagerPullModelTest.kt +++ b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/fabric/FabricUIManagerPullModelTest.kt @@ -39,7 +39,6 @@ import org.junit.Test import org.junit.runner.RunWith import org.mockito.kotlin.mock import org.robolectric.RobolectricTestRunner -import org.robolectric.RuntimeEnvironment import org.robolectric.Shadows.shadowOf import org.robolectric.annotation.Config import org.robolectric.shadow.api.Shadow @@ -77,8 +76,7 @@ class FabricUIManagerPullModelTest { fun setup() { ReactNativeFeatureFlagsForTests.setUp() overrideFeatureFlags() - reactContext = - ReactTestHelper.createTestReactApplicationContext(RuntimeEnvironment.getApplication()) + reactContext = ReactTestHelper.createTestReactApplicationContext() underTest = FabricUIManager( reactContext, diff --git a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/fabric/MountingManagerAnimatedPropsTest.kt b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/fabric/MountingManagerAnimatedPropsTest.kt index 4a3f6f936d3c..6d189b5e49e7 100644 --- a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/fabric/MountingManagerAnimatedPropsTest.kt +++ b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/fabric/MountingManagerAnimatedPropsTest.kt @@ -31,7 +31,6 @@ import org.junit.Before import org.junit.Test import org.junit.runner.RunWith import org.robolectric.RobolectricTestRunner -import org.robolectric.RuntimeEnvironment import org.robolectric.annotation.Config @RunWith(RobolectricTestRunner::class) @@ -55,8 +54,7 @@ class MountingManagerAnimatedPropsTest { @Before fun setUp() { ReactNativeFeatureFlagsForTests.setUp() - val reactContext = - ReactTestHelper.createTestReactApplicationContext(RuntimeEnvironment.getApplication()) + val reactContext = ReactTestHelper.createTestReactApplicationContext() themedReactContext = ThemedReactContext(reactContext, reactContext, null, -1) mountingManager = MountingManager(ViewManagerRegistry(listOf>(ReactViewManager())), {}) diff --git a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/fabric/MountingManagerTest.kt b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/fabric/MountingManagerTest.kt index 0b023ad697d7..8054f0a6bfd0 100644 --- a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/fabric/MountingManagerTest.kt +++ b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/fabric/MountingManagerTest.kt @@ -22,7 +22,6 @@ import org.junit.Before import org.junit.Test import org.junit.runner.RunWith import org.robolectric.RobolectricTestRunner -import org.robolectric.RuntimeEnvironment import org.robolectric.annotation.Config /** Tests [FabricUIManager] */ @@ -37,7 +36,7 @@ class MountingManagerTest { @Before fun setUp() { ReactNativeFeatureFlagsForTests.setUp() - val reactContext = createTestReactApplicationContext(RuntimeEnvironment.getApplication()) + val reactContext = createTestReactApplicationContext() themedReactContext = ThemedReactContext(reactContext, reactContext, null, -1) val viewManagers = listOf>(ReactViewManager()) mountItemExecutor = MountItemExecutor { diff --git a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/fabric/SurfaceMountingManagerEventOrderingTest.kt b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/fabric/SurfaceMountingManagerEventOrderingTest.kt index f38ef84da6cf..4db64d8cde6a 100644 --- a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/fabric/SurfaceMountingManagerEventOrderingTest.kt +++ b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/fabric/SurfaceMountingManagerEventOrderingTest.kt @@ -34,7 +34,6 @@ import org.mockito.kotlin.any import org.mockito.kotlin.mock import org.mockito.kotlin.never import org.robolectric.RobolectricTestRunner -import org.robolectric.RuntimeEnvironment import org.robolectric.annotation.Config import org.robolectric.annotation.LooperMode @@ -60,8 +59,7 @@ class SurfaceMountingManagerEventOrderingTest { @Before fun setUp() { ReactNativeFeatureFlagsForTests.setUp() - val reactContext = - ReactTestHelper.createTestReactApplicationContext(RuntimeEnvironment.getApplication()) + val reactContext = ReactTestHelper.createTestReactApplicationContext() themedReactContext = ThemedReactContext(reactContext, reactContext, null, -1) mountingManager = MountingManager( diff --git a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/fabric/SurfaceMountingManagerSynchronousMountPropsTest.kt b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/fabric/SurfaceMountingManagerSynchronousMountPropsTest.kt index 1e7e51deb722..49d7940429e4 100644 --- a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/fabric/SurfaceMountingManagerSynchronousMountPropsTest.kt +++ b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/fabric/SurfaceMountingManagerSynchronousMountPropsTest.kt @@ -34,7 +34,6 @@ import org.junit.Before import org.junit.Test import org.junit.runner.RunWith import org.robolectric.RobolectricTestRunner -import org.robolectric.RuntimeEnvironment import org.robolectric.annotation.Config /** @@ -66,8 +65,7 @@ class SurfaceMountingManagerSynchronousMountPropsTest { @Before fun setUp() { ReactNativeFeatureFlagsForTests.setUp() - val reactContext = - ReactTestHelper.createTestReactApplicationContext(RuntimeEnvironment.getApplication()) + val reactContext = ReactTestHelper.createTestReactApplicationContext() themedReactContext = ThemedReactContext(reactContext, reactContext, null, -1) mountingManager = MountingManager( diff --git a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/fabric/SurfaceMountingManagerTest.kt b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/fabric/SurfaceMountingManagerTest.kt index a1282668eb23..06aed3ab2c69 100644 --- a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/fabric/SurfaceMountingManagerTest.kt +++ b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/fabric/SurfaceMountingManagerTest.kt @@ -26,7 +26,6 @@ import org.junit.Before import org.junit.Test import org.junit.runner.RunWith import org.robolectric.RobolectricTestRunner -import org.robolectric.RuntimeEnvironment import org.robolectric.annotation.Config /** @@ -54,8 +53,7 @@ class SurfaceMountingManagerTest { @Before fun setUp() { ReactNativeFeatureFlagsForTests.setUp() - val reactContext = - ReactTestHelper.createTestReactApplicationContext(RuntimeEnvironment.getApplication()) + val reactContext = ReactTestHelper.createTestReactApplicationContext() themedReactContext = ThemedReactContext(reactContext, reactContext, null, -1) mountingManager = MountingManager( diff --git a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/fabric/events/TouchEventDispatchTest.kt b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/fabric/events/TouchEventDispatchTest.kt index 5e7516b42a5e..00fc7e3489db 100644 --- a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/fabric/events/TouchEventDispatchTest.kt +++ b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/fabric/events/TouchEventDispatchTest.kt @@ -40,7 +40,6 @@ import org.mockito.kotlin.times import org.mockito.kotlin.verify import org.mockito.kotlin.whenever import org.robolectric.RobolectricTestRunner -import org.robolectric.RuntimeEnvironment import org.robolectric.annotation.Config @RunWith(RobolectricTestRunner::class) @@ -520,8 +519,7 @@ class TouchEventDispatchTest { metrics.density = 1f DisplayMetricsHolder.setScreenDisplayMetrics(metrics) - val reactContext = - ReactTestHelper.createTestReactApplicationContext(RuntimeEnvironment.getApplication()) + val reactContext = ReactTestHelper.createTestReactApplicationContext() val uiQueueThread: MessageQueueThread = mock() whenever(uiQueueThread.isOnThread()).thenReturn(true) val queueConfig: ReactQueueConfiguration = mock() diff --git a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/interfaces/ExtraWindowEventListenerTest.kt b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/interfaces/ExtraWindowEventListenerTest.kt index fe8a98c955a4..2f7702f4cce7 100644 --- a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/interfaces/ExtraWindowEventListenerTest.kt +++ b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/interfaces/ExtraWindowEventListenerTest.kt @@ -20,7 +20,6 @@ import org.mockito.kotlin.never import org.mockito.kotlin.times import org.mockito.kotlin.verify import org.robolectric.RobolectricTestRunner -import org.robolectric.RuntimeEnvironment import org.robolectric.annotation.Config @RunWith(RobolectricTestRunner::class) @@ -32,8 +31,7 @@ class ExtraWindowEventListenerTest { @Before fun setUp() { ReactNativeFeatureFlagsForTests.setUp() - reactContext = - ReactTestHelper.createTestReactApplicationContext(RuntimeEnvironment.getApplication()) + reactContext = ReactTestHelper.createTestReactApplicationContext() window = mock() } diff --git a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/modules/blob/BlobModuleTest.kt b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/modules/blob/BlobModuleTest.kt index ba826cb7aa63..2e19c4e86ae7 100644 --- a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/modules/blob/BlobModuleTest.kt +++ b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/modules/blob/BlobModuleTest.kt @@ -28,7 +28,6 @@ import org.junit.runner.RunWith import org.mockito.MockedStatic import org.mockito.Mockito.mockStatic import org.robolectric.RobolectricTestRunner -import org.robolectric.RuntimeEnvironment import org.robolectric.Shadows.shadowOf import org.robolectric.annotation.Config @@ -52,7 +51,7 @@ class BlobModuleTest { bytes = ByteArray(120) Random.Default.nextBytes(bytes) - context = ReactTestHelper.createTestReactApplicationContext(RuntimeEnvironment.getApplication()) + context = ReactTestHelper.createTestReactApplicationContext() blobModule = BlobModule(context) blobId = blobModule.store(bytes) } diff --git a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/modules/clipboard/ClipboardModuleTest.kt b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/modules/clipboard/ClipboardModuleTest.kt index 360c0c406dc0..f180026f4a23 100644 --- a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/modules/clipboard/ClipboardModuleTest.kt +++ b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/modules/clipboard/ClipboardModuleTest.kt @@ -31,8 +31,7 @@ class ClipboardModuleTest { @Before fun setUp() { ReactNativeFeatureFlagsForTests.setUp() - clipboardModule = - ClipboardModule(createTestReactApplicationContext(RuntimeEnvironment.getApplication())) + clipboardModule = ClipboardModule(createTestReactApplicationContext()) clipboardManager = RuntimeEnvironment.getApplication().getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager diff --git a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/modules/deviceinfo/DeviceInfoModuleTest.kt b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/modules/deviceinfo/DeviceInfoModuleTest.kt index cb18b25f8ee3..f4fecc7ad8a7 100644 --- a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/modules/deviceinfo/DeviceInfoModuleTest.kt +++ b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/modules/deviceinfo/DeviceInfoModuleTest.kt @@ -48,7 +48,6 @@ import org.mockito.kotlin.times import org.mockito.kotlin.verify import org.mockito.kotlin.whenever import org.robolectric.RobolectricTestRunner -import org.robolectric.RuntimeEnvironment import org.robolectric.annotation.Config @RunWith(RobolectricTestRunner::class) @@ -81,7 +80,7 @@ class DeviceInfoModuleTest { fakeLandscapeDisplayMetrics.putInt("height", 100) displayMetricsHolder = mockStatic(DisplayMetricsHolder::class.java) - reactContext = spy(createTestReactApplicationContext(RuntimeEnvironment.getApplication())) + reactContext = spy(createTestReactApplicationContext()) doReturn(true).whenever(reactContext).hasActiveReactInstance() doNothing() .whenever(reactContext) diff --git a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/modules/image/ImageLoaderModuleTest.kt b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/modules/image/ImageLoaderModuleTest.kt index f12159fe9e57..783febaf8d3c 100644 --- a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/modules/image/ImageLoaderModuleTest.kt +++ b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/modules/image/ImageLoaderModuleTest.kt @@ -46,7 +46,6 @@ import org.mockito.kotlin.never import org.mockito.kotlin.verify import org.mockito.kotlin.whenever import org.robolectric.RobolectricTestRunner -import org.robolectric.RuntimeEnvironment import org.robolectric.annotation.Config /** The payload is never decoded — every test here mocks the image pipeline. */ @@ -63,8 +62,7 @@ class ImageLoaderModuleTest { @Before fun setUp() { ReactNativeFeatureFlagsForTests.setUp() - reactContext = - ReactTestHelper.createTestReactApplicationContext(RuntimeEnvironment.getApplication()) + reactContext = ReactTestHelper.createTestReactApplicationContext() imageLoaderModule = ImageLoaderModule(reactContext) mockedHelper = mockStatic(ResourceDrawableIdHelper::class.java) diff --git a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/modules/share/ShareModuleTest.kt b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/modules/share/ShareModuleTest.kt index 72f7292aac17..9a0b385b58d3 100644 --- a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/modules/share/ShareModuleTest.kt +++ b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/modules/share/ShareModuleTest.kt @@ -39,8 +39,7 @@ class ShareModuleTest { ReactNativeFeatureFlagsForTests.setUp() activityController = Robolectric.buildActivity(FragmentActivity::class.java) val activity = activityController.create().start().resume().get() - val applicationContext = - ReactTestHelper.createTestReactApplicationContext(RuntimeEnvironment.getApplication()) + val applicationContext = ReactTestHelper.createTestReactApplicationContext() applicationContext.onNewIntent(activity, Intent()) shareModule = ShareModule(applicationContext) } diff --git a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/uimanager/BaseViewManagerDelegateTest.java b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/uimanager/BaseViewManagerDelegateTest.java index 329f88e2fee8..baa5e5883ed5 100644 --- a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/uimanager/BaseViewManagerDelegateTest.java +++ b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/uimanager/BaseViewManagerDelegateTest.java @@ -22,7 +22,6 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; -import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; @RunWith(RobolectricTestRunner.class) @@ -38,9 +37,7 @@ public void setUp() { // (non-JNI) accessor so Robolectric doesn't try to load react_featureflagsjni. ReactNativeFeatureFlagsForTests.INSTANCE.setUp(); viewManager = mock(ReactViewManager.class); - ReactApplicationContext context = - ReactTestHelper.INSTANCE.createTestReactApplicationContext( - RuntimeEnvironment.getApplication()); + ReactApplicationContext context = ReactTestHelper.createTestReactApplicationContext(); ThemedReactContext themedReactContext = new ThemedReactContext(context, context, null, -1); view = new ReactViewGroup(themedReactContext); delegate = new BaseViewManagerDelegate<>(viewManager) {}; diff --git a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/uimanager/ReactAccessibilityDelegateTest.kt b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/uimanager/ReactAccessibilityDelegateTest.kt index 63680191f85b..44eb6784c2f9 100644 --- a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/uimanager/ReactAccessibilityDelegateTest.kt +++ b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/uimanager/ReactAccessibilityDelegateTest.kt @@ -40,7 +40,6 @@ import org.mockito.kotlin.spy import org.mockito.kotlin.verify import org.mockito.kotlin.whenever import org.robolectric.RobolectricTestRunner -import org.robolectric.RuntimeEnvironment import org.robolectric.annotation.Config @Config(shadows = [ShadowArguments::class, ShadowSoLoader::class]) @@ -54,7 +53,7 @@ class ReactAccessibilityDelegateTest { @Before fun setUp() { ReactNativeFeatureFlagsForTests.setUp() - reactContext = spy(createTestReactApplicationContext(RuntimeEnvironment.getApplication())) + reactContext = spy(createTestReactApplicationContext()) themedReactContext = ThemedReactContext(reactContext, reactContext, null, -1) view = ReactViewGroup(themedReactContext).apply { id = 100 } accessibilityDelegate = ReactAccessibilityDelegate(view, false, 0) diff --git a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/uimanager/SimpleViewPropertyTest.kt b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/uimanager/SimpleViewPropertyTest.kt index 4422391d00cf..2741eed2a051 100644 --- a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/uimanager/SimpleViewPropertyTest.kt +++ b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/uimanager/SimpleViewPropertyTest.kt @@ -21,7 +21,6 @@ import org.junit.Before import org.junit.Test import org.junit.runner.RunWith import org.robolectric.RobolectricTestRunner -import org.robolectric.RuntimeEnvironment import org.robolectric.annotation.Config /** Verify [View] view property being applied properly by [SimpleViewManager] */ @@ -54,7 +53,7 @@ class SimpleViewPropertyTest { @Before fun setup() { ReactNativeFeatureFlagsForTests.setUp() - context = createTestReactApplicationContext(RuntimeEnvironment.getApplication()) + context = createTestReactApplicationContext() themedContext = ThemedReactContext(context, context, null, surfaceId) manager = ConcreteViewManager() } diff --git a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/uimanager/ThemedReactContextTest.kt b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/uimanager/ThemedReactContextTest.kt index 45661c6d0f76..7e58276ce6fb 100644 --- a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/uimanager/ThemedReactContextTest.kt +++ b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/uimanager/ThemedReactContextTest.kt @@ -33,8 +33,7 @@ class ThemedReactContextTest { @Before fun setUp() { ReactNativeFeatureFlagsForTests.setUp() - reactApplicationContext = - ReactTestHelper.createTestReactApplicationContext(RuntimeEnvironment.getApplication()) + reactApplicationContext = ReactTestHelper.createTestReactApplicationContext() themedReactContext = ThemedReactContext(reactApplicationContext, RuntimeEnvironment.getApplication(), null, -1) window = mock() diff --git a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/views/image/ReactImagePropertyTest.kt b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/views/image/ReactImagePropertyTest.kt index 15913bccfb43..920973e13c04 100644 --- a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/views/image/ReactImagePropertyTest.kt +++ b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/views/image/ReactImagePropertyTest.kt @@ -50,7 +50,6 @@ import org.mockito.kotlin.reset import org.mockito.kotlin.times import org.mockito.kotlin.verify import org.robolectric.RobolectricTestRunner -import org.robolectric.RuntimeEnvironment import org.robolectric.annotation.Config /** @@ -76,7 +75,7 @@ class ReactImagePropertyTest { flogMock = mockStatic(FLog::class.java) SoLoader.setInTestMode() - context = createTestReactApplicationContext(RuntimeEnvironment.getApplication()) + context = createTestReactApplicationContext() themeContext = ThemedReactContext(context, context, null, -1) Fresco.initialize(context) DisplayMetricsHolder.setScreenDisplayMetrics(DisplayMetrics()) diff --git a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/views/scroll/ReactScrollViewHelperFlingAnimatorTest.kt b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/views/scroll/ReactScrollViewHelperFlingAnimatorTest.kt index f02176b93a03..677d4d09cc18 100644 --- a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/views/scroll/ReactScrollViewHelperFlingAnimatorTest.kt +++ b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/views/scroll/ReactScrollViewHelperFlingAnimatorTest.kt @@ -68,8 +68,7 @@ class ReactScrollViewHelperFlingAnimatorTest { mockChild = mock() mockAnimator = ValueAnimator() mockEventDispatcher = mock() - mockContext = - ReactTestHelper.createTestReactApplicationContext(RuntimeEnvironment.getApplication()) + mockContext = ReactTestHelper.createTestReactApplicationContext() mockScrollView = mock() diff --git a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/views/scroll/ReactScrollViewInvertedScrollTest.kt b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/views/scroll/ReactScrollViewInvertedScrollTest.kt index 67cd1770ecc5..2ebd4831d38d 100644 --- a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/views/scroll/ReactScrollViewInvertedScrollTest.kt +++ b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/views/scroll/ReactScrollViewInvertedScrollTest.kt @@ -37,7 +37,6 @@ import org.mockito.Mockito.mockStatic import org.mockito.kotlin.any import org.mockito.kotlin.mock import org.robolectric.RobolectricTestRunner -import org.robolectric.RuntimeEnvironment import org.robolectric.annotation.Config /** Verifies the direction of wheel and joystick scrolling in regular and inverted ScrollViews. */ @@ -53,7 +52,7 @@ class ReactScrollViewInvertedScrollTest { fun setup() { ReactNativeFeatureFlagsForTests.setUp() SoLoader.setInTestMode() - val context = createTestReactApplicationContext(RuntimeEnvironment.getApplication()) + val context = createTestReactApplicationContext() themedContext = ThemedReactContext(context, context, null, -1) DisplayMetricsHolder.setScreenDisplayMetrics(DisplayMetrics()) uiManagerHelperMock = mockStatic(UIManagerHelper::class.java) diff --git a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/views/scroll/ReactScrollViewPropertyTest.kt b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/views/scroll/ReactScrollViewPropertyTest.kt index 4f9c3454bfae..c89635e67aae 100644 --- a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/views/scroll/ReactScrollViewPropertyTest.kt +++ b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/views/scroll/ReactScrollViewPropertyTest.kt @@ -31,7 +31,6 @@ import org.junit.Before import org.junit.Test import org.junit.runner.RunWith import org.robolectric.RobolectricTestRunner -import org.robolectric.RuntimeEnvironment import org.robolectric.annotation.Config /** Verifies border radius properties applied by the vertical and horizontal ScrollView managers. */ @@ -46,7 +45,7 @@ class ReactScrollViewPropertyTest { @Before fun setup() { ReactNativeFeatureFlagsForTests.setUp() - context = createTestReactApplicationContext(RuntimeEnvironment.getApplication()) + context = createTestReactApplicationContext() themedContext = ThemedReactContext(context, context, null, -1) DisplayMetricsHolder.setScreenDisplayMetrics(DisplayMetrics()) } diff --git a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/views/scroll/ReactScrollViewTouchCancelTest.kt b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/views/scroll/ReactScrollViewTouchCancelTest.kt index 140ce583a08f..6c09b93be47e 100644 --- a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/views/scroll/ReactScrollViewTouchCancelTest.kt +++ b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/views/scroll/ReactScrollViewTouchCancelTest.kt @@ -41,7 +41,6 @@ import org.mockito.kotlin.mock import org.mockito.kotlin.verify import org.robolectric.ParameterizedRobolectricTestRunner import org.robolectric.Robolectric -import org.robolectric.RuntimeEnvironment import org.robolectric.Shadows.shadowOf import org.robolectric.android.controller.ActivityController import org.robolectric.annotation.Config @@ -81,7 +80,7 @@ class ReactScrollViewTouchCancelTest(private val kind: String) { fun setup() { ReactNativeFeatureFlagsForTests.setUp() SoLoader.setInTestMode() - context = createTestReactApplicationContext(RuntimeEnvironment.getApplication()) + context = createTestReactApplicationContext() context.scrollEndedListeners.addListener(scrollEndedListener) themedContext = ThemedReactContext(context, context, null, -1) DisplayMetricsHolder.setScreenDisplayMetrics(DisplayMetrics()) diff --git a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/views/text/ReactTextViewPropertyTest.kt b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/views/text/ReactTextViewPropertyTest.kt index 9dd0111b5498..68907f1dc500 100644 --- a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/views/text/ReactTextViewPropertyTest.kt +++ b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/views/text/ReactTextViewPropertyTest.kt @@ -29,7 +29,6 @@ import org.junit.Before import org.junit.Test import org.junit.runner.RunWith import org.robolectric.RobolectricTestRunner -import org.robolectric.RuntimeEnvironment import org.robolectric.annotation.Config /** Verify view properties are being applied correctly by [ReactTextViewManager] */ @@ -49,7 +48,7 @@ class ReactTextViewPropertyTest { override fun enableViewRecycling(): Boolean = true }, ) - context = createTestReactApplicationContext(RuntimeEnvironment.getApplication()) + context = createTestReactApplicationContext() themedContext = ThemedReactContext(context, context, null, -1) manager = ReactTextViewManager() DisplayMetricsHolder.setScreenDisplayMetrics(DisplayMetrics()) diff --git a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/views/textinput/ReactEditTextKeyEventTest.kt b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/views/textinput/ReactEditTextKeyEventTest.kt index 5f7458d1f73a..42ae5e3f5f8a 100644 --- a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/views/textinput/ReactEditTextKeyEventTest.kt +++ b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/views/textinput/ReactEditTextKeyEventTest.kt @@ -26,7 +26,6 @@ import org.junit.Before import org.junit.Test import org.junit.runner.RunWith import org.robolectric.RobolectricTestRunner -import org.robolectric.RuntimeEnvironment import org.robolectric.annotation.Config @RunWith(RobolectricTestRunner::class) @@ -39,7 +38,7 @@ class ReactEditTextKeyEventTest { @Before fun setup() { ReactNativeFeatureFlagsForTests.setUp() - val context = createTestReactApplicationContext(RuntimeEnvironment.getApplication()) + val context = createTestReactApplicationContext() val themedContext = ThemedReactContext(context, context.baseContext, null, ID_NULL) manager = ReactTextInputManager() DisplayMetricsHolder.setScreenDisplayMetrics(DisplayMetrics()) diff --git a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/views/textinput/ReactEditTextOutlineTest.kt b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/views/textinput/ReactEditTextOutlineTest.kt index 5a9dc1926a3d..4309930e2b82 100644 --- a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/views/textinput/ReactEditTextOutlineTest.kt +++ b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/views/textinput/ReactEditTextOutlineTest.kt @@ -50,7 +50,7 @@ class ReactEditTextOutlineTest { @Before fun setup() { ReactNativeFeatureFlagsForTests.setUp() - val context = createTestReactApplicationContext(RuntimeEnvironment.getApplication()) + val context = createTestReactApplicationContext() DisplayMetricsHolder.setScreenDisplayMetrics(DisplayMetrics()) view = ReactTextInputManager().createViewInstance(ThemedReactContext(context, context, null, -1)) diff --git a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/views/textinput/ReactTextInputPropertyTest.kt b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/views/textinput/ReactTextInputPropertyTest.kt index 078e16f5bb57..dac9993d5ecc 100644 --- a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/views/textinput/ReactTextInputPropertyTest.kt +++ b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/views/textinput/ReactTextInputPropertyTest.kt @@ -70,7 +70,7 @@ class ReactTextInputPropertyTest { fun setup() { ReactNativeFeatureFlagsForTests.setUp() val application = RuntimeEnvironment.getApplication() - context = createTestReactApplicationContext(application) + context = createTestReactApplicationContext() themedContext = ThemedReactContext(context, application, null, ID_NULL) manager = ReactTextInputManager() DisplayMetricsHolder.setScreenDisplayMetrics(DisplayMetrics())