1package com.xtremelabs.robolectric.res; 2 3import android.content.Context; 4import android.util.AttributeSet; 5import android.widget.ImageView; 6import com.xtremelabs.robolectric.R; 7import com.xtremelabs.robolectric.util.CustomView; 8import org.junit.Before; 9import org.junit.Test; 10 11import static com.xtremelabs.robolectric.util.TestUtil.getSystemResourceDir; 12import static com.xtremelabs.robolectric.util.TestUtil.resourceFile; 13import static org.hamcrest.CoreMatchers.equalTo; 14import static org.junit.Assert.assertThat; 15 16public class AttrResourceLoaderTest { 17 private AttrResourceLoader attrResourceLoader; 18 19 @Before 20 public void setUp() throws Exception { 21 ResourceExtractor resourceExtractor = new ResourceExtractor(); 22 resourceExtractor.addLocalRClass(R.class); 23 resourceExtractor.addSystemRClass(android.R.class); 24 attrResourceLoader = new AttrResourceLoader(resourceExtractor); 25 new DocumentLoader(attrResourceLoader).loadResourceXmlDir(resourceFile("res", "values")); 26 new DocumentLoader(attrResourceLoader).loadSystemResourceXmlDir(getSystemResourceDir("values")); 27 } 28 29 @Test 30 public void testAttributesAreResolved() throws Exception { 31 assertThat(attrResourceLoader.convertValueToEnum(CustomView.class, "xxx", "itemType", "integer"), equalTo("0")); 32 assertThat(attrResourceLoader.hasAttributeFor(CustomView.class, "xxx", "itemType"), equalTo(true)); 33 34 assertThat(attrResourceLoader.convertValueToEnum(CustomView.class, "xxx", "itemType", "string"), equalTo("1")); 35 assertThat(attrResourceLoader.hasAttributeFor(CustomView.class, "xxx", "otherItemType"), equalTo(false)); 36 } 37 38 @Test 39 public void testAttributesAreResolvedForSystemAttrs() throws Exception { 40 String expected = "" + ImageView.ScaleType.FIT_CENTER.ordinal(); 41 assertThat(attrResourceLoader.convertValueToEnum(ImageView.class, "android", "scaleType", "fitCenter"), equalTo(expected)); 42 assertThat(attrResourceLoader.hasAttributeFor(ImageView.class, "android", "scaleType"), equalTo(true)); 43 } 44 45 @Test 46 public void shouldResolveAttributesForSubClasses() throws Exception { 47 assertThat(attrResourceLoader.convertValueToEnum(SubCustomView.class, "xxx", "itemType", "integer"), equalTo("0")); 48 assertThat(attrResourceLoader.hasAttributeFor(SubCustomView.class, "xxx", "itemType"), equalTo(true)); 49 } 50 51 private class SubCustomView extends CustomView { 52 public SubCustomView(Context context, AttributeSet attrs) { 53 super(context, attrs); 54 } 55 } 56} 57