mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
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:
committed by
Facebook GitHub Bot
parent
0a0ce8403e
commit
35b913017b
-169
@@ -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;
|
||||
}
|
||||
}
|
||||
+219
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user