Home | History | Annotate | Download | only in shadows
      1 package com.xtremelabs.robolectric.shadows;
      2 
      3 import android.content.res.Resources;
      4 import android.graphics.Canvas;
      5 import android.graphics.ColorMatrix;
      6 import android.graphics.ColorMatrixColorFilter;
      7 import android.graphics.Shader;
      8 import android.graphics.drawable.BitmapDrawable;
      9 import android.graphics.drawable.Drawable;
     10 import com.xtremelabs.robolectric.R;
     11 import com.xtremelabs.robolectric.Robolectric;
     12 import com.xtremelabs.robolectric.WithTestDefaultsRunner;
     13 import org.junit.Before;
     14 import org.junit.Test;
     15 import org.junit.runner.RunWith;
     16 
     17 import java.io.ByteArrayInputStream;
     18 import java.io.InputStream;
     19 
     20 import static com.xtremelabs.robolectric.Robolectric.shadowOf;
     21 import static org.junit.Assert.assertEquals;
     22 import static org.junit.Assert.assertFalse;
     23 
     24 @RunWith(WithTestDefaultsRunner.class)
     25 public 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