diff --git a/packages/react-native/ReactAndroid/api/ReactAndroid.api b/packages/react-native/ReactAndroid/api/ReactAndroid.api index 3115772226c..e35b6f848cf 100644 --- a/packages/react-native/ReactAndroid/api/ReactAndroid.api +++ b/packages/react-native/ReactAndroid/api/ReactAndroid.api @@ -700,11 +700,6 @@ public class com/facebook/react/bridge/DefaultJSExceptionHandler : com/facebook/ public fun handleException (Ljava/lang/Exception;)V } -public class com/facebook/react/bridge/DimensionPropConverter { - public fun ()V - public static fun getDimension (Ljava/lang/Object;)Lcom/facebook/yoga/YogaValue; -} - public abstract interface class com/facebook/react/bridge/Dynamic { public abstract fun asArray ()Lcom/facebook/react/bridge/ReadableArray; public abstract fun asBoolean ()Z diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/DimensionPropConverter.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/DimensionPropConverter.java deleted file mode 100644 index 306c0ba32f6..00000000000 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/DimensionPropConverter.java +++ /dev/null @@ -1,33 +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.bridge; - -import androidx.annotation.Nullable; -import com.facebook.yoga.YogaUnit; -import com.facebook.yoga.YogaValue; - -public class DimensionPropConverter { - - @Nullable - public static YogaValue getDimension(@Nullable Object value) { - if (value == null) { - return null; - } - - if (value instanceof Double) { - return new YogaValue(((Double) value).floatValue(), YogaUnit.POINT); - } - - if (value instanceof String) { - return YogaValue.parse((String) value); - } - - throw new JSApplicationCausedNativeException( - "DimensionValue: the value must be a number or string."); - } -} diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/DimensionPropConverter.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/DimensionPropConverter.kt new file mode 100644 index 00000000000..bfaaa3c3c9b --- /dev/null +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/DimensionPropConverter.kt @@ -0,0 +1,27 @@ +/* + * 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.bridge + +import com.facebook.yoga.YogaUnit +import com.facebook.yoga.YogaValue + +internal class DimensionPropConverter { + companion object { + @JvmStatic + fun getDimension(value: Any?): YogaValue? { + return when (value) { + null -> null + is Double -> YogaValue(value.toFloat(), YogaUnit.POINT) + is String -> YogaValue.parse(value) + else -> + throw JSApplicationCausedNativeException( + "DimensionValue: the value must be a number or string.") + } + } + } +} diff --git a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/bridge/DimensionPropConverterTest.kt b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/bridge/DimensionPropConverterTest.kt new file mode 100644 index 00000000000..68f34c23d77 --- /dev/null +++ b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/bridge/DimensionPropConverterTest.kt @@ -0,0 +1,45 @@ +/* + * 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.bridge + +import com.facebook.yoga.YogaUnit +import org.assertj.core.api.Assertions.assertThat +import org.junit.Test + +/** Tests for [DimensionPropConverter] */ +class DimensionPropConverterTest { + + @Test + fun doubleReturnsYogaValue() { + val result = DimensionPropConverter.getDimension(10.5) + + assertThat(result).isNotNull + assertThat(result?.value).isEqualTo(10.5f) + assertThat(result?.unit).isEqualTo(YogaUnit.POINT) + } + + @Test + fun stringReturnsParsedYogaValue() { + val result = DimensionPropConverter.getDimension("100%") + + assertThat(result).isNotNull + assertThat(result?.unit).isEqualTo(YogaUnit.PERCENT) + } + + @Test + fun nullReturnsNull() { + val result = DimensionPropConverter.getDimension(null) + + assertThat(result).isNull() + } + + @Test(expected = JSApplicationCausedNativeException::class) + fun invalidTypeThrowsException() { + DimensionPropConverter.getDimension(listOf(1, 2, 3)) + } +}