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