Migrated UIManagerModuleConstantsTest.java to UIManagerModuleConstant… (#38994)

Summary:
This PR converts UIManagerModuleConstantsTest.java into Kotlin as requested in [https://github.com/facebook/react-native/issues/38825](https://github.com/facebook/react-native/issues/38825)

## Changelog:

[INTERNAL] [CHANGED] - Convert to UIManagerModuleConstantsTest.java to UIManagerModuleConstantsText.kt

Pull Request resolved: https://github.com/facebook/react-native/pull/38994

Test Plan:
```./gradlew :packages:react-native:ReactAndroid:test``` must pass and CI must be green

<img width="1297" alt="Screenshot 2023-08-14 at 17 43 14" src="https://github.com/facebook/react-native/assets/2865799/13a9c2b0-3f47-48da-b663-87e2cb652c69">

Reviewed By: mdvacca, rshest

Differential Revision: D48387980

Pulled By: cortinico

fbshipit-source-id: d5ab3f9a4ada2d0442daecb6c893458d9baa7558
This commit is contained in:
giolaq
2023-08-16 12:16:03 -07:00
committed by Facebook GitHub Bot
parent 0a0ce8403e
commit 35b913017b
2 changed files with 219 additions and 169 deletions
@@ -1,169 +0,0 @@
/*
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
package com.facebook.react.uimanager;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.common.MapBuilder;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import org.assertj.core.data.MapEntry;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
@RunWith(RobolectricTestRunner.class)
@Ignore // TODO T14964130
public class UIManagerModuleConstantsTest {
private static final String CUSTOM_BUBBLING_EVENT_TYPES = "customBubblingEventTypes";
private static final String CUSTOM_DIRECT_EVENT_TYPES = "customDirectEventTypes";
private static final Map TWIRL_BUBBLING_EVENT_MAP =
MapBuilder.of(
"phasedRegistrationNames",
MapBuilder.of("bubbled", "onTwirl", "captured", "onTwirlCaptured"));
private static final Map TWIRL_DIRECT_EVENT_MAP = MapBuilder.of("registrationName", "onTwirl");
private ReactApplicationContext mReactContext;
@Before
public void setUp() {
mReactContext = new ReactApplicationContext(RuntimeEnvironment.getApplication());
}
@Test
public void testNoCustomConstants() {
List<ViewManager> viewManagers = Arrays.asList(mock(ViewManager.class));
UIManagerModule uiManagerModule = new UIManagerModule(mReactContext, viewManagers, 0);
Map<String, Object> constants = uiManagerModule.getConstants();
assertThat(constants)
.containsKey(CUSTOM_BUBBLING_EVENT_TYPES)
.containsKey(CUSTOM_DIRECT_EVENT_TYPES)
.containsKey("Dimensions");
}
@Test
public void testCustomBubblingEvents() {
ViewManager mockViewManager = mock(ViewManager.class);
List<ViewManager> viewManagers = Arrays.asList(mockViewManager);
when(mockViewManager.getExportedCustomBubblingEventTypeConstants())
.thenReturn(MapBuilder.of("onTwirl", TWIRL_BUBBLING_EVENT_MAP));
UIManagerModule uiManagerModule = new UIManagerModule(mReactContext, viewManagers, 0);
Map<String, Object> constants = uiManagerModule.getConstants();
assertThat((Map) constants.get(CUSTOM_BUBBLING_EVENT_TYPES))
.contains(MapEntry.entry("onTwirl", TWIRL_BUBBLING_EVENT_MAP))
.containsKey("topChange");
}
@Test
public void testCustomDirectEvents() {
ViewManager mockViewManager = mock(ViewManager.class);
List<ViewManager> viewManagers = Arrays.asList(mockViewManager);
when(mockViewManager.getExportedCustomDirectEventTypeConstants())
.thenReturn(MapBuilder.of("onTwirl", TWIRL_DIRECT_EVENT_MAP));
UIManagerModule uiManagerModule = new UIManagerModule(mReactContext, viewManagers, 0);
Map<String, Object> constants = uiManagerModule.getConstants();
assertThat((Map) constants.get(CUSTOM_DIRECT_EVENT_TYPES))
.contains(MapEntry.entry("onTwirl", TWIRL_DIRECT_EVENT_MAP))
.containsKey("topLoadingStart");
}
@Test
public void testCustomViewConstants() {
ViewManager mockViewManager = mock(ViewManager.class);
List<ViewManager> viewManagers = Arrays.asList(mockViewManager);
when(mockViewManager.getName()).thenReturn("RedPandaPhotoOfTheDayView");
when(mockViewManager.getExportedViewConstants())
.thenReturn(MapBuilder.of("PhotoSizeType", MapBuilder.of("Small", 1, "Large", 2)));
UIManagerModule uiManagerModule = new UIManagerModule(mReactContext, viewManagers, 0);
Map<String, Object> constants = uiManagerModule.getConstants();
assertThat(constants).containsKey("RedPandaPhotoOfTheDayView");
assertThat((Map) constants.get("RedPandaPhotoOfTheDayView")).containsKey("Constants");
assertThat((Map) valueAtPath(constants, "RedPandaPhotoOfTheDayView", "Constants"))
.containsKey("PhotoSizeType");
}
@Test
public void testNativeProps() {
ViewManager mockViewManager = mock(ViewManager.class);
List<ViewManager> viewManagers = Arrays.asList(mockViewManager);
when(mockViewManager.getName()).thenReturn("SomeView");
when(mockViewManager.getNativeProps()).thenReturn(MapBuilder.of("fooProp", "number"));
UIManagerModule uiManagerModule = new UIManagerModule(mReactContext, viewManagers, 0);
Map<String, Object> constants = uiManagerModule.getConstants();
assertThat((String) valueAtPath(constants, "SomeView", "NativeProps", "fooProp"))
.isEqualTo("number");
}
@Test
public void testMergeConstants() {
ViewManager managerX = mock(ViewManager.class);
when(managerX.getExportedCustomDirectEventTypeConstants())
.thenReturn(
MapBuilder.of(
"onTwirl",
MapBuilder.of(
"registrationName",
"onTwirl",
"keyToOverride",
"valueX",
"mapToMerge",
MapBuilder.of("keyToOverride", "innerValueX", "anotherKey", "valueX"))));
ViewManager managerY = mock(ViewManager.class);
when(managerY.getExportedCustomDirectEventTypeConstants())
.thenReturn(
MapBuilder.of(
"onTwirl",
MapBuilder.of(
"extraKey",
"extraValue",
"keyToOverride",
"valueY",
"mapToMerge",
MapBuilder.of("keyToOverride", "innerValueY", "extraKey", "valueY"))));
List<ViewManager> viewManagers = Arrays.asList(managerX, managerY);
UIManagerModule uiManagerModule = new UIManagerModule(mReactContext, viewManagers, 0);
Map<String, Object> constants = uiManagerModule.getConstants();
assertThat((Map) constants.get(CUSTOM_DIRECT_EVENT_TYPES)).containsKey("onTwirl");
Map twirlMap = (Map) valueAtPath(constants, CUSTOM_DIRECT_EVENT_TYPES, "onTwirl");
assertThat(twirlMap)
.contains(MapEntry.entry("registrationName", "onTwirl"))
.contains(MapEntry.entry("keyToOverride", "valueY"))
.contains(MapEntry.entry("extraKey", "extraValue"))
.containsKey("mapToMerge");
Map mapToMerge = (Map) valueAtPath(twirlMap, "mapToMerge");
assertThat(mapToMerge)
.contains(MapEntry.entry("keyToOverride", "innerValueY"))
.contains(MapEntry.entry("anotherKey", "valueX"))
.contains(MapEntry.entry("extraKey", "valueY"));
}
private static Object valueAtPath(Map nestedMap, String... keyPath) {
assertThat(keyPath).isNotEmpty();
Object value = nestedMap;
for (String key : keyPath) {
assertThat(value).isInstanceOf(Map.class);
nestedMap = (Map) value;
assertThat(nestedMap).containsKey(key);
value = nestedMap.get(key);
}
return value;
}
}
@@ -0,0 +1,219 @@
/*
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
package com.facebook.react.uimanager
import android.view.View
import com.facebook.react.bridge.ReactApplicationContext
import com.facebook.react.common.MapBuilder
import org.assertj.core.api.Assertions
import org.assertj.core.data.MapEntry
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.robolectric.RobolectricTestRunner
import org.robolectric.RuntimeEnvironment
@RunWith(RobolectricTestRunner::class)
class UIManagerModuleConstantsTest {
private class ConcreteViewManager(val viewName: String) : SimpleViewManager<View>() {
private var customDirectEventTypeConstants: Map<String, Map<String, Any>> = emptyMap()
fun setExportedCustomDirectEventTypeConstants(constants: Map<String, Map<String, Any>>) {
customDirectEventTypeConstants = constants
}
override fun createViewInstance(reactContext: ThemedReactContext): View = View(reactContext)
override fun getName(): String = viewName
override fun getExportedCustomDirectEventTypeConstants(): Map<String, Map<String, Any>> =
customDirectEventTypeConstants
override fun getExportedCustomBubblingEventTypeConstants(): MutableMap<String, Any>? =
MapBuilder.of("onTwirl", TWIRL_BUBBLING_EVENT_MAP)
override fun getExportedViewConstants(): MutableMap<String, Any>? =
MapBuilder.of("PhotoSizeType", MapBuilder.of("Small", 1, "Large", 2))
override fun getNativeProps(): MutableMap<String, String> = MapBuilder.of("fooProp", "number")
}
private lateinit var reactContext: ReactApplicationContext
@Before
fun setUp() {
reactContext = ReactApplicationContext(RuntimeEnvironment.getApplication())
}
@Suppress("UNCHECKED_CAST")
@Test
fun testNoCustomConstants() {
val manager = ConcreteViewManager(VIEW_MANAGER_NAME)
manager.exportedCustomDirectEventTypeConstants =
MapBuilder.of("onTwirl", TWIRL_DIRECT_EVENT_MAP)
val viewManagers = listOf(manager)
val uiManagerModule = UIManagerModule(reactContext, viewManagers, 0)
val viewManagerConstants =
uiManagerModule.constants?.get(VIEW_MANAGER_NAME) as Map<String, Any>?
Assertions.assertThat(viewManagerConstants)
.containsKey(BUBBLING_EVENTS_TYPES_KEY)
.containsKey(DIRECT_EVENTS_TYPES_KEY)
}
@Suppress("UNCHECKED_CAST")
@Test
fun testCustomBubblingEvents() {
val manager = ConcreteViewManager(VIEW_MANAGER_NAME)
manager.exportedCustomDirectEventTypeConstants =
MapBuilder.of("onTwirl", TWIRL_DIRECT_EVENT_MAP)
val viewManagers = listOf(manager)
val uiManagerModule = UIManagerModule(reactContext, viewManagers, 0)
val viewManagerConstants = uiManagerModule.constants?.get(VIEW_MANAGER_NAME) as Map<String, Any>
Assertions.assertThat(viewManagerConstants).containsKey(BUBBLING_EVENTS_TYPES_KEY)
val bubblingEventTypes = viewManagerConstants[BUBBLING_EVENTS_TYPES_KEY] as Map<String, Any>
Assertions.assertThat(bubblingEventTypes).containsEntry("onTwirl", TWIRL_BUBBLING_EVENT_MAP)
}
@Suppress("UNCHECKED_CAST")
@Test
fun testCustomDirectEvents() {
val manager = ConcreteViewManager(VIEW_MANAGER_NAME)
manager.exportedCustomDirectEventTypeConstants =
MapBuilder.of("onTwirl", TWIRL_DIRECT_EVENT_MAP)
val viewManagers = listOf(manager)
val uiManagerModule = UIManagerModule(reactContext, viewManagers, 0)
val viewManagerConstants = uiManagerModule.constants?.get(VIEW_MANAGER_NAME) as Map<String, Any>
Assertions.assertThat(viewManagerConstants).containsKey(DIRECT_EVENTS_TYPES_KEY)
val directEventTypes = viewManagerConstants[DIRECT_EVENTS_TYPES_KEY] as Map<String, Any>
Assertions.assertThat(directEventTypes).containsEntry("onTwirl", TWIRL_DIRECT_EVENT_MAP)
}
@Suppress("UNCHECKED_CAST")
@Test
fun testCustomViewConstants() {
val manager = ConcreteViewManager(VIEW_MANAGER_NAME)
manager.exportedCustomDirectEventTypeConstants =
MapBuilder.of("onTwirl", TWIRL_DIRECT_EVENT_MAP)
val viewManagers = listOf(manager)
val uiManagerModule = UIManagerModule(reactContext, viewManagers, 0)
val constants = uiManagerModule.constants
Assertions.assertThat(constants).containsKey(VIEW_MANAGER_NAME)
Assertions.assertThat(constants!![VIEW_MANAGER_NAME] as Map<String, Any>)
.containsKey("Constants")
Assertions.assertThat(
valueAtPath(constants, VIEW_MANAGER_NAME, "Constants") as Map<String, Any>?)
.containsKey("PhotoSizeType")
}
@Test
fun testNativeProps() {
val manager = ConcreteViewManager(VIEW_MANAGER_NAME)
manager.exportedCustomDirectEventTypeConstants =
MapBuilder.of("onTwirl", TWIRL_DIRECT_EVENT_MAP)
val viewManagers = listOf(manager)
val uiManagerModule = UIManagerModule(reactContext, viewManagers, 0)
val constants = uiManagerModule.constants.orEmpty()
Assertions.assertThat(
valueAtPath(constants, VIEW_MANAGER_NAME, "NativeProps", "fooProp") as String?)
.isEqualTo("number")
}
@Suppress("UNCHECKED_CAST")
@Test
fun testMergeConstants() {
val managerX = ConcreteViewManager("ManagerX")
managerX.exportedCustomDirectEventTypeConstants =
MapBuilder.of(
"onTwirl",
MapBuilder.of(
"registrationName",
"onTwirl",
"keyToOverride",
"valueX",
"mapToMerge",
MapBuilder.of("keyToOverride", "innerValueX", "anotherKey", "valueX")))
val managerY = ConcreteViewManager("ManagerY")
managerY.exportedCustomDirectEventTypeConstants =
MapBuilder.of(
"onTwirl",
MapBuilder.of(
"extraKey",
"extraValue",
"keyToOverride",
"valueY",
"mapToMerge",
MapBuilder.of("keyToOverride", "innerValueY", "extraKey", "valueY")))
val viewManagers = listOf(managerX, managerY)
val uiManagerModule = UIManagerModule(reactContext, viewManagers, 0)
val constants = uiManagerModule.constants
val viewManagerConstants = constants!!["ManagerX"] as Map<String, Any>
Assertions.assertThat(viewManagerConstants[DIRECT_EVENTS_TYPES_KEY] as Map<String, Any>)
.containsKey("onTwirl")
val twirlMap =
valueAtPath(viewManagerConstants, DIRECT_EVENTS_TYPES_KEY, "onTwirl") as Map<String, Any>
Assertions.assertThat(twirlMap)
.contains(MapEntry.entry("registrationName", "onTwirl"))
.contains(MapEntry.entry("keyToOverride", "valueY"))
.contains(MapEntry.entry("extraKey", "extraValue"))
.containsKey("mapToMerge")
val mapToMerge = valueAtPath(twirlMap, "mapToMerge") as Map<String, Any>
Assertions.assertThat(mapToMerge)
.contains(MapEntry.entry("keyToOverride", "innerValueY"))
.contains(MapEntry.entry("anotherKey", "valueX"))
.contains(MapEntry.entry("extraKey", "valueY"))
}
companion object {
private val TWIRL_BUBBLING_EVENT_MAP: Map<*, *> =
MapBuilder.of(
"phasedRegistrationNames",
MapBuilder.of("bubbled", "onTwirl", "captured", "onTwirlCaptured"))
private val TWIRL_DIRECT_EVENT_MAP: Map<String, Any> =
MapBuilder.of("registrationName", "onTwirl")
private const val VIEW_MANAGER_NAME = "viewManagerName"
private const val BUBBLING_EVENTS_TYPES_KEY = "bubblingEventTypes"
private const val DIRECT_EVENTS_TYPES_KEY = "directEventTypes"
@Suppress("UNCHECKED_CAST")
private fun valueAtPath(nestedMap: Map<String, Any>, vararg keyPath: String): Any? {
Assertions.assertThat(keyPath).isNotEmpty
var value: Any? = nestedMap
for (key in keyPath) {
Assertions.assertThat(value).isInstanceOf(MutableMap::class.java)
val currentNestedMap = value as Map<String, Any>
Assertions.assertThat(key in currentNestedMap).isTrue
value = currentNestedMap[key]
}
return value
}
}
}