blob: 47bc1ba0dd5e4045f0bafe7a5a35c410c099cd8d [file] [log] [blame]
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.testing.local;
import org.robolectric.DependencyJar;
import org.robolectric.DependencyResolver;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.regex.Pattern;
/**
* A Robolectric dependency resolver that looks for the Robolectric dependencies
* in the Java classpath.
*/
public class RobolectricClasspathDependencyResolver implements DependencyResolver {
private static final Pattern COLON = Pattern.compile(":");
private final String[] mClassPathJars;
/**
* Creates a {@link ClasspathDependencyResolver}.
*/
public RobolectricClasspathDependencyResolver() {
mClassPathJars = COLON.split(System.getProperty("java.class.path"));
}
/**
* Returns the {@link URL} for a Robolectric dependency. It looks through the jars
* in the classpath to find the dependency's filepath.
*/
@Override
public URL getLocalArtifactUrl(DependencyJar dependency) {
// Jar filenames are constructed identically to how they are built in Robolectric's
// own LocalDependencyResolver.
String dependencyJar = dependency.getArtifactId() + "-" + dependency.getVersion() + "."
+ dependency.getType();
for (String jarPath : mClassPathJars) {
if (jarPath.endsWith(dependencyJar)) {
return fileToUrl(new File(jarPath));
}
}
throw new IllegalStateException(
String.format("Robolectric jar %s was not found in classpath.", dependencyJar));
}
/**
* Returns the {@link URL} for a list of Robolectric dependencies.
*/
@Override
public URL[] getLocalArtifactUrls(DependencyJar... dependencies) {
URL[] urls = new URL[dependencies.length];
for (int i = 0; i < dependencies.length; i++) {
urls[i] = getLocalArtifactUrl(dependencies[i]);
}
return urls;
}
private static URL fileToUrl(File file) {
try {
return file.toURI().toURL();
} catch (MalformedURLException e) {
throw new IllegalArgumentException(
String.format("File \"%s\" cannot be represented as a URL: %s", file, e));
}
}
}