15117035453920f3d4d0f3969bdab0305dcdb94baJoe Moore & Ryan Richardpackage com.xtremelabs.robolectric.res; 25117035453920f3d4d0f3969bdab0305dcdb94baJoe Moore & Ryan Richard 3aec1d0888fe04efd0cde7514e155870b18c41286Rick Kawala & Wei Wuimport android.graphics.drawable.Drawable; 4aec1d0888fe04efd0cde7514e155870b18c41286Rick Kawala & Wei Wuimport android.graphics.drawable.LayerDrawable; 5aec1d0888fe04efd0cde7514e155870b18c41286Rick Kawala & Wei Wuimport android.graphics.drawable.StateListDrawable; 6aec1d0888fe04efd0cde7514e155870b18c41286Rick Kawala & Wei Wuimport com.xtremelabs.robolectric.R; 7aec1d0888fe04efd0cde7514e155870b18c41286Rick Kawala & Wei Wuimport com.xtremelabs.robolectric.Robolectric; 8aec1d0888fe04efd0cde7514e155870b18c41286Rick Kawala & Wei Wuimport com.xtremelabs.robolectric.WithTestDefaultsRunner; 9aec1d0888fe04efd0cde7514e155870b18c41286Rick Kawala & Wei Wuimport com.xtremelabs.robolectric.shadows.ShadowStateListDrawable; 10aec1d0888fe04efd0cde7514e155870b18c41286Rick Kawala & Wei Wuimport org.junit.Before; 11aec1d0888fe04efd0cde7514e155870b18c41286Rick Kawala & Wei Wuimport org.junit.Test; 12aec1d0888fe04efd0cde7514e155870b18c41286Rick Kawala & Wei Wuimport org.junit.runner.RunWith; 13aec1d0888fe04efd0cde7514e155870b18c41286Rick Kawala & Wei Wu 14f2906888dbe454d6b607e123cc5fdfebd190372bJesse Toth & Tim Labeeuwimport static com.xtremelabs.robolectric.util.TestUtil.getSystemResourceDir; 155117035453920f3d4d0f3969bdab0305dcdb94baJoe Moore & Ryan Richardimport static com.xtremelabs.robolectric.util.TestUtil.resourceFile; 16aec1d0888fe04efd0cde7514e155870b18c41286Rick Kawala & Wei Wuimport static org.hamcrest.CoreMatchers.equalTo; 17fac8bbf7dfc7904540716be8649b2f5a5c9f6d15adriancowhamimport static org.hamcrest.CoreMatchers.instanceOf; 18fac8bbf7dfc7904540716be8649b2f5a5c9f6d15adriancowhamimport static org.hamcrest.CoreMatchers.nullValue; 195117035453920f3d4d0f3969bdab0305dcdb94baJoe Moore & Ryan Richardimport static org.junit.Assert.assertEquals; 205117035453920f3d4d0f3969bdab0305dcdb94baJoe Moore & Ryan Richardimport static org.junit.Assert.assertFalse; 21fac8bbf7dfc7904540716be8649b2f5a5c9f6d15adriancowhamimport static org.junit.Assert.assertThat; 225117035453920f3d4d0f3969bdab0305dcdb94baJoe Moore & Ryan Richardimport static org.junit.Assert.assertTrue; 235117035453920f3d4d0f3969bdab0305dcdb94baJoe Moore & Ryan Richard 245117035453920f3d4d0f3969bdab0305dcdb94baJoe Moore & Ryan Richard/** 255117035453920f3d4d0f3969bdab0305dcdb94baJoe Moore & Ryan Richard * DrawableResourceLoaderTest 265117035453920f3d4d0f3969bdab0305dcdb94baJoe Moore & Ryan Richard */ 275117035453920f3d4d0f3969bdab0305dcdb94baJoe Moore & Ryan Richard@RunWith(WithTestDefaultsRunner.class) 285117035453920f3d4d0f3969bdab0305dcdb94baJoe Moore & Ryan Richardpublic class DrawableResourceLoaderTest { 295117035453920f3d4d0f3969bdab0305dcdb94baJoe Moore & Ryan Richard protected DrawableResourceLoader resourceLoader; 305117035453920f3d4d0f3969bdab0305dcdb94baJoe Moore & Ryan Richard 315117035453920f3d4d0f3969bdab0305dcdb94baJoe Moore & Ryan Richard @Before 325117035453920f3d4d0f3969bdab0305dcdb94baJoe Moore & Ryan Richard public void setup() throws Exception { 335117035453920f3d4d0f3969bdab0305dcdb94baJoe Moore & Ryan Richard ResourceExtractor extractor = new ResourceExtractor(); 345117035453920f3d4d0f3969bdab0305dcdb94baJoe Moore & Ryan Richard extractor.addLocalRClass(R.class); 35f2906888dbe454d6b607e123cc5fdfebd190372bJesse Toth & Tim Labeeuw extractor.addSystemRClass(android.R.class); 365117035453920f3d4d0f3969bdab0305dcdb94baJoe Moore & Ryan Richard 37f2906888dbe454d6b607e123cc5fdfebd190372bJesse Toth & Tim Labeeuw resourceLoader = new DrawableResourceLoader(extractor, resourceFile("res")); 385117035453920f3d4d0f3969bdab0305dcdb94baJoe Moore & Ryan Richard DocumentLoader documentLoader = new DocumentLoader(resourceLoader); 39f2906888dbe454d6b607e123cc5fdfebd190372bJesse Toth & Tim Labeeuw 40f2906888dbe454d6b607e123cc5fdfebd190372bJesse Toth & Tim Labeeuw documentLoader.loadResourceXmlDir(resourceFile("res", "drawable")); 41f2906888dbe454d6b607e123cc5fdfebd190372bJesse Toth & Tim Labeeuw documentLoader.loadSystemResourceXmlDir(getSystemResourceDir("drawable")); 425117035453920f3d4d0f3969bdab0305dcdb94baJoe Moore & Ryan Richard } 435117035453920f3d4d0f3969bdab0305dcdb94baJoe Moore & Ryan Richard 445117035453920f3d4d0f3969bdab0305dcdb94baJoe Moore & Ryan Richard @Test 455117035453920f3d4d0f3969bdab0305dcdb94baJoe Moore & Ryan Richard public void testProcessResourceXml() throws Exception { 46f2906888dbe454d6b607e123cc5fdfebd190372bJesse Toth & Tim Labeeuw assertTrue("drawable/rainbow", resourceLoader.documents.containsKey("drawable/rainbow")); 47aec1d0888fe04efd0cde7514e155870b18c41286Rick Kawala & Wei Wu assertEquals("documents.size", 116, resourceLoader.documents.size()); 485117035453920f3d4d0f3969bdab0305dcdb94baJoe Moore & Ryan Richard } 495117035453920f3d4d0f3969bdab0305dcdb94baJoe Moore & Ryan Richard 505117035453920f3d4d0f3969bdab0305dcdb94baJoe Moore & Ryan Richard @Test 515117035453920f3d4d0f3969bdab0305dcdb94baJoe Moore & Ryan Richard public void testIsXml_rainbow() throws Exception { 52f2906888dbe454d6b607e123cc5fdfebd190372bJesse Toth & Tim Labeeuw assertTrue(resourceLoader.isXml(R.drawable.rainbow)); 53f2906888dbe454d6b607e123cc5fdfebd190372bJesse Toth & Tim Labeeuw } 54f2906888dbe454d6b607e123cc5fdfebd190372bJesse Toth & Tim Labeeuw 55f2906888dbe454d6b607e123cc5fdfebd190372bJesse Toth & Tim Labeeuw @Test 56f2906888dbe454d6b607e123cc5fdfebd190372bJesse Toth & Tim Labeeuw public void testIsXml_shouldWorkWithSystem() throws Exception { 57f2906888dbe454d6b607e123cc5fdfebd190372bJesse Toth & Tim Labeeuw assertTrue(resourceLoader.isXml(android.R.drawable.ic_popup_sync)); 585117035453920f3d4d0f3969bdab0305dcdb94baJoe Moore & Ryan Richard } 595117035453920f3d4d0f3969bdab0305dcdb94baJoe Moore & Ryan Richard 605117035453920f3d4d0f3969bdab0305dcdb94baJoe Moore & Ryan Richard @Test 615117035453920f3d4d0f3969bdab0305dcdb94baJoe Moore & Ryan Richard public void testIsXml_red() throws Exception { 625117035453920f3d4d0f3969bdab0305dcdb94baJoe Moore & Ryan Richard boolean result = resourceLoader.isXml(R.drawable.l0_red); 635117035453920f3d4d0f3969bdab0305dcdb94baJoe Moore & Ryan Richard assertFalse("result", result); 645117035453920f3d4d0f3969bdab0305dcdb94baJoe Moore & Ryan Richard } 655117035453920f3d4d0f3969bdab0305dcdb94baJoe Moore & Ryan Richard 665117035453920f3d4d0f3969bdab0305dcdb94baJoe Moore & Ryan Richard @Test 675117035453920f3d4d0f3969bdab0305dcdb94baJoe Moore & Ryan Richard public void testGetDrawableIds() { 68f2906888dbe454d6b607e123cc5fdfebd190372bJesse Toth & Tim Labeeuw int[] expected = { R.drawable.l7_white, R.drawable.l0_red, 695117035453920f3d4d0f3969bdab0305dcdb94baJoe Moore & Ryan Richard R.drawable.l1_orange, R.drawable.l2_yellow, 705117035453920f3d4d0f3969bdab0305dcdb94baJoe Moore & Ryan Richard R.drawable.l3_green, R.drawable.l4_blue, R.drawable.l5_indigo, 715117035453920f3d4d0f3969bdab0305dcdb94baJoe Moore & Ryan Richard R.drawable.l6_violet }; 725117035453920f3d4d0f3969bdab0305dcdb94baJoe Moore & Ryan Richard 735117035453920f3d4d0f3969bdab0305dcdb94baJoe Moore & Ryan Richard int[] result = resourceLoader.getDrawableIds(R.drawable.rainbow); 745117035453920f3d4d0f3969bdab0305dcdb94baJoe Moore & Ryan Richard for (int i = 0; i < expected.length; i++) { 755117035453920f3d4d0f3969bdab0305dcdb94baJoe Moore & Ryan Richard assertEquals("result[" + i + "]", expected[i], result[i]); 765117035453920f3d4d0f3969bdab0305dcdb94baJoe Moore & Ryan Richard } 775117035453920f3d4d0f3969bdab0305dcdb94baJoe Moore & Ryan Richard } 78f2906888dbe454d6b607e123cc5fdfebd190372bJesse Toth & Tim Labeeuw 79f2906888dbe454d6b607e123cc5fdfebd190372bJesse Toth & Tim Labeeuw @Test 80f2906888dbe454d6b607e123cc5fdfebd190372bJesse Toth & Tim Labeeuw public void testGetDrawableIds_shouldWorkWithSystem() throws Exception { 81f2906888dbe454d6b607e123cc5fdfebd190372bJesse Toth & Tim Labeeuw int[] result = resourceLoader.getDrawableIds(android.R.drawable.ic_popup_sync); 82f2906888dbe454d6b607e123cc5fdfebd190372bJesse Toth & Tim Labeeuw for (int resultItem : result) { 83f2906888dbe454d6b607e123cc5fdfebd190372bJesse Toth & Tim Labeeuw assertEquals(-1, resultItem); 84f2906888dbe454d6b607e123cc5fdfebd190372bJesse Toth & Tim Labeeuw } 85f2906888dbe454d6b607e123cc5fdfebd190372bJesse Toth & Tim Labeeuw } 86fac8bbf7dfc7904540716be8649b2f5a5c9f6d15adriancowham 87fac8bbf7dfc7904540716be8649b2f5a5c9f6d15adriancowham @Test 88fac8bbf7dfc7904540716be8649b2f5a5c9f6d15adriancowham public void testNotXmlDrawable() { 89fac8bbf7dfc7904540716be8649b2f5a5c9f6d15adriancowham int[] drawables = { R.drawable.l7_white, R.drawable.l0_red, 90fac8bbf7dfc7904540716be8649b2f5a5c9f6d15adriancowham R.drawable.l1_orange, R.drawable.l2_yellow, 91fac8bbf7dfc7904540716be8649b2f5a5c9f6d15adriancowham R.drawable.l3_green, R.drawable.l4_blue, R.drawable.l5_indigo, 92fac8bbf7dfc7904540716be8649b2f5a5c9f6d15adriancowham R.drawable.l6_violet }; 93fac8bbf7dfc7904540716be8649b2f5a5c9f6d15adriancowham 94fac8bbf7dfc7904540716be8649b2f5a5c9f6d15adriancowham for (int i = 0; i < drawables.length; i++) { 95fac8bbf7dfc7904540716be8649b2f5a5c9f6d15adriancowham Drawable drawable = resourceLoader.getXmlDrawable( drawables[i] ); 96fac8bbf7dfc7904540716be8649b2f5a5c9f6d15adriancowham assertThat( drawable, nullValue() ); 97fac8bbf7dfc7904540716be8649b2f5a5c9f6d15adriancowham } 98fac8bbf7dfc7904540716be8649b2f5a5c9f6d15adriancowham } 99fac8bbf7dfc7904540716be8649b2f5a5c9f6d15adriancowham 100fac8bbf7dfc7904540716be8649b2f5a5c9f6d15adriancowham @Test 101fac8bbf7dfc7904540716be8649b2f5a5c9f6d15adriancowham public void testLayerDrawable() { 102fac8bbf7dfc7904540716be8649b2f5a5c9f6d15adriancowham Drawable drawable = resourceLoader.getXmlDrawable( R.drawable.rainbow ); 103fac8bbf7dfc7904540716be8649b2f5a5c9f6d15adriancowham assertThat( drawable, instanceOf( LayerDrawable.class ) ); 104fac8bbf7dfc7904540716be8649b2f5a5c9f6d15adriancowham } 105fac8bbf7dfc7904540716be8649b2f5a5c9f6d15adriancowham 106fac8bbf7dfc7904540716be8649b2f5a5c9f6d15adriancowham @Test 107fac8bbf7dfc7904540716be8649b2f5a5c9f6d15adriancowham public void testStateListDrawable() { 108fac8bbf7dfc7904540716be8649b2f5a5c9f6d15adriancowham Drawable drawable = resourceLoader.getXmlDrawable( R.drawable.state_drawable ); 109fac8bbf7dfc7904540716be8649b2f5a5c9f6d15adriancowham assertThat( drawable, instanceOf( StateListDrawable.class ) ); 110284a307f028fc1b9c6175a28b60280bc53b5dbe6adriancowham ShadowStateListDrawable shDrawable = Robolectric.shadowOf( ( StateListDrawable ) drawable ); 111284a307f028fc1b9c6175a28b60280bc53b5dbe6adriancowham assertThat( shDrawable.getResourceIdForState( android.R.attr.state_selected ), equalTo( R.drawable.l0_red ) ); 112284a307f028fc1b9c6175a28b60280bc53b5dbe6adriancowham assertThat( shDrawable.getResourceIdForState( android.R.attr.state_pressed ), equalTo( R.drawable.l1_orange ) ); 113284a307f028fc1b9c6175a28b60280bc53b5dbe6adriancowham assertThat( shDrawable.getResourceIdForState( android.R.attr.state_focused ), equalTo( R.drawable.l2_yellow ) ); 114284a307f028fc1b9c6175a28b60280bc53b5dbe6adriancowham assertThat( shDrawable.getResourceIdForState( android.R.attr.state_checkable ), equalTo( R.drawable.l3_green ) ); 115284a307f028fc1b9c6175a28b60280bc53b5dbe6adriancowham assertThat( shDrawable.getResourceIdForState( android.R.attr.state_checked ), equalTo( R.drawable.l4_blue ) ); 116284a307f028fc1b9c6175a28b60280bc53b5dbe6adriancowham assertThat( shDrawable.getResourceIdForState( android.R.attr.state_enabled ), equalTo( R.drawable.l5_indigo ) ); 117284a307f028fc1b9c6175a28b60280bc53b5dbe6adriancowham assertThat( shDrawable.getResourceIdForState( android.R.attr.state_window_focused ), equalTo( R.drawable.l6_violet ) ); 118284a307f028fc1b9c6175a28b60280bc53b5dbe6adriancowham assertThat( shDrawable.getResourceIdForState( android.R.attr.state_active ), equalTo( R.drawable.l7_white ) ); 119fac8bbf7dfc7904540716be8649b2f5a5c9f6d15adriancowham } 1205117035453920f3d4d0f3969bdab0305dcdb94baJoe Moore & Ryan Richard} 121