aboutsummaryrefslogtreecommitdiff
path: root/junit/src/main/java/org/robolectric/internal/SandboxTestRunner.java
diff options
context:
space:
mode:
Diffstat (limited to 'junit/src/main/java/org/robolectric/internal/SandboxTestRunner.java')
-rw-r--r--junit/src/main/java/org/robolectric/internal/SandboxTestRunner.java35
1 files changed, 23 insertions, 12 deletions
diff --git a/junit/src/main/java/org/robolectric/internal/SandboxTestRunner.java b/junit/src/main/java/org/robolectric/internal/SandboxTestRunner.java
index 46ef19f1a..7f629a016 100644
--- a/junit/src/main/java/org/robolectric/internal/SandboxTestRunner.java
+++ b/junit/src/main/java/org/robolectric/internal/SandboxTestRunner.java
@@ -4,7 +4,6 @@ import static java.util.Arrays.asList;
import com.google.common.collect.Lists;
import java.lang.reflect.Method;
-import java.net.URLClassLoader;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
@@ -31,6 +30,7 @@ import org.robolectric.internal.bytecode.Interceptors;
import org.robolectric.internal.bytecode.Sandbox;
import org.robolectric.internal.bytecode.SandboxClassLoader;
import org.robolectric.internal.bytecode.SandboxConfig;
+import org.robolectric.internal.bytecode.ShadowInfo;
import org.robolectric.internal.bytecode.ShadowMap;
import org.robolectric.internal.bytecode.ShadowWrangler;
import org.robolectric.util.PerfStatsCollector;
@@ -41,6 +41,13 @@ import org.robolectric.util.PerfStatsReporter;
public class SandboxTestRunner extends BlockJUnit4ClassRunner {
+ private static final ShadowMap BASE_SHADOW_MAP;
+
+ static {
+ ServiceLoader<ShadowProvider> shadowProviders = ServiceLoader.load(ShadowProvider.class);
+ BASE_SHADOW_MAP = ShadowMap.createFromShadowProviders(shadowProviders);
+ }
+
private final Interceptors interceptors;
private final List<PerfStatsReporter> perfStatsReporters;
private final HashSet<Class<?>> loadedTestClasses = new HashSet<>();
@@ -134,11 +141,8 @@ public class SandboxTestRunner extends BlockJUnit4ClassRunner {
@Nonnull
protected Sandbox getSandbox(FrameworkMethod method) {
InstrumentationConfiguration instrumentationConfiguration = createClassLoaderConfig(method);
- ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader();
- ClassLoader sandboxClassLoader = new SandboxClassLoader(systemClassLoader, instrumentationConfiguration);
- Sandbox sandbox = new Sandbox(sandboxClassLoader);
- configureShadows(method, sandbox);
- return sandbox;
+ ClassLoader sandboxClassLoader = new SandboxClassLoader(ClassLoader.getSystemClassLoader(), instrumentationConfiguration);
+ return new Sandbox(sandboxClassLoader);
}
/**
@@ -159,9 +163,16 @@ public class SandboxTestRunner extends BlockJUnit4ClassRunner {
.doNotAcquirePackage("org.robolectric.util.")
.doNotAcquirePackage("org.junit.");
+ String customPackages = System.getProperty("org.robolectric.packagesToNotAcquire", "");
+ for (String pkg : customPackages.split(",")) {
+ if (!pkg.isEmpty()) {
+ builder.doNotAcquirePackage(pkg);
+ }
+ }
+
for (Class<?> shadowClass : getExtraShadows(method)) {
- ShadowMap.ShadowInfo shadowInfo = ShadowMap.getShadowInfo(shadowClass);
- builder.addInstrumentedClass(shadowInfo.getShadowedClassName());
+ ShadowInfo shadowInfo = ShadowMap.obtainShadowInfo(shadowClass);
+ builder.addInstrumentedClass(shadowInfo.shadowedClassName);
}
addInstrumentedPackages(method, builder);
@@ -185,7 +196,7 @@ public class SandboxTestRunner extends BlockJUnit4ClassRunner {
}
}
- protected void configureShadows(FrameworkMethod method, Sandbox sandbox) {
+ protected void configureSandbox(Sandbox sandbox, FrameworkMethod method) {
ShadowMap.Builder builder = createShadowMap().newBuilder();
// Configure shadows *BEFORE* setting the ClassLoader. This is necessary because
@@ -213,10 +224,10 @@ public class SandboxTestRunner extends BlockJUnit4ClassRunner {
Sandbox sandbox = getSandbox(method);
- // Configure shadows *BEFORE* setting the ClassLoader. This is necessary because
+ // Configure sandbox *BEFORE* setting the ClassLoader. This is necessary because
// creating the ShadowMap loads all ShadowProviders via ServiceLoader and this is
// not available once we install the Robolectric class loader.
- configureShadows(method, sandbox);
+ configureSandbox(sandbox, method);
final ClassLoader priorContextClassLoader = Thread.currentThread().getContextClassLoader();
Thread.currentThread().setContextClassLoader(sandbox.getRobolectricClassLoader());
@@ -324,7 +335,7 @@ public class SandboxTestRunner extends BlockJUnit4ClassRunner {
}
protected ShadowMap createShadowMap() {
- return ShadowMap.EMPTY;
+ return BASE_SHADOW_MAP;
}
@Nonnull