package org.robolectric.shadows;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.BitmapRegionDecoder;
import android.graphics.Rect;
import com.google.common.io.ByteStreams;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.R;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.TestRunners;
import org.robolectric.res.FsFile;
import org.robolectric.util.TestUtil;
import java.io.*;
import static org.assertj.core.api.Assertions.assertThat;
@RunWith(TestRunners.MultiApiSelfTest.class)
public class ShadowBitmapRegionDecoderTest {
private static final FsFile IMAGE_FILE = TestUtil.resourcesBaseDir().join("res/drawable-hdpi/robolectric.png");
@Test
public void testNewInstance() throws Exception {
assertThat(BitmapRegionDecoder.newInstance(ByteStreams.toByteArray(getImageInputStream()), 0, 0, false))
.isNotNull();
assertThat(BitmapRegionDecoder.newInstance(getImageFd(), false))
.isNotNull();
assertThat(BitmapRegionDecoder.newInstance(getImageInputStream(), false))
.isNotNull();
assertThat(BitmapRegionDecoder.newInstance(IMAGE_FILE.getPath(), false))
.isNotNull();
}
@Test
public void getWidthAndGetHeight_shouldReturnCorrectValuesForImage() throws Exception {
BitmapRegionDecoder decoder = BitmapRegionDecoder.newInstance(getImageInputStream(), true);
assertThat(decoder.getWidth()).isEqualTo(297);
assertThat(decoder.getHeight()).isEqualTo(251);
}
@Test
public void testDecodeRegionReturnsExpectedSize() throws IOException {
BitmapRegionDecoder bitmapRegionDecoder = BitmapRegionDecoder.newInstance(getImageInputStream(), false);
Bitmap bitmap = bitmapRegionDecoder.decodeRegion(new Rect(10, 20, 110, 220), new BitmapFactory.Options());
assertThat(bitmap.getWidth())
.isEqualTo(100);
assertThat(bitmap.getHeight())
.isEqualTo(200);
}
@Test
public void testDecodeRegionReturnsExpectedConfig() throws IOException {
BitmapRegionDecoder bitmapRegionDecoder = BitmapRegionDecoder.newInstance(getImageInputStream(), false);
BitmapFactory.Options options = new BitmapFactory.Options();
assertThat(bitmapRegionDecoder.decodeRegion(new Rect(0, 0, 1, 1), options).getConfig())
.isEqualTo(Bitmap.Config.ARGB_8888);
options.inPreferredConfig = null;
assertThat(bitmapRegionDecoder.decodeRegion(new Rect(0, 0, 1, 1), options).getConfig())
.isEqualTo(Bitmap.Config.ARGB_8888);
options.inPreferredConfig = Bitmap.Config.RGB_565;
assertThat(bitmapRegionDecoder.decodeRegion(new Rect(0, 0, 1, 1), options).getConfig())
.isEqualTo(Bitmap.Config.RGB_565);
}
private static InputStream getImageInputStream() {
return RuntimeEnvironment.application.getResources().openRawResource(R.drawable.robolectric);
}
private static FileDescriptor getImageFd() throws Exception {
return new FileInputStream(IMAGE_FILE.getPath()).getFD();
}
}