From ac2bbb0cd5ee414d449d554bfbcaa299af7cfbde Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateo=20Guzm=C3=A1n?= Date: Tue, 5 Nov 2024 19:35:05 +0100 Subject: [PATCH] test(image): [android] improving image property test cases --- .../views/image/ReactImagePropertyTest.kt | 121 +++++++++++++++++- 1 file changed, 120 insertions(+), 1 deletion(-) 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 f1329e88d8f7..28799574d4d8 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 @@ -9,6 +9,7 @@ package com.facebook.react.views.image import android.graphics.Color import android.util.DisplayMetrics +import com.facebook.common.logging.FLog import com.facebook.drawee.backends.pipeline.Fresco import com.facebook.drawee.drawable.ScalingUtils import com.facebook.react.bridge.Arguments @@ -19,11 +20,16 @@ import com.facebook.react.bridge.JavaOnlyMap import com.facebook.react.bridge.ReactTestHelper.createMockCatalystInstance import com.facebook.react.bridge.WritableArray import com.facebook.react.bridge.WritableMap +import com.facebook.react.common.ReactConstants import com.facebook.react.internal.featureflags.ReactNativeFeatureFlagsForTests import com.facebook.react.uimanager.DisplayMetricsHolder import com.facebook.react.uimanager.ReactStylesDiffMap import com.facebook.react.uimanager.ThemedReactContext import com.facebook.react.util.RNLog +import com.facebook.react.views.image.ImageResizeMethod +import com.facebook.react.views.image.ImageResizeMode +import com.facebook.react.views.image.ReactImageView +import com.facebook.react.views.image.ScaleTypeStartInside import com.facebook.react.views.imagehelper.ImageSource import com.facebook.soloader.SoLoader import org.assertj.core.api.Assertions.assertThat @@ -34,7 +40,11 @@ import org.junit.runner.RunWith import org.mockito.MockedStatic import org.mockito.Mockito.any import org.mockito.Mockito.anyString +import org.mockito.Mockito.mock import org.mockito.Mockito.mockStatic +import org.mockito.Mockito.never +import org.mockito.Mockito.reset +import org.mockito.Mockito.verify import org.robolectric.RobolectricTestRunner import org.robolectric.RuntimeEnvironment @@ -47,6 +57,7 @@ class ReactImagePropertyTest { private lateinit var themeContext: ThemedReactContext private lateinit var arguments: MockedStatic private lateinit var rnLog: MockedStatic + private lateinit var flogMock: MockedStatic @Before fun setup() { @@ -57,6 +68,8 @@ class ReactImagePropertyTest { rnLog = mockStatic(RNLog::class.java) rnLog.`when` { RNLog.w(any(), anyString()) }.thenAnswer {} + flogMock = mockStatic(FLog::class.java) + SoLoader.setInTestMode() context = BridgeReactContext(RuntimeEnvironment.getApplication()) catalystInstanceMock = createMockCatalystInstance() @@ -73,6 +86,7 @@ class ReactImagePropertyTest { DisplayMetricsHolder.setWindowDisplayMetrics(null) arguments.close() rnLog.close() + flogMock.close() } private fun buildStyles(vararg keysAndValues: Any?): ReactStylesDiffMap { @@ -87,6 +101,20 @@ class ReactImagePropertyTest { assertThat(view.isFocusable).isTrue() } + @Test + fun testOverlayColor() { + val viewManager = ReactImageManager() + val mockView = mock(ReactImageView::class.java) + + viewManager.setOverlayColor(mockView, null) + verify(mockView).setOverlayColor(Color.TRANSPARENT) + reset(mockView) + + viewManager.setOverlayColor(mockView, Color.argb(50, 0, 0, 255)) + verify(mockView).setOverlayColor(Color.argb(50, 0, 0, 255)) + reset(mockView) + } + @Test fun testTintColor() { val viewManager = ReactImageManager() @@ -113,6 +141,97 @@ class ReactImagePropertyTest { viewManager.setSource(view, sources) view.maybeUpdateView() assertThat(ImageSource.getTransparentBitmapImageSource(view.context)) - .isEqualTo(view.imageSource) + .isEqualTo(view.imageSource) + } + + @Test + fun testResizeMode() { + val viewManager = ReactImageManager() + val mockView = mock(ReactImageView::class.java) + + viewManager.setResizeMode(mockView, null) + verify(mockView).setScaleType(ScalingUtils.ScaleType.CENTER_CROP) + reset(mockView) + + viewManager.setResizeMode(mockView, "cover") + verify(mockView).setScaleType(ScalingUtils.ScaleType.CENTER_CROP) + reset(mockView) + + viewManager.setResizeMode(mockView, "contain") + verify(mockView).setScaleType(ScalingUtils.ScaleType.FIT_CENTER) + reset(mockView) + + viewManager.setResizeMode(mockView, "stretch") + verify(mockView).setScaleType(ScalingUtils.ScaleType.FIT_XY) + reset(mockView) + + viewManager.setResizeMode(mockView, "repeat") + verify(mockView).setScaleType(ScaleTypeStartInside.INSTANCE) + reset(mockView) + + viewManager.setResizeMode(mockView, "center") + verify(mockView).setScaleType(ScalingUtils.ScaleType.CENTER_INSIDE) + reset(mockView) + + viewManager.setResizeMode(mockView, "invalid") + verify(mockView).setScaleType(ScalingUtils.ScaleType.CENTER_CROP) + } + + @Test + fun testResizeMethod() { + val viewManager = ReactImageManager() + val mockView = mock(ReactImageView::class.java) + + viewManager.setResizeMethod(mockView, null) + verify(mockView).setResizeMethod(ImageResizeMethod.AUTO) + reset(mockView) + + viewManager.setResizeMethod(mockView, "auto") + verify(mockView).setResizeMethod(ImageResizeMethod.AUTO) + reset(mockView) + + viewManager.setResizeMethod(mockView, "resize") + verify(mockView).setResizeMethod(ImageResizeMethod.RESIZE) + reset(mockView) + + viewManager.setResizeMethod(mockView, "scale") + verify(mockView).setResizeMethod(ImageResizeMethod.SCALE) + reset(mockView) + + viewManager.setResizeMethod(mockView, "none") + verify(mockView).setResizeMethod(ImageResizeMethod.NONE) + reset(mockView) + + viewManager.setResizeMethod(mockView, "invalid") + verify(mockView).setResizeMethod(ImageResizeMethod.AUTO) + flogMock.verify { FLog.w(ReactConstants.TAG, "Invalid resize method: 'invalid'") } + } + + @Test + fun testResizeMultiplier() { + val viewManager = ReactImageManager() + val mockView = mock(ReactImageView::class.java) + + viewManager.setResizeMultiplier(mockView, 0.01f) + verify(mockView).setResizeMultiplier(0.01f) + reset(mockView) + + viewManager.setResizeMultiplier(mockView, 0.009f) + verify(mockView).setResizeMultiplier(0.009f) + flogMock.verify { FLog.w(ReactConstants.TAG, "Invalid resize multiplier: '0.009'") } + } + + @Test + fun testHeaders() { + val viewManager = ReactImageManager() + val mockView = mock(ReactImageView::class.java) + + viewManager.setHeaders(mockView, null) + verify(mockView, never()).setHeaders(any()) + + val headers = JavaOnlyMap() + headers.putString("key", "value") + viewManager.setHeaders(mockView, headers) + verify(mockView).setHeaders(headers) } }