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