1package com.xtremelabs.robolectric.res; 2 3import android.graphics.drawable.Drawable; 4import android.graphics.drawable.LayerDrawable; 5import android.graphics.drawable.StateListDrawable; 6import com.xtremelabs.robolectric.R; 7import com.xtremelabs.robolectric.Robolectric; 8import com.xtremelabs.robolectric.WithTestDefaultsRunner; 9import com.xtremelabs.robolectric.shadows.ShadowStateListDrawable; 10import org.junit.Before; 11import org.junit.Test; 12import org.junit.runner.RunWith; 13 14import static com.xtremelabs.robolectric.util.TestUtil.getSystemResourceDir; 15import static com.xtremelabs.robolectric.util.TestUtil.resourceFile; 16import static org.hamcrest.CoreMatchers.equalTo; 17import static org.hamcrest.CoreMatchers.instanceOf; 18import static org.hamcrest.CoreMatchers.nullValue; 19import static org.junit.Assert.assertEquals; 20import static org.junit.Assert.assertFalse; 21import static org.junit.Assert.assertThat; 22import static org.junit.Assert.assertTrue; 23 24/** 25 * DrawableResourceLoaderTest 26 */ 27@RunWith(WithTestDefaultsRunner.class) 28public class DrawableResourceLoaderTest { 29 protected DrawableResourceLoader resourceLoader; 30 31 @Before 32 public void setup() throws Exception { 33 ResourceExtractor extractor = new ResourceExtractor(); 34 extractor.addLocalRClass(R.class); 35 extractor.addSystemRClass(android.R.class); 36 37 resourceLoader = new DrawableResourceLoader(extractor, resourceFile("res")); 38 DocumentLoader documentLoader = new DocumentLoader(resourceLoader); 39 40 documentLoader.loadResourceXmlDir(resourceFile("res", "drawable")); 41 documentLoader.loadSystemResourceXmlDir(getSystemResourceDir("drawable")); 42 } 43 44 @Test 45 public void testProcessResourceXml() throws Exception { 46 assertTrue("drawable/rainbow", resourceLoader.documents.containsKey("drawable/rainbow")); 47 assertEquals("documents.size", 116, resourceLoader.documents.size()); 48 } 49 50 @Test 51 public void testIsXml_rainbow() throws Exception { 52 assertTrue(resourceLoader.isXml(R.drawable.rainbow)); 53 } 54 55 @Test 56 public void testIsXml_shouldWorkWithSystem() throws Exception { 57 assertTrue(resourceLoader.isXml(android.R.drawable.ic_popup_sync)); 58 } 59 60 @Test 61 public void testIsXml_red() throws Exception { 62 boolean result = resourceLoader.isXml(R.drawable.l0_red); 63 assertFalse("result", result); 64 } 65 66 @Test 67 public void testGetDrawableIds() { 68 int[] expected = { R.drawable.l7_white, R.drawable.l0_red, 69 R.drawable.l1_orange, R.drawable.l2_yellow, 70 R.drawable.l3_green, R.drawable.l4_blue, R.drawable.l5_indigo, 71 R.drawable.l6_violet }; 72 73 int[] result = resourceLoader.getDrawableIds(R.drawable.rainbow); 74 for (int i = 0; i < expected.length; i++) { 75 assertEquals("result[" + i + "]", expected[i], result[i]); 76 } 77 } 78 79 @Test 80 public void testGetDrawableIds_shouldWorkWithSystem() throws Exception { 81 int[] result = resourceLoader.getDrawableIds(android.R.drawable.ic_popup_sync); 82 for (int resultItem : result) { 83 assertEquals(-1, resultItem); 84 } 85 } 86 87 @Test 88 public void testNotXmlDrawable() { 89 int[] drawables = { R.drawable.l7_white, R.drawable.l0_red, 90 R.drawable.l1_orange, R.drawable.l2_yellow, 91 R.drawable.l3_green, R.drawable.l4_blue, R.drawable.l5_indigo, 92 R.drawable.l6_violet }; 93 94 for (int i = 0; i < drawables.length; i++) { 95 Drawable drawable = resourceLoader.getXmlDrawable( drawables[i] ); 96 assertThat( drawable, nullValue() ); 97 } 98 } 99 100 @Test 101 public void testLayerDrawable() { 102 Drawable drawable = resourceLoader.getXmlDrawable( R.drawable.rainbow ); 103 assertThat( drawable, instanceOf( LayerDrawable.class ) ); 104 } 105 106 @Test 107 public void testStateListDrawable() { 108 Drawable drawable = resourceLoader.getXmlDrawable( R.drawable.state_drawable ); 109 assertThat( drawable, instanceOf( StateListDrawable.class ) ); 110 ShadowStateListDrawable shDrawable = Robolectric.shadowOf( ( StateListDrawable ) drawable ); 111 assertThat( shDrawable.getResourceIdForState( android.R.attr.state_selected ), equalTo( R.drawable.l0_red ) ); 112 assertThat( shDrawable.getResourceIdForState( android.R.attr.state_pressed ), equalTo( R.drawable.l1_orange ) ); 113 assertThat( shDrawable.getResourceIdForState( android.R.attr.state_focused ), equalTo( R.drawable.l2_yellow ) ); 114 assertThat( shDrawable.getResourceIdForState( android.R.attr.state_checkable ), equalTo( R.drawable.l3_green ) ); 115 assertThat( shDrawable.getResourceIdForState( android.R.attr.state_checked ), equalTo( R.drawable.l4_blue ) ); 116 assertThat( shDrawable.getResourceIdForState( android.R.attr.state_enabled ), equalTo( R.drawable.l5_indigo ) ); 117 assertThat( shDrawable.getResourceIdForState( android.R.attr.state_window_focused ), equalTo( R.drawable.l6_violet ) ); 118 assertThat( shDrawable.getResourceIdForState( android.R.attr.state_active ), equalTo( R.drawable.l7_white ) ); 119 } 120} 121