Search in sources :

Example 6 with FsFile

use of org.robolectric.res.FsFile in project robolectric by robolectric.

the class GradleManifestFactory method create.

@Override
public AndroidManifest create(ManifestIdentifier manifestIdentifier) {
    FsFile manifestFile = manifestIdentifier.getManifestFile();
    FsFile resDir = manifestIdentifier.getResDir();
    FsFile assetDir = manifestIdentifier.getAssetDir();
    final String packageName = manifestIdentifier.getPackageName();
    Logger.debug("Robolectric assets directory: " + assetDir.getPath());
    Logger.debug("   Robolectric res directory: " + resDir.getPath());
    Logger.debug("   Robolectric manifest path: " + manifestFile.getPath());
    Logger.debug("    Robolectric package name: " + packageName);
    return new AndroidManifest(manifestFile, resDir, assetDir, packageName);
}
Also used : FileFsFile(org.robolectric.res.FileFsFile) FsFile(org.robolectric.res.FsFile) AndroidManifest(org.robolectric.manifest.AndroidManifest)

Example 7 with FsFile

use of org.robolectric.res.FsFile in project robolectric by robolectric.

the class MavenManifestFactory method create.

@Override
public AndroidManifest create(ManifestIdentifier manifestIdentifier) {
    AndroidManifest appManifest;
    FsFile manifestFile = manifestIdentifier.getManifestFile();
    if (manifestFile == null) {
        appManifest = createDummyManifest(manifestIdentifier.getPackageName());
    } else if (!manifestFile.exists()) {
        System.out.println("WARNING: No manifest file found at " + manifestFile.getPath() + ".");
        System.out.println("Falling back to the Android OS resources only.");
        System.out.println("To remove this warning, annotate your test class with @Config(manifest=Config.NONE).");
        appManifest = createDummyManifest(manifestIdentifier.getPackageName());
    } else {
        FsFile resDir = manifestIdentifier.getResDir();
        FsFile assetDir = manifestIdentifier.getAssetDir();
        String packageName = manifestIdentifier.getPackageName();
        Logger.debug("Robolectric assets directory: " + assetDir.getPath());
        Logger.debug("   Robolectric res directory: " + resDir.getPath());
        Logger.debug("   Robolectric manifest path: " + manifestFile.getPath());
        Logger.debug("    Robolectric package name: " + packageName);
        appManifest = new AndroidManifest(manifestFile, resDir, assetDir, packageName);
    }
    List<FsFile> libraryDirs = manifestIdentifier.getLibraryDirs();
    appManifest.setLibraryManifests(createLibraryManifests(appManifest, libraryDirs));
    return appManifest;
}
Also used : FsFile(org.robolectric.res.FsFile) AndroidManifest(org.robolectric.manifest.AndroidManifest)

Example 8 with FsFile

use of org.robolectric.res.FsFile in project robolectric by robolectric.

the class MavenManifestFactory method createLibraryManifests.

/**
   * Search through an AndroidManifest's library directories to load library AppManifest files.
   * For testing, allow a parameter override of the library directories.
   * @param androidManifest The main AppManifest which may have library resources.
   * @param libraryDirectories If not null, override the libraries in androidManifest.
   * @return A list of AndroidManifest objects, one for each library found.
   */
private static List<AndroidManifest> createLibraryManifests(AndroidManifest androidManifest, List<FsFile> libraryDirectories) {
    List<AndroidManifest> libraryManifests = new ArrayList<>();
    if (androidManifest != null) {
        // If there is no library override, look through subdirectories.
        if (libraryDirectories == null) {
            libraryDirectories = findLibraries(androidManifest);
        }
        for (FsFile libraryBaseDir : libraryDirectories) {
            AndroidManifest libraryManifest = createLibraryAndroidManifest(libraryBaseDir);
            libraryManifest.setLibraryManifests(createLibraryManifests(libraryManifest, null));
            libraryManifests.add(libraryManifest);
        }
    }
    return libraryManifests;
}
Also used : FsFile(org.robolectric.res.FsFile) AndroidManifest(org.robolectric.manifest.AndroidManifest)

