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 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, 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())), {}) 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 { 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)) } 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 c844c6824f49..4422391d00cf 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 @@ -5,30 +5,28 @@ * 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.uimanager import android.view.View -import com.facebook.react.bridge.BridgeReactContext -import com.facebook.react.bridge.CatalystInstance import com.facebook.react.bridge.JavaOnlyMap -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.ReadableMap import com.facebook.react.internal.featureflags.ReactNativeFeatureFlagsForTests import com.facebook.react.touch.JSResponderHandler import com.facebook.react.uimanager.annotations.ReactProp +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.robolectric.RobolectricTestRunner import org.robolectric.RuntimeEnvironment +import org.robolectric.annotation.Config /** Verify [View] view property being applied properly by [SimpleViewManager] */ @RunWith(RobolectricTestRunner::class) +@Config(shadows = [ShadowSoLoader::class]) class SimpleViewPropertyTest { private class ConcreteViewManager : SimpleViewManager() { @@ -49,17 +47,14 @@ class SimpleViewPropertyTest { } } - private lateinit var context: BridgeReactContext - private lateinit var catalystInstanceMock: CatalystInstance + private lateinit var context: ReactApplicationContext private lateinit var themedContext: ThemedReactContext private lateinit var manager: ConcreteViewManager @Before fun setup() { ReactNativeFeatureFlagsForTests.setUp() - context = BridgeReactContext(RuntimeEnvironment.getApplication()) - catalystInstanceMock = createMockCatalystInstance() - context.initializeWithInstance(catalystInstanceMock) + context = createTestReactApplicationContext(RuntimeEnvironment.getApplication()) themedContext = ThemedReactContext(context, context, null, surfaceId) manager = ConcreteViewManager() } 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 b69f015595e0..15913bccfb43 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 @@ -5,10 +5,6 @@ * 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.views.image import android.graphics.Color @@ -19,10 +15,9 @@ import com.facebook.drawee.backends.pipeline.PipelineDraweeControllerBuilder import com.facebook.drawee.drawable.ScalingUtils import com.facebook.imagepipeline.request.ImageRequest import com.facebook.react.bridge.Arguments -import com.facebook.react.bridge.BridgeReactContext -import com.facebook.react.bridge.CatalystInstance import com.facebook.react.bridge.JavaOnlyMap -import com.facebook.react.bridge.ReactTestHelper.createMockCatalystInstance +import com.facebook.react.bridge.ReactApplicationContext +import com.facebook.react.bridge.ReactTestHelper.createTestReactApplicationContext import com.facebook.react.common.ReactConstants import com.facebook.react.internal.featureflags.ReactNativeFeatureFlagsForTests import com.facebook.react.modules.fresco.ReactNetworkImageRequest @@ -37,6 +32,7 @@ import com.facebook.react.util.RNLog import com.facebook.react.views.imagehelper.ImageSource import com.facebook.soloader.SoLoader import com.facebook.testutils.shadows.ShadowArguments +import com.facebook.testutils.shadows.ShadowSoLoader import org.assertj.core.api.Assertions.assertThat import org.junit.After import org.junit.Before @@ -61,18 +57,18 @@ import org.robolectric.annotation.Config * Verify that [com.facebook.drawee.drawable.ScalingUtils] properties are being applied correctly by * [ReactImageManager]. */ -@Config(shadows = [ShadowArguments::class]) +@Config(shadows = [ShadowArguments::class, ShadowSoLoader::class]) @RunWith(RobolectricTestRunner::class) class ReactImagePropertyTest { - private lateinit var context: BridgeReactContext - private lateinit var catalystInstanceMock: CatalystInstance + private lateinit var context: ReactApplicationContext private lateinit var themeContext: ThemedReactContext private lateinit var rnLog: MockedStatic private lateinit var flogMock: MockedStatic @Before fun setup() { + ReactNativeFeatureFlagsForTests.setUp() rnLog = mockStatic(RNLog::class.java) rnLog.`when` { RNLog.w(any(), anyString()) }.thenAnswer {} @@ -80,14 +76,10 @@ class ReactImagePropertyTest { flogMock = mockStatic(FLog::class.java) SoLoader.setInTestMode() - context = BridgeReactContext(RuntimeEnvironment.getApplication()) - catalystInstanceMock = createMockCatalystInstance() - context.initializeWithInstance(catalystInstanceMock) + context = createTestReactApplicationContext(RuntimeEnvironment.getApplication()) themeContext = ThemedReactContext(context, context, null, -1) Fresco.initialize(context) DisplayMetricsHolder.setScreenDisplayMetrics(DisplayMetrics()) - - ReactNativeFeatureFlagsForTests.setUp() } @After 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) 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 82ec014eb89e..078e16f5bb57 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 @@ -5,10 +5,6 @@ * 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.views.textinput import android.graphics.Color @@ -27,10 +23,9 @@ import android.view.inputmethod.EditorInfo import androidx.annotation.RequiresApi import androidx.autofill.HintConstants import androidx.core.content.res.ResourcesCompat.ID_NULL -import com.facebook.react.bridge.BridgeReactContext -import com.facebook.react.bridge.CatalystInstance import com.facebook.react.bridge.JavaOnlyMap -import com.facebook.react.bridge.ReactTestHelper.createMockCatalystInstance +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.BackgroundStyleApplicator import com.facebook.react.uimanager.DisplayMetricsHolder @@ -42,19 +37,21 @@ import com.facebook.react.uimanager.style.BorderRadiusProp import com.facebook.react.views.text.DefaultStyleValuesUtil.getDefaultTextColorHint import com.facebook.react.views.text.ReactTextUpdate import com.facebook.react.views.text.internal.span.CustomStyleSpan +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 /** Verify {@link EditText} view property being applied properly by {@link ReactTextInputManager} */ @RunWith(RobolectricTestRunner::class) +@Config(shadows = [ShadowSoLoader::class]) class ReactTextInputPropertyTest { - private lateinit var context: BridgeReactContext - private lateinit var catalystInstanceMock: CatalystInstance + private lateinit var context: ReactApplicationContext private lateinit var themedContext: ThemedReactContext private lateinit var manager: ReactTextInputManager private lateinit var view: ReactEditText @@ -72,10 +69,9 @@ class ReactTextInputPropertyTest { @Before fun setup() { ReactNativeFeatureFlagsForTests.setUp() - context = BridgeReactContext(RuntimeEnvironment.getApplication()) - catalystInstanceMock = createMockCatalystInstance() - context.initializeWithInstance(catalystInstanceMock) - themedContext = ThemedReactContext(context, context.baseContext, null, ID_NULL) + val application = RuntimeEnvironment.getApplication() + context = createTestReactApplicationContext(application) + themedContext = ThemedReactContext(context, application, null, ID_NULL) manager = ReactTextInputManager() DisplayMetricsHolder.setScreenDisplayMetrics(DisplayMetrics()) view = manager.createViewInstance(themedContext)