ManifestFactoryTest.java revision eb01f4f02fcd34067b8ff5e53bfeb9575b874e1f
1package org.robolectric;
2
3import static java.util.Arrays.asList;
4import static org.junit.Assert.assertEquals;
5import static org.robolectric.util.TestUtil.joinPath;
6import static org.robolectric.util.TestUtil.resourceFile;
7
8import org.junit.Test;
9import org.junit.runner.RunWith;
10import org.junit.runners.JUnit4;
11import org.robolectric.annotation.Config;
12import org.robolectric.manifest.AndroidManifest;
13import org.robolectric.res.ResourcePath;
14
15import java.util.ArrayList;
16import java.util.Collection;
17import java.util.List;
18import java.util.Properties;
19
20@RunWith(JUnit4.class)
21public class ManifestFactoryTest {
22  @Test
23  public void shouldLoadLibraryManifests() throws Exception {
24    Properties properties = new Properties();
25    properties.setProperty("manifest", resourceFile("TestAndroidManifest.xml").toString());
26    properties.setProperty("libraries", "lib1");
27    Config config = Config.Implementation.fromProperties(properties);
28    ManifestFactory manifestFactory = new RobolectricTestRunner(ManifestFactoryTest.class).getManifestFactory(config);
29    AndroidManifest manifest = manifestFactory.create(manifestFactory.identify(config));
30
31    List<AndroidManifest> libraryManifests = manifest.getLibraryManifests();
32    assertEquals(1, libraryManifests.size());
33    assertEquals("org.robolectric.lib1", libraryManifests.get(0).getPackageName());
34  }
35
36  @Test
37  public void shouldLoadAllResourcesForExistingLibraries() throws Exception {
38    Properties properties = new Properties();
39    properties.setProperty("manifest", resourceFile("TestAndroidManifest.xml").toString());
40    properties.setProperty("resourceDir", "res");
41    properties.setProperty("assetDir", "assets");
42    Config config = Config.Implementation.fromProperties(properties);
43    ManifestFactory manifestFactory = new RobolectricTestRunner(ManifestFactoryTest.class).getManifestFactory(config);
44    AndroidManifest appManifest = manifestFactory.create(manifestFactory.identify(config));
45
46    // This intentionally loads from the non standard resources/project.properties
47    List<String> resourcePaths = stringify(appManifest.getIncludedResourcePaths());
48    assertEquals(asList(
49        joinPath(".", "src", "test", "resources", "res"),
50        joinPath(".", "src", "test", "resources", "lib1", "res"),
51        joinPath(".", "src", "test", "resources", "lib1", "..", "lib3", "res"),
52        joinPath(".", "src", "test", "resources", "lib1", "..", "lib2", "res")),
53        resourcePaths);
54  }
55
56  private List<String> stringify(Collection<ResourcePath> resourcePaths) {
57    List<String> resourcePathBases = new ArrayList<>();
58    for (ResourcePath resourcePath : resourcePaths) {
59      resourcePathBases.add(resourcePath.getResourceBase().toString());
60    }
61    return resourcePathBases;
62  }
63}
64