aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Williams <christianw@google.com>2019-01-13 13:50:33 -0800
committerChristian Williams <christianw@google.com>2019-01-15 17:30:41 -0800
commit76220b2839004ed864bbf0f577fcd65be7ee0f2e (patch)
tree2b96adfd828d6e527508fa82b339e4d14c40dad1
parentad3c6c803d168c0b32aa0d11e20d71518f75f60a (diff)
downloadrobolectric-76220b2839004ed864bbf0f577fcd65be7ee0f2e.tar.gz
Fix tests.
-rw-r--r--pluginapi/src/main/java/org/robolectric/internal/Sdk.java5
-rwxr-xr-xplugins/maven-dependency-resolver/src/main/java/org/robolectric/internal/dependency/MavenDependencyResolver.java1
-rw-r--r--robolectric/src/main/java/org/robolectric/RobolectricTestRunner.java33
-rwxr-xr-xrobolectric/src/main/java/org/robolectric/android/internal/ParallelUniverse.java22
-rw-r--r--robolectric/src/main/java/org/robolectric/plugins/DefaultSdkPicker.java3
-rw-r--r--robolectric/src/main/java/org/robolectric/plugins/DefaultSdkProvider.java30
-rw-r--r--robolectric/src/main/java/org/robolectric/plugins/UnknownSdk.java50
-rw-r--r--robolectric/src/test/java/org/robolectric/RobolectricTestRunnerMultiApiTest.java2
-rw-r--r--robolectric/src/test/java/org/robolectric/RobolectricTestRunnerTest.java98
-rw-r--r--robolectric/src/test/java/org/robolectric/SingleSdkRobolectricTestRunner.java47
-rw-r--r--robolectric/src/test/java/org/robolectric/TestRunnerSequenceTest.java30
-rw-r--r--robolectric/src/test/java/org/robolectric/util/TestUtil.java25
12 files changed, 159 insertions, 187 deletions
diff --git a/pluginapi/src/main/java/org/robolectric/internal/Sdk.java b/pluginapi/src/main/java/org/robolectric/internal/Sdk.java
index 8125a3e27..8b47d8fcf 100644
--- a/pluginapi/src/main/java/org/robolectric/internal/Sdk.java
+++ b/pluginapi/src/main/java/org/robolectric/internal/Sdk.java
@@ -33,11 +33,8 @@ public interface Sdk extends Comparable<Sdk> {
String getAndroidCodeName();
/**
- * @deprecated Use {@link #getJarPath()} instead.
+ * Returns the path to jar for this SDK.
*/
- @Deprecated
- DependencyJar getAndroidSdkDependency();
-
Path getJarPath();
/**
diff --git a/plugins/maven-dependency-resolver/src/main/java/org/robolectric/internal/dependency/MavenDependencyResolver.java b/plugins/maven-dependency-resolver/src/main/java/org/robolectric/internal/dependency/MavenDependencyResolver.java
index 9c79fe5a7..7c1893886 100755
--- a/plugins/maven-dependency-resolver/src/main/java/org/robolectric/internal/dependency/MavenDependencyResolver.java
+++ b/plugins/maven-dependency-resolver/src/main/java/org/robolectric/internal/dependency/MavenDependencyResolver.java
@@ -58,6 +58,7 @@ public class MavenDependencyResolver implements DependencyResolver {
remoteRepository.addAuthentication(authentication);
}
dependenciesTask.addConfiguredRemoteRepository(remoteRepository);
+ final Project project = new Project();
dependenciesTask.setProject(project);
for (DependencyJar dependencyJar : dependencies) {
Dependency dependency = new Dependency();
diff --git a/robolectric/src/main/java/org/robolectric/RobolectricTestRunner.java b/robolectric/src/main/java/org/robolectric/RobolectricTestRunner.java
index 548191017..44257e5f3 100644
--- a/robolectric/src/main/java/org/robolectric/RobolectricTestRunner.java
+++ b/robolectric/src/main/java/org/robolectric/RobolectricTestRunner.java
@@ -172,7 +172,7 @@ public class RobolectricTestRunner extends SandboxTestRunner {
RobolectricFrameworkMethod roboMethod = (RobolectricFrameworkMethod) method;
boolean isLegacy = roboMethod.isLegacy();
roboMethod.parallelUniverseInterface = getHooksInterface(sdkEnvironment);
- roboMethod.parallelUniverseInterface.setSdk(roboMethod.sdk);
+ roboMethod.parallelUniverseInterface.setSdk(roboMethod.getSdk());
roboMethod.parallelUniverseInterface.setResourcesMode(isLegacy);
super.configureSandbox(sandbox, method);
@@ -273,7 +273,7 @@ public class RobolectricTestRunner extends SandboxTestRunner {
@Nonnull
protected SdkEnvironment getSandbox(FrameworkMethod method) {
RobolectricFrameworkMethod roboMethod = (RobolectricFrameworkMethod) method;
- Sdk sdk = roboMethod.sdk;
+ Sdk sdk = roboMethod.getSdk();
InstrumentationConfiguration classLoaderConfig = createClassLoaderConfig(method);
boolean useLegacyResources = roboMethod.isLegacy();
@@ -301,7 +301,7 @@ public class RobolectricTestRunner extends SandboxTestRunner {
RobolectricFrameworkMethod roboMethod = (RobolectricFrameworkMethod) method;
PerfStatsCollector perfStatsCollector = PerfStatsCollector.getInstance();
- Sdk sdk = roboMethod.sdk;
+ Sdk sdk = roboMethod.getSdk();
perfStatsCollector.putMetadata(
AndroidMetadata.class,
new AndroidMetadata(
@@ -567,10 +567,15 @@ public class RobolectricTestRunner extends SandboxTestRunner {
}
}
+ /**
+ * Fields in this class must be serializable using [XStream](https://x-stream.github.io/).
+ */
static class RobolectricFrameworkMethod extends FrameworkMethod {
+
+ private static final Map<Integer, Sdk> SDKS_BY_API_LEVEL = new HashMap<>();
+
private final @Nonnull AndroidManifest appManifest;
- final @Nonnull
- Sdk sdk;
+ private final int apiLevel;
final @Nonnull Config config;
final ResourcesMode resourcesMode;
private final ResourcesMode defaultResourcesMode;
@@ -590,7 +595,12 @@ public class RobolectricTestRunner extends SandboxTestRunner {
boolean alwaysIncludeVariantMarkersInName) {
super(method);
this.appManifest = appManifest;
- this.sdk = sdk;
+
+ // stored as primitive so we don't try to send Sdk through a serialization cycle
+ // e.g. for PowerMock.
+ this.apiLevel = sdk.getApiLevel();
+ SDKS_BY_API_LEVEL.putIfAbsent(apiLevel, sdk);
+
this.config = config;
this.resourcesMode = resourcesMode;
this.defaultResourcesMode = defaultResourcesMode;
@@ -604,7 +614,7 @@ public class RobolectricTestRunner extends SandboxTestRunner {
StringBuilder buf = new StringBuilder(super.getName());
if (includeVariantMarkersInTestName || alwaysIncludeVariantMarkersInName) {
- buf.append("[").append(sdk.getApiLevel()).append("]");
+ buf.append("[").append(getSdk().getApiLevel()).append("]");
if (defaultResourcesMode == ResourcesMode.both) {
buf.append("[").append(resourcesMode.name()).append("]");
@@ -623,6 +633,11 @@ public class RobolectricTestRunner extends SandboxTestRunner {
return appManifest;
}
+ @Nonnull
+ public Sdk getSdk() {
+ return SDKS_BY_API_LEVEL.get(apiLevel);
+ }
+
public boolean isLegacy() {
return resourcesMode == ResourcesMode.legacy;
}
@@ -635,13 +650,13 @@ public class RobolectricTestRunner extends SandboxTestRunner {
RobolectricFrameworkMethod that = (RobolectricFrameworkMethod) o;
- return sdk.equals(that.sdk) && resourcesMode == that.resourcesMode;
+ return getSdk().equals(that.getSdk()) && resourcesMode == that.resourcesMode;
}
@Override
public int hashCode() {
int result = super.hashCode();
- result = 31 * result + sdk.hashCode();
+ result = 31 * result + getSdk().hashCode();
result = 31 * result + resourcesMode.ordinal();
return result;
}
diff --git a/robolectric/src/main/java/org/robolectric/android/internal/ParallelUniverse.java b/robolectric/src/main/java/org/robolectric/android/internal/ParallelUniverse.java
index 8596c4bf2..df47ad1c8 100755
--- a/robolectric/src/main/java/org/robolectric/android/internal/ParallelUniverse.java
+++ b/robolectric/src/main/java/org/robolectric/android/internal/ParallelUniverse.java
@@ -71,18 +71,20 @@ import org.robolectric.util.PerfStatsCollector;
import org.robolectric.util.ReflectionHelpers;
import org.robolectric.util.Scheduler;
import org.robolectric.util.TempDirectory;
-import org.robolectric.util.Util;
@SuppressLint("NewApi")
public class ParallelUniverse implements ParallelUniverseInterface {
private boolean loggingInitialized = false;
- private Sdk sdk;
+ private int apiLevel;
+ private Path sdkJarPath;
@Override
public void setSdk(Sdk sdk) {
- this.sdk = sdk;
- ReflectionHelpers.setStaticField(RuntimeEnvironment.class, "apiLevel", sdk.getApiLevel());
+ apiLevel = sdk.getApiLevel();
+ sdkJarPath = sdk.getJarPath();
+
+ ReflectionHelpers.setStaticField(RuntimeEnvironment.class, "apiLevel", apiLevel);
}
@Override
@@ -93,7 +95,7 @@ public class ParallelUniverse implements ParallelUniverseInterface {
@Override
public void setUpApplicationState(ApkLoader apkLoader, Method method, Config config,
AndroidManifest appManifest, SdkEnvironment sdkEnvironment) {
- ReflectionHelpers.setStaticField(RuntimeEnvironment.class, "apiLevel", sdk.getApiLevel());
+ ReflectionHelpers.setStaticField(RuntimeEnvironment.class, "apiLevel", apiLevel);
RuntimeEnvironment.application = null;
RuntimeEnvironment.setActivityThread(null);
@@ -113,10 +115,10 @@ public class ParallelUniverse implements ParallelUniverseInterface {
Configuration configuration = new Configuration();
DisplayMetrics displayMetrics = new DisplayMetrics();
- Bootstrap.applyQualifiers(config.qualifiers(), sdk.getApiLevel(), configuration,
+ Bootstrap.applyQualifiers(config.qualifiers(), apiLevel, configuration,
displayMetrics);
- Locale locale = sdk.getApiLevel() >= VERSION_CODES.N
+ Locale locale = apiLevel >= VERSION_CODES.N
? configuration.getLocales().get(0)
: configuration.locale;
Locale.setDefault(locale);
@@ -136,7 +138,7 @@ public class ParallelUniverse implements ParallelUniverseInterface {
ApplicationInfo applicationInfo = parsedPackage.applicationInfo;
// unclear why, but prior to P the processName wasn't set
- if (sdk.getApiLevel() < P && applicationInfo.processName == null) {
+ if (apiLevel < P && applicationInfo.processName == null) {
applicationInfo.processName = parsedPackage.packageName;
}
@@ -259,7 +261,7 @@ public class ParallelUniverse implements ParallelUniverseInterface {
RuntimeEnvironment.compileTimeSystemResourcesFile =
sdkEnvironment.getCompileTimeSdk().getJarPath();
- RuntimeEnvironment.setAndroidFrameworkJarPath(sdk.getJarPath());
+ RuntimeEnvironment.setAndroidFrameworkJarPath(sdkJarPath);
Path packageFile = appManifest.getApkFile();
parsedPackage = ShadowPackageParser.callParsePackage(packageFile);
@@ -408,7 +410,7 @@ public class ParallelUniverse implements ParallelUniverseInterface {
applicationInfo.publicSourceDir =
createTempDir(applicationInfo.packageName + "-publicSourceDir");
} else {
- if (sdk.getApiLevel() <= VERSION_CODES.KITKAT) {
+ if (apiLevel <= VERSION_CODES.KITKAT) {
String sourcePath = reflector(_Package_.class, parsedPackage).getPath();
if (sourcePath == null) {
sourcePath = createTempDir("sourceDir");
diff --git a/robolectric/src/main/java/org/robolectric/plugins/DefaultSdkPicker.java b/robolectric/src/main/java/org/robolectric/plugins/DefaultSdkPicker.java
index 1fc8a2215..44af8c19e 100644
--- a/robolectric/src/main/java/org/robolectric/plugins/DefaultSdkPicker.java
+++ b/robolectric/src/main/java/org/robolectric/plugins/DefaultSdkPicker.java
@@ -133,8 +133,7 @@ public class DefaultSdkPicker implements SdkPicker {
private Sdk findSdk(int apiLevel) {
Sdk sdk = sdksByApiLevel.get(apiLevel);
if (sdk == null) {
- throw new IllegalArgumentException(
- String.format("Robolectric does not support API level %d.", apiLevel));
+ return new UnknownSdk(apiLevel);
}
return sdk;
}
diff --git a/robolectric/src/main/java/org/robolectric/plugins/DefaultSdkProvider.java b/robolectric/src/main/java/org/robolectric/plugins/DefaultSdkProvider.java
index 09ba64c95..aa947475a 100644
--- a/robolectric/src/main/java/org/robolectric/plugins/DefaultSdkProvider.java
+++ b/robolectric/src/main/java/org/robolectric/plugins/DefaultSdkProvider.java
@@ -111,29 +111,6 @@ public class DefaultSdkProvider implements SdkProvider {
static final TreeMap<Integer, Sdk> supportedApis = new TreeMap<>();
}
- private class UnknownSdk extends DefaultSdk {
-
- UnknownSdk(int apiLevel) {
- super(apiLevel, null, null, null, 0);
- }
-
- @Override
- public DependencyJar getAndroidSdkDependency() {
- throw new IllegalArgumentException(
- String.format("Robolectric does not support API level %d.", getApiLevel()));
- }
-
- @Override
- public boolean isKnown() {
- return false;
- }
-
- @Override
- public boolean isSupported() {
- return false;
- }
- }
-
public class DefaultSdk implements Sdk {
private final int apiLevel;
@@ -169,12 +146,7 @@ public class DefaultSdkProvider implements SdkProvider {
return codeName;
}
- /**
- * @deprecated Use {@link #getJarPath()} instead.
- */
- @Deprecated
- @Override
- public DependencyJar getAndroidSdkDependency() {
+ private DependencyJar getAndroidSdkDependency() {
if (!isSupported()) {
throw new UnsupportedClassVersionError(getUnsupportedMessage());
}
diff --git a/robolectric/src/main/java/org/robolectric/plugins/UnknownSdk.java b/robolectric/src/main/java/org/robolectric/plugins/UnknownSdk.java
new file mode 100644
index 000000000..7eac4f15c
--- /dev/null
+++ b/robolectric/src/main/java/org/robolectric/plugins/UnknownSdk.java
@@ -0,0 +1,50 @@
+package org.robolectric.plugins;
+
+import java.nio.file.Path;
+import javax.annotation.Nonnull;
+import org.robolectric.internal.Sdk;
+
+class UnknownSdk implements Sdk {
+
+ private final int apiLevel;
+
+ UnknownSdk(int apiLevel) {
+ this.apiLevel = apiLevel;
+ }
+
+ @Override
+ public int getApiLevel() {
+ return apiLevel;
+ }
+
+ @Override
+ public String getAndroidVersion() {
+ return null;
+ }
+
+ @Override
+ public String getAndroidCodeName() {
+ return null;
+ }
+
+ @Override
+ public Path getJarPath() {
+ throw new IllegalArgumentException(
+ String.format("Robolectric does not support API level %d.", getApiLevel()));
+ }
+
+ @Override
+ public boolean isKnown() {
+ return false;
+ }
+
+ @Override
+ public boolean isSupported() {
+ return false;
+ }
+
+ @Override
+ public int compareTo(@Nonnull Sdk o) {
+ return 0;
+ }
+}
diff --git a/robolectric/src/test/java/org/robolectric/RobolectricTestRunnerMultiApiTest.java b/robolectric/src/test/java/org/robolectric/RobolectricTestRunnerMultiApiTest.java
index aa51fe89d..12fe93ebe 100644
--- a/robolectric/src/test/java/org/robolectric/RobolectricTestRunnerMultiApiTest.java
+++ b/robolectric/src/test/java/org/robolectric/RobolectricTestRunnerMultiApiTest.java
@@ -327,7 +327,7 @@ public class RobolectricTestRunnerMultiApiTest {
List<Integer> apis = new ArrayList<>();
for (FrameworkMethod child : children) {
apis.add(
- ((RobolectricTestRunner.RobolectricFrameworkMethod) child).sdk.getApiLevel());
+ ((RobolectricTestRunner.RobolectricFrameworkMethod) child).getSdk().getApiLevel());
}
return apis;
}
diff --git a/robolectric/src/test/java/org/robolectric/RobolectricTestRunnerTest.java b/robolectric/src/test/java/org/robolectric/RobolectricTestRunnerTest.java
index dc4912f02..e10b26073 100644
--- a/robolectric/src/test/java/org/robolectric/RobolectricTestRunnerTest.java
+++ b/robolectric/src/test/java/org/robolectric/RobolectricTestRunnerTest.java
@@ -16,14 +16,12 @@ import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.spi.FileSystemProvider;
import java.util.ArrayList;
-import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Set;
import java.util.jar.JarEntry;
import java.util.jar.JarOutputStream;
import javax.annotation.Nonnull;
-import javax.inject.Inject;
import org.junit.After;
import org.junit.Before;
import org.junit.FixMethodOrder;
@@ -36,25 +34,19 @@ import org.junit.runner.notification.RunListener;
import org.junit.runner.notification.RunNotifier;
import org.junit.runners.JUnit4;
import org.junit.runners.MethodSorters;
-import org.junit.runners.model.InitializationError;
import org.robolectric.RobolectricTestRunner.ResourcesMode;
import org.robolectric.RobolectricTestRunner.RobolectricFrameworkMethod;
import org.robolectric.android.internal.ParallelUniverse;
import org.robolectric.annotation.Config;
import org.robolectric.internal.ParallelUniverseInterface;
-import org.robolectric.internal.Sdk;
import org.robolectric.internal.SdkEnvironment;
-import org.robolectric.internal.dependency.DependencyJar;
import org.robolectric.manifest.AndroidManifest;
-import org.robolectric.pluginapi.SdkPicker;
import org.robolectric.pluginapi.SdkProvider;
-import org.robolectric.pluginapi.UsesSdk;
import org.robolectric.plugins.DefaultSdkProvider;
import org.robolectric.util.PerfStatsCollector.Metric;
import org.robolectric.util.PerfStatsReporter;
import org.robolectric.util.TempDirectory;
import org.robolectric.util.TestUtil;
-import org.robolectric.util.inject.Injector;
@RunWith(JUnit4.class)
public class RobolectricTestRunnerTest {
@@ -99,7 +91,7 @@ public class RobolectricTestRunnerTest {
@Test
public void ignoredTestCanSpecifyUnsupportedSdkWithoutExploding() throws Exception {
- RobolectricTestRunner runner = new MyRobolectricTestRunner(TestWithOldSdk.class);
+ RobolectricTestRunner runner = new RobolectricTestRunner(TestWithOldSdk.class);
runner.run(notifier);
assertThat(events).containsExactly(
"failure: Robolectric does not support API level 11.",
@@ -110,7 +102,7 @@ public class RobolectricTestRunnerTest {
@Test
public void failureInResetterDoesntBreakAllTests() throws Exception {
RobolectricTestRunner runner =
- new MyRobolectricTestRunner(TestWithTwoMethods.class) {
+ new SingleSdkRobolectricTestRunner(TestWithTwoMethods.class) {
@Override
ParallelUniverseInterface getHooksInterface(SdkEnvironment sdkEnvironment) {
Class<? extends ParallelUniverseInterface> clazz =
@@ -127,7 +119,7 @@ public class RobolectricTestRunnerTest {
@Test
public void failureInAppOnCreateDoesntBreakAllTests() throws Exception {
- RobolectricTestRunner runner = new MyRobolectricTestRunner(TestWithBrokenAppCreate.class);
+ RobolectricTestRunner runner = new SingleSdkRobolectricTestRunner(TestWithBrokenAppCreate.class);
runner.run(notifier);
assertThat(events)
.containsExactly(
@@ -137,7 +129,7 @@ public class RobolectricTestRunnerTest {
@Test
public void failureInAppOnTerminateDoesntBreakAllTests() throws Exception {
- RobolectricTestRunner runner = new MyRobolectricTestRunner(TestWithBrokenAppTerminate.class);
+ RobolectricTestRunner runner = new SingleSdkRobolectricTestRunner(TestWithBrokenAppTerminate.class);
runner.run(notifier);
assertThat(events)
.containsExactly(
@@ -197,7 +189,7 @@ public class RobolectricTestRunnerTest {
List<Metric> metrics = new ArrayList<>();
PerfStatsReporter reporter = (metadata, metrics1) -> metrics.addAll(metrics1);
- RobolectricTestRunner runner = new MyRobolectricTestRunner(TestWithTwoMethods.class) {
+ RobolectricTestRunner runner = new SingleSdkRobolectricTestRunner(TestWithTwoMethods.class) {
@Nonnull
@Override
protected Iterable<PerfStatsReporter> getPerfStatsReporters() {
@@ -213,7 +205,7 @@ public class RobolectricTestRunnerTest {
@Test
public void shouldResetThreadInterrupted() throws Exception {
- RobolectricTestRunner runner = new MyRobolectricTestRunner(TestWithInterrupt.class);
+ RobolectricTestRunner runner = new SingleSdkRobolectricTestRunner(TestWithInterrupt.class);
runner.run(notifier);
assertThat(events).containsExactly("failure: failed for the right reason");
}
@@ -328,82 +320,4 @@ public class RobolectricTestRunnerTest {
}
}
- private static class MyRobolectricTestRunner extends RobolectricTestRunner {
-
- private static final Injector INJECTOR = defaultInjector()
- .register(SdkPicker.class, SingleSdkPicker.class);
-
- MyRobolectricTestRunner(Class<?> testClass) throws InitializationError {
- super(testClass, INJECTOR);
- }
-
- @Override
- ResourcesMode getResourcesMode() {
- return ResourcesMode.legacy;
- }
- }
-
- public static class SingleSdkPicker implements SdkPicker {
-
- @Inject
- public SingleSdkPicker() {
- super();
- }
-
- @Nonnull
- @Override
- public List<Sdk> selectSdks(Config config, UsesSdk usesSdk) {
- return Collections.singletonList(new FakeSdk(Build.VERSION_CODES.P));
- }
- }
-
- private static class FakeSdk implements Sdk {
-
- private int apiLevel;
-
- private FakeSdk(int apiLevel) {
- this.apiLevel = apiLevel;
- }
-
- @Override
- public int getApiLevel() {
- return apiLevel;
- }
-
- @Override
- public String getAndroidVersion() {
- return null;
- }
-
- @Override
- public String getAndroidCodeName() {
- return null;
- }
-
- @Override
- public DependencyJar getAndroidSdkDependency() {
- return null;
- }
-
- @Override
- public Path getJarPath() {
- return null;
- }
-
- @Override
- public boolean isKnown() {
- return true;
- }
-
- @Override
- public boolean isSupported() {
- return true;
- }
-
- @Override
- public int compareTo(@Nonnull Sdk o) {
- return 0;
- }
- }
-
}
diff --git a/robolectric/src/test/java/org/robolectric/SingleSdkRobolectricTestRunner.java b/robolectric/src/test/java/org/robolectric/SingleSdkRobolectricTestRunner.java
new file mode 100644
index 000000000..fd7a6b135
--- /dev/null
+++ b/robolectric/src/test/java/org/robolectric/SingleSdkRobolectricTestRunner.java
@@ -0,0 +1,47 @@
+package org.robolectric;
+
+import android.os.Build;
+import java.util.Collections;
+import java.util.List;
+import javax.annotation.Nonnull;
+import org.junit.runners.model.InitializationError;
+import org.robolectric.annotation.Config;
+import org.robolectric.internal.Sdk;
+import org.robolectric.pluginapi.SdkPicker;
+import org.robolectric.pluginapi.UsesSdk;
+import org.robolectric.util.TestUtil;
+import org.robolectric.util.inject.Injector;
+
+class SingleSdkRobolectricTestRunner extends RobolectricTestRunner {
+
+ private static final Injector INJECTOR = defaultInjector()
+ .register(SdkPicker.class, SingleSdkPicker.class);
+
+ SingleSdkRobolectricTestRunner(Class<?> testClass) throws InitializationError {
+ super(testClass, INJECTOR);
+ }
+
+ @Override
+ ResourcesMode getResourcesMode() {
+ return ResourcesMode.binary;
+ }
+
+ public static class SingleSdkPicker implements SdkPicker {
+
+ private final Sdk sdk;
+
+ public SingleSdkPicker() {
+ this(Build.VERSION_CODES.P);
+ }
+
+ SingleSdkPicker(int apiLevel) {
+ this.sdk = TestUtil.getSdkProvider().getSdk(apiLevel);
+ }
+
+ @Nonnull
+ @Override
+ public List<Sdk> selectSdks(Config config, UsesSdk usesSdk) {
+ return Collections.singletonList(sdk);
+ }
+ }
+}
diff --git a/robolectric/src/test/java/org/robolectric/TestRunnerSequenceTest.java b/robolectric/src/test/java/org/robolectric/TestRunnerSequenceTest.java
index b854eb0af..03a92a5bf 100644
--- a/robolectric/src/test/java/org/robolectric/TestRunnerSequenceTest.java
+++ b/robolectric/src/test/java/org/robolectric/TestRunnerSequenceTest.java
@@ -1,15 +1,11 @@
package org.robolectric;
-import static android.os.Build.VERSION_CODES.JELLY_BEAN;
import static com.google.common.truth.Truth.assertThat;
-import static java.util.Collections.singletonList;
import static org.junit.Assert.fail;
-import static org.robolectric.util.TestUtil.resourceFile;
import android.app.Application;
import java.lang.reflect.Method;
import java.util.ArrayList;
-import java.util.Collections;
import java.util.List;
import javax.annotation.Nonnull;
import org.junit.After;
@@ -26,11 +22,6 @@ import org.robolectric.annotation.Config;
import org.robolectric.annotation.internal.DoNotInstrument;
import org.robolectric.internal.bytecode.InstrumentationConfiguration;
import org.robolectric.internal.bytecode.Sandbox;
-import org.robolectric.manifest.AndroidManifest;
-import org.robolectric.pluginapi.SdkPicker;
-import org.robolectric.plugins.DefaultSdkPicker;
-import org.robolectric.plugins.DefaultSdkProvider;
-import org.robolectric.util.inject.Injector;
@RunWith(JUnit4.class)
public class TestRunnerSequenceTest {
@@ -77,14 +68,6 @@ public class TestRunnerSequenceTest {
@Test public void whenNoAppManifest_shouldRunThingsInTheRightOrder() throws Exception {
assertNoFailures(run(new Runner(SimpleTest.class) {
- @Override protected AndroidManifest getAppManifest(Config config) {
- return new AndroidManifest(null, null, null, "package") {
- @Override
- public int getTargetSdkVersion() {
- return Collections.min(SDK_PROVIDER.getSupportedSdks()).getApiLevel();
- }
- };
- }
}));
assertThat(StateHolder.transcript).containsExactly(
"configureSandbox",
@@ -143,15 +126,10 @@ public class TestRunnerSequenceTest {
}
}
- public static class Runner extends RobolectricTestRunner {
-
- static final DefaultSdkProvider SDK_PROVIDER = new DefaultSdkProvider(null);
- static final DefaultSdkPicker SDK_PICKER = new DefaultSdkPicker(
- singletonList(SDK_PROVIDER.getSdk(JELLY_BEAN)), null);
- static final Injector INJECTOR = defaultInjector().register(SdkPicker.class, SDK_PICKER);
+ public static class Runner extends SingleSdkRobolectricTestRunner {
Runner(Class<?> testClass) throws InitializationError {
- super(testClass, INJECTOR);
+ super(testClass);
}
@Nonnull
@@ -162,10 +140,6 @@ public class TestRunnerSequenceTest {
return builder.build();
}
- protected AndroidManifest getAppManifest(Config config) {
- return new AndroidManifest(resourceFile("TestAndroidManifest.xml"), resourceFile("res"), resourceFile("assets"));
- }
-
@Nonnull
@Override protected Class<? extends TestLifecycle> getTestLifecycleClass() {
return MyTestLifecycle.class;
diff --git a/robolectric/src/test/java/org/robolectric/util/TestUtil.java b/robolectric/src/test/java/org/robolectric/util/TestUtil.java
index 5c934dba1..1945218b7 100644
--- a/robolectric/src/test/java/org/robolectric/util/TestUtil.java
+++ b/robolectric/src/test/java/org/robolectric/util/TestUtil.java
@@ -5,7 +5,6 @@ import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
-import java.nio.file.FileSystem;
import java.nio.file.Path;
import org.junit.Test;
import org.junit.runners.model.InitializationError;
@@ -24,7 +23,7 @@ public abstract class TestUtil {
private static ResourcePath TEST_RESOURCE_PATH;
private static File testDirLocation;
private static LegacyDependencyResolver dependencyResolver;
- private static final SdkProvider sdkProvider = new DefaultSdkProvider(null);
+ private static SdkProvider sdkProvider;
public static Path resourcesBaseDir() {
return resourcesBaseDirFile().toPath();
@@ -52,23 +51,18 @@ public abstract class TestUtil {
public static ResourcePath systemResources() {
if (SYSTEM_RESOURCE_PATH == null) {
- Sdk sdk = sdkProvider.getMaxSupportedSdk();
- FileSystem fs =
- Fs.forJar(
- getDependencyResolver().getLocalArtifactUrl(sdk.getAndroidSdkDependency()));
+ Sdk sdk = getSdkProvider().getMaxSupportedSdk();
+ Path path = sdk.getJarPath();
SYSTEM_RESOURCE_PATH =
new ResourcePath(
- android.R.class, fs.getPath("raw-res/res"), fs.getPath("raw-res/assets"));
+ android.R.class, path.resolve("raw-res/res"), path.resolve("raw-res/assets"));
}
return SYSTEM_RESOURCE_PATH;
}
public static ResourcePath sdkResources(int apiLevel) {
- FileSystem sdkResFs =
- Fs.forJar(
- getDependencyResolver()
- .getLocalArtifactUrl(sdkProvider.getSdk(apiLevel).getAndroidSdkDependency()));
- return new ResourcePath(null, sdkResFs.getPath("raw-res/res"), null, null);
+ Path path = getSdkProvider().getSdk(apiLevel).getJarPath();
+ return new ResourcePath(null, path.resolve("raw-res/res"), null, null);
}
public static String readString(InputStream is) throws IOException {
@@ -83,6 +77,13 @@ public abstract class TestUtil {
return dependencyResolver;
}
+ public static SdkProvider getSdkProvider() {
+ if (sdkProvider == null) {
+ sdkProvider = new DefaultSdkProvider(getDependencyResolver());
+ }
+ return sdkProvider;
+ }
+
public static void resetSystemProperty(String name, String value) {
if (value == null) {
System.clearProperty(name);