Convert desugared library test
Bug: b/231287675
Change-Id: I65e3bb52f5346231342c2ca263b31dc294ae40f6
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/CustomMapHierarchyTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/CustomMapHierarchyTest.java
index c4e379c..7306204 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/CustomMapHierarchyTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/CustomMapHierarchyTest.java
@@ -4,14 +4,15 @@
package com.android.tools.r8.desugar.desugaredlibrary;
-import static org.junit.Assert.assertEquals;
+import static com.android.tools.r8.desugar.desugaredlibrary.test.CompilationSpecification.SPECIFICATIONS_WITH_CF2CF;
+import static com.android.tools.r8.desugar.desugaredlibrary.test.LibraryDesugaringSpecification.getJdk8Jdk11;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.desugar.desugaredlibrary.test.CompilationSpecification;
+import com.android.tools.r8.desugar.desugaredlibrary.test.LibraryDesugaringSpecification;
import com.android.tools.r8.shaking.ProguardKeepAttributes;
-import com.android.tools.r8.utils.BooleanUtils;
import com.android.tools.r8.utils.StringUtils;
-import java.nio.file.Path;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
@@ -28,18 +29,38 @@
StringUtils.lines("B::getOrDefault", "default 1", "B::getOrDefault", "default 2");
private final TestParameters parameters;
- private final boolean shrinkDesugaredLibrary;
+ 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().withAllRuntimes().withAllApiLevelsAlsoForCf().build(),
- BooleanUtils.values());
+ getJdk8Jdk11(),
+ SPECIFICATIONS_WITH_CF2CF);
}
- public CustomMapHierarchyTest(TestParameters parameters, boolean shrinkDesugaredLibrary) {
+ public CustomMapHierarchyTest(
+ TestParameters parameters,
+ LibraryDesugaringSpecification libraryDesugaringSpecification,
+ CompilationSpecification compilationSpecification) {
this.parameters = parameters;
- this.shrinkDesugaredLibrary = shrinkDesugaredLibrary;
+ this.compilationSpecification = compilationSpecification;
+ this.libraryDesugaringSpecification = libraryDesugaringSpecification;
+ }
+
+ @Test
+ public void testCollection() throws Throwable {
+ testForDesugaredLibrary(parameters, libraryDesugaringSpecification, compilationSpecification)
+ .addInnerClasses(getClass())
+ .addKeepMainRule(Main.class)
+ .addKeepAllClassesRuleWithAllowObfuscation()
+ .addKeepAttributes(
+ ProguardKeepAttributes.SIGNATURE,
+ ProguardKeepAttributes.INNER_CLASSES,
+ ProguardKeepAttributes.ENCLOSING_METHOD)
+ .run(parameters.getRuntime(), Main.class)
+ .assertSuccessWithOutput(EXPECTED);
}
@Test
@@ -55,93 +76,6 @@
.assertSuccessWithOutput(EXPECTED);
}
- @Test
- public void testD8() throws Exception {
- Assume.assumeTrue(parameters.getRuntime().isDex());
- KeepRuleConsumer keepRuleConsumer = createKeepRuleConsumer(parameters);
- testForD8()
- .addLibraryFiles(getLibraryFile())
- .addInnerClasses(CustomMapHierarchyTest.class)
- .setMinApi(parameters.getApiLevel())
- .enableCoreLibraryDesugaring(parameters.getApiLevel(), keepRuleConsumer)
- .compile()
- .addDesugaredCoreLibraryRunClassPath(
- this::buildDesugaredLibrary,
- parameters.getApiLevel(),
- keepRuleConsumer.get(),
- shrinkDesugaredLibrary)
- .run(parameters.getRuntime(), Main.class)
- .assertSuccessWithOutput(EXPECTED);
- }
-
- @Test
- public void testD8Cf2Cf() throws Exception {
- KeepRuleConsumer keepRuleConsumer = createKeepRuleConsumer(parameters);
-
- Path jar =
- testForD8(Backend.CF)
- .addInnerClasses(CustomMapHierarchyTest.class)
- .setMinApi(parameters.getApiLevel())
- .enableCoreLibraryDesugaring(parameters.getApiLevel(), keepRuleConsumer)
- .setIncludeClassesChecksum(true)
- .setMinApi(parameters.getApiLevel())
- .allowStdoutMessages()
- .compile()
- .writeToZip();
- String desugaredLibraryKeepRules = "";
- if (shrinkDesugaredLibrary && keepRuleConsumer.get() != null) {
- // Collection keep rules is only implemented in the DEX writer.
- assertEquals(0, keepRuleConsumer.get().length());
- desugaredLibraryKeepRules = "-keep class * { *; }";
- }
- if (parameters.getRuntime().isDex()) {
- testForD8()
- .addProgramFiles(jar)
- .setMinApi(parameters.getApiLevel())
- .disableDesugaring()
- .allowStdoutMessages()
- .compile()
- .addDesugaredCoreLibraryRunClassPath(
- this::buildDesugaredLibrary,
- parameters.getApiLevel(),
- desugaredLibraryKeepRules,
- shrinkDesugaredLibrary)
- .run(parameters.getRuntime(), Main.class)
- .assertSuccessWithOutput(EXPECTED);
- } else {
- testForJvm()
- .addProgramFiles(jar)
- .addRunClasspathFiles(getDesugaredLibraryInCF(parameters, options -> {}))
- .run(parameters.getRuntime(), Main.class)
- .assertSuccessWithOutput(EXPECTED);
- }
- }
-
- @Test
- public void testR8() throws Exception {
- Assume.assumeTrue(parameters.getRuntime().isDex());
- KeepRuleConsumer keepRuleConsumer = createKeepRuleConsumer(parameters);
- testForR8(parameters.getBackend())
- .addLibraryFiles(getLibraryFile())
- .addInnerClasses(CustomMapHierarchyTest.class)
- .addKeepMainRule(Main.class)
- .addKeepAllClassesRuleWithAllowObfuscation()
- .addKeepAttributes(
- ProguardKeepAttributes.SIGNATURE,
- ProguardKeepAttributes.INNER_CLASSES,
- ProguardKeepAttributes.ENCLOSING_METHOD)
- .setMinApi(parameters.getApiLevel())
- .enableCoreLibraryDesugaring(parameters.getApiLevel(), keepRuleConsumer)
- .compile()
- .addDesugaredCoreLibraryRunClassPath(
- this::buildDesugaredLibrary,
- parameters.getApiLevel(),
- keepRuleConsumer.get(),
- shrinkDesugaredLibrary)
- .run(parameters.getRuntime(), Main.class)
- .assertSuccessWithOutput(EXPECTED);
- }
-
public static class Main {
public static void main(String[] args) {
System.out.println(new B<String>().getOrDefault("Not found", "default 1"));
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DateTimeFormatterTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DateTimeFormatterTest.java
index 2d4640a..8f725ba 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DateTimeFormatterTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DateTimeFormatterTest.java
@@ -4,10 +4,14 @@
package com.android.tools.r8.desugar.desugaredlibrary;
-import com.android.tools.r8.D8TestRunResult;
-import com.android.tools.r8.R8TestRunResult;
+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 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.LocalDateTime;
import java.time.format.DateTimeFormatter;
@@ -22,67 +26,42 @@
@RunWith(Parameterized.class)
public class DateTimeFormatterTest extends DesugaredLibraryTestBase {
- private final TestParameters parameters;
- private final boolean shrinkDesugaredLibrary;
private static final String expectedOutputDesugaredLib =
StringUtils.lines("2/3/01 4:05 AM - Feb 3, 1 4:05 AM");
private static final String expectedOutput =
StringUtils.lines("2/3/01, 4:05 AM - Feb 3, 1, 4:05 AM");
- @Parameters(name = "{1}, shrinkDesugaredLibrary: {0}")
+ 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(
- BooleanUtils.values(), getTestParameters().withDexRuntimes().withAllApiLevels().build());
+ getTestParameters().withDexRuntimes().withAllApiLevels().build(),
+ getJdk8Jdk11(),
+ DEFAULT_SPECIFICATIONS);
}
- public DateTimeFormatterTest(boolean shrinkDesugaredLibrary, TestParameters parameters) {
- this.shrinkDesugaredLibrary = shrinkDesugaredLibrary;
+ public DateTimeFormatterTest(
+ TestParameters parameters,
+ LibraryDesugaringSpecification libraryDesugaringSpecification,
+ CompilationSpecification compilationSpecification) {
this.parameters = parameters;
+ this.compilationSpecification = compilationSpecification;
+ this.libraryDesugaringSpecification = libraryDesugaringSpecification;
}
@Test
- public void testD8() throws Exception {
- KeepRuleConsumer keepRuleConsumer = createKeepRuleConsumer(parameters);
- D8TestRunResult run =
- testForD8()
- .addLibraryFiles(getLibraryFile())
- .addInnerClasses(DateTimeFormatterTest.class)
- .setMinApi(parameters.getApiLevel())
- .enableCoreLibraryDesugaring(parameters.getApiLevel(), keepRuleConsumer)
- .setIncludeClassesChecksum(true)
- .compile()
- .addDesugaredCoreLibraryRunClassPath(
- this::buildDesugaredLibrary,
- parameters.getApiLevel(),
- keepRuleConsumer.get(),
- shrinkDesugaredLibrary)
- .run(parameters.getRuntime(), TestClass.class);
- if (requiresTimeDesugaring(parameters)) {
- run.assertSuccessWithOutput(expectedOutputDesugaredLib);
- } else {
- run.assertSuccessWithOutput(expectedOutput);
- }
- }
-
- @Test
- public void testR8() throws Exception {
- KeepRuleConsumer keepRuleConsumer = createKeepRuleConsumer(parameters);
- R8TestRunResult run =
- testForR8(parameters.getBackend())
- .addLibraryFiles(getLibraryFile())
- .noMinification()
+ public void testFormatter() throws Throwable {
+ SingleTestRunResult<?> run =
+ testForDesugaredLibrary(
+ parameters, libraryDesugaringSpecification, compilationSpecification)
+ .addInnerClasses(getClass())
.addKeepMainRule(TestClass.class)
- .addInnerClasses(DateTimeFormatterTest.class)
- .setMinApi(parameters.getApiLevel())
- .enableCoreLibraryDesugaring(parameters.getApiLevel(), keepRuleConsumer)
- .compile()
- .addDesugaredCoreLibraryRunClassPath(
- this::buildDesugaredLibrary,
- parameters.getApiLevel(),
- keepRuleConsumer.get(),
- shrinkDesugaredLibrary)
- .run(parameters.getRuntime(), TestClass.class);
- if (requiresTimeDesugaring(parameters)) {
+ .run(parameters.getRuntime(), TestClass.class)
+ .assertSuccess();
+ if (requiresTimeDesugaring(parameters, libraryDesugaringSpecification != JDK8)) {
run.assertSuccessWithOutput(expectedOutputDesugaredLib);
} else {
run.assertSuccessWithOutput(expectedOutput);
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DefaultMethodOverrideConflictWithLibrary2Test.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DefaultMethodOverrideConflictWithLibrary2Test.java
index 7d73298..5e79404 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DefaultMethodOverrideConflictWithLibrary2Test.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DefaultMethodOverrideConflictWithLibrary2Test.java
@@ -3,15 +3,17 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.desugar.desugaredlibrary;
+import static com.android.tools.r8.desugar.desugaredlibrary.test.CompilationSpecification.D8_L8DEBUG;
+import static com.android.tools.r8.desugar.desugaredlibrary.test.LibraryDesugaringSpecification.getJdk8Jdk11;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
-import com.android.tools.r8.LibraryDesugaringTestConfiguration;
import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.TestRunResult;
import com.android.tools.r8.TestRuntime;
import com.android.tools.r8.TestRuntime.CfVm;
+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.io.IOException;
import java.lang.reflect.Method;
@@ -22,6 +24,7 @@
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
/**
* This test checks that if a default interface method in a library interface conflicts with a
@@ -34,14 +37,24 @@
public class DefaultMethodOverrideConflictWithLibrary2Test extends DesugaredLibraryTestBase {
private final TestParameters parameters;
+ private final CompilationSpecification compilationSpecification;
+ private final LibraryDesugaringSpecification libraryDesugaringSpecification;
- @Parameterized.Parameters(name = "{0}")
- public static TestParametersCollection data() {
- return getTestParameters().withAllRuntimes().withAllApiLevels().build();
+ @Parameters(name = "{0}, spec: {1}, {2}")
+ public static List<Object[]> data() {
+ return buildParameters(
+ getTestParameters().withAllRuntimes().withAllApiLevels().build(),
+ getJdk8Jdk11(),
+ ImmutableList.of(D8_L8DEBUG));
}
- public DefaultMethodOverrideConflictWithLibrary2Test(TestParameters parameters) {
+ public DefaultMethodOverrideConflictWithLibrary2Test(
+ TestParameters parameters,
+ LibraryDesugaringSpecification libraryDesugaringSpecification,
+ CompilationSpecification compilationSpecification) {
this.parameters = parameters;
+ this.compilationSpecification = compilationSpecification;
+ this.libraryDesugaringSpecification = libraryDesugaringSpecification;
}
private List<Class<?>> getClasses() {
@@ -75,14 +88,10 @@
.run(parameters.getRuntime(), Main.class)
.apply(this::checkResult);
} else {
- testForD8()
- .addLibraryFiles(getLibraryFile())
+ testForDesugaredLibrary(parameters, libraryDesugaringSpecification, compilationSpecification)
.addProgramClasses(getClasses())
.addProgramClassFileData(getTransforms())
- .setMinApi(parameters.getApiLevel())
- .enableCoreLibraryDesugaring(
- LibraryDesugaringTestConfiguration.forApiLevel(parameters.getApiLevel()))
- .compile()
+ .addKeepMainRule(Main.class)
.run(parameters.getRuntime(), Main.class)
.apply(this::checkResult);
}
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DefaultMethodOverrideConflictWithLibraryTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DefaultMethodOverrideConflictWithLibraryTest.java
index 21abdb5..b608d74 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DefaultMethodOverrideConflictWithLibraryTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DefaultMethodOverrideConflictWithLibraryTest.java
@@ -3,16 +3,18 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.desugar.desugaredlibrary;
+import static com.android.tools.r8.desugar.desugaredlibrary.test.CompilationSpecification.D8_L8DEBUG;
+import static com.android.tools.r8.desugar.desugaredlibrary.test.LibraryDesugaringSpecification.getJdk8Jdk11;
import static org.hamcrest.CoreMatchers.containsString;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
-import com.android.tools.r8.LibraryDesugaringTestConfiguration;
import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.TestRuntime;
import com.android.tools.r8.TestRuntime.CfVm;
+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.io.IOException;
import java.lang.reflect.Method;
@@ -24,6 +26,7 @@
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
/**
* This test checks that if a default interface method in a library is not overridden by a class
@@ -44,14 +47,24 @@
}
private final TestParameters parameters;
+ private final CompilationSpecification compilationSpecification;
+ private final LibraryDesugaringSpecification libraryDesugaringSpecification;
- @Parameterized.Parameters(name = "{0}")
- public static TestParametersCollection data() {
- return getTestParameters().withAllRuntimes().withAllApiLevels().build();
+ @Parameters(name = "{0}, spec: {1}, {2}")
+ public static List<Object[]> data() {
+ return buildParameters(
+ getTestParameters().withAllRuntimes().withAllApiLevels().build(),
+ getJdk8Jdk11(),
+ ImmutableList.of(D8_L8DEBUG));
}
- public DefaultMethodOverrideConflictWithLibraryTest(TestParameters parameters) {
+ public DefaultMethodOverrideConflictWithLibraryTest(
+ TestParameters parameters,
+ LibraryDesugaringSpecification libraryDesugaringSpecification,
+ CompilationSpecification compilationSpecification) {
this.parameters = parameters;
+ this.compilationSpecification = compilationSpecification;
+ this.libraryDesugaringSpecification = libraryDesugaringSpecification;
}
@Test
@@ -77,14 +90,10 @@
.run(parameters.getRuntime(), Main.class)
.assertFailureWithErrorThatMatches(getExpectedError());
} else {
- testForD8()
- .addLibraryFiles(getLibraryFile())
- .setMinApi(parameters.getApiLevel())
+ testForDesugaredLibrary(parameters, libraryDesugaringSpecification, compilationSpecification)
.addProgramClasses(CLASSES)
.addProgramClassFileData(getTransforms())
- .enableCoreLibraryDesugaring(
- LibraryDesugaringTestConfiguration.forApiLevel(parameters.getApiLevel()))
- .compile()
+ .addKeepMainRule(Main.class)
.run(parameters.getRuntime(), Main.class)
.assertFailureWithErrorThatMatches(getExpectedError());
}
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryTestBase.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryTestBase.java
index e517720..c1cd146 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryTestBase.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryTestBase.java
@@ -107,9 +107,13 @@
return parameters.getApiLevel().isLessThan(apiLevelWithDefaultInterfaceMethodsSupport());
}
- protected boolean requiresTimeDesugaring(TestParameters parameters) {
+ protected boolean requiresTimeDesugaring(TestParameters parameters, boolean isJDK11) {
return parameters.getApiLevel().getLevel()
- < (isJDK11DesugaredLibrary() ? AndroidApiLevel.S.getLevel() : AndroidApiLevel.O.getLevel());
+ < (isJDK11 ? AndroidApiLevel.S.getLevel() : AndroidApiLevel.O.getLevel());
+ }
+
+ protected boolean requiresTimeDesugaring(TestParameters parameters) {
+ return requiresTimeDesugaring(parameters, isJDK11DesugaredLibrary());
}
protected boolean requiresAnyCoreLibDesugaring(TestParameters parameters) {
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 7e75083..912f0cb 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
@@ -17,6 +17,7 @@
import com.android.tools.r8.TestCompilerBuilder;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestRuntime;
+import com.android.tools.r8.TestShrinkerBuilder;
import com.android.tools.r8.desugar.desugaredlibrary.DesugaredLibraryTestBase;
import com.android.tools.r8.ir.desugar.desugaredlibrary.DesugaredLibrarySpecificationParser;
import com.android.tools.r8.utils.ConsumerUtils;
@@ -117,6 +118,12 @@
return this;
}
+ public DesugaredLibraryTestBuilder<T> addProgramClasses(Collection<Class<?>> clazz)
+ throws IOException {
+ builder.addProgramClasses(clazz);
+ return this;
+ }
+
public DesugaredLibraryTestBuilder<T> addProgramFiles(Path... files) {
builder.addProgramFiles(files);
return this;
@@ -160,6 +167,16 @@
return this;
}
+ public DesugaredLibraryTestBuilder<T> addKeepAttributes(String... attributes) {
+ withR8TestBuilder(b -> b.addKeepAttributes(attributes));
+ return this;
+ }
+
+ public DesugaredLibraryTestBuilder<T> addKeepAllClassesRuleWithAllowObfuscation() {
+ withR8TestBuilder(TestShrinkerBuilder::addKeepAllClassesRuleWithAllowObfuscation);
+ return this;
+ }
+
public DesugaredLibraryTestBuilder<T> addKeepMainRule(Class<?> clazz) {
withR8TestBuilder(b -> b.addKeepMainRule(clazz));
return this;