Home | History | Annotate | Download | only in util
      1 package org.robolectric.util;
      2 
      3 import java.io.File;
      4 import java.net.URI;
      5 import java.net.URL;
      6 import org.junit.runners.model.InitializationError;
      7 import org.robolectric.RobolectricTestRunner;
      8 import org.robolectric.annotation.Config;
      9 import org.robolectric.manifest.AndroidManifest;
     10 import org.robolectric.res.Fs;
     11 import org.robolectric.res.FsFile;
     12 
     13 public class TestRunnerWithManifest extends RobolectricTestRunner {
     14   public TestRunnerWithManifest(Class<?> testClass) throws InitializationError {
     15     super(testClass);
     16   }
     17 
     18   private static FsFile resourceFile(String... pathParts) {
     19     return Fs.newFile(resourcesBaseDirFile()).join(pathParts);
     20   }
     21 
     22   private static File resourcesBaseDirFile() {
     23     // Try to locate the manifest file as a classpath resource.
     24     final String resourceName = "/src/test/resources/AndroidManifest.xml";
     25     final URL resourceUrl = TestRunnerWithManifest.class.getResource(resourceName);
     26     if (resourceUrl != null && "file".equals(resourceUrl.getProtocol())) {
     27       // Construct a path to the manifest file relative to the current working directory.
     28       final URI workingDirectory = URI.create(System.getProperty("user.dir"));
     29       final URI absolutePath = URI.create(resourceUrl.getPath());
     30       final URI relativePath = workingDirectory.relativize(absolutePath);
     31       return new File(relativePath.toString()).getParentFile();
     32     }
     33 
     34     // Return a path relative to the current working directory.
     35     return Util.file("src", "test", "resources");
     36   }
     37 
     38   @Override
     39   protected AndroidManifest getAppManifest(Config config) {
     40     return new AndroidManifest(resourceFile("AndroidManifest.xml"), resourceFile("res"), resourceFile("assets"));
     41   }
     42 }
     43