14
14
import android .graphics .Color ;
15
15
import android .util .DisplayMetrics ;
16
16
import com .facebook .drawee .backends .pipeline .Fresco ;
17
+ import com .facebook .react .bridge .Arguments ;
17
18
import com .facebook .react .bridge .CatalystInstance ;
18
19
import com .facebook .react .bridge .JSApplicationIllegalArgumentException ;
19
20
import com .facebook .react .bridge .JavaOnlyArray ;
20
21
import com .facebook .react .bridge .JavaOnlyMap ;
21
22
import com .facebook .react .bridge .ReactApplicationContext ;
22
23
import com .facebook .react .bridge .ReactTestHelper ;
24
+ import com .facebook .react .bridge .WritableArray ;
25
+ import com .facebook .react .bridge .WritableMap ;
23
26
import com .facebook .react .uimanager .DisplayMetricsHolder ;
24
27
import com .facebook .react .uimanager .ReactStylesDiffMap ;
25
28
import com .facebook .react .uimanager .ThemedReactContext ;
29
+ import com .facebook .react .util .RNLog ;
30
+ import com .facebook .react .views .imagehelper .ImageSource ;
26
31
import com .facebook .soloader .SoLoader ;
27
32
import org .junit .After ;
28
33
import org .junit .Before ;
29
34
import org .junit .Rule ;
30
35
import org .junit .Test ;
31
36
import org .junit .runner .RunWith ;
37
+ import org .mockito .invocation .InvocationOnMock ;
38
+ import org .powermock .api .mockito .PowerMockito ;
32
39
import org .powermock .core .classloader .annotations .PowerMockIgnore ;
40
+ import org .powermock .core .classloader .annotations .PrepareForTest ;
33
41
import org .powermock .modules .junit4 .rule .PowerMockRule ;
34
42
import org .robolectric .RobolectricTestRunner ;
35
43
import org .robolectric .RuntimeEnvironment ;
38
46
* Verify that {@link ScalingUtils} properties are being applied correctly by {@link
39
47
* ReactImageManager}.
40
48
*/
49
+ @ PrepareForTest ({Arguments .class , RNLog .class })
41
50
@ RunWith (RobolectricTestRunner .class )
42
51
@ PowerMockIgnore ({"org.mockito.*" , "org.robolectric.*" , "androidx.*" , "android.*" })
43
52
public class ReactImagePropertyTest {
@@ -50,6 +59,17 @@ public class ReactImagePropertyTest {
50
59
51
60
@ Before
52
61
public void setup () {
62
+ PowerMockito .mockStatic (Arguments .class );
63
+ PowerMockito .when (Arguments .createArray ())
64
+ .thenAnswer ((InvocationOnMock invocation ) -> new JavaOnlyArray ());
65
+ PowerMockito .when (Arguments .createMap ())
66
+ .thenAnswer ((InvocationOnMock invocation ) -> new JavaOnlyMap ());
67
+
68
+ // RNLog is stubbed out and the whole class need to be mocked
69
+ PowerMockito .mockStatic (RNLog .class );
70
+ PowerMockito .doNothing ().when (RNLog .class );
71
+ RNLog .w (null , "" );
72
+
53
73
SoLoader .setInTestMode ();
54
74
mContext = new ReactApplicationContext (RuntimeEnvironment .application );
55
75
mCatalystInstanceMock = ReactTestHelper .createMockCatalystInstance ();
@@ -140,4 +160,20 @@ public void testTintColor() {
140
160
viewManager .updateProperties (view , buildStyles ("tintColor" , null ));
141
161
assertNull (view .getColorFilter ());
142
162
}
163
+
164
+ @ Test
165
+ public void testNullSrcs () {
166
+ ReactImageManager viewManager = new ReactImageManager ();
167
+ ReactImageView view = viewManager .createViewInstance (mThemeContext );
168
+ WritableArray sources = Arguments .createArray ();
169
+ WritableMap srcObj = Arguments .createMap ();
170
+ srcObj .putNull ("uri" );
171
+ srcObj .putNull ("width" );
172
+ srcObj .putNull ("height" );
173
+ sources .pushMap (srcObj );
174
+ viewManager .setSource (view , sources );
175
+ view .maybeUpdateView ();
176
+ assertEquals (
177
+ ImageSource .getTransparentBitmapImageSource (view .getContext ()), view .getImageSource ());
178
+ }
143
179
}
0 commit comments