133873d2b41a5cd2597b20a4e88eb8942944c0f23Tyler Schultzpackage com.xtremelabs.robolectric.shadows;
2b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin
3dd40f718cf785a56e63c0685feeb73d266c13e3fWenhui Yaoimport static com.xtremelabs.robolectric.Robolectric.shadowOf;
4dd40f718cf785a56e63c0685feeb73d266c13e3fWenhui Yaoimport static org.hamcrest.CoreMatchers.equalTo;
5dd40f718cf785a56e63c0685feeb73d266c13e3fWenhui Yaoimport static org.hamcrest.CoreMatchers.instanceOf;
6dd40f718cf785a56e63c0685feeb73d266c13e3fWenhui Yaoimport static org.hamcrest.CoreMatchers.is;
7dd40f718cf785a56e63c0685feeb73d266c13e3fWenhui Yaoimport static org.hamcrest.CoreMatchers.notNullValue;
8dd40f718cf785a56e63c0685feeb73d266c13e3fWenhui Yaoimport static org.junit.Assert.assertThat;
9dd40f718cf785a56e63c0685feeb73d266c13e3fWenhui Yao
10dd40f718cf785a56e63c0685feeb73d266c13e3fWenhui Yaoimport org.junit.Before;
11dd40f718cf785a56e63c0685feeb73d266c13e3fWenhui Yaoimport org.junit.Test;
12dd40f718cf785a56e63c0685feeb73d266c13e3fWenhui Yaoimport org.junit.runner.RunWith;
13dd40f718cf785a56e63c0685feeb73d266c13e3fWenhui Yao
14b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwinimport android.app.Activity;
1585af7906879a68c99b1878dac22605fa32454f3fRich Humphreyimport android.content.res.Configuration;
16b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwinimport android.content.res.Resources;
173cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowhamimport android.graphics.drawable.AnimationDrawable;
183cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowhamimport android.graphics.drawable.BitmapDrawable;
193cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowhamimport android.graphics.drawable.ColorDrawable;
20ea277a780371ce94fb402f7853daefc3a8580f0cMichael Portuesiimport android.graphics.drawable.NinePatchDrawable;
21ea277a780371ce94fb402f7853daefc3a8580f0cMichael Portuesi
22dd40f718cf785a56e63c0685feeb73d266c13e3fWenhui Yaoimport com.xtremelabs.robolectric.R;
233cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowhamimport com.xtremelabs.robolectric.Robolectric;
243cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowhamimport com.xtremelabs.robolectric.WithTestDefaultsRunner;
25dd40f718cf785a56e63c0685feeb73d266c13e3fWenhui Yaoimport com.xtremelabs.robolectric.RobolectricTestRunnerTest.RunnerForTesting;
26dd40f718cf785a56e63c0685feeb73d266c13e3fWenhui Yaoimport com.xtremelabs.robolectric.annotation.Values;
273cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowhamimport com.xtremelabs.robolectric.util.TestR;
287f306c7c98e32f85115ce57780a6752477b8faadadriancowham
29b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin
3007257335f88da163910cc0bd039e6163edc38580Gregg Van Hove & Phil Goodwin@RunWith(WithTestDefaultsRunner.class)
31b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwinpublic class ResourcesTest {
3240c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams
333cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham	private Resources resources;
343cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham	private ShadowContextWrapper shadowApp;
353cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham
363cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham	@Before
373cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham	public void setup() {
383cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham		resources = new Activity().getResources();
397f306c7c98e32f85115ce57780a6752477b8faadadriancowham		shadowApp = shadowOf( Robolectric.application );
403cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham	}
413cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham
42b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin    @Test(expected = Resources.NotFoundException.class)
43b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin    public void getStringArray_shouldThrowExceptionIfNotFound() throws Exception {
443cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham        resources.getStringArray(-1);
45b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin    }
4640c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams
47018b9355a9aba61f0c47bc438e2aedd63932a05aMichael Portuesi    @Test
48018b9355a9aba61f0c47bc438e2aedd63932a05aMichael Portuesi    public void testConfiguration() {
493cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham        Configuration configuration = resources.getConfiguration();
5085af7906879a68c99b1878dac22605fa32454f3fRich Humphrey        assertThat(configuration, notNullValue());
5185af7906879a68c99b1878dac22605fa32454f3fRich Humphrey        assertThat(configuration.locale, notNullValue());
52018b9355a9aba61f0c47bc438e2aedd63932a05aMichael Portuesi    }
53ec63d3ad017965dc341bd0ce15f07c65f35b4a90Christian Williams
54ec63d3ad017965dc341bd0ce15f07c65f35b4a90Christian Williams    @Test
559befb81f62e506f2afee9bf4bc4cd2da5c4f9f20Joe Moore and Tyler Schultz    public void testConfigurationReturnsTheSameInstance() {
569befb81f62e506f2afee9bf4bc4cd2da5c4f9f20Joe Moore and Tyler Schultz        assertThat(resources.getConfiguration(), is(resources.getConfiguration()));
57018b9355a9aba61f0c47bc438e2aedd63932a05aMichael Portuesi    }
58ec63d3ad017965dc341bd0ce15f07c65f35b4a90Christian Williams
59ec63d3ad017965dc341bd0ce15f07c65f35b4a90Christian Williams    @Test
60ec63d3ad017965dc341bd0ce15f07c65f35b4a90Christian Williams    public void testNewTheme() {
613cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham        assertThat(resources.newTheme(), notNullValue());
623cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham    }
633cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham
643cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham    /**
653cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham     * a missing R.class will result in an BitmapDrawable getting returned
663cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham     * by default
673cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham     */
683cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham    @Test
693cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham    public void testGetDrawableNullRClass() {
703cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham    	shadowApp.getResourceLoader().setLocalRClass( null );
713cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham    	assertThat( resources.getDrawable( TestR.anim.test_anim_1 ), instanceOf( BitmapDrawable.class ) );
723cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham    }
733cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham
743cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham    /**
753cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham     * given an R.anim.id value, will return an AnimationDrawable
763cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham     */
773cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham    @Test
783cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham    public void testGetAnimationDrawable() {
793cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham    	shadowApp.getResourceLoader().setLocalRClass( TestR.class );
803cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham    	assertThat( resources.getDrawable( TestR.anim.test_anim_1 ), instanceOf( AnimationDrawable.class ) );
813cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham    }
823cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham
83dd40f718cf785a56e63c0685feeb73d266c13e3fWenhui Yao    @Test
84dd40f718cf785a56e63c0685feeb73d266c13e3fWenhui Yao    @Values( locale="fr" )
85dd40f718cf785a56e63c0685feeb73d266c13e3fWenhui Yao    public void testGetResourceFromSpecificLocale(){
86dd40f718cf785a56e63c0685feeb73d266c13e3fWenhui Yao    	String hello=resources.getString( R.string.hello );
87dd40f718cf785a56e63c0685feeb73d266c13e3fWenhui Yao    	assertThat( hello, equalTo( "Bonjour" ) );
88dd40f718cf785a56e63c0685feeb73d266c13e3fWenhui Yao    }
89dd40f718cf785a56e63c0685feeb73d266c13e3fWenhui Yao
903cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham    /**
913cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham     * given an R.color.id value, will return a ColorDrawable
923cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham     */
933cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham    @Test
943cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham    public void testGetColorDrawable() {
953cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham    	shadowApp.getResourceLoader().setLocalRClass( TestR.class );
963cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham    	assertThat( resources.getDrawable( TestR.color.test_color_1 ), instanceOf( ColorDrawable.class ) );
973cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham    }
983cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham
993cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham    /**
1003cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham     * given an R.drawable.id value, will return a BitmapDrawable
1013cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham     */
1023cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham    @Test
1033cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham    public void testGetBitmapDrawable() {
1043cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham    	shadowApp.getResourceLoader().setLocalRClass( TestR.class );
1053cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham    	assertThat( resources.getDrawable( TestR.drawable.test_drawable_1 ), instanceOf( BitmapDrawable.class ) );
1063cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham    }
1073cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham
1083cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham    /**
109ea277a780371ce94fb402f7853daefc3a8580f0cMichael Portuesi     * given an R.drawable.id value, will return a NinePatchDrawable for .9.png file
110ea277a780371ce94fb402f7853daefc3a8580f0cMichael Portuesi     */
111ea277a780371ce94fb402f7853daefc3a8580f0cMichael Portuesi    @Test
112ea277a780371ce94fb402f7853daefc3a8580f0cMichael Portuesi    public void testGetNinePatchDrawable() {
113ea277a780371ce94fb402f7853daefc3a8580f0cMichael Portuesi    	assertThat( resources.getDrawable( R.drawable.nine_patch_drawable ), instanceOf( NinePatchDrawable.class ) );
114ea277a780371ce94fb402f7853daefc3a8580f0cMichael Portuesi    }
115ea277a780371ce94fb402f7853daefc3a8580f0cMichael Portuesi
116ea277a780371ce94fb402f7853daefc3a8580f0cMichael Portuesi    /**
1173cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham     * given a value that doesn't in one of R's inner classes, will return a BitmapDrawable
1183cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham     */
1193cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham    @Test
1203cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham    public void testGetBitmapDrawableForUnknownId() {
1213cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham    	shadowApp.getResourceLoader().setLocalRClass( TestR.class );
1223cebac0de0691c6f27dbdd441cf78cbf8623eddfadriancowham    	assertThat( resources.getDrawable( Integer.MAX_VALUE ), instanceOf( BitmapDrawable.class ) );
123ec63d3ad017965dc341bd0ce15f07c65f35b4a90Christian Williams    }
124e02d2608f3fa739dd328c6b44a2122b9dfb73bedLowell Kirsh & Ryan Richard    @Test
125e02d2608f3fa739dd328c6b44a2122b9dfb73bedLowell Kirsh & Ryan Richard    public void testDensity() {
126e02d2608f3fa739dd328c6b44a2122b9dfb73bedLowell Kirsh & Ryan Richard        Activity activity = new Activity();
127e02d2608f3fa739dd328c6b44a2122b9dfb73bedLowell Kirsh & Ryan Richard        assertThat(activity.getResources().getDisplayMetrics().density, equalTo(1f));
128e02d2608f3fa739dd328c6b44a2122b9dfb73bedLowell Kirsh & Ryan Richard
129e02d2608f3fa739dd328c6b44a2122b9dfb73bedLowell Kirsh & Ryan Richard        shadowOf(activity.getResources()).setDensity(1.5f);
130e02d2608f3fa739dd328c6b44a2122b9dfb73bedLowell Kirsh & Ryan Richard        assertThat(activity.getResources().getDisplayMetrics().density, equalTo(1.5f));
131e02d2608f3fa739dd328c6b44a2122b9dfb73bedLowell Kirsh & Ryan Richard
132e02d2608f3fa739dd328c6b44a2122b9dfb73bedLowell Kirsh & Ryan Richard        Activity anotherActivity = new Activity();
133e02d2608f3fa739dd328c6b44a2122b9dfb73bedLowell Kirsh & Ryan Richard        assertThat(anotherActivity.getResources().getDisplayMetrics().density, equalTo(1.5f));
134e02d2608f3fa739dd328c6b44a2122b9dfb73bedLowell Kirsh & Ryan Richard    }
135e07511e1e736d9deba522ab8d58ffabcc67d274bRick Kawala & Wei Wu
136e07511e1e736d9deba522ab8d58ffabcc67d274bRick Kawala & Wei Wu    @Test
137e07511e1e736d9deba522ab8d58ffabcc67d274bRick Kawala & Wei Wu    public void displayMetricsShouldNotHaveLotsOfZeros() throws Exception {
138e07511e1e736d9deba522ab8d58ffabcc67d274bRick Kawala & Wei Wu        Activity activity = new Activity();
139e07511e1e736d9deba522ab8d58ffabcc67d274bRick Kawala & Wei Wu        assertThat(activity.getResources().getDisplayMetrics().heightPixels, equalTo(800));
140e07511e1e736d9deba522ab8d58ffabcc67d274bRick Kawala & Wei Wu        assertThat(activity.getResources().getDisplayMetrics().widthPixels, equalTo(480));
141e07511e1e736d9deba522ab8d58ffabcc67d274bRick Kawala & Wei Wu    }
142dd40f718cf785a56e63c0685feeb73d266c13e3fWenhui Yao
143dd40f718cf785a56e63c0685feeb73d266c13e3fWenhui Yao
144b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin}
145