| package com.xtremelabs.robolectric.res; |
| |
| import android.graphics.drawable.Drawable; |
| import android.graphics.drawable.LayerDrawable; |
| import android.graphics.drawable.StateListDrawable; |
| import com.xtremelabs.robolectric.R; |
| import com.xtremelabs.robolectric.Robolectric; |
| import com.xtremelabs.robolectric.WithTestDefaultsRunner; |
| import com.xtremelabs.robolectric.shadows.ShadowStateListDrawable; |
| import org.junit.Before; |
| import org.junit.Test; |
| import org.junit.runner.RunWith; |
| |
| import static com.xtremelabs.robolectric.util.TestUtil.getSystemResourceDir; |
| import static com.xtremelabs.robolectric.util.TestUtil.resourceFile; |
| import static org.hamcrest.CoreMatchers.equalTo; |
| import static org.hamcrest.CoreMatchers.instanceOf; |
| import static org.hamcrest.CoreMatchers.nullValue; |
| import static org.junit.Assert.assertEquals; |
| import static org.junit.Assert.assertFalse; |
| import static org.junit.Assert.assertThat; |
| import static org.junit.Assert.assertTrue; |
| |
| /** |
| * DrawableResourceLoaderTest |
| */ |
| @RunWith(WithTestDefaultsRunner.class) |
| public class DrawableResourceLoaderTest { |
| protected DrawableResourceLoader resourceLoader; |
| |
| @Before |
| public void setup() throws Exception { |
| ResourceExtractor extractor = new ResourceExtractor(); |
| extractor.addLocalRClass(R.class); |
| extractor.addSystemRClass(android.R.class); |
| |
| resourceLoader = new DrawableResourceLoader(extractor, resourceFile("res")); |
| DocumentLoader documentLoader = new DocumentLoader(resourceLoader); |
| |
| documentLoader.loadResourceXmlDir(resourceFile("res", "drawable")); |
| documentLoader.loadSystemResourceXmlDir(getSystemResourceDir("drawable")); |
| } |
| |
| @Test |
| public void testProcessResourceXml() throws Exception { |
| assertTrue("drawable/rainbow", resourceLoader.documents.containsKey("drawable/rainbow")); |
| assertEquals("documents.size", 116, resourceLoader.documents.size()); |
| } |
| |
| @Test |
| public void testIsXml_rainbow() throws Exception { |
| assertTrue(resourceLoader.isXml(R.drawable.rainbow)); |
| } |
| |
| @Test |
| public void testIsXml_shouldWorkWithSystem() throws Exception { |
| assertTrue(resourceLoader.isXml(android.R.drawable.ic_popup_sync)); |
| } |
| |
| @Test |
| public void testIsXml_red() throws Exception { |
| boolean result = resourceLoader.isXml(R.drawable.l0_red); |
| assertFalse("result", result); |
| } |
| |
| @Test |
| public void testGetDrawableIds() { |
| int[] expected = { R.drawable.l7_white, R.drawable.l0_red, |
| R.drawable.l1_orange, R.drawable.l2_yellow, |
| R.drawable.l3_green, R.drawable.l4_blue, R.drawable.l5_indigo, |
| R.drawable.l6_violet }; |
| |
| int[] result = resourceLoader.getDrawableIds(R.drawable.rainbow); |
| for (int i = 0; i < expected.length; i++) { |
| assertEquals("result[" + i + "]", expected[i], result[i]); |
| } |
| } |
| |
| @Test |
| public void testGetDrawableIds_shouldWorkWithSystem() throws Exception { |
| int[] result = resourceLoader.getDrawableIds(android.R.drawable.ic_popup_sync); |
| for (int resultItem : result) { |
| assertEquals(-1, resultItem); |
| } |
| } |
| |
| @Test |
| public void testNotXmlDrawable() { |
| int[] drawables = { R.drawable.l7_white, R.drawable.l0_red, |
| R.drawable.l1_orange, R.drawable.l2_yellow, |
| R.drawable.l3_green, R.drawable.l4_blue, R.drawable.l5_indigo, |
| R.drawable.l6_violet }; |
| |
| for (int i = 0; i < drawables.length; i++) { |
| Drawable drawable = resourceLoader.getXmlDrawable( drawables[i] ); |
| assertThat( drawable, nullValue() ); |
| } |
| } |
| |
| @Test |
| public void testLayerDrawable() { |
| Drawable drawable = resourceLoader.getXmlDrawable( R.drawable.rainbow ); |
| assertThat( drawable, instanceOf( LayerDrawable.class ) ); |
| } |
| |
| @Test |
| public void testStateListDrawable() { |
| Drawable drawable = resourceLoader.getXmlDrawable( R.drawable.state_drawable ); |
| assertThat( drawable, instanceOf( StateListDrawable.class ) ); |
| ShadowStateListDrawable shDrawable = Robolectric.shadowOf( ( StateListDrawable ) drawable ); |
| assertThat( shDrawable.getResourceIdForState( android.R.attr.state_selected ), equalTo( R.drawable.l0_red ) ); |
| assertThat( shDrawable.getResourceIdForState( android.R.attr.state_pressed ), equalTo( R.drawable.l1_orange ) ); |
| assertThat( shDrawable.getResourceIdForState( android.R.attr.state_focused ), equalTo( R.drawable.l2_yellow ) ); |
| assertThat( shDrawable.getResourceIdForState( android.R.attr.state_checkable ), equalTo( R.drawable.l3_green ) ); |
| assertThat( shDrawable.getResourceIdForState( android.R.attr.state_checked ), equalTo( R.drawable.l4_blue ) ); |
| assertThat( shDrawable.getResourceIdForState( android.R.attr.state_enabled ), equalTo( R.drawable.l5_indigo ) ); |
| assertThat( shDrawable.getResourceIdForState( android.R.attr.state_window_focused ), equalTo( R.drawable.l6_violet ) ); |
| assertThat( shDrawable.getResourceIdForState( android.R.attr.state_active ), equalTo( R.drawable.l7_white ) ); |
| } |
| } |