Home | History | Annotate | Download | only in res
      1 package com.xtremelabs.robolectric.res;
      2 
      3 import android.view.View;
      4 import com.xtremelabs.robolectric.R;
      5 import com.xtremelabs.robolectric.WithTestDefaultsRunner;
      6 import com.xtremelabs.robolectric.tester.android.util.TestAttributeSet;
      7 import com.xtremelabs.robolectric.util.CustomView;
      8 import org.junit.Before;
      9 import org.junit.Test;
     10 import org.junit.runner.RunWith;
     11 
     12 import java.util.HashMap;
     13 
     14 import static com.xtremelabs.robolectric.util.TestUtil.resourceFile;
     15 import static junit.framework.Assert.assertEquals;
     16 import static org.hamcrest.CoreMatchers.equalTo;
     17 import static org.hamcrest.MatcherAssert.assertThat;
     18 
     19 @RunWith(WithTestDefaultsRunner.class)
     20 public class TestAttributeSetTest {
     21     private HashMap<String, String> attributes;
     22     private ResourceExtractor resourceExtractor;
     23 
     24     @Before
     25     public void setUp() throws Exception {
     26         attributes = new HashMap<String, String>();
     27 
     28         resourceExtractor = new ResourceExtractor();
     29         resourceExtractor.addLocalRClass(R.class);
     30         resourceExtractor.addSystemRClass(android.R.class);
     31     }
     32 
     33     @Test
     34     public void getSystemAttributeResourceValue_shouldReturnTheResourceValue() throws Exception {
     35         attributes.put("android:id", "@android:id/text1");
     36         TestAttributeSet testAttributeSet = new TestAttributeSet(attributes, resourceExtractor, null, null, false);
     37         assertThat(testAttributeSet.getAttributeResourceValue("android", "id", 0), equalTo(android.R.id.text1));
     38     }
     39 
     40     @Test
     41     public void getSystemAttributeResourceValue_shouldNotReturnTheResourceValueIfNameSpaceDoesNotMatch() throws Exception {
     42         attributes.put("id", "@id/text1");
     43         TestAttributeSet testAttributeSet = new TestAttributeSet(attributes, resourceExtractor, null, null, false);
     44         assertEquals(0, testAttributeSet.getAttributeResourceValue("android", "id", 0));
     45     }
     46 
     47     @Test
     48     public void getSystemAttributeResourceValue_shouldReturnDefaultValueForNullResourceId() throws Exception {
     49         attributes.put("id", "@null");
     50         TestAttributeSet testAttributeSet = new TestAttributeSet(attributes, resourceExtractor, null, null, false);
     51         assertEquals(0, testAttributeSet.getAttributeResourceValue("com.some.namespace", "id", 0));
     52     }
     53 
     54     @Test
     55     public void shouldCopeWithDefiningSystemIds() throws Exception {
     56         attributes.put("android:id", "@+id/text1");
     57 
     58         TestAttributeSet testAttributeSet = new TestAttributeSet(attributes, resourceExtractor, null, null, true);
     59         assertThat(testAttributeSet.getAttributeResourceValue("android", "id", 0), equalTo(android.R.id.text1));
     60     }
     61 
     62     @Test
     63     public void shouldCopeWithDefiningLocalIds() throws Exception {
     64         attributes.put("android:id", "@+id/text1");
     65 
     66         TestAttributeSet testAttributeSet = new TestAttributeSet(attributes, resourceExtractor, null, null, false);
     67         assertThat(testAttributeSet.getAttributeResourceValue("android", "id", 0), equalTo(R.id.text1));
     68     }
     69 
     70     @Test
     71     public void getAttributeResourceValue_shouldReturnTheResourceValue() throws Exception {
     72         attributes.put("message", "@string/howdy");
     73 
     74         TestAttributeSet testAttributeSet = new TestAttributeSet(attributes, resourceExtractor, null, null, false);
     75         assertThat(testAttributeSet.getAttributeResourceValue("com.some.namespace", "message", 0), equalTo(R.string.howdy));
     76     }
     77 
     78     @Test
     79     public void getAttributeResourceValue_withNamespace_shouldReturnTheResourceValue() throws Exception {
     80         attributes.put("message", "@string/howdy");
     81 
     82         TestAttributeSet testAttributeSet = new TestAttributeSet(attributes, resourceExtractor, null, null, false);
     83         assertThat(testAttributeSet.getAttributeResourceValue("com.some.namespace", "message", 0), equalTo(R.string.howdy));
     84     }
     85 
     86     @Test
     87     public void getAttributeResourceValue_shouldReturnDefaultValueWhenNotInAttributeSet() throws Exception {
     88         TestAttributeSet testAttributeSet = new TestAttributeSet(attributes, resourceExtractor, null, null, false);
     89         assertThat(testAttributeSet.getAttributeResourceValue("com.some.namespace", "message", -1), equalTo(-1));
     90     }
     91 
     92     @Test
     93     public void getAttributeBooleanValue_shouldGetBooleanValuesFromAttributes() throws Exception {
     94         attributes.put("isSugary", "true");
     95 
     96         TestAttributeSet testAttributeSet = new TestAttributeSet(attributes, null, null, null, false);
     97         assertThat(testAttributeSet.getAttributeBooleanValue("com.some.namespace", "isSugary", false), equalTo(true));
     98     }
     99 
    100     @Test
    101     public void getAttributeBooleanValue_withNamespace_shouldGetBooleanValuesFromAttributes() throws Exception {
    102         attributes.put("xxx:isSugary", "true");
    103 
    104         TestAttributeSet testAttributeSet = new TestAttributeSet(attributes, null, null, null, false);
    105         assertThat(testAttributeSet.getAttributeBooleanValue("com.some.namespace", "isSugary", false), equalTo(true));
    106     }
    107 
    108     @Test
    109     public void getAttributeBooleanValue_shouldReturnDefaultBooleanValueWhenNotInAttributeSet() throws Exception {
    110         TestAttributeSet testAttributeSet = new TestAttributeSet(attributes, null, null, null, false);
    111         assertThat(testAttributeSet.getAttributeBooleanValue("com.some.namespace", "isSugary", true), equalTo(true));
    112     }
    113 
    114     @Test
    115     public void getAttributeValue_shouldReturnValueFromAttribute() throws Exception {
    116         attributes.put("isSugary", "oh heck yeah");
    117 
    118         TestAttributeSet testAttributeSet = new TestAttributeSet(attributes, null, null, null, false);
    119         assertThat(testAttributeSet.getAttributeValue("com.some.namespace", "isSugary"), equalTo("oh heck yeah"));
    120     }
    121 
    122     @Test
    123     public void getAttributeIntValue_shouldReturnValueFromAttribute() throws Exception {
    124         attributes.put("sugarinessPercent", "100");
    125 
    126         AttrResourceLoader resourceLoader = new AttrResourceLoader(resourceExtractor);
    127         TestAttributeSet testAttributeSet = new TestAttributeSet(attributes, null, resourceLoader, View.class, false);
    128         assertThat(testAttributeSet.getAttributeIntValue("some namespace", "sugarinessPercent", 0), equalTo(100));
    129     }
    130 
    131     @Test
    132     public void getAttributeIntValue_shouldReturnEnumValuesForEnumAttributes() throws Exception {
    133         attributes.put("itemType", "string");
    134 
    135         AttrResourceLoader attrResourceLoader = new AttrResourceLoader(resourceExtractor);
    136         new DocumentLoader(attrResourceLoader).loadResourceXmlDir(resourceFile("res", "values"));
    137         TestAttributeSet testAttributeSet = new TestAttributeSet(attributes, null, attrResourceLoader, CustomView.class, false);
    138         assertThat(testAttributeSet.getAttributeIntValue("some namespace", "itemType", 0), equalTo(1));
    139     }
    140 
    141     @Test
    142     public void getAttributeIntValue_defaultConstructor() throws Exception {
    143         TestAttributeSet testAttributeSet = new TestAttributeSet();
    144         testAttributeSet.put("sugarinessPercent", "100");
    145 
    146         assertThat(testAttributeSet.getAttributeIntValue("some namespace", "sugarinessPercent", 0), equalTo(100));
    147     }
    148 }
    149