@@ -17,8 +17,13 @@ import com.facebook.react.bridge.ReactTestHelper
1717import com.facebook.react.bridge.WritableMap
1818import com.facebook.react.internal.featureflags.ReactNativeFeatureFlagsForTests
1919import com.facebook.react.uimanager.DisplayMetricsHolder
20+ import com.facebook.testutils.shadows.ShadowNativeLoader
21+ import com.facebook.testutils.shadows.ShadowNativeMap
22+ import com.facebook.testutils.shadows.ShadowReadableNativeMap
23+ import com.facebook.testutils.shadows.ShadowSoLoader
24+ import com.facebook.testutils.shadows.ShadowWritableNativeMap
2025import junit.framework.TestCase
21- import org.assertj.core.api.Assertions
26+ import org.assertj.core.api.Assertions.assertThat
2227import org.junit.After
2328import org.junit.Before
2429import org.junit.Test
@@ -27,13 +32,26 @@ import org.mockito.ArgumentCaptor
2732import org.mockito.ArgumentMatchers
2833import org.mockito.MockedStatic
2934import org.mockito.Mockito.mockStatic
35+ import org.mockito.kotlin.doReturn
3036import org.mockito.kotlin.spy
3137import org.mockito.kotlin.times
3238import org.mockito.kotlin.verify
39+ import org.mockito.kotlin.whenever
3340import org.robolectric.RobolectricTestRunner
3441import org.robolectric.RuntimeEnvironment
42+ import org.robolectric.annotation.Config
3543
3644@RunWith(RobolectricTestRunner ::class )
45+ @Config(
46+ shadows =
47+ [
48+ ShadowSoLoader ::class ,
49+ ShadowNativeLoader ::class ,
50+ ShadowNativeMap ::class ,
51+ ShadowWritableNativeMap ::class ,
52+ ShadowReadableNativeMap ::class ,
53+ ]
54+ )
3755class DeviceInfoModuleTest : TestCase () {
3856
3957 private lateinit var deviceInfoModule: DeviceInfoModule
@@ -56,7 +74,7 @@ class DeviceInfoModuleTest : TestCase() {
5674 reactContext = spy(BridgeReactContext (RuntimeEnvironment .getApplication()))
5775 val catalystInstanceMock = ReactTestHelper .createMockCatalystInstance()
5876 reactContext.initializeWithInstance(catalystInstanceMock)
59- deviceInfoModule = DeviceInfoModule (reactContext)
77+ deviceInfoModule = spy( DeviceInfoModule (reactContext) )
6078 }
6179
6280 @After
@@ -111,17 +129,29 @@ class DeviceInfoModuleTest : TestCase() {
111129 )
112130 }
113131
114- private fun givenDisplayMetricsHolderContains (fakeDisplayMetrics : WritableMap ? ) {
115- val windowDisplayMetrics = DisplayMetrics ()
116-
117- displayMetricsHolder
118- .`when `<DisplayMetrics > { DisplayMetricsHolder .getWindowDisplayMetrics(reactContext, null ) }
119- .thenAnswer { windowDisplayMetrics }
132+ @Test
133+ fun getDisplayMetricsWritableMap_returnsCorrectMap () {
120134 displayMetricsHolder
121- .`when `<WritableMap > {
122- DisplayMetricsHolder .getDisplayMetricsWritableMap(windowDisplayMetrics, 1.0 )
123- }
124- .thenAnswer { fakeDisplayMetrics }
135+ .`when `<DisplayMetrics > { DisplayMetricsHolder .getScreenDisplayMetrics() }
136+ .thenAnswer { reactContext.resources.displayMetrics }
137+
138+ // Use the official initialization method to ensure both metrics are set
139+ val map: WritableMap = deviceInfoModule.getDisplayMetricsWritableMap()
140+ assertThat(map.hasKey(" windowPhysicalPixels" )).isTrue()
141+ assertThat(map.hasKey(" screenPhysicalPixels" )).isTrue()
142+ val windowMap = map.getMap(" windowPhysicalPixels" )
143+ val screenMap = map.getMap(" screenPhysicalPixels" )
144+ checkNotNull(windowMap)
145+ checkNotNull(screenMap)
146+ assertThat(windowMap.hasKey(" width" )).isTrue()
147+ assertThat(windowMap.hasKey(" height" )).isTrue()
148+ assertThat(windowMap.hasKey(" scale" )).isTrue()
149+ assertThat(windowMap.hasKey(" fontScale" )).isTrue()
150+ assertThat(windowMap.hasKey(" densityDpi" )).isTrue()
151+ }
152+
153+ private fun givenDisplayMetricsHolderContains (fakeDisplayMetrics : WritableMap ? ) {
154+ doReturn(fakeDisplayMetrics).whenever(deviceInfoModule).getDisplayMetricsWritableMap()
125155 }
126156
127157 companion object {
@@ -134,7 +164,7 @@ class DeviceInfoModuleTest : TestCase() {
134164 verify(context, times(expectedEventList.size))
135165 ?.emitDeviceEvent(ArgumentMatchers .eq(" didUpdateDimensions" ), captor.capture())
136166 val actualEvents = captor.allValues
137- Assertions . assertThat(actualEvents).isEqualTo(expectedEventList)
167+ assertThat(actualEvents).isEqualTo(expectedEventList)
138168 }
139169 }
140170}
0 commit comments