public ResName withPackageName(String packageName) { if (packageName.equals(this.packageName)) return this; return new ResName(packageName, type, name); }
public static ResName qualifyFromFilePath(@Nonnull final String packageName, @Nonnull final String filePath) { final File file = new File(filePath); final String type = file.getParentFile().getName().split("-", 0)[0]; final String name = Fs.baseNameFor(file.toPath()); return new ResName(packageName, type, name); }
@Override public Integer getIdentifier(String name, String type, String packageName) { Integer resourceId = resourceTable.getResourceId(new ResName(packageName, type, name)); if (resourceId == 0) { resourceId = resourceTable.getResourceId( new ResName(packageName, type, name.replace('.', '_'))); } return resourceId; }
@Test public void shouldQualifyResNameFromString() throws Exception { assertThat(ResName.qualifyResName("some.package:type/name", "default_package", "default_type")) .isEqualTo(new ResName("some.package", "type", "name")); assertThat(ResName.qualifyResName("some.package:name", "default_package", "default_type")) .isEqualTo(new ResName("some.package", "default_type", "name")); assertThat(ResName.qualifyResName("type/name", "default_package", "default_type")) .isEqualTo(new ResName("default_package", "type", "name")); assertThat(ResName.qualifyResName("name", "default_package", "default_type")) .isEqualTo(new ResName("default_package", "default_type", "name")); assertThat(ResName.qualifyResName("type/package:name", "default_package", "default_type")) .isEqualTo(new ResName("package", "type", "name")); }
@Test public void fullyQualifiedNameHandlesWhiteSpace() { String name = "android:style/TextAppearance.AppCompat.Widget.ActionMode.Subtitle\n" + " "; ResName resName = new ResName(name); assertThat(resName.name).isEqualTo("TextAppearance.AppCompat.Widget.ActionMode.Subtitle"); assertThat(resName.type).isEqualTo("style"); assertThat(resName.packageName).isEqualTo("android"); }
@Test public void hierarchicalNameHandlesWhiteSpace() { String name = "TextAppearance.AppCompat.Widget.ActionMode.Subtitle\n" + " "; ResName resName = new ResName("org.robolectric.example", "style", name); assertThat(resName.name).isEqualTo("TextAppearance.AppCompat.Widget.ActionMode.Subtitle"); assertThat(resName.type).isEqualTo("style"); assertThat(resName.packageName).isEqualTo("org.robolectric.example"); }
@Test public void simpleNameHandlesWhiteSpace() { String name = "Subtitle\n" + " "; ResName resName = new ResName("org.robolectric.example", "style", name); assertThat(resName.name).isEqualTo("Subtitle"); assertThat(resName.type).isEqualTo("style"); assertThat(resName.packageName).isEqualTo("org.robolectric.example"); }
@Test public void fullyQualifiedNameWithWhiteSpaceInTypeShouldBeHandledCorrectly() { String name = "android: string/ok"; ResName resName = new ResName(name); assertThat(resName.name).isEqualTo("ok"); assertThat(resName.type).isEqualTo("string"); assertThat(resName.packageName).isEqualTo("android"); }
@Test public void resourceNameWithWhiteSpaceInTypeShouldBeHandledCorrectly() { ResName resName = new ResName("android", " string", "ok"); assertThat(resName.name).isEqualTo("ok"); assertThat(resName.type).isEqualTo("string"); assertThat(resName.packageName).isEqualTo("android"); } }
@Test public void whenIdItemsHaveStringContent_shouldLoadIdResourcesDefinedByItemTag() { TypedResource value = resourceTable.getValue( new ResName("org.robolectric", "id", "id_with_string_value"), config); assertThat(value.asString()).isEmpty(); } }
@Test public void testStyleDataIsLoadedCorrectly() throws Exception { TypedResource typedResource = resourceTable.getValue(new ResName("android", "style", "Theme_Holo"), new ResTable_config()); StyleData styleData = (StyleData) typedResource.getData(); assertThat(styleData.getName()).isEqualTo("Theme_Holo"); assertThat(styleData.getParent()).isEqualTo("Theme"); assertThat(styleData.getPackageName()).isEqualTo("android"); assertThat(styleData.getAttrValue(new ResName("android", "attr", "colorForeground")).value) .isEqualTo("@android:color/bright_foreground_holo_dark"); } }
@Test public void shouldLoadDrawableBitmapResources() { TypedResource value = resourceTable.getValue(new ResName("org.robolectric", "drawable", "an_image"), config); 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() { TypedResource value = resourceTable.getValue(new ResName("org.robolectric", "drawable", "example_item_drawable"), config); assertThat(value).isNotNull(); assertThat(value.getResType()).isEqualTo(ResType.DRAWABLE); assertThat(value.isReference()).isTrue(); assertThat((String) value.getData()).isEqualTo("@drawable/an_image"); }
@Test public void shouldLoadDrawableXmlResources() { TypedResource value = resourceTable.getValue(new ResName("org.robolectric", "drawable", "rainbow"), config); assertThat(value).isNotNull(); assertThat(value.getResType()).isEqualTo(ResType.DRAWABLE); assertThat(value.isFile()).isTrue(); assertThat((String) value.getData()).contains("rainbow.xml"); }
@Test public void shouldLoadIdResourcesDefinedByItemTag() { TypedResource value = resourceTable.getValue(new ResName("org.robolectric", "id", "id_declared_in_item_tag"), config); assertThat(value).isNotNull(); assertThat(value.getResType()).isEqualTo(ResType.CHAR_SEQUENCE); assertThat(value.isReference()).isFalse(); assertThat(value.asString()).isEmpty(); assertThat((String) value.getData()).isEmpty(); }
@Test public void shouldIncludeStyleableAttributesThatDoNotHaveACorrespondingEntryInAttrClass() throws Exception { assumeTrue(useLegacy()); // This covers a corner case in Framework resources where an attribute is mentioned in a styleable array, e.g: R.styleable.Toolbar_buttonGravity but there is no corresponding R.attr.buttonGravity assertThat(RuntimeEnvironment.getSystemResourceTable() .getResourceId(new ResName("android", "attr", "buttonGravity"))).isGreaterThan(0); } }
@Test public void shouldFindDrawableResources() throws Exception { Path testBaseDir = temporaryFolder.newFolder("res").toPath(); temporaryFolder.newFolder("res", "drawable"); temporaryFolder.newFile("res/drawable/foo.png"); ResourcePath resourcePath = new ResourcePath(null, testBaseDir, null); DrawableResourceLoader testLoader = new DrawableResourceLoader(resourceTable); testLoader.findDrawableResources(resourcePath); assertThat(resourceTable.getValue(new ResName("org.robolectric", "drawable", "foo"), new ResTable_config()).isFile()).isTrue(); } }
@Test public void ignoresBTags() throws Exception { topLevelNodeHandler.addHandler("resources", new NodeHandler() .addHandler("item[@type='string']", new StaxValueLoader(resourceTable, "string", ResType.CHAR_SEQUENCE)) ); parse("<resources xmlns:xliff=\"urn:oasis:names:tc:xliff:document:1.2\">" + "<item type=\"string\" name=\"sms_short_code_details\">This <b>may cause charges</b> on your mobile account.</item>" + "</resources>"); assertThat(resourceTable.getValue(new ResName("pkg:string/sms_short_code_details"), new ResTable_config()).getData()) .isEqualTo("This may cause charges on your mobile account."); }
@Test public void ignoresXliffTags() throws Exception { topLevelNodeHandler.addHandler("resources", new NodeHandler() .addHandler("string", new StaxValueLoader(resourceTable, "string", ResType.CHAR_SEQUENCE)) ); parse("<resources xmlns:xliff=\"urn:oasis:names:tc:xliff:document:1.2\">" + "<string name=\"preposition_for_date\">on <xliff:g id=\"date\" example=\"May 29\">%s</xliff:g></string>" + "</resources>"); assertThat(resourceTable.getValue(new ResName("pkg:string/preposition_for_date"), new ResTable_config()).getData()) .isEqualTo("on %s"); }