Convert desugared library test
Bug: b:231287675
Change-Id: Ia6e1298b1d5a8f55c06ead7771649bef3b564ac5
diff --git a/src/test/java/com/android/tools/r8/TestParametersBuilder.java b/src/test/java/com/android/tools/r8/TestParametersBuilder.java
index cf33980..59d2bc6 100644
--- a/src/test/java/com/android/tools/r8/TestParametersBuilder.java
+++ b/src/test/java/com/android/tools/r8/TestParametersBuilder.java
@@ -187,6 +187,7 @@
private boolean enableApiLevels = false;
private boolean enableApiLevelsForCf = false;
+ private boolean onlyDexRuntimeApiLevel = false;
private Predicate<AndroidApiLevel> apiLevelFilter = param -> false;
private List<AndroidApiLevel> explicitApiLevels = new ArrayList<>();
@@ -202,6 +203,12 @@
return withApiFilter(api -> true);
}
+ public TestParametersBuilder withOnlyDexRuntimeApiLevel() {
+ enableApiLevels = true;
+ onlyDexRuntimeApiLevel = true;
+ return this;
+ }
+
public TestParametersBuilder enableApiLevelsForCf() {
enableApiLevelsForCf = true;
return this;
@@ -266,6 +273,10 @@
if (runtime.isCf() && !enableApiLevelsForCf) {
return Stream.of(new TestParameters(runtime));
}
+ AndroidApiLevel vmLevel = runtime.maxSupportedApiLevel();
+ if (onlyDexRuntimeApiLevel) {
+ return Stream.of(new TestParameters(runtime, vmLevel));
+ }
List<AndroidApiLevel> sortedApiLevels =
AndroidApiLevel.getAndroidApiLevelsSorted().stream()
.filter(apiLevelFilter)
@@ -273,7 +284,6 @@
if (sortedApiLevels.isEmpty()) {
return Stream.of();
}
- AndroidApiLevel vmLevel = runtime.maxSupportedApiLevel();
AndroidApiLevel lowestApplicable = sortedApiLevels.get(0);
if (vmLevel.getLevel() < lowestApplicable.getLevel()) {
return Stream.of();
@@ -281,6 +291,9 @@
if (sortedApiLevels.size() > 1) {
for (int i = sortedApiLevels.size() - 1; i >= 0; i--) {
AndroidApiLevel highestApplicable = sortedApiLevels.get(i);
+ if (onlyDexRuntimeApiLevel) {
+ return Stream.of(new TestParameters(runtime, highestApplicable));
+ }
if (highestApplicable.getLevel() <= vmLevel.getLevel()
&& lowestApplicable != highestApplicable) {
Set<AndroidApiLevel> set = new TreeSet<>();
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryMismatchTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryMismatchTest.java
index 6ade9c9..91fa3d5 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryMismatchTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryMismatchTest.java
@@ -6,6 +6,9 @@
import static com.android.tools.r8.DiagnosticsMatcher.diagnosticMessage;
import static com.android.tools.r8.DiagnosticsMatcher.diagnosticType;
+import static com.android.tools.r8.desugar.desugaredlibrary.test.CompilationSpecification.D8_L8DEBUG;
+import static com.android.tools.r8.desugar.desugaredlibrary.test.LibraryDesugaringSpecification.JDK8;
+import static com.android.tools.r8.desugar.desugaredlibrary.test.LibraryDesugaringSpecification.getJdk8Jdk11;
import static org.hamcrest.CoreMatchers.allOf;
import static org.hamcrest.CoreMatchers.containsString;
@@ -13,13 +16,16 @@
import com.android.tools.r8.LibraryDesugaringTestConfiguration;
import com.android.tools.r8.StringResource;
import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.ToolHelper.DexVm.Version;
+import com.android.tools.r8.desugar.desugaredlibrary.test.CompilationSpecification;
+import com.android.tools.r8.desugar.desugaredlibrary.test.LibraryDesugaringSpecification;
import com.android.tools.r8.errors.DesugaredLibraryMismatchDiagnostic;
import com.android.tools.r8.ir.desugar.desugaredlibrary.legacyspecification.LegacyDesugaredLibrarySpecification;
import com.android.tools.r8.origin.Origin;
-import com.android.tools.r8.utils.AndroidApiLevel;
import com.android.tools.r8.utils.Box;
+import com.google.common.collect.ImmutableList;
import java.nio.file.Path;
-import java.util.Collection;
+import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -29,20 +35,30 @@
public class DesugaredLibraryMismatchTest extends DesugaredLibraryTestBase {
private final TestParameters parameters;
- private final AndroidApiLevel apiLevel;
+ private final CompilationSpecification compilationSpecification;
+ private final LibraryDesugaringSpecification libraryDesugaringSpecification;
- @Parameters(name = "API level: {1}")
- public static Collection<Object[]> data() {
+ @Parameters(name = "{0}, spec: {1}, {2}")
+ public static List<Object[]> data() {
return buildParameters(
- getTestParameters().withNoneRuntime().build(),
- new AndroidApiLevel[] {
- AndroidApiLevel.LATEST, AndroidApiLevel.O, AndroidApiLevel.N_MR1, AndroidApiLevel.B
- });
+ getTestParameters()
+ .withDexRuntime(Version.first())
+ .withDexRuntime(Version.V7_0_0)
+ .withDexRuntime(Version.V8_1_0)
+ .withDexRuntime(Version.last())
+ .withOnlyDexRuntimeApiLevel()
+ .build(),
+ getJdk8Jdk11(),
+ ImmutableList.of(D8_L8DEBUG));
}
- public DesugaredLibraryMismatchTest(TestParameters parameters, AndroidApiLevel apiLevel) {
+ public DesugaredLibraryMismatchTest(
+ TestParameters parameters,
+ LibraryDesugaringSpecification libraryDesugaringSpecification,
+ CompilationSpecification compilationSpecification) {
this.parameters = parameters;
- this.apiLevel = apiLevel;
+ this.compilationSpecification = compilationSpecification;
+ this.libraryDesugaringSpecification = libraryDesugaringSpecification;
}
@Test
@@ -51,21 +67,19 @@
Path libraryDex =
testForD8(Backend.DEX)
.addProgramClasses(Library.class)
- .setMinApi(apiLevel)
+ .setMinApi(parameters.getApiLevel())
.compile()
.writeToZip();
// Combine DEX input without library desugaring with dexing with library desugaring.
try {
- testForD8()
- .addLibraryFiles(getLibraryFile())
+ testForDesugaredLibrary(parameters, libraryDesugaringSpecification, compilationSpecification)
.addProgramFiles(libraryDex)
.addProgramClasses(TestRunner.class)
- .setMinApi(apiLevel)
- .enableCoreLibraryDesugaring(LibraryDesugaringTestConfiguration.forApiLevel(apiLevel))
.compileWithExpectedDiagnostics(
diagnostics -> {
- if (requiresAnyCoreLibDesugaring(apiLevel)) {
+ if (requiresAnyCoreLibDesugaring(
+ parameters.getApiLevel(), libraryDesugaringSpecification != JDK8)) {
diagnostics.assertNoInfos();
diagnostics.assertAllWarningsMatch(
diagnosticMessage(
@@ -89,17 +103,14 @@
Path desugaredLibrary =
testForD8(Backend.CF)
.addProgramClasses(Library.class)
- .setMinApi(apiLevel)
+ .setMinApi(parameters.getApiLevel())
.compile()
.writeToZip();
// Combine CF desugared input without library desugaring with dexing with library desugaring.
- testForD8()
- .addLibraryFiles(getLibraryFile())
+ testForDesugaredLibrary(parameters, libraryDesugaringSpecification, compilationSpecification)
.addProgramFiles(desugaredLibrary)
.addProgramClasses(TestRunner.class)
- .setMinApi(apiLevel)
- .enableCoreLibraryDesugaring(LibraryDesugaringTestConfiguration.forApiLevel(apiLevel))
.compile();
}
@@ -109,7 +120,7 @@
Path desugaredLibrary =
testForD8(Backend.CF)
.addProgramClasses(Library.class)
- .setMinApi(apiLevel)
+ .setMinApi(parameters.getApiLevel())
.compile()
.writeToZip();
@@ -117,17 +128,14 @@
Path desugaredLibraryDex =
testForD8(Backend.DEX)
.addProgramFiles(desugaredLibrary)
- .setMinApi(apiLevel)
+ .setMinApi(parameters.getApiLevel())
.disableDesugaring()
.compile()
.writeToZip();
- testForD8()
- .addLibraryFiles(getLibraryFile())
+ testForDesugaredLibrary(parameters, libraryDesugaringSpecification, compilationSpecification)
.addProgramFiles(desugaredLibraryDex)
.addProgramClasses(TestRunner.class)
- .setMinApi(apiLevel)
- .enableCoreLibraryDesugaring(LibraryDesugaringTestConfiguration.forApiLevel(apiLevel))
.compile();
}
@@ -137,8 +145,9 @@
Path desugaredLibrary =
testForD8(Backend.CF)
.addProgramClasses(Library.class)
- .setMinApi(apiLevel)
- .enableCoreLibraryDesugaring(LibraryDesugaringTestConfiguration.forApiLevel(apiLevel))
+ .setMinApi(parameters.getApiLevel())
+ .enableCoreLibraryDesugaring(
+ LibraryDesugaringTestConfiguration.forApiLevel(parameters.getApiLevel()))
.compile()
.writeToZip();
@@ -147,10 +156,10 @@
testForD8()
.addProgramFiles(desugaredLibrary)
.addProgramClasses(TestRunner.class)
- .setMinApi(apiLevel)
+ .setMinApi(parameters.getApiLevel())
.compileWithExpectedDiagnostics(
diagnostics -> {
- if (requiresAnyCoreLibDesugaring(apiLevel)) {
+ if (requiresAnyCoreLibDesugaring(parameters.getApiLevel())) {
diagnostics.assertOnlyErrors();
diagnostics.assertErrorsMatch(
diagnosticType(DesugaredLibraryMismatchDiagnostic.class));
@@ -166,11 +175,9 @@
public void testMergeLibraryDesugaredWithNotLibraryDesugared() throws Exception {
// DEX code with library desugaring.
Path libraryDex =
- testForD8(Backend.DEX)
- .addLibraryFiles(getLibraryFile())
+ testForDesugaredLibrary(
+ parameters, libraryDesugaringSpecification, compilationSpecification)
.addProgramClasses(Library.class)
- .setMinApi(apiLevel)
- .enableCoreLibraryDesugaring(LibraryDesugaringTestConfiguration.forApiLevel(apiLevel))
.compile()
.writeToZip();
@@ -178,7 +185,7 @@
Path programDex =
testForD8(Backend.DEX)
.addProgramClasses(TestRunner.class)
- .setMinApi(apiLevel)
+ .setMinApi(parameters.getApiLevel())
.compile()
.writeToZip();
@@ -186,10 +193,11 @@
testForD8()
.addProgramFiles(libraryDex)
.addProgramFiles(programDex)
- .setMinApi(apiLevel)
+ .setMinApi(parameters.getApiLevel())
.compileWithExpectedDiagnostics(
diagnostics -> {
- if (requiresAnyCoreLibDesugaring(apiLevel)) {
+ if (requiresAnyCoreLibDesugaring(
+ parameters.getApiLevel(), libraryDesugaringSpecification != JDK8)) {
diagnostics.assertOnlyErrors();
diagnostics.assertErrorsMatch(
diagnosticType(DesugaredLibraryMismatchDiagnostic.class));
@@ -209,10 +217,10 @@
Path libraryDex =
testForD8(Backend.DEX)
.addProgramClasses(Library.class)
- .setMinApi(apiLevel)
+ .setMinApi(parameters.getApiLevel())
.enableCoreLibraryDesugaring(
LibraryDesugaringTestConfiguration.builder()
- .setMinApi(apiLevel)
+ .setMinApi(parameters.getApiLevel())
// Minimal configuration with a different identifier.
// The j$.time is rewritten because empty flags are equivalent to an empty
// specification, and no marker is set for empty specifications.
@@ -241,7 +249,7 @@
Path programDex =
testForD8(Backend.DEX)
.addProgramClasses(TestRunner.class)
- .setMinApi(apiLevel)
+ .setMinApi(parameters.getApiLevel())
.compile()
.writeToZip();
@@ -249,7 +257,7 @@
testForD8()
.addProgramFiles(libraryDex)
.addProgramFiles(programDex)
- .setMinApi(apiLevel)
+ .setMinApi(parameters.getApiLevel())
.compileWithExpectedDiagnostics(
diagnostics -> {
diagnostics.assertOnlyErrors();
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryWarningTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryWarningTest.java
index 1a7981a..2bd0f31 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryWarningTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryWarningTest.java
@@ -5,23 +5,21 @@
package com.android.tools.r8.desugar.desugaredlibrary;
import static com.android.tools.r8.DiagnosticsMatcher.diagnosticMessage;
+import static com.android.tools.r8.desugar.desugaredlibrary.test.CompilationSpecification.D8_L8DEBUG;
+import static com.android.tools.r8.desugar.desugaredlibrary.test.CompilationSpecification.D8_L8SHRINK;
+import static com.android.tools.r8.desugar.desugaredlibrary.test.LibraryDesugaringSpecification.JDK8;
+import static com.android.tools.r8.desugar.desugaredlibrary.test.LibraryDesugaringSpecification.getJdk8Jdk11;
import static org.hamcrest.core.StringContains.containsString;
-import com.android.tools.r8.CompilationMode;
-import com.android.tools.r8.L8Command;
-import com.android.tools.r8.OutputMode;
-import com.android.tools.r8.StringResource;
-import com.android.tools.r8.TestDiagnosticMessagesImpl;
import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.ToolHelper;
-import com.android.tools.r8.origin.Origin;
-import com.android.tools.r8.utils.BooleanUtils;
-import java.nio.file.Path;
-import java.util.Arrays;
+import com.android.tools.r8.desugar.desugaredlibrary.test.CompilationSpecification;
+import com.android.tools.r8.desugar.desugaredlibrary.test.LibraryDesugaringSpecification;
+import com.google.common.collect.ImmutableList;
import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class)
public class DesugaredLibraryWarningTest extends DesugaredLibraryTestBase {
@@ -36,44 +34,44 @@
+ "-keep class j$.util.function.Function { *; }";
private final TestParameters parameters;
- private final boolean shrinkDesugaredLibrary;
+ private final CompilationSpecification compilationSpecification;
+ private final LibraryDesugaringSpecification libraryDesugaringSpecification;
- @Parameterized.Parameters(name = "{1}, shrinkDesugaredLibrary: {0}")
+ @Parameters(name = "{0}, spec: {1}, {2}")
public static List<Object[]> data() {
return buildParameters(
- BooleanUtils.values(), getTestParameters().withDexRuntimes().withAllApiLevels().build());
+ getTestParameters().withDexRuntimes().withAllApiLevels().build(),
+ getJdk8Jdk11(),
+ ImmutableList.of(D8_L8DEBUG, D8_L8SHRINK));
}
- public DesugaredLibraryWarningTest(boolean shrinkDesugaredLibrary, TestParameters parameters) {
- this.shrinkDesugaredLibrary = shrinkDesugaredLibrary;
+ public DesugaredLibraryWarningTest(
+ TestParameters parameters,
+ LibraryDesugaringSpecification libraryDesugaringSpecification,
+ CompilationSpecification compilationSpecification) {
this.parameters = parameters;
+ this.compilationSpecification = compilationSpecification;
+ this.libraryDesugaringSpecification = libraryDesugaringSpecification;
}
@Test
public void testDesugaredLibraryContent() throws Exception {
- TestDiagnosticMessagesImpl diagnosticsHandler = new TestDiagnosticMessagesImpl();
- Path desugaredLib = temp.newFolder().toPath().resolve("desugar_jdk_libs_dex.zip");
- L8Command.Builder l8Builder =
- L8Command.builder(diagnosticsHandler)
- .addLibraryFiles(getLibraryFile())
- .addProgramFiles(ToolHelper.getDesugarJDKLibs())
- .addProgramFiles(ToolHelper.DESUGAR_LIB_CONVERSIONS)
- .setMode(shrinkDesugaredLibrary ? CompilationMode.RELEASE : CompilationMode.DEBUG)
- .addDesugaredLibraryConfiguration(
- StringResource.fromFile(ToolHelper.getDesugarLibJsonForTesting()))
- .setMinApiLevel(parameters.getApiLevel().getLevel())
- .setOutput(desugaredLib, OutputMode.DexIndexed);
- if (shrinkDesugaredLibrary) {
- l8Builder.addProguardConfiguration(
- Arrays.asList(FUNCTION_KEEP.split(System.lineSeparator())), Origin.unknown());
- }
- ToolHelper.runL8(l8Builder.build(), options -> {});
- if (isJDK11DesugaredLibrary()) {
- diagnosticsHandler.assertNoErrors();
- diagnosticsHandler.assertAllWarningsMatch(
- diagnosticMessage(containsString("Specification conversion")));
- } else {
- diagnosticsHandler.assertNoMessages();
- }
+ testForL8(parameters.getApiLevel())
+ .apply(
+ l8TestBuilder ->
+ libraryDesugaringSpecification.configureL8TestBuilder(
+ l8TestBuilder, compilationSpecification.isL8Shrink(), FUNCTION_KEEP))
+ .compile()
+ .inspectDiagnosticMessages(
+ diagnosticsHandler -> {
+ if (libraryDesugaringSpecification != JDK8) {
+ diagnosticsHandler.assertNoErrors();
+ diagnosticsHandler.assertAllWarningsMatch(
+ diagnosticMessage(containsString("Specification conversion")));
+ } else {
+
+ diagnosticsHandler.assertNoMessages();
+ }
+ });
}
}
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLocalDateReflectedTypePassedToStaticType.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLocalDateReflectedTypePassedToStaticType.java
index 1245c7e..44ee001 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLocalDateReflectedTypePassedToStaticType.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLocalDateReflectedTypePassedToStaticType.java
@@ -4,12 +4,14 @@
package com.android.tools.r8.desugar.desugaredlibrary;
+import static com.android.tools.r8.desugar.desugaredlibrary.test.CompilationSpecification.DEFAULT_SPECIFICATIONS;
+import static com.android.tools.r8.desugar.desugaredlibrary.test.LibraryDesugaringSpecification.getJdk8Jdk11;
import static org.hamcrest.core.StringContains.containsString;
-import com.android.tools.r8.D8TestRunResult;
-import com.android.tools.r8.R8TestRunResult;
+import com.android.tools.r8.SingleTestRunResult;
import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.utils.BooleanUtils;
+import com.android.tools.r8.desugar.desugaredlibrary.test.CompilationSpecification;
+import com.android.tools.r8.desugar.desugaredlibrary.test.LibraryDesugaringSpecification;
import com.android.tools.r8.utils.StringUtils;
import java.time.LocalDate;
import java.util.List;
@@ -21,69 +23,41 @@
@RunWith(Parameterized.class)
public class DesugaredLocalDateReflectedTypePassedToStaticType extends DesugaredLibraryTestBase {
- private final TestParameters parameters;
- private final boolean shrinkDesugaredLibrary;
private static final String EXPECTED = StringUtils.lines("1992");
- @Parameters(name = "{0}, shrinkDesugaredLibrary: {1}")
+ private final TestParameters parameters;
+ private final CompilationSpecification compilationSpecification;
+ private final LibraryDesugaringSpecification libraryDesugaringSpecification;
+
+ @Parameters(name = "{0}, spec: {1}, {2}")
public static List<Object[]> data() {
return buildParameters(
- getTestParameters().withDexRuntimes().withAllApiLevels().build(), BooleanUtils.values());
+ getTestParameters().withDexRuntimes().withAllApiLevels().build(),
+ getJdk8Jdk11(),
+ DEFAULT_SPECIFICATIONS);
}
public DesugaredLocalDateReflectedTypePassedToStaticType(
- TestParameters parameters, boolean shrinkDesugaredLibrary) {
+ TestParameters parameters,
+ LibraryDesugaringSpecification libraryDesugaringSpecification,
+ CompilationSpecification compilationSpecification) {
this.parameters = parameters;
- this.shrinkDesugaredLibrary = shrinkDesugaredLibrary;
+ this.compilationSpecification = compilationSpecification;
+ this.libraryDesugaringSpecification = libraryDesugaringSpecification;
}
@Test
- public void testD8() throws Exception {
- KeepRuleConsumer keepRuleConsumer = createKeepRuleConsumer(parameters);
- D8TestRunResult runResult =
- testForD8()
- .addLibraryFiles(getLibraryFile())
- .addInnerClasses(DesugaredLocalDateReflectedTypePassedToStaticType.class)
- .setMinApi(parameters.getApiLevel())
- .enableCoreLibraryDesugaring(parameters.getApiLevel(), keepRuleConsumer)
- .setIncludeClassesChecksum(true)
- .compile()
- .addDesugaredCoreLibraryRunClassPath(
- this::buildDesugaredLibrary,
- parameters.getApiLevel(),
- keepRuleConsumer.get(),
- shrinkDesugaredLibrary)
- .run(parameters.getRuntime(), Main.class);
- if (shrinkDesugaredLibrary && requiresTimeDesugaring(parameters)) {
- runResult.assertFailureWithErrorThatMatches(
- containsString("java.lang.NoSuchMethodException"));
- } else {
- runResult.assertSuccessWithOutput(EXPECTED);
- }
- }
-
- @Test
- public void testR8() throws Exception {
- KeepRuleConsumer keepRuleConsumer = createKeepRuleConsumer(parameters);
- R8TestRunResult runResult =
- testForR8(parameters.getBackend())
- .addLibraryFiles(getLibraryFile())
+ public void testDate() throws Exception {
+ SingleTestRunResult<?> run =
+ testForDesugaredLibrary(
+ parameters, libraryDesugaringSpecification, compilationSpecification)
.addInnerClasses(DesugaredLocalDateReflectedTypePassedToStaticType.class)
.addKeepMainRule(Main.class)
- .setMinApi(parameters.getApiLevel())
- .enableCoreLibraryDesugaring(parameters.getApiLevel(), keepRuleConsumer)
- .compile()
- .addDesugaredCoreLibraryRunClassPath(
- this::buildDesugaredLibrary,
- parameters.getApiLevel(),
- keepRuleConsumer.get(),
- shrinkDesugaredLibrary)
.run(parameters.getRuntime(), Main.class);
- if (shrinkDesugaredLibrary && requiresTimeDesugaring(parameters)) {
- runResult.assertFailureWithErrorThatMatches(
- containsString("java.lang.NoSuchMethodException"));
+ if (compilationSpecification.isL8Shrink() && requiresTimeDesugaring(parameters)) {
+ run.assertFailureWithErrorThatMatches(containsString("java.lang.NoSuchMethodException"));
} else {
- runResult.assertSuccessWithOutput(EXPECTED);
+ run.assertSuccessWithOutput(EXPECTED);
}
}
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLocalDateReflectionTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLocalDateReflectionTest.java
index ebc0f68..43dc91b 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLocalDateReflectionTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLocalDateReflectionTest.java
@@ -4,13 +4,15 @@
package com.android.tools.r8.desugar.desugaredlibrary;
+import static com.android.tools.r8.desugar.desugaredlibrary.test.CompilationSpecification.DEFAULT_SPECIFICATIONS;
+import static com.android.tools.r8.desugar.desugaredlibrary.test.LibraryDesugaringSpecification.getJdk8Jdk11;
import static org.hamcrest.core.StringContains.containsString;
-import com.android.tools.r8.D8TestRunResult;
-import com.android.tools.r8.R8TestRunResult;
+import com.android.tools.r8.SingleTestRunResult;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.ToolHelper.DexVm;
-import com.android.tools.r8.utils.BooleanUtils;
+import com.android.tools.r8.desugar.desugaredlibrary.test.CompilationSpecification;
+import com.android.tools.r8.desugar.desugaredlibrary.test.LibraryDesugaringSpecification;
import com.android.tools.r8.utils.StringUtils;
import java.util.List;
import org.junit.Test;
@@ -21,63 +23,36 @@
@RunWith(Parameterized.class)
public class DesugaredLocalDateReflectionTest extends DesugaredLibraryTestBase {
- private final TestParameters parameters;
- private final boolean shrinkDesugaredLibrary;
private static final String EXPECTED = StringUtils.lines("1992");
- @Parameters(name = "{0}, shrinkDesugaredLibrary: {1}")
+ private final TestParameters parameters;
+ private final CompilationSpecification compilationSpecification;
+ private final LibraryDesugaringSpecification libraryDesugaringSpecification;
+
+ @Parameters(name = "{0}, spec: {1}, {2}")
public static List<Object[]> data() {
return buildParameters(
- getTestParameters().withDexRuntimes().withAllApiLevels().build(), BooleanUtils.values());
+ getTestParameters().withDexRuntimes().withAllApiLevels().build(),
+ getJdk8Jdk11(),
+ DEFAULT_SPECIFICATIONS);
}
public DesugaredLocalDateReflectionTest(
- TestParameters parameters, boolean shrinkDesugaredLibrary) {
+ TestParameters parameters,
+ LibraryDesugaringSpecification libraryDesugaringSpecification,
+ CompilationSpecification compilationSpecification) {
this.parameters = parameters;
- this.shrinkDesugaredLibrary = shrinkDesugaredLibrary;
+ this.compilationSpecification = compilationSpecification;
+ this.libraryDesugaringSpecification = libraryDesugaringSpecification;
}
@Test
- public void testD8() throws Exception {
- KeepRuleConsumer keepRuleConsumer = createKeepRuleConsumer(parameters);
- D8TestRunResult runResult =
- testForD8()
- .addLibraryFiles(getLibraryFile())
- .addInnerClasses(DesugaredLocalDateReflectionTest.class)
- .setMinApi(parameters.getApiLevel())
- .enableCoreLibraryDesugaring(parameters.getApiLevel(), keepRuleConsumer)
- .setIncludeClassesChecksum(true)
- .compile()
- .addDesugaredCoreLibraryRunClassPath(
- this::buildDesugaredLibrary,
- parameters.getApiLevel(),
- keepRuleConsumer.get(),
- shrinkDesugaredLibrary)
- .run(parameters.getRuntime(), Main.class);
- if (parameters.getRuntime().asDex().getVm().isNewerThan(DexVm.ART_7_0_0_HOST)) {
- runResult.assertSuccessWithOutput(EXPECTED);
- } else {
- runResult.assertFailureWithErrorThatMatches(
- containsString("java.lang.ClassNotFoundException: java.time.LocalDate"));
- }
- }
-
- @Test
- public void testR8() throws Exception {
- KeepRuleConsumer keepRuleConsumer = createKeepRuleConsumer(parameters);
- R8TestRunResult runResult =
- testForR8(parameters.getBackend())
- .addLibraryFiles(getLibraryFile())
- .addInnerClasses(DesugaredLocalDateReflectionTest.class)
+ public void testDate() throws Exception {
+ SingleTestRunResult<?> runResult =
+ testForDesugaredLibrary(
+ parameters, libraryDesugaringSpecification, compilationSpecification)
+ .addInnerClasses(getClass())
.addKeepMainRule(Main.class)
- .setMinApi(parameters.getApiLevel())
- .enableCoreLibraryDesugaring(parameters.getApiLevel(), keepRuleConsumer)
- .compile()
- .addDesugaredCoreLibraryRunClassPath(
- this::buildDesugaredLibrary,
- parameters.getApiLevel(),
- keepRuleConsumer.get(),
- shrinkDesugaredLibrary)
.run(parameters.getRuntime(), Main.class);
if (parameters.getRuntime().asDex().getVm().isNewerThan(DexVm.ART_7_0_0_HOST)) {
runResult.assertSuccessWithOutput(EXPECTED);
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredReflectedDesugaredTypePassedToStaticTypeTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredReflectedDesugaredTypePassedToStaticTypeTest.java
index 139103d..6c1f23f 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredReflectedDesugaredTypePassedToStaticTypeTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredReflectedDesugaredTypePassedToStaticTypeTest.java
@@ -4,12 +4,15 @@
package com.android.tools.r8.desugar.desugaredlibrary;
+import static com.android.tools.r8.desugar.desugaredlibrary.test.CompilationSpecification.DEFAULT_SPECIFICATIONS;
+import static com.android.tools.r8.desugar.desugaredlibrary.test.LibraryDesugaringSpecification.JDK8;
+import static com.android.tools.r8.desugar.desugaredlibrary.test.LibraryDesugaringSpecification.getJdk8Jdk11;
import static org.hamcrest.core.StringContains.containsString;
-import com.android.tools.r8.D8TestRunResult;
-import com.android.tools.r8.R8TestRunResult;
+import com.android.tools.r8.SingleTestRunResult;
import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.utils.BooleanUtils;
+import com.android.tools.r8.desugar.desugaredlibrary.test.CompilationSpecification;
+import com.android.tools.r8.desugar.desugaredlibrary.test.LibraryDesugaringSpecification;
import com.android.tools.r8.utils.StringUtils;
import java.time.LocalDate;
import java.util.List;
@@ -22,65 +25,37 @@
public class DesugaredReflectedDesugaredTypePassedToStaticTypeTest
extends DesugaredLibraryTestBase {
- private final TestParameters parameters;
- private final boolean shrinkDesugaredLibrary;
private static final String EXPECTED = StringUtils.lines("1992", "1992");
+ private final TestParameters parameters;
+ private final CompilationSpecification compilationSpecification;
+ private final LibraryDesugaringSpecification libraryDesugaringSpecification;
- @Parameters(name = "{0}, shrinkDesugaredLibrary: {1}")
+ @Parameters(name = "{0}, spec: {1}, {2}")
public static List<Object[]> data() {
return buildParameters(
- getTestParameters().withDexRuntimes().withAllApiLevels().build(), BooleanUtils.values());
+ getTestParameters().withDexRuntimes().withAllApiLevels().build(),
+ getJdk8Jdk11(),
+ DEFAULT_SPECIFICATIONS);
}
public DesugaredReflectedDesugaredTypePassedToStaticTypeTest(
- TestParameters parameters, boolean shrinkDesugaredLibrary) {
+ TestParameters parameters,
+ LibraryDesugaringSpecification libraryDesugaringSpecification,
+ CompilationSpecification compilationSpecification) {
this.parameters = parameters;
- this.shrinkDesugaredLibrary = shrinkDesugaredLibrary;
+ this.compilationSpecification = compilationSpecification;
+ this.libraryDesugaringSpecification = libraryDesugaringSpecification;
}
@Test
- public void testD8() throws Exception {
- KeepRuleConsumer keepRuleConsumer = createKeepRuleConsumer(parameters);
- D8TestRunResult runResult =
- testForD8()
- .addLibraryFiles(getLibraryFile())
- .addInnerClasses(DesugaredReflectedDesugaredTypePassedToStaticTypeTest.class)
- .setMinApi(parameters.getApiLevel())
- .enableCoreLibraryDesugaring(parameters.getApiLevel(), keepRuleConsumer)
- .setIncludeClassesChecksum(true)
- .compile()
- .addDesugaredCoreLibraryRunClassPath(
- this::buildDesugaredLibrary,
- parameters.getApiLevel(),
- keepRuleConsumer.get(),
- shrinkDesugaredLibrary)
- .run(parameters.getRuntime(), Main.class);
- if (!requiresTimeDesugaring(parameters)) {
- runResult.assertFailureWithErrorThatMatches(
- containsString("java.lang.ClassNotFoundException: j$.time.LocalDate"));
- } else {
- runResult.assertSuccessWithOutput(EXPECTED);
- }
- }
-
- @Test
- public void testR8() throws Exception {
- KeepRuleConsumer keepRuleConsumer = createKeepRuleConsumer(parameters);
- R8TestRunResult runResult =
- testForR8(parameters.getBackend())
- .addLibraryFiles(getLibraryFile())
- .addInnerClasses(DesugaredReflectedDesugaredTypePassedToStaticTypeTest.class)
+ public void testDate() throws Exception {
+ SingleTestRunResult<?> runResult =
+ testForDesugaredLibrary(
+ parameters, libraryDesugaringSpecification, compilationSpecification)
+ .addInnerClasses(getClass())
.addKeepMainRule(Main.class)
- .setMinApi(parameters.getApiLevel())
- .enableCoreLibraryDesugaring(parameters.getApiLevel(), keepRuleConsumer)
- .compile()
- .addDesugaredCoreLibraryRunClassPath(
- this::buildDesugaredLibrary,
- parameters.getApiLevel(),
- keepRuleConsumer.get(),
- shrinkDesugaredLibrary)
.run(parameters.getRuntime(), Main.class);
- if (!requiresTimeDesugaring(parameters)) {
+ if (!requiresTimeDesugaring(parameters, libraryDesugaringSpecification != JDK8)) {
runResult.assertFailureWithErrorThatMatches(
containsString("java.lang.ClassNotFoundException: j$.time.LocalDate"));
} else {
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/test/DesugaredLibraryTestBuilder.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/test/DesugaredLibraryTestBuilder.java
index b112609..49c1b94 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/test/DesugaredLibraryTestBuilder.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/test/DesugaredLibraryTestBuilder.java
@@ -14,6 +14,7 @@
import com.android.tools.r8.TestBase.Backend;
import com.android.tools.r8.TestCompileResult;
import com.android.tools.r8.TestCompilerBuilder;
+import com.android.tools.r8.TestCompilerBuilder.DiagnosticsConsumer;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestRuntime;
import com.android.tools.r8.TestShrinkerBuilder;
@@ -220,8 +221,19 @@
}
public DesugaredLibraryTestCompileResult<T> compile() throws Exception {
- // We compile first to generate the keep rules for the l8 compilation.
TestCompileResult<?, ? extends SingleTestRunResult<?>> compile = builder.compile();
+ return internalCompile(compile);
+ }
+
+ public DesugaredLibraryTestCompileResult<T> compileWithExpectedDiagnostics(
+ DiagnosticsConsumer consumer) throws Exception {
+ TestCompileResult<?, ? extends SingleTestRunResult<?>> compile =
+ builder.compileWithExpectedDiagnostics(consumer);
+ return internalCompile(compile);
+ }
+
+ private DesugaredLibraryTestCompileResult<T> internalCompile(
+ TestCompileResult<?, ? extends SingleTestRunResult<?>> compile) throws Exception {
String keepRule = keepRuleConsumer == null ? null : keepRuleConsumer.get();
L8TestCompileResult l8Compile = compileDesugaredLibrary(keepRule);
D8TestCompileResult customLibCompile = compileCustomLib();