ResourcesTest.java revision e07511e1e736d9deba522ab8d58ffabcc67d274b
133873d2b41a5cd2597b20a4e88eb8942944c0f23Tyler Schultzpackage com.xtremelabs.robolectric.shadows;
2b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin
3b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwinimport android.app.Activity;
485af7906879a68c99b1878dac22605fa32454f3fRich Humphreyimport android.content.res.Configuration;
5b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwinimport android.content.res.Resources;
63cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowhamimport android.graphics.drawable.AnimationDrawable;
73cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowhamimport android.graphics.drawable.BitmapDrawable;
83cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowhamimport android.graphics.drawable.ColorDrawable;
93cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowhamimport com.xtremelabs.robolectric.Robolectric;
103cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowhamimport com.xtremelabs.robolectric.WithTestDefaultsRunner;
113cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowhamimport com.xtremelabs.robolectric.util.TestR;
129befb81f62e506f2afee9bf4bc4cd2da5c4f9f20Joe Moore and Tyler Schultzimport org.junit.Before;
139befb81f62e506f2afee9bf4bc4cd2da5c4f9f20Joe Moore and Tyler Schultzimport org.junit.Test;
149befb81f62e506f2afee9bf4bc4cd2da5c4f9f20Joe Moore and Tyler Schultzimport org.junit.runner.RunWith;
159befb81f62e506f2afee9bf4bc4cd2da5c4f9f20Joe Moore and Tyler Schultz
16e02d2608f3fa739dd328c6b44a2122b9dfb73bedLowell Kirsh & Ryan Richardimport static com.xtremelabs.robolectric.Robolectric.shadowOf;
17e07511e1e736d9deba522ab8d58ffabcc67d274bRick Kawala & Wei Wuimport static org.hamcrest.CoreMatchers.equalTo;
18e07511e1e736d9deba522ab8d58ffabcc67d274bRick Kawala & Wei Wuimport static org.hamcrest.CoreMatchers.instanceOf;
19e07511e1e736d9deba522ab8d58ffabcc67d274bRick Kawala & Wei Wuimport static org.hamcrest.CoreMatchers.is;
20e07511e1e736d9deba522ab8d58ffabcc67d274bRick Kawala & Wei Wuimport static org.hamcrest.CoreMatchers.notNullValue;
219befb81f62e506f2afee9bf4bc4cd2da5c4f9f20Joe Moore and Tyler Schultzimport static org.junit.Assert.assertThat;
227f306c7c98e32f85115ce57780a6752477b8faadadriancowham
23b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin
2407257335f88da163910cc0bd039e6163edc38580Gregg Van Hove & Phil Goodwin@RunWith(WithTestDefaultsRunner.class)
25b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwinpublic class ResourcesTest {
2640c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams
273cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham	private Resources resources;
283cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham	private ShadowContextWrapper shadowApp;
293cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham
303cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham	@Before
313cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham	public void setup() {
323cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham		resources = new Activity().getResources();
337f306c7c98e32f85115ce57780a6752477b8faadadriancowham		shadowApp = shadowOf( Robolectric.application );
343cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham	}
353cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham
36b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin    @Test(expected = Resources.NotFoundException.class)
37b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin    public void getStringArray_shouldThrowExceptionIfNotFound() throws Exception {
383cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham        resources.getStringArray(-1);
39b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin    }
4040c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams
41018b9355a9aba61f0c47bc438e2aedd63932a05aMichael Portuesi    @Test
42018b9355a9aba61f0c47bc438e2aedd63932a05aMichael Portuesi    public void testConfiguration() {
433cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham        Configuration configuration = resources.getConfiguration();
4485af7906879a68c99b1878dac22605fa32454f3fRich Humphrey        assertThat(configuration, notNullValue());
4585af7906879a68c99b1878dac22605fa32454f3fRich Humphrey        assertThat(configuration.locale, notNullValue());
46018b9355a9aba61f0c47bc438e2aedd63932a05aMichael Portuesi    }
47ec63d3ad017965dc341bd0ce15f07c65f35b4a90Christian Williams
48ec63d3ad017965dc341bd0ce15f07c65f35b4a90Christian Williams    @Test
499befb81f62e506f2afee9bf4bc4cd2da5c4f9f20Joe Moore and Tyler Schultz    public void testConfigurationReturnsTheSameInstance() {
509befb81f62e506f2afee9bf4bc4cd2da5c4f9f20Joe Moore and Tyler Schultz        assertThat(resources.getConfiguration(), is(resources.getConfiguration()));
51018b9355a9aba61f0c47bc438e2aedd63932a05aMichael Portuesi    }
52ec63d3ad017965dc341bd0ce15f07c65f35b4a90Christian Williams
53ec63d3ad017965dc341bd0ce15f07c65f35b4a90Christian Williams    @Test
54ec63d3ad017965dc341bd0ce15f07c65f35b4a90Christian Williams    public void testNewTheme() {
553cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham        assertThat(resources.newTheme(), notNullValue());
563cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham    }
573cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham
583cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham    /**
593cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham     * a missing R.class will result in an BitmapDrawable getting returned
603cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham     * by default
613cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham     */
623cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham    @Test
633cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham    public void testGetDrawableNullRClass() {
643cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham    	shadowApp.getResourceLoader().setLocalRClass( null );
653cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham    	assertThat( resources.getDrawable( TestR.anim.test_anim_1 ), instanceOf( BitmapDrawable.class ) );
663cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham    }
673cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham
683cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham    /**
693cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham     * given an R.anim.id value, will return an AnimationDrawable
703cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham     */
713cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham    @Test
723cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham    public void testGetAnimationDrawable() {
733cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham    	shadowApp.getResourceLoader().setLocalRClass( TestR.class );
743cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham    	assertThat( resources.getDrawable( TestR.anim.test_anim_1 ), instanceOf( AnimationDrawable.class ) );
753cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham    }
763cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham
773cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham    /**
783cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham     * given an R.color.id value, will return a ColorDrawable
793cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham     */
803cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham    @Test
813cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham    public void testGetColorDrawable() {
823cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham    	shadowApp.getResourceLoader().setLocalRClass( TestR.class );
833cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham    	assertThat( resources.getDrawable( TestR.color.test_color_1 ), instanceOf( ColorDrawable.class ) );
843cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham    }
853cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham
863cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham    /**
873cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham     * given an R.drawable.id value, will return a BitmapDrawable
883cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham     */
893cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham    @Test
903cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham    public void testGetBitmapDrawable() {
913cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham    	shadowApp.getResourceLoader().setLocalRClass( TestR.class );
923cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham    	assertThat( resources.getDrawable( TestR.drawable.test_drawable_1 ), instanceOf( BitmapDrawable.class ) );
933cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham    }
943cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham
953cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham    /**
963cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham     * given a value that doesn't in one of R's inner classes, will return a BitmapDrawable
973cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham     */
983cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham    @Test
993cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham    public void testGetBitmapDrawableForUnknownId() {
1003cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham    	shadowApp.getResourceLoader().setLocalRClass( TestR.class );
1013cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham    	assertThat( resources.getDrawable( Integer.MAX_VALUE ), instanceOf( BitmapDrawable.class ) );
102ec63d3ad017965dc341bd0ce15f07c65f35b4a90Christian Williams    }
103e02d2608f3fa739dd328c6b44a2122b9dfb73bedLowell Kirsh & Ryan Richard    @Test
104e02d2608f3fa739dd328c6b44a2122b9dfb73bedLowell Kirsh & Ryan Richard    public void testDensity() {
105e02d2608f3fa739dd328c6b44a2122b9dfb73bedLowell Kirsh & Ryan Richard        Activity activity = new Activity();
106e02d2608f3fa739dd328c6b44a2122b9dfb73bedLowell Kirsh & Ryan Richard        assertThat(activity.getResources().getDisplayMetrics().density, equalTo(1f));
107e02d2608f3fa739dd328c6b44a2122b9dfb73bedLowell Kirsh & Ryan Richard
108e02d2608f3fa739dd328c6b44a2122b9dfb73bedLowell Kirsh & Ryan Richard        shadowOf(activity.getResources()).setDensity(1.5f);
109e02d2608f3fa739dd328c6b44a2122b9dfb73bedLowell Kirsh & Ryan Richard        assertThat(activity.getResources().getDisplayMetrics().density, equalTo(1.5f));
110e02d2608f3fa739dd328c6b44a2122b9dfb73bedLowell Kirsh & Ryan Richard
111e02d2608f3fa739dd328c6b44a2122b9dfb73bedLowell Kirsh & Ryan Richard        Activity anotherActivity = new Activity();
112e02d2608f3fa739dd328c6b44a2122b9dfb73bedLowell Kirsh & Ryan Richard        assertThat(anotherActivity.getResources().getDisplayMetrics().density, equalTo(1.5f));
113e02d2608f3fa739dd328c6b44a2122b9dfb73bedLowell Kirsh & Ryan Richard    }
114e07511e1e736d9deba522ab8d58ffabcc67d274bRick Kawala & Wei Wu
115e07511e1e736d9deba522ab8d58ffabcc67d274bRick Kawala & Wei Wu    @Test
116e07511e1e736d9deba522ab8d58ffabcc67d274bRick Kawala & Wei Wu    public void displayMetricsShouldNotHaveLotsOfZeros() throws Exception {
117e07511e1e736d9deba522ab8d58ffabcc67d274bRick Kawala & Wei Wu        Activity activity = new Activity();
118e07511e1e736d9deba522ab8d58ffabcc67d274bRick Kawala & Wei Wu        assertThat(activity.getResources().getDisplayMetrics().heightPixels, equalTo(800));
119e07511e1e736d9deba522ab8d58ffabcc67d274bRick Kawala & Wei Wu        assertThat(activity.getResources().getDisplayMetrics().widthPixels, equalTo(480));
120e07511e1e736d9deba522ab8d58ffabcc67d274bRick Kawala & Wei Wu    }
121b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin}
122