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");
}
}