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