Home | History | Annotate | Download | only in shadows
      1 package org.robolectric.shadows;
      2 
      3 import static org.assertj.core.api.Assertions.assertThat;
      4 
      5 import android.graphics.Bitmap;
      6 import android.graphics.BitmapFactory;
      7 import android.graphics.BitmapRegionDecoder;
      8 import android.graphics.Rect;
      9 import com.google.common.io.ByteStreams;
     10 import java.io.File;
     11 import java.io.FileDescriptor;
     12 import java.io.IOException;
     13 import java.io.InputStream;
     14 import java.awt.image.BufferedImage;
     15 import javax.imageio.ImageIO;
     16 import org.junit.Rule;
     17 import org.junit.Test;
     18 import org.junit.rules.TemporaryFolder;
     19 import org.junit.runner.RunWith;
     20 import org.robolectric.R;
     21 import org.robolectric.RobolectricTestRunner;
     22 import org.robolectric.RuntimeEnvironment;
     23 import org.robolectric.annotation.Config;
     24 
     25 @RunWith(RobolectricTestRunner.class)
     26 @Config(qualifiers = "hdpi")
     27 public class ShadowBitmapRegionDecoderTest {
     28 
     29   @Rule public TemporaryFolder temporaryFolder = new TemporaryFolder();
     30 
     31   @Test
     32   public void testNewInstance() throws Exception {
     33     assertThat(BitmapRegionDecoder.newInstance(ByteStreams.toByteArray(getImageInputStream()), 0, 0, false))
     34         .isNotNull();
     35     assertThat(BitmapRegionDecoder.newInstance(getImageFd(), false))
     36         .isNotNull();
     37     assertThat(BitmapRegionDecoder.newInstance(getImageInputStream(), false))
     38         .isNotNull();
     39     assertThat(BitmapRegionDecoder.newInstance(getGeneratedImageFile(), false))
     40         .isNotNull();
     41   }
     42 
     43   @Test
     44   public void getWidthAndGetHeight_shouldReturnCorrectValuesForImage() throws Exception {
     45     BitmapRegionDecoder decoder = BitmapRegionDecoder.newInstance(getImageInputStream(), true);
     46     assertThat(decoder.getWidth()).isEqualTo(297);
     47     assertThat(decoder.getHeight()).isEqualTo(251);
     48   }
     49 
     50   @Test
     51   public void testDecodeRegionReturnsExpectedSize() throws IOException {
     52     BitmapRegionDecoder bitmapRegionDecoder = BitmapRegionDecoder.newInstance(getImageInputStream(), false);
     53     Bitmap bitmap = bitmapRegionDecoder.decodeRegion(new Rect(10, 20, 110, 220), new BitmapFactory.Options());
     54     assertThat(bitmap.getWidth())
     55         .isEqualTo(100);
     56     assertThat(bitmap.getHeight())
     57         .isEqualTo(200);
     58   }
     59 
     60   @Test
     61   public void testDecodeRegionReturnsExpectedConfig() throws IOException {
     62     BitmapRegionDecoder bitmapRegionDecoder = BitmapRegionDecoder.newInstance(getImageInputStream(), false);
     63 
     64     BitmapFactory.Options options = new BitmapFactory.Options();
     65     assertThat(bitmapRegionDecoder.decodeRegion(new Rect(0, 0, 1, 1), options).getConfig())
     66         .isEqualTo(Bitmap.Config.ARGB_8888);
     67     options.inPreferredConfig = null;
     68     assertThat(bitmapRegionDecoder.decodeRegion(new Rect(0, 0, 1, 1), options).getConfig())
     69         .isEqualTo(Bitmap.Config.ARGB_8888);
     70     options.inPreferredConfig = Bitmap.Config.RGB_565;
     71     assertThat(bitmapRegionDecoder.decodeRegion(new Rect(0, 0, 1, 1), options).getConfig())
     72         .isEqualTo(Bitmap.Config.RGB_565);
     73   }
     74 
     75   private static InputStream getImageInputStream() {
     76     return RuntimeEnvironment.application.getResources().openRawResource(R.drawable.robolectric);
     77   }
     78 
     79   private static FileDescriptor getImageFd() throws Exception {
     80     return RuntimeEnvironment.application.getResources().getAssets().openFd("robolectric.png").getFileDescriptor();
     81   }
     82 
     83   private String getGeneratedImageFile() throws Exception {
     84     BufferedImage img = new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB);
     85     File tempImage = temporaryFolder.newFile();
     86     ImageIO.write(img, "png", tempImage);
     87     return tempImage.getPath();
     88   }
     89 }
     90