diff options
author | Christian Williams <christianw@google.com> | 2019-01-13 13:50:33 -0800 |
---|---|---|
committer | Christian Williams <christianw@google.com> | 2019-01-15 17:30:41 -0800 |
commit | 76220b2839004ed864bbf0f577fcd65be7ee0f2e (patch) | |
tree | 2b96adfd828d6e527508fa82b339e4d14c40dad1 | |
parent | ad3c6c803d168c0b32aa0d11e20d71518f75f60a (diff) | |
download | robolectric-76220b2839004ed864bbf0f577fcd65be7ee0f2e.tar.gz |
Fix tests.
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); |