1package org.robolectric.res;
2
3import static org.assertj.core.api.Assertions.assertThat;
4import static org.robolectric.util.TestUtil.gradleAppResources;
5import static org.robolectric.util.TestUtil.testResources;
6
7import org.junit.Before;
8import org.junit.Test;
9import org.junit.runner.RunWith;
10import org.junit.runners.JUnit4;
11import org.robolectric.res.android.ResTable_config;
12
13@RunWith(JUnit4.class)
14public class ResourceParserTest {
15
16  private ResourceTable resourceTable;
17  private ResourceTable gradleResourceTable;
18  private ResTable_config config;
19
20  @Before
21  public void setUp() {
22    ResourceTableFactory resourceTableFactory = new ResourceTableFactory();
23    resourceTable = resourceTableFactory.newResourceTable("org.robolectric", testResources());
24    gradleResourceTable = resourceTableFactory.newResourceTable("org.robolectric.gradleapp", gradleAppResources());
25    config = new ResTable_config();
26  }
27
28
29  @Test
30  public void shouldLoadDrawableXmlResources() throws Exception {
31    TypedResource value = resourceTable.getValue(new ResName("org.robolectric", "drawable", "rainbow"), config);
32    assertThat(value).isNotNull();
33    assertThat(value.getResType()).isEqualTo(ResType.DRAWABLE);
34    assertThat(value.isFile()).isTrue();
35    assertThat((String) value.getData()).contains("rainbow.xml");
36  }
37
38  @Test
39  public void shouldLoadDrawableBitmapResources() throws Exception {
40    TypedResource value = resourceTable.getValue(new ResName("org.robolectric", "drawable", "an_image"), config);
41    assertThat(value).isNotNull();
42    assertThat(value.getResType()).isEqualTo(ResType.DRAWABLE);
43    assertThat(value.isFile()).isTrue();
44    assertThat((String) value.getData()).contains("an_image.png");
45  }
46
47  @Test
48  public void shouldLoadDrawableBitmapResourcesDefinedByItemTag() throws Exception {
49    TypedResource value = resourceTable.getValue(new ResName("org.robolectric", "drawable", "example_item_drawable"), config);
50    assertThat(value).isNotNull();
51    assertThat(value.getResType()).isEqualTo(ResType.DRAWABLE);
52    assertThat(value.isReference()).isTrue();
53    assertThat((String) value.getData()).isEqualTo("@drawable/an_image");
54  }
55
56  @Test
57  public void shouldLoadIdResourcesDefinedByItemTag() throws Exception {
58    TypedResource value = resourceTable.getValue(new ResName("org.robolectric", "id", "id_declared_in_item_tag"), config);
59    assertThat(value).isNotNull();
60    assertThat(value.getResType()).isEqualTo(ResType.CHAR_SEQUENCE);
61    assertThat(value.isReference()).isFalse();
62    assertThat(value.asString()).isEqualTo("");
63    assertThat((String) value.getData()).isEqualTo("");
64  }
65
66  @Test
67  public void whenIdItemsHaveStringContent_shouldLoadIdResourcesDefinedByItemTag() throws Exception {
68    TypedResource value2 = resourceTable.getValue(new ResName("org.robolectric", "id", "id_with_string_value"), config);
69    assertThat(value2.asString()).isEqualTo("string value");
70  }
71
72  @Test
73  public void shouldLoadResourcesFromGradleOutputDirectories() {
74    TypedResource value = gradleResourceTable.getValue(new ResName("org.robolectric.gradleapp", "string", "from_gradle_output"), config);
75    assertThat(value).describedAs("String from gradle output is not loaded").isNotNull();
76    assertThat(value.asString()).isEqualTo("string example taken from gradle output directory");
77  }
78
79  @Test
80  public void shouldLoadDimenResourcesFromGradleOutputDirectoriesDefinedByDimenTag() {
81    TypedResource value = gradleResourceTable.getValue(new ResName("org.robolectric.gradleapp", "dimen", "example_dimen"), config);
82    assertThat(value).describedAs("Dimen from gradle output is not loaded").isNotNull();
83    assertThat(value.asString()).isEqualTo("8dp");
84  }
85
86  @Test
87  public void shouldLoadDimenResourcesFromGradleOutputDirectoriesDefinedByItemTag() {
88    TypedResource value = gradleResourceTable.getValue(new ResName("org.robolectric.gradleapp", "dimen", "example_item_dimen"), config);
89    assertThat(value).describedAs("Item dimen from gradle output is not loaded").isNotNull();
90    assertThat(value.asString()).isEqualTo("3.14");
91  }
92
93  @Test
94  public void shouldLoadStringResourcesFromGradleOutputDirectoriesDefinedByItemTag() {
95    TypedResource value = gradleResourceTable.getValue(new ResName("org.robolectric.gradleapp", "string", "item_from_gradle_output"), config);
96    assertThat(value).describedAs("Item string from gradle output is not loaded").isNotNull();
97    assertThat(value.asString()).isEqualTo("3.14");
98  }
99
100  @Test
101  public void shouldLoadColorResourcesFromGradleOutputDirectoriesDefinedByColorTag() {
102    TypedResource value = gradleResourceTable.getValue(new ResName("org.robolectric.gradleapp", "color", "example_color"), config);
103    assertThat(value).describedAs("Color from gradle output is not loaded").isNotNull();
104    assertThat(value.asString()).isEqualTo("#00FF00FF");
105  }
106
107  @Test
108  public void shouldLoadColorResourcesFromGradleOutputDirectoriesDefinedByItemTag() {
109    TypedResource value = gradleResourceTable.getValue(new ResName("org.robolectric.gradleapp", "color", "example_item_color"), config);
110    assertThat(value).describedAs("Item color from gradle output is not loaded").isNotNull();
111    assertThat(value.asString()).isEqualTo("1.0");
112  }
113}
114