When @Config(manifest = NONE, packageName = "whatever"), R class should be `whatever.R`.
diff --git a/robolectric-resources/src/main/java/org/robolectric/manifest/AndroidManifest.java b/robolectric-resources/src/main/java/org/robolectric/manifest/AndroidManifest.java
index b865d3a..748a482 100644
--- a/robolectric-resources/src/main/java/org/robolectric/manifest/AndroidManifest.java
+++ b/robolectric-resources/src/main/java/org/robolectric/manifest/AndroidManifest.java
@@ -124,11 +124,11 @@
}
void parseAndroidManifest() {
- if (androidManifestFile == null || manifestIsParsed) {
+ if (manifestIsParsed) {
return;
}
- if (androidManifestFile.exists()) {
+ if (androidManifestFile != null && androidManifestFile.exists()) {
try {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
@@ -167,7 +167,11 @@
ignored.printStackTrace();
}
} else {
- System.err.println("No such manifest file: " + androidManifestFile);
+ rClassName = (packageName != null && !packageName.equals("")) ? packageName + ".R" : null;
+
+ if (androidManifestFile != null) {
+ System.err.println("No such manifest file: " + androidManifestFile);
+ }
}
manifestIsParsed = true;
diff --git a/robolectric/src/test/java/org/robolectric/manifest/AndroidManifestTest.java b/robolectric/src/test/java/org/robolectric/manifest/AndroidManifestTest.java
index 4dd288e..3273bf3 100644
--- a/robolectric/src/test/java/org/robolectric/manifest/AndroidManifestTest.java
+++ b/robolectric/src/test/java/org/robolectric/manifest/AndroidManifestTest.java
@@ -242,6 +242,20 @@
}
@Test
+ public void whenNullManifestFile_getRClass_shouldComeFromPackageName() throws Exception {
+ AndroidManifest appManifest = new AndroidManifest(null, resourceFile("res"), resourceFile("assets"), "org.robolectric.lib1");
+ assertThat(appManifest.getRClass()).isEqualTo(org.robolectric.lib1.R.class);
+ assertThat(appManifest.getPackageName()).isEqualTo("org.robolectric.lib1");
+ }
+
+ @Test
+ public void whenMissingManifestFile_getRClass_shouldComeFromPackageName() throws Exception {
+ AndroidManifest appManifest = new AndroidManifest(resourceFile("none.xml"), resourceFile("res"), resourceFile("assets"), "org.robolectric.lib1");
+ assertThat(appManifest.getRClass()).isEqualTo(org.robolectric.lib1.R.class);
+ assertThat(appManifest.getPackageName()).isEqualTo("org.robolectric.lib1");
+ }
+
+ @Test
public void shouldRead1IntentFilter() {
AndroidManifest appManifest = newConfig("TestAndroidManifestForActivitiesWithIntentFilter.xml");
appManifest.getMinSdkVersion(); // Force parsing