1package com.xtremelabs.robolectric.shadows; 2 3import android.content.res.Resources; 4import android.graphics.Canvas; 5import android.graphics.ColorMatrix; 6import android.graphics.ColorMatrixColorFilter; 7import android.graphics.Shader; 8import android.graphics.drawable.BitmapDrawable; 9import android.graphics.drawable.Drawable; 10import com.xtremelabs.robolectric.R; 11import com.xtremelabs.robolectric.Robolectric; 12import com.xtremelabs.robolectric.WithTestDefaultsRunner; 13import org.junit.Before; 14import org.junit.Test; 15import org.junit.runner.RunWith; 16 17import java.io.ByteArrayInputStream; 18import java.io.InputStream; 19 20import static com.xtremelabs.robolectric.Robolectric.shadowOf; 21import static org.junit.Assert.assertEquals; 22import static org.junit.Assert.assertFalse; 23 24@RunWith(WithTestDefaultsRunner.class) 25public class BitmapDrawableTest { 26 private Resources resources; 27 28 @Before 29 public void setUp() throws Exception { 30 resources = Robolectric.application.getResources(); 31 } 32 33 @Test 34 public void getBitmap_shouldReturnBitmapUsedToDraw() throws Exception { 35 BitmapDrawable drawable = (BitmapDrawable) resources.getDrawable(R.drawable.an_image); 36 assertEquals("Bitmap for resource:drawable/an_image", shadowOf(drawable.getBitmap()).getDescription()); 37 } 38 39 @Test 40 public void draw_shouldCopyDescriptionToCanvas() throws Exception { 41 BitmapDrawable drawable = (BitmapDrawable) resources.getDrawable(R.drawable.an_image); 42 Canvas canvas = new Canvas(); 43 drawable.draw(canvas); 44 45 assertEquals("Bitmap for resource:drawable/an_image", shadowOf(canvas).getDescription()); 46 } 47 48 @Test 49 public void shouldInheritSourceStringFromDrawableDotCreateFromStream() throws Exception { 50 InputStream emptyInputStream = new ByteArrayInputStream("".getBytes()); 51 BitmapDrawable drawable = (BitmapDrawable) Drawable.createFromStream(emptyInputStream, "source string value"); 52 assertEquals("source string value", shadowOf(drawable).getSource()); 53 } 54 55 @Test 56 public void withColorFilterSet_draw_shouldCopyDescriptionToCanvas() throws Exception { 57 BitmapDrawable drawable = (BitmapDrawable) resources.getDrawable(R.drawable.an_image); 58 drawable.setColorFilter(new ColorMatrixColorFilter(new ColorMatrix())); 59 Canvas canvas = new Canvas(); 60 drawable.draw(canvas); 61 62 assertEquals("Bitmap for resource:drawable/an_image with ColorMatrixColorFilter<1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0>", 63 shadowOf(canvas).getDescription()); 64 } 65 66 @Test 67 public void equals_shouldTestResourceId() throws Exception { 68 Drawable drawable1a = resources.getDrawable(R.drawable.an_image); 69 Drawable drawable1b = resources.getDrawable(R.drawable.an_image); 70 Drawable drawable2 = resources.getDrawable(R.drawable.an_other_image); 71 72 assertEquals(drawable1a, drawable1b); 73 assertFalse(drawable1a.equals(drawable2)); 74 } 75 76 @Test 77 public void equals_shouldTestBounds() throws Exception { 78 Drawable drawable1a = resources.getDrawable(R.drawable.an_image); 79 Drawable drawable1b = resources.getDrawable(R.drawable.an_image); 80 81 drawable1a.setBounds(1, 2, 3, 4); 82 drawable1b.setBounds(1, 2, 3, 4); 83 84 assertEquals(drawable1a, drawable1b); 85 86 drawable1b.setBounds(1, 2, 3, 5); 87 assertFalse(drawable1a.equals(drawable1b)); 88 } 89 90 @Test 91 public void shouldStillHaveShadow() throws Exception { 92 Drawable drawable = resources.getDrawable(R.drawable.an_image); 93 assertEquals(R.drawable.an_image, ((ShadowBitmapDrawable) Robolectric.shadowOf(drawable)).getLoadedFromResourceId()); 94 } 95 96 @Test 97 public void shouldSetTileModeXY() throws Exception { 98 BitmapDrawable drawable = (BitmapDrawable) resources.getDrawable(R.drawable.an_image); 99 drawable.setTileModeXY(Shader.TileMode.REPEAT, Shader.TileMode.MIRROR); 100 assertEquals(Shader.TileMode.REPEAT, drawable.getTileModeX()); 101 assertEquals(Shader.TileMode.MIRROR, drawable.getTileModeY()); 102 } 103} 104