package com.xtremelabs.robolectric.res; import android.view.View; import com.xtremelabs.robolectric.R; import com.xtremelabs.robolectric.WithTestDefaultsRunner; import com.xtremelabs.robolectric.tester.android.util.TestAttributeSet; import com.xtremelabs.robolectric.util.CustomView; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import java.util.HashMap; import static com.xtremelabs.robolectric.util.TestUtil.resourceFile; import static junit.framework.Assert.assertEquals; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.MatcherAssert.assertThat; @RunWith(WithTestDefaultsRunner.class) public class TestAttributeSetTest { private HashMap attributes; private ResourceExtractor resourceExtractor; @Before public void setUp() throws Exception { attributes = new HashMap(); resourceExtractor = new ResourceExtractor(); resourceExtractor.addLocalRClass(R.class); resourceExtractor.addSystemRClass(android.R.class); } @Test public void getSystemAttributeResourceValue_shouldReturnTheResourceValue() throws Exception { attributes.put("android:id", "@android:id/text1"); TestAttributeSet testAttributeSet = new TestAttributeSet(attributes, resourceExtractor, null, null, false); assertThat(testAttributeSet.getAttributeResourceValue("android", "id", 0), equalTo(android.R.id.text1)); } @Test public void getSystemAttributeResourceValue_shouldNotReturnTheResourceValueIfNameSpaceDoesNotMatch() throws Exception { attributes.put("id", "@id/text1"); TestAttributeSet testAttributeSet = new TestAttributeSet(attributes, resourceExtractor, null, null, false); assertEquals(0, testAttributeSet.getAttributeResourceValue("android", "id", 0)); } @Test public void getSystemAttributeResourceValue_shouldReturnDefaultValueForNullResourceId() throws Exception { attributes.put("id", "@null"); TestAttributeSet testAttributeSet = new TestAttributeSet(attributes, resourceExtractor, null, null, false); assertEquals(0, testAttributeSet.getAttributeResourceValue("com.some.namespace", "id", 0)); } @Test public void shouldCopeWithDefiningSystemIds() throws Exception { attributes.put("android:id", "@+id/text1"); TestAttributeSet testAttributeSet = new TestAttributeSet(attributes, resourceExtractor, null, null, true); assertThat(testAttributeSet.getAttributeResourceValue("android", "id", 0), equalTo(android.R.id.text1)); } @Test public void shouldCopeWithDefiningLocalIds() throws Exception { attributes.put("android:id", "@+id/text1"); TestAttributeSet testAttributeSet = new TestAttributeSet(attributes, resourceExtractor, null, null, false); assertThat(testAttributeSet.getAttributeResourceValue("android", "id", 0), equalTo(R.id.text1)); } @Test public void getAttributeResourceValue_shouldReturnTheResourceValue() throws Exception { attributes.put("message", "@string/howdy"); TestAttributeSet testAttributeSet = new TestAttributeSet(attributes, resourceExtractor, null, null, false); assertThat(testAttributeSet.getAttributeResourceValue("com.some.namespace", "message", 0), equalTo(R.string.howdy)); } @Test public void getAttributeResourceValue_withNamespace_shouldReturnTheResourceValue() throws Exception { attributes.put("message", "@string/howdy"); TestAttributeSet testAttributeSet = new TestAttributeSet(attributes, resourceExtractor, null, null, false); assertThat(testAttributeSet.getAttributeResourceValue("com.some.namespace", "message", 0), equalTo(R.string.howdy)); } @Test public void getAttributeResourceValue_shouldReturnDefaultValueWhenNotInAttributeSet() throws Exception { TestAttributeSet testAttributeSet = new TestAttributeSet(attributes, resourceExtractor, null, null, false); assertThat(testAttributeSet.getAttributeResourceValue("com.some.namespace", "message", -1), equalTo(-1)); } @Test public void getAttributeBooleanValue_shouldGetBooleanValuesFromAttributes() throws Exception { attributes.put("isSugary", "true"); TestAttributeSet testAttributeSet = new TestAttributeSet(attributes, null, null, null, false); assertThat(testAttributeSet.getAttributeBooleanValue("com.some.namespace", "isSugary", false), equalTo(true)); } @Test public void getAttributeBooleanValue_withNamespace_shouldGetBooleanValuesFromAttributes() throws Exception { attributes.put("xxx:isSugary", "true"); TestAttributeSet testAttributeSet = new TestAttributeSet(attributes, null, null, null, false); assertThat(testAttributeSet.getAttributeBooleanValue("com.some.namespace", "isSugary", false), equalTo(true)); } @Test public void getAttributeBooleanValue_shouldReturnDefaultBooleanValueWhenNotInAttributeSet() throws Exception { TestAttributeSet testAttributeSet = new TestAttributeSet(attributes, null, null, null, false); assertThat(testAttributeSet.getAttributeBooleanValue("com.some.namespace", "isSugary", true), equalTo(true)); } @Test public void getAttributeValue_shouldReturnValueFromAttribute() throws Exception { attributes.put("isSugary", "oh heck yeah"); TestAttributeSet testAttributeSet = new TestAttributeSet(attributes, null, null, null, false); assertThat(testAttributeSet.getAttributeValue("com.some.namespace", "isSugary"), equalTo("oh heck yeah")); } @Test public void getAttributeIntValue_shouldReturnValueFromAttribute() throws Exception { attributes.put("sugarinessPercent", "100"); AttrResourceLoader resourceLoader = new AttrResourceLoader(resourceExtractor); TestAttributeSet testAttributeSet = new TestAttributeSet(attributes, null, resourceLoader, View.class, false); assertThat(testAttributeSet.getAttributeIntValue("some namespace", "sugarinessPercent", 0), equalTo(100)); } @Test public void getAttributeIntValue_shouldReturnEnumValuesForEnumAttributes() throws Exception { attributes.put("itemType", "string"); AttrResourceLoader attrResourceLoader = new AttrResourceLoader(resourceExtractor); new DocumentLoader(attrResourceLoader).loadResourceXmlDir(resourceFile("res", "values")); TestAttributeSet testAttributeSet = new TestAttributeSet(attributes, null, attrResourceLoader, CustomView.class, false); assertThat(testAttributeSet.getAttributeIntValue("some namespace", "itemType", 0), equalTo(1)); } @Test public void getAttributeIntValue_defaultConstructor() throws Exception { TestAttributeSet testAttributeSet = new TestAttributeSet(); testAttributeSet.put("sugarinessPercent", "100"); assertThat(testAttributeSet.getAttributeIntValue("some namespace", "sugarinessPercent", 0), equalTo(100)); } }