package org.robolectric.res; import org.junit.Before; import org.junit.Ignore; import org.junit.Test; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.TreeMap; import java.util.TreeSet; import static android.os.Build.VERSION_CODES.N_MR1; import static org.assertj.core.api.Assertions.assertThat; import static org.robolectric.util.TestUtil.gradleAppResources; import static org.robolectric.util.TestUtil.sdkResources; import static org.robolectric.util.TestUtil.testResources; public class ResourceParserTest { private ResourceTable resourceTable; private ResourceTable gradleResourceTable; @Before public void setUp() { ResourceTableFactory resourceTableFactory = new ResourceTableFactory(); resourceTable = resourceTableFactory.newResourceTable("org.robolectric", testResources()); gradleResourceTable = resourceTableFactory.newResourceTable("org.robolectric.gradleapp", gradleAppResources()); } @Test public void shouldLoadDrawableXmlResources() throws Exception { TypedResource value = resourceTable.getValue(new ResName("org.robolectric", "drawable", "rainbow"), ""); assertThat(value).isNotNull(); assertThat(value.getResType()).isEqualTo(ResType.DRAWABLE); assertThat(value.isFile()).isTrue(); assertThat((String) value.getData()).contains("rainbow.xml"); } @Test public void shouldLoadDrawableBitmapResources() throws Exception { TypedResource value = resourceTable.getValue(new ResName("org.robolectric", "drawable", "an_image"), ""); assertThat(value).isNotNull(); assertThat(value.getResType()).isEqualTo(ResType.DRAWABLE); assertThat(value.isFile()).isTrue(); assertThat((String) value.getData()).contains("an_image.png"); } @Test public void shouldLoadDrawableBitmapResourcesDefinedByItemTag() throws Exception { TypedResource value = resourceTable.getValue(new ResName("org.robolectric", "drawable", "example_item_drawable"), ""); assertThat(value).isNotNull(); assertThat(value.getResType()).isEqualTo(ResType.DRAWABLE); assertThat(value.isReference()).isTrue(); assertThat((String) value.getData()).isEqualTo("@drawable/an_image"); } @Test public void shouldLoadIdResourcesDefinedByItemTag() throws Exception { TypedResource value = resourceTable.getValue(new ResName("org.robolectric", "id", "id_declared_in_item_tag"), ""); assertThat(value).isNotNull(); assertThat(value.getResType()).isEqualTo(ResType.CHAR_SEQUENCE); assertThat(value.isReference()).isFalse(); assertThat(value.asString()).isEqualTo(""); assertThat((String) value.getData()).isEqualTo(""); } @Test public void whenIdItemsHaveStringContent_shouldLoadIdResourcesDefinedByItemTag() throws Exception { TypedResource value2 = resourceTable.getValue(new ResName("org.robolectric", "id", "id_with_string_value"), ""); assertThat(value2.asString()).isEqualTo("string value"); } @Test public void shouldLoadResourcesFromGradleOutputDirectories() { TypedResource value = gradleResourceTable.getValue(new ResName("org.robolectric.gradleapp", "string", "from_gradle_output"), ""); assertThat(value).describedAs("String from gradle output is not loaded").isNotNull(); assertThat(value.asString()).isEqualTo("string example taken from gradle output directory"); } @Test public void shouldLoadDimenResourcesFromGradleOutputDirectoriesDefinedByDimenTag() { TypedResource value = gradleResourceTable.getValue(new ResName("org.robolectric.gradleapp", "dimen", "example_dimen"), ""); assertThat(value).describedAs("Dimen from gradle output is not loaded").isNotNull(); assertThat(value.asString()).isEqualTo("8dp"); } @Test public void shouldLoadDimenResourcesFromGradleOutputDirectoriesDefinedByItemTag() { TypedResource value = gradleResourceTable.getValue(new ResName("org.robolectric.gradleapp", "dimen", "example_item_dimen"), ""); assertThat(value).describedAs("Item dimen from gradle output is not loaded").isNotNull(); assertThat(value.asString()).isEqualTo("3.14"); } @Test public void shouldLoadStringResourcesFromGradleOutputDirectoriesDefinedByItemTag() { TypedResource value = gradleResourceTable.getValue(new ResName("org.robolectric.gradleapp", "string", "item_from_gradle_output"), ""); assertThat(value).describedAs("Item string from gradle output is not loaded").isNotNull(); assertThat(value.asString()).isEqualTo("3.14"); } @Test public void shouldLoadColorResourcesFromGradleOutputDirectoriesDefinedByColorTag() { TypedResource value = gradleResourceTable.getValue(new ResName("org.robolectric.gradleapp", "color", "example_color"), ""); assertThat(value).describedAs("Color from gradle output is not loaded").isNotNull(); assertThat(value.asString()).isEqualTo("#00FF00FF"); } @Test public void shouldLoadColorResourcesFromGradleOutputDirectoriesDefinedByItemTag() { TypedResource value = gradleResourceTable.getValue(new ResName("org.robolectric.gradleapp", "color", "example_item_color"), ""); assertThat(value).describedAs("Item color from gradle output is not loaded").isNotNull(); assertThat(value.asString()).isEqualTo("1.0"); } }