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