Added ShadowDrawable support for createFromResourceStream
Added ShadowDrawable support for createFromResourceStream
diff --git a/src/main/java/com/xtremelabs/robolectric/shadows/ShadowDrawable.java b/src/main/java/com/xtremelabs/robolectric/shadows/ShadowDrawable.java
index 454e239..b5d7912 100644
--- a/src/main/java/com/xtremelabs/robolectric/shadows/ShadowDrawable.java
+++ b/src/main/java/com/xtremelabs/robolectric/shadows/ShadowDrawable.java
@@ -1,9 +1,13 @@
package com.xtremelabs.robolectric.shadows;
+import android.content.res.Resources;
import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
import android.graphics.Rect;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
+import android.util.TypedValue;
+
import com.xtremelabs.robolectric.Robolectric;
import com.xtremelabs.robolectric.internal.Implementation;
import com.xtremelabs.robolectric.internal.Implements;
@@ -44,6 +48,16 @@
}
@Implementation
+ public static Drawable createFromResourceStream(Resources res, TypedValue value, InputStream is, String srcName) {
+ return createFromStream(is, srcName);
+ }
+
+ @Implementation
+ public static Drawable createFromResourceStream(Resources res, TypedValue value, InputStream is, String srcName, BitmapFactory.Options opts) {
+ return createFromStream(is, srcName);
+ }
+
+ @Implementation
public static Drawable createFromPath(String pathName) {
BitmapDrawable drawable = new BitmapDrawable(Robolectric.newInstanceOf(Bitmap.class));
shadowOf(drawable).setPath(pathName);
diff --git a/src/test/java/com/xtremelabs/robolectric/shadows/DrawableTest.java b/src/test/java/com/xtremelabs/robolectric/shadows/DrawableTest.java
index caf3c64..dd4940a 100644
--- a/src/test/java/com/xtremelabs/robolectric/shadows/DrawableTest.java
+++ b/src/test/java/com/xtremelabs/robolectric/shadows/DrawableTest.java
@@ -1,10 +1,13 @@
package com.xtremelabs.robolectric.shadows;
+import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.ColorFilter;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
+
import com.xtremelabs.robolectric.WithTestDefaultsRunner;
+
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -108,6 +111,48 @@
drawable.invalidateSelf();
assertTrue(shadowDrawable.wasInvalidated());
}
+
+ @Test
+ public void createFromResourceStream__shouldReturnNullWhenAskedToCreateADrawableFromACorruptedSourceStream() throws Exception {
+ String corruptedStreamSource = "http://foo.com/image.jpg";
+ ShadowDrawable.addCorruptStreamSource(corruptedStreamSource);
+ assertNull(ShadowDrawable.createFromResourceStream(null, null, new ByteArrayInputStream(new byte[0]), corruptedStreamSource));
+ }
+
+ @Test
+ public void createFromResourceStream__shouldReturnDrawableWithSpecificSource() throws Exception {
+ Drawable drawable = ShadowDrawable.createFromResourceStream(null, null, new ByteArrayInputStream(new byte[0]), "my_source");
+ assertNotNull(drawable);
+ assertEquals("my_source", ((ShadowBitmapDrawable) shadowOf(drawable)).getSource());
+ }
+
+ @Test
+ public void testCreateFromResourceStream_shouldSetTheInputStreamOnTheReturnedDrawable() throws Exception {
+ ByteArrayInputStream byteInputStream = new ByteArrayInputStream(new byte[0]);
+ Drawable drawable = Drawable.createFromResourceStream(null, null, byteInputStream, "src name");
+ assertThat(shadowOf(drawable).getInputStream(), equalTo((InputStream) byteInputStream));
+ }
+
+ @Test
+ public void createFromResourceStreamWithOptions__shouldReturnNullWhenAskedToCreateADrawableFromACorruptedSourceStream() throws Exception {
+ String corruptedStreamSource = "http://foo.com/image.jpg";
+ ShadowDrawable.addCorruptStreamSource(corruptedStreamSource);
+ assertNull(ShadowDrawable.createFromResourceStream(null, null, new ByteArrayInputStream(new byte[0]), corruptedStreamSource, new BitmapFactory.Options()));
+ }
+
+ @Test
+ public void createFromResourceStreamWithOptions__shouldReturnDrawableWithSpecificSource() throws Exception {
+ Drawable drawable = ShadowDrawable.createFromResourceStream(null, null, new ByteArrayInputStream(new byte[0]), "my_source", new BitmapFactory.Options());
+ assertNotNull(drawable);
+ assertEquals("my_source", ((ShadowBitmapDrawable) shadowOf(drawable)).getSource());
+ }
+
+ @Test
+ public void testCreateFromResourceStreamWithOptions_shouldSetTheInputStreamOnTheReturnedDrawable() throws Exception {
+ ByteArrayInputStream byteInputStream = new ByteArrayInputStream(new byte[0]);
+ Drawable drawable = Drawable.createFromResourceStream(null, null, byteInputStream, "src name", new BitmapFactory.Options());
+ assertThat(shadowOf(drawable).getInputStream(), equalTo((InputStream) byteInputStream));
+ }
private static class TestDrawable extends Drawable {
@Override