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; import java.io.ByteArrayInputStream; import java.io.InputStream; import static com.xtremelabs.robolectric.Robolectric.shadowOf; import static junit.framework.Assert.assertFalse; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.*; @RunWith(WithTestDefaultsRunner.class) public class DrawableTest { @Test public void createFromStream__shouldReturnNullWhenAskedToCreateADrawableFromACorruptedSourceStream() throws Exception { String corruptedStreamSource = "http://foo.com/image.jpg"; ShadowDrawable.addCorruptStreamSource(corruptedStreamSource); assertNull(ShadowDrawable.createFromStream(new ByteArrayInputStream(new byte[0]), corruptedStreamSource)); } @Test public void createFromStream__shouldReturnDrawableWithSpecificSource() throws Exception { Drawable drawable = ShadowDrawable.createFromStream(new ByteArrayInputStream(new byte[0]), "my_source"); assertNotNull(drawable); assertEquals("my_source", ((ShadowBitmapDrawable) shadowOf(drawable)).getSource()); } @Test public void reset__shouldClearStaticState() throws Exception { String src = "source1"; ShadowDrawable.addCorruptStreamSource(src); assertTrue(ShadowDrawable.corruptStreamSources.contains(src)); ShadowDrawable.reset(); assertFalse(ShadowDrawable.corruptStreamSources.contains(src)); } @Test public void testCreateFromStream_shouldSetTheInputStreamOnTheReturnedDrawable() throws Exception { ByteArrayInputStream byteInputStream = new ByteArrayInputStream(new byte[0]); Drawable drawable = Drawable.createFromStream(byteInputStream, "src name"); assertThat(shadowOf(drawable).getInputStream(), equalTo((InputStream) byteInputStream)); } @Test public void copyBoundsWithPassedRect() { Drawable drawable = ShadowDrawable.createFromStream(new ByteArrayInputStream(new byte[0]), "my_source"); drawable.setBounds(1, 2, 3, 4); Rect r = new Rect(); drawable.copyBounds(r); assertThat(r.left, is(1)); assertThat(r.top, is(2)); assertThat(r.right, is(3)); assertThat(r.bottom, is(4)); } @Test public void copyBoundsToReturnedRect() { Drawable drawable = ShadowDrawable.createFromStream(new ByteArrayInputStream(new byte[0]), "my_source"); drawable.setBounds(1, 2, 3, 4); Rect r = drawable.copyBounds(); assertThat(r.left, is(1)); assertThat(r.top, is(2)); assertThat(r.right, is(3)); assertThat(r.bottom, is(4)); } @Test public void createFromPath__shouldReturnDrawableWithSpecificPath() throws Exception { Drawable drawable = ShadowDrawable.createFromPath("/foo"); assertNotNull(drawable); assertEquals("/foo", ((ShadowBitmapDrawable) shadowOf(drawable)).getPath()); } @Test public void testGetLoadedFromResourceId_shouldDefaultToNegativeOne() throws Exception { Drawable drawable = new TestDrawable(); assertThat(shadowOf(drawable).getLoadedFromResourceId(), is(-1)); } @Test public void testSetLoadedFromResourceId() throws Exception { Drawable drawable = new TestDrawable(); ShadowDrawable shadowDrawable = shadowOf(drawable); shadowDrawable.setLoadedFromResourceId(99); assertThat(shadowDrawable.getLoadedFromResourceId(), is(99)); } @Test public void testCreateFromResourceId_shouldSetTheId() throws Exception { Drawable drawable = ShadowDrawable.createFromResourceId(34758); ShadowDrawable shadowDrawable = shadowOf(drawable); assertThat(shadowDrawable.getLoadedFromResourceId(), is(34758)); } @Test public void testWasSelfInvalidated() throws Exception { Drawable drawable = ShadowDrawable.createFromResourceId(34758); ShadowDrawable shadowDrawable = shadowOf(drawable); assertFalse(shadowDrawable.wasInvalidated()); 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 public void draw(Canvas canvas) { } @Override public void setAlpha(int alpha) { } @Override public void setColorFilter(ColorFilter cf) { } @Override public int getOpacity() { return 0; } } }