package org.robolectric.res;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
import static java.util.Arrays.asList;
import static org.assertj.core.api.Assertions.assertThat;
@RunWith(JUnit4.class)
public class StyleDataTest {
private final ResName androidSearchViewStyle = new ResName("android", "attr", "searchViewStyle");
private final ResName myLibSearchViewStyle = new ResName("library.resource", "attr", "searchViewStyle");
private final ResName myAppSearchViewStyle = new ResName("my.app", "attr", "searchViewStyle");
@Test
public void getAttrValue_willFindLibraryResourcesWithSameName() {
StyleData styleData = new StyleData("library.resource", "Theme_MyApp", "Theme_Material", asList(
new AttributeResource(myLibSearchViewStyle, "lib_value", "library.resource")
));
assertThat(styleData.getAttrValue(myAppSearchViewStyle).value).isEqualTo("lib_value");
assertThat(styleData.getAttrValue(myLibSearchViewStyle).value).isEqualTo("lib_value");
assertThat(styleData.getAttrValue(androidSearchViewStyle)).isNull();
}
@Test
public void getAttrValue_willNotFindFrameworkResourcesWithSameName() {
StyleData styleData = new StyleData("android", "Theme_Material", "Theme", asList(
new AttributeResource(androidSearchViewStyle, "android_value", "android")
));
assertThat(styleData.getAttrValue(androidSearchViewStyle).value).isEqualTo("android_value");
assertThat(styleData.getAttrValue(myAppSearchViewStyle)).isNull();
assertThat(styleData.getAttrValue(myLibSearchViewStyle)).isNull();
}
@Test
public void getAttrValue_willChooseBetweenAmbiguousAttributes() {
StyleData styleData = new StyleData("android", "Theme_Material", "Theme", asList(
new AttributeResource(myLibSearchViewStyle, "lib_value", "library.resource"),
new AttributeResource(androidSearchViewStyle, "android_value", "android")
));
assertThat(styleData.getAttrValue(androidSearchViewStyle).value).isEqualTo("android_value");
assertThat(styleData.getAttrValue(myLibSearchViewStyle).value).isEqualTo("lib_value");
// todo: any packageNames that aren't 'android' should be treated as equivalent
// assertThat(styleData.getAttrValue(myAppSearchViewStyle).value).isEqualTo("lib_value");
}
}