Add unit test for ImageView to take null uri in source

Summary:
This is a follow up action item from S295231 and T136039462 where we want to make sure null uri in image source is handled properly. This diff adds an unit test to make sure we are using transparent image when uri is null.

Changelog:
[Android][Internal] - Add unit test to ImageView for null uri in source

Reviewed By: javache

Differential Revision: D40732791

fbshipit-source-id: fd468bfe7c33a4f3f8913ead3e84a1770d7c907f
This commit is contained in:
Xin Chen
2022-11-01 12:11:10 -07:00
committed by Facebook GitHub Bot
parent 6b8e13f53c
commit 58a1cd2367
3 changed files with 43 additions and 0 deletions
@@ -28,6 +28,8 @@ rn_robolectric_test(
react_native_dep("third-party/java/okio:okio"),
react_native_target("java/com/facebook/react:react"),
react_native_target("java/com/facebook/react/bridge:bridge"),
react_native_target("java/com/facebook/react/util:util"),
react_native_target("java/com/facebook/react/views/imagehelper:imagehelper"),
react_native_target("java/com/facebook/react/common:common"),
react_native_target("java/com/facebook/react/touch:touch"),
react_native_target("java/com/facebook/react/uimanager:uimanager"),
@@ -14,22 +14,30 @@ import static org.junit.Assert.assertNull;
import android.graphics.Color;
import android.util.DisplayMetrics;
import com.facebook.drawee.backends.pipeline.Fresco;
import com.facebook.react.bridge.Arguments;
import com.facebook.react.bridge.CatalystInstance;
import com.facebook.react.bridge.JSApplicationIllegalArgumentException;
import com.facebook.react.bridge.JavaOnlyArray;
import com.facebook.react.bridge.JavaOnlyMap;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactTestHelper;
import com.facebook.react.bridge.WritableArray;
import com.facebook.react.bridge.WritableMap;
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.imagehelper.ImageSource;
import com.facebook.soloader.SoLoader;
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.invocation.InvocationOnMock;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PowerMockIgnore;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.rule.PowerMockRule;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
@@ -38,6 +46,7 @@ import org.robolectric.RuntimeEnvironment;
* Verify that {@link ScalingUtils} properties are being applied correctly by {@link
* ReactImageManager}.
*/
@PrepareForTest({Arguments.class, RNLog.class})
@RunWith(RobolectricTestRunner.class)
@PowerMockIgnore({"org.mockito.*", "org.robolectric.*", "androidx.*", "android.*"})
public class ReactImagePropertyTest {
@@ -50,6 +59,17 @@ public class ReactImagePropertyTest {
@Before
public void setup() {
PowerMockito.mockStatic(Arguments.class);
PowerMockito.when(Arguments.createArray())
.thenAnswer((InvocationOnMock invocation) -> new JavaOnlyArray());
PowerMockito.when(Arguments.createMap())
.thenAnswer((InvocationOnMock invocation) -> new JavaOnlyMap());
// RNLog is stubbed out and the whole class need to be mocked
PowerMockito.mockStatic(RNLog.class);
PowerMockito.doNothing().when(RNLog.class);
RNLog.w(null, "");
SoLoader.setInTestMode();
mContext = new ReactApplicationContext(RuntimeEnvironment.application);
mCatalystInstanceMock = ReactTestHelper.createMockCatalystInstance();
@@ -140,4 +160,20 @@ public class ReactImagePropertyTest {
viewManager.updateProperties(view, buildStyles("tintColor", null));
assertNull(view.getColorFilter());
}
@Test
public void testNullSrcs() {
ReactImageManager viewManager = new ReactImageManager();
ReactImageView view = viewManager.createViewInstance(mThemeContext);
WritableArray sources = Arguments.createArray();
WritableMap srcObj = Arguments.createMap();
srcObj.putNull("uri");
srcObj.putNull("width");
srcObj.putNull("height");
sources.pushMap(srcObj);
viewManager.setSource(view, sources);
view.maybeUpdateView();
assertEquals(
ImageSource.getTransparentBitmapImageSource(view.getContext()), view.getImageSource());
}
}