1b01474a3329222965d31068f5c33e59c6e6aa6a4Josh Lauer & Christian Williamspackage com.xtremelabs.robolectric.shadows;
2b01474a3329222965d31068f5c33e59c6e6aa6a4Josh Lauer & Christian Williams
3b01474a3329222965d31068f5c33e59c6e6aa6a4Josh Lauer & Christian Williamsimport android.graphics.Bitmap;
4b01474a3329222965d31068f5c33e59c6e6aa6a4Josh Lauer & Christian Williamsimport android.graphics.BitmapFactory;
520b94927aff24d7bd975d6ee717f1b65da9ee7c1Josh Lauer & Christian Williamsimport android.net.Uri;
620b94927aff24d7bd975d6ee717f1b65da9ee7c1Josh Lauer & Christian Williamsimport android.provider.MediaStore;
7b01474a3329222965d31068f5c33e59c6e6aa6a4Josh Lauer & Christian Williamsimport com.xtremelabs.robolectric.R;
8b01474a3329222965d31068f5c33e59c6e6aa6a4Josh Lauer & Christian Williamsimport com.xtremelabs.robolectric.Robolectric;
9b01474a3329222965d31068f5c33e59c6e6aa6a4Josh Lauer & Christian Williamsimport com.xtremelabs.robolectric.WithTestDefaultsRunner;
10b01474a3329222965d31068f5c33e59c6e6aa6a4Josh Lauer & Christian Williamsimport org.junit.Test;
11b01474a3329222965d31068f5c33e59c6e6aa6a4Josh Lauer & Christian Williamsimport org.junit.runner.RunWith;
12b01474a3329222965d31068f5c33e59c6e6aa6a4Josh Lauer & Christian Williams
1320b94927aff24d7bd975d6ee717f1b65da9ee7c1Josh Lauer & Christian Williamsimport java.io.InputStream;
1420b94927aff24d7bd975d6ee717f1b65da9ee7c1Josh Lauer & Christian Williams
15b01474a3329222965d31068f5c33e59c6e6aa6a4Josh Lauer & Christian Williamsimport static com.xtremelabs.robolectric.Robolectric.shadowOf;
16b01474a3329222965d31068f5c33e59c6e6aa6a4Josh Lauer & Christian Williamsimport static org.junit.Assert.assertEquals;
17b01474a3329222965d31068f5c33e59c6e6aa6a4Josh Lauer & Christian Williams
18b01474a3329222965d31068f5c33e59c6e6aa6a4Josh Lauer & Christian Williams@RunWith(WithTestDefaultsRunner.class)
19b01474a3329222965d31068f5c33e59c6e6aa6a4Josh Lauer & Christian Williamspublic class BitmapFactoryTest {
20b01474a3329222965d31068f5c33e59c6e6aa6a4Josh Lauer & Christian Williams    @Test
21b01474a3329222965d31068f5c33e59c6e6aa6a4Josh Lauer & Christian Williams    public void decodeResource_shouldSetDescription() throws Exception {
22b01474a3329222965d31068f5c33e59c6e6aa6a4Josh Lauer & Christian Williams        Bitmap bitmap = BitmapFactory.decodeResource(Robolectric.application.getResources(), R.drawable.an_image);
2322ae0c422c4f1bb6878f624fbf2531eea4da0187Christian Williams & Phil Goodwin        assertEquals("Bitmap for resource:drawable/an_image", shadowOf(bitmap).getDescription());
24b01474a3329222965d31068f5c33e59c6e6aa6a4Josh Lauer & Christian Williams        assertEquals(100, bitmap.getWidth());
25b01474a3329222965d31068f5c33e59c6e6aa6a4Josh Lauer & Christian Williams        assertEquals(100, bitmap.getHeight());
26b01474a3329222965d31068f5c33e59c6e6aa6a4Josh Lauer & Christian Williams    }
27b01474a3329222965d31068f5c33e59c6e6aa6a4Josh Lauer & Christian Williams
28b01474a3329222965d31068f5c33e59c6e6aa6a4Josh Lauer & Christian Williams    @Test
29fde330c24db2b7905368ac9d790787f250f7ecc7Jon Boekenoogen    public void decodeResourceWithOpts_shouldSetDescription() throws Exception {
30fde330c24db2b7905368ac9d790787f250f7ecc7Jon Boekenoogen        BitmapFactory.Options opts = new BitmapFactory.Options();
31fde330c24db2b7905368ac9d790787f250f7ecc7Jon Boekenoogen        Bitmap bitmap = BitmapFactory.decodeResource(Robolectric.application.getResources(), R.drawable.an_image, opts);
32fde330c24db2b7905368ac9d790787f250f7ecc7Jon Boekenoogen        assertEquals("Bitmap for resource:drawable/an_image", shadowOf(bitmap).getDescription());
33fde330c24db2b7905368ac9d790787f250f7ecc7Jon Boekenoogen        assertEquals(100, bitmap.getWidth());
34fde330c24db2b7905368ac9d790787f250f7ecc7Jon Boekenoogen        assertEquals(100, bitmap.getHeight());
35fde330c24db2b7905368ac9d790787f250f7ecc7Jon Boekenoogen        assertEquals(100, opts.outWidth);
36fde330c24db2b7905368ac9d790787f250f7ecc7Jon Boekenoogen        assertEquals(100, opts.outHeight);
37fde330c24db2b7905368ac9d790787f250f7ecc7Jon Boekenoogen    }
38fde330c24db2b7905368ac9d790787f250f7ecc7Jon Boekenoogen
39fde330c24db2b7905368ac9d790787f250f7ecc7Jon Boekenoogen    @Test
40b01474a3329222965d31068f5c33e59c6e6aa6a4Josh Lauer & Christian Williams    public void decodeFile_shouldSetDescription() throws Exception {
41b01474a3329222965d31068f5c33e59c6e6aa6a4Josh Lauer & Christian Williams        Bitmap bitmap = BitmapFactory.decodeFile("/some/file.jpg");
4222ae0c422c4f1bb6878f624fbf2531eea4da0187Christian Williams & Phil Goodwin        assertEquals("Bitmap for file:/some/file.jpg", shadowOf(bitmap).getDescription());
43b01474a3329222965d31068f5c33e59c6e6aa6a4Josh Lauer & Christian Williams        assertEquals(100, bitmap.getWidth());
44b01474a3329222965d31068f5c33e59c6e6aa6a4Josh Lauer & Christian Williams        assertEquals(100, bitmap.getHeight());
45b01474a3329222965d31068f5c33e59c6e6aa6a4Josh Lauer & Christian Williams    }
4620b94927aff24d7bd975d6ee717f1b65da9ee7c1Josh Lauer & Christian Williams
4720b94927aff24d7bd975d6ee717f1b65da9ee7c1Josh Lauer & Christian Williams    @Test
4820b94927aff24d7bd975d6ee717f1b65da9ee7c1Josh Lauer & Christian Williams    public void decodeStream_shouldSetDescription() throws Exception {
4920b94927aff24d7bd975d6ee717f1b65da9ee7c1Josh Lauer & Christian Williams        InputStream inputStream = Robolectric.application.getContentResolver().openInputStream(Uri.parse("content:/path"));
5020b94927aff24d7bd975d6ee717f1b65da9ee7c1Josh Lauer & Christian Williams        Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
5122ae0c422c4f1bb6878f624fbf2531eea4da0187Christian Williams & Phil Goodwin        assertEquals("Bitmap for content:/path", shadowOf(bitmap).getDescription());
5220b94927aff24d7bd975d6ee717f1b65da9ee7c1Josh Lauer & Christian Williams        assertEquals(100, bitmap.getWidth());
5320b94927aff24d7bd975d6ee717f1b65da9ee7c1Josh Lauer & Christian Williams        assertEquals(100, bitmap.getHeight());
5420b94927aff24d7bd975d6ee717f1b65da9ee7c1Josh Lauer & Christian Williams    }
5520b94927aff24d7bd975d6ee717f1b65da9ee7c1Josh Lauer & Christian Williams
5620b94927aff24d7bd975d6ee717f1b65da9ee7c1Josh Lauer & Christian Williams    @Test
5720b94927aff24d7bd975d6ee717f1b65da9ee7c1Josh Lauer & Christian Williams    public void decodeResource_shouldGetWidthAndHeightFromHints() throws Exception {
5820b94927aff24d7bd975d6ee717f1b65da9ee7c1Josh Lauer & Christian Williams        ShadowBitmapFactory.provideWidthAndHeightHints(R.drawable.an_image, 123, 456);
5920b94927aff24d7bd975d6ee717f1b65da9ee7c1Josh Lauer & Christian Williams
6020b94927aff24d7bd975d6ee717f1b65da9ee7c1Josh Lauer & Christian Williams        Bitmap bitmap = BitmapFactory.decodeResource(Robolectric.application.getResources(), R.drawable.an_image);
6122ae0c422c4f1bb6878f624fbf2531eea4da0187Christian Williams & Phil Goodwin        assertEquals("Bitmap for resource:drawable/an_image", shadowOf(bitmap).getDescription());
6220b94927aff24d7bd975d6ee717f1b65da9ee7c1Josh Lauer & Christian Williams        assertEquals(123, bitmap.getWidth());
6320b94927aff24d7bd975d6ee717f1b65da9ee7c1Josh Lauer & Christian Williams        assertEquals(456, bitmap.getHeight());
6420b94927aff24d7bd975d6ee717f1b65da9ee7c1Josh Lauer & Christian Williams    }
6520b94927aff24d7bd975d6ee717f1b65da9ee7c1Josh Lauer & Christian Williams
6620b94927aff24d7bd975d6ee717f1b65da9ee7c1Josh Lauer & Christian Williams    @Test
67fde330c24db2b7905368ac9d790787f250f7ecc7Jon Boekenoogen    public void decodeResourceWithOpts_shouldGetWidthAndHeightFromHints() throws Exception {
68fde330c24db2b7905368ac9d790787f250f7ecc7Jon Boekenoogen        ShadowBitmapFactory.provideWidthAndHeightHints(R.drawable.an_image, 123, 456);
69fde330c24db2b7905368ac9d790787f250f7ecc7Jon Boekenoogen
70fde330c24db2b7905368ac9d790787f250f7ecc7Jon Boekenoogen        BitmapFactory.Options opts = new BitmapFactory.Options();
71fde330c24db2b7905368ac9d790787f250f7ecc7Jon Boekenoogen        Bitmap bitmap = BitmapFactory.decodeResource(Robolectric.application.getResources(), R.drawable.an_image, opts);
72fde330c24db2b7905368ac9d790787f250f7ecc7Jon Boekenoogen        assertEquals("Bitmap for resource:drawable/an_image", shadowOf(bitmap).getDescription());
73fde330c24db2b7905368ac9d790787f250f7ecc7Jon Boekenoogen        assertEquals(123, bitmap.getWidth());
74fde330c24db2b7905368ac9d790787f250f7ecc7Jon Boekenoogen        assertEquals(456, bitmap.getHeight());
75fde330c24db2b7905368ac9d790787f250f7ecc7Jon Boekenoogen        assertEquals(123, opts.outWidth);
76fde330c24db2b7905368ac9d790787f250f7ecc7Jon Boekenoogen        assertEquals(456, opts.outHeight);
77fde330c24db2b7905368ac9d790787f250f7ecc7Jon Boekenoogen    }
78fde330c24db2b7905368ac9d790787f250f7ecc7Jon Boekenoogen
79fde330c24db2b7905368ac9d790787f250f7ecc7Jon Boekenoogen    @Test
8028a0206132c83dce73d0bcf64a3992cf5212b821Jessica Chen    public void decodeResource_canTakeOptions() throws Exception {
8128a0206132c83dce73d0bcf64a3992cf5212b821Jessica Chen    	BitmapFactory.Options options = new BitmapFactory.Options();
8228a0206132c83dce73d0bcf64a3992cf5212b821Jessica Chen    	options.inSampleSize = 100;
8328a0206132c83dce73d0bcf64a3992cf5212b821Jessica Chen        Bitmap bitmap = BitmapFactory.decodeResource(Robolectric.application.getResources(), R.drawable.an_image, options);
8428a0206132c83dce73d0bcf64a3992cf5212b821Jessica Chen        assertEquals(true, shadowOf(bitmap).getDescription().contains("inSampleSize=100"));
8528a0206132c83dce73d0bcf64a3992cf5212b821Jessica Chen    }
8628a0206132c83dce73d0bcf64a3992cf5212b821Jessica Chen
8728a0206132c83dce73d0bcf64a3992cf5212b821Jessica Chen    @Test
8820b94927aff24d7bd975d6ee717f1b65da9ee7c1Josh Lauer & Christian Williams    public void decodeFile_shouldGetWidthAndHeightFromHints() throws Exception {
8920b94927aff24d7bd975d6ee717f1b65da9ee7c1Josh Lauer & Christian Williams        ShadowBitmapFactory.provideWidthAndHeightHints("/some/file.jpg", 123, 456);
9020b94927aff24d7bd975d6ee717f1b65da9ee7c1Josh Lauer & Christian Williams
9120b94927aff24d7bd975d6ee717f1b65da9ee7c1Josh Lauer & Christian Williams        Bitmap bitmap = BitmapFactory.decodeFile("/some/file.jpg");
9222ae0c422c4f1bb6878f624fbf2531eea4da0187Christian Williams & Phil Goodwin        assertEquals("Bitmap for file:/some/file.jpg", shadowOf(bitmap).getDescription());
9320b94927aff24d7bd975d6ee717f1b65da9ee7c1Josh Lauer & Christian Williams        assertEquals(123, bitmap.getWidth());
9420b94927aff24d7bd975d6ee717f1b65da9ee7c1Josh Lauer & Christian Williams        assertEquals(456, bitmap.getHeight());
9520b94927aff24d7bd975d6ee717f1b65da9ee7c1Josh Lauer & Christian Williams    }
9620b94927aff24d7bd975d6ee717f1b65da9ee7c1Josh Lauer & Christian Williams
9720b94927aff24d7bd975d6ee717f1b65da9ee7c1Josh Lauer & Christian Williams    @Test
9820b94927aff24d7bd975d6ee717f1b65da9ee7c1Josh Lauer & Christian Williams    public void decodeFileEtc_shouldSetOptionsOutWidthAndOutHeightFromHints() throws Exception {
9920b94927aff24d7bd975d6ee717f1b65da9ee7c1Josh Lauer & Christian Williams        ShadowBitmapFactory.provideWidthAndHeightHints("/some/file.jpg", 123, 456);
10020b94927aff24d7bd975d6ee717f1b65da9ee7c1Josh Lauer & Christian Williams
10120b94927aff24d7bd975d6ee717f1b65da9ee7c1Josh Lauer & Christian Williams        BitmapFactory.Options options = new BitmapFactory.Options();
10220b94927aff24d7bd975d6ee717f1b65da9ee7c1Josh Lauer & Christian Williams        BitmapFactory.decodeFile("/some/file.jpg", options);
10320b94927aff24d7bd975d6ee717f1b65da9ee7c1Josh Lauer & Christian Williams        assertEquals(123, options.outWidth);
10420b94927aff24d7bd975d6ee717f1b65da9ee7c1Josh Lauer & Christian Williams        assertEquals(456, options.outHeight);
10520b94927aff24d7bd975d6ee717f1b65da9ee7c1Josh Lauer & Christian Williams    }
10620b94927aff24d7bd975d6ee717f1b65da9ee7c1Josh Lauer & Christian Williams
10720b94927aff24d7bd975d6ee717f1b65da9ee7c1Josh Lauer & Christian Williams    @Test
10820b94927aff24d7bd975d6ee717f1b65da9ee7c1Josh Lauer & Christian Williams    public void decodeUri_shouldGetWidthAndHeightFromHints() throws Exception {
10920b94927aff24d7bd975d6ee717f1b65da9ee7c1Josh Lauer & Christian Williams        ShadowBitmapFactory.provideWidthAndHeightHints(Uri.parse("content:/path"), 123, 456);
11020b94927aff24d7bd975d6ee717f1b65da9ee7c1Josh Lauer & Christian Williams
11120b94927aff24d7bd975d6ee717f1b65da9ee7c1Josh Lauer & Christian Williams        Bitmap bitmap = MediaStore.Images.Media.getBitmap(Robolectric.application.getContentResolver(), Uri.parse("content:/path"));
11222ae0c422c4f1bb6878f624fbf2531eea4da0187Christian Williams & Phil Goodwin        assertEquals("Bitmap for content:/path", shadowOf(bitmap).getDescription());
11320b94927aff24d7bd975d6ee717f1b65da9ee7c1Josh Lauer & Christian Williams        assertEquals(123, bitmap.getWidth());
11420b94927aff24d7bd975d6ee717f1b65da9ee7c1Josh Lauer & Christian Williams        assertEquals(456, bitmap.getHeight());
11520b94927aff24d7bd975d6ee717f1b65da9ee7c1Josh Lauer & Christian Williams    }
11620b94927aff24d7bd975d6ee717f1b65da9ee7c1Josh Lauer & Christian Williams
11720b94927aff24d7bd975d6ee717f1b65da9ee7c1Josh Lauer & Christian Williams    @Test
11820b94927aff24d7bd975d6ee717f1b65da9ee7c1Josh Lauer & Christian Williams    public void decodeStream_shouldGetWidthAndHeightFromHints() throws Exception {
11922ae0c422c4f1bb6878f624fbf2531eea4da0187Christian Williams & Phil Goodwin        ShadowBitmapFactory.provideWidthAndHeightHints(Uri.parse("content:/path"), 123, 456);
12020b94927aff24d7bd975d6ee717f1b65da9ee7c1Josh Lauer & Christian Williams
12120b94927aff24d7bd975d6ee717f1b65da9ee7c1Josh Lauer & Christian Williams        InputStream inputStream = Robolectric.application.getContentResolver().openInputStream(Uri.parse("content:/path"));
12220b94927aff24d7bd975d6ee717f1b65da9ee7c1Josh Lauer & Christian Williams        Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
12322ae0c422c4f1bb6878f624fbf2531eea4da0187Christian Williams & Phil Goodwin        assertEquals("Bitmap for content:/path", shadowOf(bitmap).getDescription());
12420b94927aff24d7bd975d6ee717f1b65da9ee7c1Josh Lauer & Christian Williams        assertEquals(123, bitmap.getWidth());
12520b94927aff24d7bd975d6ee717f1b65da9ee7c1Josh Lauer & Christian Williams        assertEquals(456, bitmap.getHeight());
12620b94927aff24d7bd975d6ee717f1b65da9ee7c1Josh Lauer & Christian Williams    }
127b01474a3329222965d31068f5c33e59c6e6aa6a4Josh Lauer & Christian Williams}
128