blob: e6a240ae00a858dd1666d0eae4a8841580fb6c20 [file] [log] [blame]
package com.xtremelabs.robolectric.shadows;
import static com.xtremelabs.robolectric.Robolectric.shadowOf;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.instanceOf;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.CoreMatchers.notNullValue;
import static org.junit.Assert.assertThat;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import android.app.Activity;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.graphics.drawable.AnimationDrawable;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.NinePatchDrawable;
import com.xtremelabs.robolectric.R;
import com.xtremelabs.robolectric.Robolectric;
import com.xtremelabs.robolectric.WithTestDefaultsRunner;
import com.xtremelabs.robolectric.RobolectricTestRunnerTest.RunnerForTesting;
import com.xtremelabs.robolectric.annotation.Values;
import com.xtremelabs.robolectric.util.TestR;
@RunWith(WithTestDefaultsRunner.class)
public class ResourcesTest {
private Resources resources;
private ShadowContextWrapper shadowApp;
@Before
public void setup() {
resources = new Activity().getResources();
shadowApp = shadowOf( Robolectric.application );
}
@Test(expected = Resources.NotFoundException.class)
public void getStringArray_shouldThrowExceptionIfNotFound() throws Exception {
resources.getStringArray(-1);
}
@Test
public void testConfiguration() {
Configuration configuration = resources.getConfiguration();
assertThat(configuration, notNullValue());
assertThat(configuration.locale, notNullValue());
}
@Test
public void testConfigurationReturnsTheSameInstance() {
assertThat(resources.getConfiguration(), is(resources.getConfiguration()));
}
@Test
public void testNewTheme() {
assertThat(resources.newTheme(), notNullValue());
}
/**
* a missing R.class will result in an BitmapDrawable getting returned
* by default
*/
@Test
public void testGetDrawableNullRClass() {
shadowApp.getResourceLoader().setLocalRClass( null );
assertThat( resources.getDrawable( TestR.anim.test_anim_1 ), instanceOf( BitmapDrawable.class ) );
}
/**
* given an R.anim.id value, will return an AnimationDrawable
*/
@Test
public void testGetAnimationDrawable() {
shadowApp.getResourceLoader().setLocalRClass( TestR.class );
assertThat( resources.getDrawable( TestR.anim.test_anim_1 ), instanceOf( AnimationDrawable.class ) );
}
@Test
@Values( locale="fr" )
public void testGetResourceFromSpecificLocale(){
String hello=resources.getString( R.string.hello );
assertThat( hello, equalTo( "Bonjour" ) );
}
/**
* given an R.color.id value, will return a ColorDrawable
*/
@Test
public void testGetColorDrawable() {
shadowApp.getResourceLoader().setLocalRClass( TestR.class );
assertThat( resources.getDrawable( TestR.color.test_color_1 ), instanceOf( ColorDrawable.class ) );
}
/**
* given an R.drawable.id value, will return a BitmapDrawable
*/
@Test
public void testGetBitmapDrawable() {
shadowApp.getResourceLoader().setLocalRClass( TestR.class );
assertThat( resources.getDrawable( TestR.drawable.test_drawable_1 ), instanceOf( BitmapDrawable.class ) );
}
/**
* given an R.drawable.id value, will return a NinePatchDrawable for .9.png file
*/
@Test
public void testGetNinePatchDrawable() {
assertThat( resources.getDrawable( R.drawable.nine_patch_drawable ), instanceOf( NinePatchDrawable.class ) );
}
/**
* given a value that doesn't in one of R's inner classes, will return a BitmapDrawable
*/
@Test
public void testGetBitmapDrawableForUnknownId() {
shadowApp.getResourceLoader().setLocalRClass( TestR.class );
assertThat( resources.getDrawable( Integer.MAX_VALUE ), instanceOf( BitmapDrawable.class ) );
}
@Test
public void testDensity() {
Activity activity = new Activity();
assertThat(activity.getResources().getDisplayMetrics().density, equalTo(1f));
shadowOf(activity.getResources()).setDensity(1.5f);
assertThat(activity.getResources().getDisplayMetrics().density, equalTo(1.5f));
Activity anotherActivity = new Activity();
assertThat(anotherActivity.getResources().getDisplayMetrics().density, equalTo(1.5f));
}
@Test
public void displayMetricsShouldNotHaveLotsOfZeros() throws Exception {
Activity activity = new Activity();
assertThat(activity.getResources().getDisplayMetrics().heightPixels, equalTo(800));
assertThat(activity.getResources().getDisplayMetrics().widthPixels, equalTo(480));
}
}