diff options
author | Jonathan Gerrish <jonathan@indiekid.org> | 2017-10-31 15:41:48 -0700 |
---|---|---|
committer | Jonathan Gerrish <jonathan@indiekid.org> | 2017-10-31 15:41:48 -0700 |
commit | 30f1e4305dccc3d594dca060f4f2f253ea57a79b (patch) | |
tree | 0198c342a70f7ed0534483db13dc08f418948ae3 | |
parent | ac512ca254dd14e1e4382ce6109444e5580d9b61 (diff) | |
download | robolectric-shadows-30f1e4305dccc3d594dca060f4f2f253ea57a79b.tar.gz |
Support Mipmap resource reference resolution.
This bug was exposed when switching to framework manifest parsing code
which resolves these references. Our own hand crafted code did not do
this.
5 files changed, 27 insertions, 1 deletions
diff --git a/resources/src/main/java/org/robolectric/res/ResourceTableFactory.java b/resources/src/main/java/org/robolectric/res/ResourceTableFactory.java index 87d726e4a..033e22c38 100644 --- a/resources/src/main/java/org/robolectric/res/ResourceTableFactory.java +++ b/resources/src/main/java/org/robolectric/res/ResourceTableFactory.java @@ -113,9 +113,11 @@ public class ResourceTableFactory { .addHandler("bool", new StaxValueLoader(resourceTable, "bool", ResType.BOOLEAN)) .addHandler("item[@type='bool']", new StaxValueLoader(resourceTable, "bool", ResType.BOOLEAN)) .addHandler("color", new StaxValueLoader(resourceTable, "color", ResType.COLOR)) - .addHandler("drawable", new StaxValueLoader(resourceTable, "drawable", ResType.DRAWABLE)) .addHandler("item[@type='color']", new StaxValueLoader(resourceTable, "color", ResType.COLOR)) + .addHandler("drawable", new StaxValueLoader(resourceTable, "drawable", ResType.DRAWABLE)) .addHandler("item[@type='drawable']", new StaxValueLoader(resourceTable, "drawable", ResType.DRAWABLE)) + .addHandler("mipmap", new StaxValueLoader(resourceTable, "mipmap", ResType.DRAWABLE)) + .addHandler("item[@type='mipmap']", new StaxValueLoader(resourceTable, "mipmap", ResType.DRAWABLE)) .addHandler("dimen", new StaxValueLoader(resourceTable, "dimen", ResType.DIMEN)) .addHandler("item[@type='dimen']", new StaxValueLoader(resourceTable, "dimen", ResType.DIMEN)) .addHandler("integer", new StaxValueLoader(resourceTable, "integer", ResType.INTEGER)) diff --git a/robolectric/src/test/java/org/robolectric/R.java b/robolectric/src/test/java/org/robolectric/R.java index 0dfeb547b..0aa1964b8 100644 --- a/robolectric/src/test/java/org/robolectric/R.java +++ b/robolectric/src/test/java/org/robolectric/R.java @@ -424,5 +424,7 @@ public final class R { public static final class mipmap { public static final int robolectric = 0x7f140000; + public static final int mipmap_reference_element = 0x7f140001; + public static final int mipmap_reference_item = 0x7f140002; } } diff --git a/robolectric/src/test/java/org/robolectric/res/ResourceTableFactoryTest.java b/robolectric/src/test/java/org/robolectric/res/ResourceTableFactoryTest.java index c1ad9ff52..caf8fb996 100644 --- a/robolectric/src/test/java/org/robolectric/res/ResourceTableFactoryTest.java +++ b/robolectric/src/test/java/org/robolectric/res/ResourceTableFactoryTest.java @@ -38,6 +38,12 @@ public class ResourceTableFactoryTest { } @Test + public void shouldHandleMipmapReferences() { + assertThat(appResourceTable.getResourceId(new ResName("org.robolectric:mipmap/mipmap_reference_item"))).isEqualTo(R.mipmap.mipmap_reference_item); + assertThat(appResourceTable.getResourceId(new ResName("org.robolectric:mipmap/mipmap_reference_element"))).isEqualTo(R.mipmap.mipmap_reference_element); + } + + @Test public void shouldHandleStyleable() throws Exception { assertThat(appResourceTable.getResourceId(new ResName("org.robolectric:id/textStyle"))).isEqualTo(R.id.textStyle); assertThat(appResourceTable.getResourceId(new ResName("org.robolectric:styleable/TitleBar_textStyle"))).isEqualTo(0); diff --git a/robolectric/src/test/java/org/robolectric/shadows/ShadowAssetManagerTest.java b/robolectric/src/test/java/org/robolectric/shadows/ShadowAssetManagerTest.java index 0fb3524a2..fe325c99c 100644 --- a/robolectric/src/test/java/org/robolectric/shadows/ShadowAssetManagerTest.java +++ b/robolectric/src/test/java/org/robolectric/shadows/ShadowAssetManagerTest.java @@ -15,6 +15,7 @@ import android.content.res.AssetFileDescriptor; import android.content.res.AssetManager; import android.content.res.Resources; import android.util.AttributeSet; +import android.util.TypedValue; import com.google.common.io.CharStreams; import java.io.ByteArrayInputStream; import java.io.IOException; diff --git a/robolectric/src/test/java/org/robolectric/shadows/ShadowResourcesTest.java b/robolectric/src/test/java/org/robolectric/shadows/ShadowResourcesTest.java index e68789169..e37510b45 100644 --- a/robolectric/src/test/java/org/robolectric/shadows/ShadowResourcesTest.java +++ b/robolectric/src/test/java/org/robolectric/shadows/ShadowResourcesTest.java @@ -883,6 +883,21 @@ public class ShadowResourcesTest { .isEqualTo("Up to 25 USD"); } + @Test + public void getResourceTypeName_mipmap() { + assertThat(resources.getResourceTypeName(R.mipmap.mipmap_reference_element)).isEqualTo("mipmap"); + assertThat(resources.getResourceTypeName(R.mipmap.robolectric)).isEqualTo("mipmap"); + } + + @Test + public void getDrawable_mipmapReferencesResolve() { + Drawable reference = resources.getDrawable(R.mipmap.mipmap_reference_element); + Drawable original = resources.getDrawable(R.mipmap.robolectric); + + assertThat(reference.getMinimumHeight()).isEqualTo(original.getMinimumHeight()); + assertThat(reference.getMinimumWidth()).isEqualTo(original.getMinimumWidth()); + } + private static String findRootTag(XmlResourceParser parser) throws Exception { int event; do { |