Example 9 with FsFile

use of org.robolectric.res.FsFile in project robolectric by robolectric.

the class RobolectricTestRunner method getJarResolver.

protected DependencyResolver getJarResolver() {
    if (dependencyResolver == null) {
        if (Boolean.getBoolean("robolectric.offline")) {
            String dependencyDir = System.getProperty("robolectric.dependency.dir", ".");
            dependencyResolver = new LocalDependencyResolver(new File(dependencyDir));
        } else {
            File cacheDir = new File(new File(System.getProperty("java.io.tmpdir")), "robolectric");
            if (cacheDir.exists() || cacheDir.mkdir()) {
                Logger.info("Dependency cache location: %s", cacheDir.getAbsolutePath());
                dependencyResolver = new CachedDependencyResolver(new MavenDependencyResolver(), cacheDir, 60 * 60 * 24 * 1000);
            } else {
                dependencyResolver = new MavenDependencyResolver();
            }
        }
        URL buildPathPropertiesUrl = getClass().getClassLoader().getResource("robolectric-deps.properties");
        if (buildPathPropertiesUrl != null) {
            Logger.info("Using Robolectric classes from %s", buildPathPropertiesUrl.getPath());
            FsFile propertiesFile = Fs.fileFromPath(buildPathPropertiesUrl.getFile());
            try {
                dependencyResolver = new PropertiesDependencyResolver(propertiesFile, dependencyResolver);
            } catch (IOException e) {
                throw new RuntimeException("couldn't read " + buildPathPropertiesUrl, e);
            }
        }
    }
    return dependencyResolver;
}
Also used : FsFile(org.robolectric.res.FsFile) LocalDependencyResolver(org.robolectric.internal.dependency.LocalDependencyResolver) CachedDependencyResolver(org.robolectric.internal.dependency.CachedDependencyResolver) PropertiesDependencyResolver(org.robolectric.internal.dependency.PropertiesDependencyResolver) MavenDependencyResolver(org.robolectric.internal.dependency.MavenDependencyResolver) IOException(java.io.IOException) File(java.io.File) FsFile(org.robolectric.res.FsFile) URL(java.net.URL)

Example 10 with FsFile

use of org.robolectric.res.FsFile in project robolectric by robolectric.

the class MavenManifestFactory method identify.

@Override
public ManifestIdentifier identify(Config config) {
    if (config.manifest().equals(Config.NONE)) {
        return new ManifestIdentifier(null, null, null, null, null);
    }
    FsFile manifestFile = getBaseDir().join(config.manifest());
    FsFile baseDir = manifestFile.getParent();
    FsFile resDir = baseDir.join(config.resourceDir());
    FsFile assetDir = baseDir.join(config.assetDir());
    List<FsFile> libraryDirs = null;
    if (config.libraries().length > 0) {
        libraryDirs = new ArrayList<>();
        for (String libraryDirName : config.libraries()) {
            libraryDirs.add(baseDir.join(libraryDirName));
        }
    }
    return new ManifestIdentifier(manifestFile, resDir, assetDir, config.packageName(), libraryDirs);
}
Also used : FsFile(org.robolectric.res.FsFile)

Aggregations

FsFile (org.robolectric.res.FsFile)11 AndroidManifest (org.robolectric.manifest.AndroidManifest)4 File (java.io.File)2 URL (java.net.URL)2 IOException (java.io.IOException)1 ArrayList (java.util.ArrayList)1 LinkedHashSet (java.util.LinkedHashSet)1 CachedDependencyResolver (org.robolectric.internal.dependency.CachedDependencyResolver)1 LocalDependencyResolver (org.robolectric.internal.dependency.LocalDependencyResolver)1 MavenDependencyResolver (org.robolectric.internal.dependency.MavenDependencyResolver)1 PropertiesDependencyResolver (org.robolectric.internal.dependency.PropertiesDependencyResolver)1 FileFsFile (org.robolectric.res.FileFsFile)1 ResourcePath (org.robolectric.res.ResourcePath)1