1be87a589a85b713d1755c36b2eca8462177f91f3David Farber & Joe Moorepackage com.xtremelabs.robolectric.shadows; 2be87a589a85b713d1755c36b2eca8462177f91f3David Farber & Joe Moore 322d17eb1febbe07fdb6785467273e48c0ab1ed4fJohn Stuppyimport android.graphics.BitmapFactory; 401c59a01c55d6cfd4b3da34a5036ba9a1c314dc2Aaron VonderHaar & Ryan Richardimport android.graphics.Canvas; 501c59a01c55d6cfd4b3da34a5036ba9a1c314dc2Aaron VonderHaar & Ryan Richardimport android.graphics.ColorFilter; 6255260f69e0844322b3a24a47a33bb06c5a49d0cTony Allevatoimport android.graphics.Rect; 701c59a01c55d6cfd4b3da34a5036ba9a1c314dc2Aaron VonderHaar & Ryan Richardimport android.graphics.drawable.Drawable; 822d17eb1febbe07fdb6785467273e48c0ab1ed4fJohn Stuppy 9be87a589a85b713d1755c36b2eca8462177f91f3David Farber & Joe Mooreimport com.xtremelabs.robolectric.WithTestDefaultsRunner; 1022d17eb1febbe07fdb6785467273e48c0ab1ed4fJohn Stuppy 11be87a589a85b713d1755c36b2eca8462177f91f3David Farber & Joe Mooreimport org.junit.Test; 12be87a589a85b713d1755c36b2eca8462177f91f3David Farber & Joe Mooreimport org.junit.runner.RunWith; 13be87a589a85b713d1755c36b2eca8462177f91f3David Farber & Joe Moore 14be87a589a85b713d1755c36b2eca8462177f91f3David Farber & Joe Mooreimport java.io.ByteArrayInputStream; 151258bd4f817130a401a5a234354b95fe3bf7e4eeDavid Farber & Ryan Richardimport java.io.InputStream; 16be87a589a85b713d1755c36b2eca8462177f91f3David Farber & Joe Moore 17be87a589a85b713d1755c36b2eca8462177f91f3David Farber & Joe Mooreimport static com.xtremelabs.robolectric.Robolectric.shadowOf; 18be87a589a85b713d1755c36b2eca8462177f91f3David Farber & Joe Mooreimport static junit.framework.Assert.assertFalse; 191258bd4f817130a401a5a234354b95fe3bf7e4eeDavid Farber & Ryan Richardimport static org.hamcrest.CoreMatchers.equalTo; 20255260f69e0844322b3a24a47a33bb06c5a49d0cTony Allevatoimport static org.hamcrest.CoreMatchers.is; 2101c59a01c55d6cfd4b3da34a5036ba9a1c314dc2Aaron VonderHaar & Ryan Richardimport static org.junit.Assert.*; 22be87a589a85b713d1755c36b2eca8462177f91f3David Farber & Joe Moore 23be87a589a85b713d1755c36b2eca8462177f91f3David Farber & Joe Moore@RunWith(WithTestDefaultsRunner.class) 24be87a589a85b713d1755c36b2eca8462177f91f3David Farber & Joe Moorepublic class DrawableTest { 25be87a589a85b713d1755c36b2eca8462177f91f3David Farber & Joe Moore @Test 26be87a589a85b713d1755c36b2eca8462177f91f3David Farber & Joe Moore public void createFromStream__shouldReturnNullWhenAskedToCreateADrawableFromACorruptedSourceStream() throws Exception { 27be87a589a85b713d1755c36b2eca8462177f91f3David Farber & Joe Moore String corruptedStreamSource = "http://foo.com/image.jpg"; 28be87a589a85b713d1755c36b2eca8462177f91f3David Farber & Joe Moore ShadowDrawable.addCorruptStreamSource(corruptedStreamSource); 29be87a589a85b713d1755c36b2eca8462177f91f3David Farber & Joe Moore assertNull(ShadowDrawable.createFromStream(new ByteArrayInputStream(new byte[0]), corruptedStreamSource)); 30be87a589a85b713d1755c36b2eca8462177f91f3David Farber & Joe Moore } 31be87a589a85b713d1755c36b2eca8462177f91f3David Farber & Joe Moore 32be87a589a85b713d1755c36b2eca8462177f91f3David Farber & Joe Moore @Test 33be87a589a85b713d1755c36b2eca8462177f91f3David Farber & Joe Moore public void createFromStream__shouldReturnDrawableWithSpecificSource() throws Exception { 34be87a589a85b713d1755c36b2eca8462177f91f3David Farber & Joe Moore Drawable drawable = ShadowDrawable.createFromStream(new ByteArrayInputStream(new byte[0]), "my_source"); 35be87a589a85b713d1755c36b2eca8462177f91f3David Farber & Joe Moore assertNotNull(drawable); 36be87a589a85b713d1755c36b2eca8462177f91f3David Farber & Joe Moore assertEquals("my_source", ((ShadowBitmapDrawable) shadowOf(drawable)).getSource()); 37be87a589a85b713d1755c36b2eca8462177f91f3David Farber & Joe Moore } 38be87a589a85b713d1755c36b2eca8462177f91f3David Farber & Joe Moore 39be87a589a85b713d1755c36b2eca8462177f91f3David Farber & Joe Moore @Test 40be87a589a85b713d1755c36b2eca8462177f91f3David Farber & Joe Moore public void reset__shouldClearStaticState() throws Exception { 41be87a589a85b713d1755c36b2eca8462177f91f3David Farber & Joe Moore String src = "source1"; 42be87a589a85b713d1755c36b2eca8462177f91f3David Farber & Joe Moore ShadowDrawable.addCorruptStreamSource(src); 43be87a589a85b713d1755c36b2eca8462177f91f3David Farber & Joe Moore assertTrue(ShadowDrawable.corruptStreamSources.contains(src)); 44be87a589a85b713d1755c36b2eca8462177f91f3David Farber & Joe Moore ShadowDrawable.reset(); 45be87a589a85b713d1755c36b2eca8462177f91f3David Farber & Joe Moore assertFalse(ShadowDrawable.corruptStreamSources.contains(src)); 46be87a589a85b713d1755c36b2eca8462177f91f3David Farber & Joe Moore } 471258bd4f817130a401a5a234354b95fe3bf7e4eeDavid Farber & Ryan Richard 481258bd4f817130a401a5a234354b95fe3bf7e4eeDavid Farber & Ryan Richard @Test 491258bd4f817130a401a5a234354b95fe3bf7e4eeDavid Farber & Ryan Richard public void testCreateFromStream_shouldSetTheInputStreamOnTheReturnedDrawable() throws Exception { 501258bd4f817130a401a5a234354b95fe3bf7e4eeDavid Farber & Ryan Richard ByteArrayInputStream byteInputStream = new ByteArrayInputStream(new byte[0]); 511258bd4f817130a401a5a234354b95fe3bf7e4eeDavid Farber & Ryan Richard Drawable drawable = Drawable.createFromStream(byteInputStream, "src name"); 521258bd4f817130a401a5a234354b95fe3bf7e4eeDavid Farber & Ryan Richard assertThat(shadowOf(drawable).getInputStream(), equalTo((InputStream) byteInputStream)); 531258bd4f817130a401a5a234354b95fe3bf7e4eeDavid Farber & Ryan Richard } 54877e4c834fc5505b6f6cbd8411cdc2f7c6e5c4ddJoe Moore and Tyler Schultz 55255260f69e0844322b3a24a47a33bb06c5a49d0cTony Allevato @Test 56255260f69e0844322b3a24a47a33bb06c5a49d0cTony Allevato public void copyBoundsWithPassedRect() { 57255260f69e0844322b3a24a47a33bb06c5a49d0cTony Allevato Drawable drawable = ShadowDrawable.createFromStream(new ByteArrayInputStream(new byte[0]), "my_source"); 58255260f69e0844322b3a24a47a33bb06c5a49d0cTony Allevato drawable.setBounds(1, 2, 3, 4); 59255260f69e0844322b3a24a47a33bb06c5a49d0cTony Allevato Rect r = new Rect(); 60255260f69e0844322b3a24a47a33bb06c5a49d0cTony Allevato drawable.copyBounds(r); 61877e4c834fc5505b6f6cbd8411cdc2f7c6e5c4ddJoe Moore and Tyler Schultz assertThat(r.left, is(1)); 62877e4c834fc5505b6f6cbd8411cdc2f7c6e5c4ddJoe Moore and Tyler Schultz assertThat(r.top, is(2)); 63877e4c834fc5505b6f6cbd8411cdc2f7c6e5c4ddJoe Moore and Tyler Schultz assertThat(r.right, is(3)); 64877e4c834fc5505b6f6cbd8411cdc2f7c6e5c4ddJoe Moore and Tyler Schultz assertThat(r.bottom, is(4)); 65255260f69e0844322b3a24a47a33bb06c5a49d0cTony Allevato } 66255260f69e0844322b3a24a47a33bb06c5a49d0cTony Allevato 67255260f69e0844322b3a24a47a33bb06c5a49d0cTony Allevato @Test 68255260f69e0844322b3a24a47a33bb06c5a49d0cTony Allevato public void copyBoundsToReturnedRect() { 69255260f69e0844322b3a24a47a33bb06c5a49d0cTony Allevato Drawable drawable = ShadowDrawable.createFromStream(new ByteArrayInputStream(new byte[0]), "my_source"); 70255260f69e0844322b3a24a47a33bb06c5a49d0cTony Allevato drawable.setBounds(1, 2, 3, 4); 71255260f69e0844322b3a24a47a33bb06c5a49d0cTony Allevato Rect r = drawable.copyBounds(); 72877e4c834fc5505b6f6cbd8411cdc2f7c6e5c4ddJoe Moore and Tyler Schultz assertThat(r.left, is(1)); 73877e4c834fc5505b6f6cbd8411cdc2f7c6e5c4ddJoe Moore and Tyler Schultz assertThat(r.top, is(2)); 74877e4c834fc5505b6f6cbd8411cdc2f7c6e5c4ddJoe Moore and Tyler Schultz assertThat(r.right, is(3)); 75877e4c834fc5505b6f6cbd8411cdc2f7c6e5c4ddJoe Moore and Tyler Schultz assertThat(r.bottom, is(4)); 76255260f69e0844322b3a24a47a33bb06c5a49d0cTony Allevato } 773eeaacd94b8bf41d08dfc7d93cbebb5936842020Chris Perry 783eeaacd94b8bf41d08dfc7d93cbebb5936842020Chris Perry @Test 793eeaacd94b8bf41d08dfc7d93cbebb5936842020Chris Perry public void createFromPath__shouldReturnDrawableWithSpecificPath() throws Exception { 803eeaacd94b8bf41d08dfc7d93cbebb5936842020Chris Perry Drawable drawable = ShadowDrawable.createFromPath("/foo"); 813eeaacd94b8bf41d08dfc7d93cbebb5936842020Chris Perry assertNotNull(drawable); 823eeaacd94b8bf41d08dfc7d93cbebb5936842020Chris Perry assertEquals("/foo", ((ShadowBitmapDrawable) shadowOf(drawable)).getPath()); 833eeaacd94b8bf41d08dfc7d93cbebb5936842020Chris Perry } 8401c59a01c55d6cfd4b3da34a5036ba9a1c314dc2Aaron VonderHaar & Ryan Richard 8501c59a01c55d6cfd4b3da34a5036ba9a1c314dc2Aaron VonderHaar & Ryan Richard @Test 8601c59a01c55d6cfd4b3da34a5036ba9a1c314dc2Aaron VonderHaar & Ryan Richard public void testGetLoadedFromResourceId_shouldDefaultToNegativeOne() throws Exception { 8701c59a01c55d6cfd4b3da34a5036ba9a1c314dc2Aaron VonderHaar & Ryan Richard Drawable drawable = new TestDrawable(); 8801c59a01c55d6cfd4b3da34a5036ba9a1c314dc2Aaron VonderHaar & Ryan Richard assertThat(shadowOf(drawable).getLoadedFromResourceId(), is(-1)); 8901c59a01c55d6cfd4b3da34a5036ba9a1c314dc2Aaron VonderHaar & Ryan Richard } 9001c59a01c55d6cfd4b3da34a5036ba9a1c314dc2Aaron VonderHaar & Ryan Richard 9101c59a01c55d6cfd4b3da34a5036ba9a1c314dc2Aaron VonderHaar & Ryan Richard @Test 9201c59a01c55d6cfd4b3da34a5036ba9a1c314dc2Aaron VonderHaar & Ryan Richard public void testSetLoadedFromResourceId() throws Exception { 9301c59a01c55d6cfd4b3da34a5036ba9a1c314dc2Aaron VonderHaar & Ryan Richard Drawable drawable = new TestDrawable(); 9401c59a01c55d6cfd4b3da34a5036ba9a1c314dc2Aaron VonderHaar & Ryan Richard ShadowDrawable shadowDrawable = shadowOf(drawable); 9501c59a01c55d6cfd4b3da34a5036ba9a1c314dc2Aaron VonderHaar & Ryan Richard shadowDrawable.setLoadedFromResourceId(99); 9601c59a01c55d6cfd4b3da34a5036ba9a1c314dc2Aaron VonderHaar & Ryan Richard assertThat(shadowDrawable.getLoadedFromResourceId(), is(99)); 9701c59a01c55d6cfd4b3da34a5036ba9a1c314dc2Aaron VonderHaar & Ryan Richard } 9801c59a01c55d6cfd4b3da34a5036ba9a1c314dc2Aaron VonderHaar & Ryan Richard 99e429b89e0edf6b77099f40e7e3af40b0cc1e7fc4Amrit Thakur & Ryan Richard @Test 100e429b89e0edf6b77099f40e7e3af40b0cc1e7fc4Amrit Thakur & Ryan Richard public void testCreateFromResourceId_shouldSetTheId() throws Exception { 101e429b89e0edf6b77099f40e7e3af40b0cc1e7fc4Amrit Thakur & Ryan Richard Drawable drawable = ShadowDrawable.createFromResourceId(34758); 102e429b89e0edf6b77099f40e7e3af40b0cc1e7fc4Amrit Thakur & Ryan Richard ShadowDrawable shadowDrawable = shadowOf(drawable); 103e429b89e0edf6b77099f40e7e3af40b0cc1e7fc4Amrit Thakur & Ryan Richard assertThat(shadowDrawable.getLoadedFromResourceId(), is(34758)); 104e429b89e0edf6b77099f40e7e3af40b0cc1e7fc4Amrit Thakur & Ryan Richard } 105e429b89e0edf6b77099f40e7e3af40b0cc1e7fc4Amrit Thakur & Ryan Richard 106be2bfccace90099e150bae69ddfef42f501e997cAaron VonderHaar & Chris Perry @Test 107be2bfccace90099e150bae69ddfef42f501e997cAaron VonderHaar & Chris Perry public void testWasSelfInvalidated() throws Exception { 108be2bfccace90099e150bae69ddfef42f501e997cAaron VonderHaar & Chris Perry Drawable drawable = ShadowDrawable.createFromResourceId(34758); 109be2bfccace90099e150bae69ddfef42f501e997cAaron VonderHaar & Chris Perry ShadowDrawable shadowDrawable = shadowOf(drawable); 110be2bfccace90099e150bae69ddfef42f501e997cAaron VonderHaar & Chris Perry assertFalse(shadowDrawable.wasInvalidated()); 111be2bfccace90099e150bae69ddfef42f501e997cAaron VonderHaar & Chris Perry drawable.invalidateSelf(); 112be2bfccace90099e150bae69ddfef42f501e997cAaron VonderHaar & Chris Perry assertTrue(shadowDrawable.wasInvalidated()); 113be2bfccace90099e150bae69ddfef42f501e997cAaron VonderHaar & Chris Perry } 11422d17eb1febbe07fdb6785467273e48c0ab1ed4fJohn Stuppy 11522d17eb1febbe07fdb6785467273e48c0ab1ed4fJohn Stuppy @Test 11622d17eb1febbe07fdb6785467273e48c0ab1ed4fJohn Stuppy public void createFromResourceStream__shouldReturnNullWhenAskedToCreateADrawableFromACorruptedSourceStream() throws Exception { 11722d17eb1febbe07fdb6785467273e48c0ab1ed4fJohn Stuppy String corruptedStreamSource = "http://foo.com/image.jpg"; 11822d17eb1febbe07fdb6785467273e48c0ab1ed4fJohn Stuppy ShadowDrawable.addCorruptStreamSource(corruptedStreamSource); 11922d17eb1febbe07fdb6785467273e48c0ab1ed4fJohn Stuppy assertNull(ShadowDrawable.createFromResourceStream(null, null, new ByteArrayInputStream(new byte[0]), corruptedStreamSource)); 12022d17eb1febbe07fdb6785467273e48c0ab1ed4fJohn Stuppy } 12122d17eb1febbe07fdb6785467273e48c0ab1ed4fJohn Stuppy 12222d17eb1febbe07fdb6785467273e48c0ab1ed4fJohn Stuppy @Test 12322d17eb1febbe07fdb6785467273e48c0ab1ed4fJohn Stuppy public void createFromResourceStream__shouldReturnDrawableWithSpecificSource() throws Exception { 12422d17eb1febbe07fdb6785467273e48c0ab1ed4fJohn Stuppy Drawable drawable = ShadowDrawable.createFromResourceStream(null, null, new ByteArrayInputStream(new byte[0]), "my_source"); 12522d17eb1febbe07fdb6785467273e48c0ab1ed4fJohn Stuppy assertNotNull(drawable); 12622d17eb1febbe07fdb6785467273e48c0ab1ed4fJohn Stuppy assertEquals("my_source", ((ShadowBitmapDrawable) shadowOf(drawable)).getSource()); 12722d17eb1febbe07fdb6785467273e48c0ab1ed4fJohn Stuppy } 12822d17eb1febbe07fdb6785467273e48c0ab1ed4fJohn Stuppy 12922d17eb1febbe07fdb6785467273e48c0ab1ed4fJohn Stuppy @Test 13022d17eb1febbe07fdb6785467273e48c0ab1ed4fJohn Stuppy public void testCreateFromResourceStream_shouldSetTheInputStreamOnTheReturnedDrawable() throws Exception { 13122d17eb1febbe07fdb6785467273e48c0ab1ed4fJohn Stuppy ByteArrayInputStream byteInputStream = new ByteArrayInputStream(new byte[0]); 13222d17eb1febbe07fdb6785467273e48c0ab1ed4fJohn Stuppy Drawable drawable = Drawable.createFromResourceStream(null, null, byteInputStream, "src name"); 13322d17eb1febbe07fdb6785467273e48c0ab1ed4fJohn Stuppy assertThat(shadowOf(drawable).getInputStream(), equalTo((InputStream) byteInputStream)); 13422d17eb1febbe07fdb6785467273e48c0ab1ed4fJohn Stuppy } 13522d17eb1febbe07fdb6785467273e48c0ab1ed4fJohn Stuppy 13622d17eb1febbe07fdb6785467273e48c0ab1ed4fJohn Stuppy @Test 13722d17eb1febbe07fdb6785467273e48c0ab1ed4fJohn Stuppy public void createFromResourceStreamWithOptions__shouldReturnNullWhenAskedToCreateADrawableFromACorruptedSourceStream() throws Exception { 13822d17eb1febbe07fdb6785467273e48c0ab1ed4fJohn Stuppy String corruptedStreamSource = "http://foo.com/image.jpg"; 13922d17eb1febbe07fdb6785467273e48c0ab1ed4fJohn Stuppy ShadowDrawable.addCorruptStreamSource(corruptedStreamSource); 14022d17eb1febbe07fdb6785467273e48c0ab1ed4fJohn Stuppy assertNull(ShadowDrawable.createFromResourceStream(null, null, new ByteArrayInputStream(new byte[0]), corruptedStreamSource, new BitmapFactory.Options())); 14122d17eb1febbe07fdb6785467273e48c0ab1ed4fJohn Stuppy } 14222d17eb1febbe07fdb6785467273e48c0ab1ed4fJohn Stuppy 14322d17eb1febbe07fdb6785467273e48c0ab1ed4fJohn Stuppy @Test 14422d17eb1febbe07fdb6785467273e48c0ab1ed4fJohn Stuppy public void createFromResourceStreamWithOptions__shouldReturnDrawableWithSpecificSource() throws Exception { 14522d17eb1febbe07fdb6785467273e48c0ab1ed4fJohn Stuppy Drawable drawable = ShadowDrawable.createFromResourceStream(null, null, new ByteArrayInputStream(new byte[0]), "my_source", new BitmapFactory.Options()); 14622d17eb1febbe07fdb6785467273e48c0ab1ed4fJohn Stuppy assertNotNull(drawable); 14722d17eb1febbe07fdb6785467273e48c0ab1ed4fJohn Stuppy assertEquals("my_source", ((ShadowBitmapDrawable) shadowOf(drawable)).getSource()); 14822d17eb1febbe07fdb6785467273e48c0ab1ed4fJohn Stuppy } 14922d17eb1febbe07fdb6785467273e48c0ab1ed4fJohn Stuppy 15022d17eb1febbe07fdb6785467273e48c0ab1ed4fJohn Stuppy @Test 15122d17eb1febbe07fdb6785467273e48c0ab1ed4fJohn Stuppy public void testCreateFromResourceStreamWithOptions_shouldSetTheInputStreamOnTheReturnedDrawable() throws Exception { 15222d17eb1febbe07fdb6785467273e48c0ab1ed4fJohn Stuppy ByteArrayInputStream byteInputStream = new ByteArrayInputStream(new byte[0]); 15322d17eb1febbe07fdb6785467273e48c0ab1ed4fJohn Stuppy Drawable drawable = Drawable.createFromResourceStream(null, null, byteInputStream, "src name", new BitmapFactory.Options()); 15422d17eb1febbe07fdb6785467273e48c0ab1ed4fJohn Stuppy assertThat(shadowOf(drawable).getInputStream(), equalTo((InputStream) byteInputStream)); 15522d17eb1febbe07fdb6785467273e48c0ab1ed4fJohn Stuppy } 156be2bfccace90099e150bae69ddfef42f501e997cAaron VonderHaar & Chris Perry 15701c59a01c55d6cfd4b3da34a5036ba9a1c314dc2Aaron VonderHaar & Ryan Richard private static class TestDrawable extends Drawable { 15801c59a01c55d6cfd4b3da34a5036ba9a1c314dc2Aaron VonderHaar & Ryan Richard @Override 15901c59a01c55d6cfd4b3da34a5036ba9a1c314dc2Aaron VonderHaar & Ryan Richard public void draw(Canvas canvas) { 16001c59a01c55d6cfd4b3da34a5036ba9a1c314dc2Aaron VonderHaar & Ryan Richard } 16101c59a01c55d6cfd4b3da34a5036ba9a1c314dc2Aaron VonderHaar & Ryan Richard 16201c59a01c55d6cfd4b3da34a5036ba9a1c314dc2Aaron VonderHaar & Ryan Richard @Override 16301c59a01c55d6cfd4b3da34a5036ba9a1c314dc2Aaron VonderHaar & Ryan Richard public void setAlpha(int alpha) { 16401c59a01c55d6cfd4b3da34a5036ba9a1c314dc2Aaron VonderHaar & Ryan Richard } 16501c59a01c55d6cfd4b3da34a5036ba9a1c314dc2Aaron VonderHaar & Ryan Richard 16601c59a01c55d6cfd4b3da34a5036ba9a1c314dc2Aaron VonderHaar & Ryan Richard @Override 16701c59a01c55d6cfd4b3da34a5036ba9a1c314dc2Aaron VonderHaar & Ryan Richard public void setColorFilter(ColorFilter cf) { 16801c59a01c55d6cfd4b3da34a5036ba9a1c314dc2Aaron VonderHaar & Ryan Richard } 16901c59a01c55d6cfd4b3da34a5036ba9a1c314dc2Aaron VonderHaar & Ryan Richard 17001c59a01c55d6cfd4b3da34a5036ba9a1c314dc2Aaron VonderHaar & Ryan Richard @Override 17101c59a01c55d6cfd4b3da34a5036ba9a1c314dc2Aaron VonderHaar & Ryan Richard public int getOpacity() { 17201c59a01c55d6cfd4b3da34a5036ba9a1c314dc2Aaron VonderHaar & Ryan Richard return 0; 17301c59a01c55d6cfd4b3da34a5036ba9a1c314dc2Aaron VonderHaar & Ryan Richard } 17401c59a01c55d6cfd4b3da34a5036ba9a1c314dc2Aaron VonderHaar & Ryan Richard } 175be87a589a85b713d1755c36b2eca8462177f91f3David Farber & Joe Moore} 176