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