Update all desugared lib tests to last APIs
- found that ConcurrentHashMap tests were failing
when shrinking the library
Bug: 134732760
Change-Id: I49f4b015adc861eabac5e22ccc0bbe80db144605
diff --git a/src/test/java/com/android/tools/r8/desugar/corelib/CoreLibDesugarTestBase.java b/src/test/java/com/android/tools/r8/desugar/corelib/CoreLibDesugarTestBase.java
index dc24bc8..7543fc5 100644
--- a/src/test/java/com/android/tools/r8/desugar/corelib/CoreLibDesugarTestBase.java
+++ b/src/test/java/com/android/tools/r8/desugar/corelib/CoreLibDesugarTestBase.java
@@ -26,23 +26,12 @@
public class CoreLibDesugarTestBase extends TestBase {
- @Deprecated
- protected boolean requiresCoreLibDesugaring(TestParameters parameters) {
- // TODO(b/134732760): Use the two other APIS instead.
- return requiresEmulatedInterfaceCoreLibDesugaring(parameters)
- && requiresRetargetCoreLibMemberDesugaring(parameters);
- }
-
protected boolean requiresEmulatedInterfaceCoreLibDesugaring(TestParameters parameters) {
return parameters.getApiLevel().getLevel() < AndroidApiLevel.N.getLevel();
}
- protected boolean requiresRetargetCoreLibMemberDesugaring(TestParameters parameters) {
- return parameters.getApiLevel().getLevel() < AndroidApiLevel.O.getLevel();
- }
-
protected boolean requiresAnyCoreLibDesugaring(TestParameters parameters) {
- return requiresRetargetCoreLibMemberDesugaring(parameters);
+ return parameters.getApiLevel().getLevel() < AndroidApiLevel.O.getLevel();
}
protected Path buildDesugaredLibrary(AndroidApiLevel apiLevel) throws RuntimeException {
diff --git a/src/test/java/com/android/tools/r8/desugar/corelib/CustomCollectionTest.java b/src/test/java/com/android/tools/r8/desugar/corelib/CustomCollectionTest.java
index a60cbd2..c8a05f8 100644
--- a/src/test/java/com/android/tools/r8/desugar/corelib/CustomCollectionTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/corelib/CustomCollectionTest.java
@@ -10,9 +10,7 @@
import com.android.tools.r8.D8TestRunResult;
import com.android.tools.r8.R8TestRunResult;
import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.utils.BooleanUtils;
-import com.android.tools.r8.utils.Box;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.android.tools.r8.utils.codeinspector.InstructionSubject;
import com.android.tools.r8.utils.codeinspector.InstructionSubject.JumboStringMode;
@@ -37,16 +35,16 @@
public class CustomCollectionTest extends CoreLibDesugarTestBase {
private final TestParameters parameters;
- private final boolean shrinkCoreLibrary;
+ private final boolean shrinkDesugaredLibrary;
- @Parameters(name = "{1}, shrinkCoreLibrary: {0}")
+ @Parameters(name = "{1}, shrinkDesugaredLibrary: {0}")
public static List<Object[]> data() {
return buildParameters(
BooleanUtils.values(), getTestParameters().withDexRuntimes().withAllApiLevels().build());
}
public CustomCollectionTest(boolean shrinkDesugaredLibrary, TestParameters parameters) {
- this.shrinkCoreLibrary = shrinkDesugaredLibrary;
+ this.shrinkDesugaredLibrary = shrinkDesugaredLibrary;
this.parameters = parameters;
}
@@ -55,23 +53,19 @@
@Test
public void testCustomCollectionD8() throws Exception {
- Box<String> keepRulesHolder = new Box<>("");
+ KeepRuleConsumer keepRuleConsumer = createKeepRuleConsumer(parameters);
D8TestRunResult d8TestRunResult =
testForD8()
.addInnerClasses(CustomCollectionTest.class)
.setMinApi(parameters.getApiLevel())
- .addOptionsModification(
- options ->
- options.desugaredLibraryKeepRuleConsumer =
- ToolHelper.consumeString(keepRulesHolder::set))
- .enableCoreLibraryDesugaring(parameters.getApiLevel())
+ .enableCoreLibraryDesugaring(parameters.getApiLevel(), keepRuleConsumer)
.compile()
.inspect(inspector -> this.assertCustomCollectionCallsCorrect(inspector, false))
.addDesugaredCoreLibraryRunClassPath(
this::buildDesugaredLibrary,
parameters.getApiLevel(),
- keepRulesHolder.get(),
- shrinkCoreLibrary)
+ keepRuleConsumer.get(),
+ shrinkDesugaredLibrary)
.run(parameters.getRuntime(), EXECUTOR)
.assertSuccess();
if (requiresEmulatedInterfaceCoreLibDesugaring(parameters)) {
@@ -89,7 +83,7 @@
@Test
public void testCustomCollectionR8() throws Exception {
- Box<String> keepRulesHolder = new Box<>("");
+ KeepRuleConsumer keepRuleConsumer = createKeepRuleConsumer(parameters);
R8TestRunResult r8TestRunResult =
testForR8(Backend.DEX)
.addInnerClasses(CustomCollectionTest.class)
@@ -100,18 +94,14 @@
// TODO(b/140233505): Allow devirtualization once fixed.
options.enableDevirtualization = false;
})
- .addOptionsModification(
- options ->
- options.desugaredLibraryKeepRuleConsumer =
- ToolHelper.consumeString(keepRulesHolder::set))
- .enableCoreLibraryDesugaring(parameters.getApiLevel())
+ .enableCoreLibraryDesugaring(parameters.getApiLevel(), keepRuleConsumer)
.compile()
.inspect(inspector -> this.assertCustomCollectionCallsCorrect(inspector, true))
.addDesugaredCoreLibraryRunClassPath(
this::buildDesugaredLibrary,
parameters.getApiLevel(),
- keepRulesHolder.get(),
- shrinkCoreLibrary)
+ keepRuleConsumer.get(),
+ shrinkDesugaredLibrary)
.run(parameters.getRuntime(), EXECUTOR)
.assertSuccess();
if (requiresEmulatedInterfaceCoreLibDesugaring(parameters)) {
diff --git a/src/test/java/com/android/tools/r8/desugar/corelib/JavaTimeTest.java b/src/test/java/com/android/tools/r8/desugar/corelib/JavaTimeTest.java
index 1c4f47a..21c2f8f 100644
--- a/src/test/java/com/android/tools/r8/desugar/corelib/JavaTimeTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/corelib/JavaTimeTest.java
@@ -9,9 +9,7 @@
import static org.junit.Assert.assertTrue;
import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.utils.BooleanUtils;
-import com.android.tools.r8.utils.Box;
import com.android.tools.r8.utils.StringUtils;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
@@ -28,17 +26,17 @@
public class JavaTimeTest extends CoreLibDesugarTestBase {
private final TestParameters parameters;
- private final boolean shrinkCoreLibrary;
+ private final boolean shrinkDesugaredLibrary;
private static final String expectedOutput = StringUtils.lines("Hello, world");
- @Parameters(name = "{1}, shrinkCoreLibrary: {0}")
+ @Parameters(name = "{1}, shrinkDesugaredLibrary: {0}")
public static List<Object[]> data() {
return buildParameters(
BooleanUtils.values(), getTestParameters().withDexRuntimes().withAllApiLevels().build());
}
public JavaTimeTest(boolean shrinkDesugaredLibrary, TestParameters parameters) {
- this.shrinkCoreLibrary = shrinkDesugaredLibrary;
+ this.shrinkDesugaredLibrary = shrinkDesugaredLibrary;
this.parameters = parameters;
}
@@ -56,45 +54,37 @@
@Test
public void testTimeD8() throws Exception {
- Box<String> keepRulesHolder = new Box<>("");
+ KeepRuleConsumer keepRuleConsumer = createKeepRuleConsumer(parameters);
testForD8()
.addInnerClasses(JavaTimeTest.class)
.setMinApi(parameters.getApiLevel())
- .enableCoreLibraryDesugaring(parameters.getApiLevel())
- .addOptionsModification(
- options ->
- options.desugaredLibraryKeepRuleConsumer =
- ToolHelper.consumeString(keepRulesHolder::set))
+ .enableCoreLibraryDesugaring(parameters.getApiLevel(), keepRuleConsumer)
.compile()
.inspect(this::checkRewrittenInvokes)
.addDesugaredCoreLibraryRunClassPath(
this::buildDesugaredLibrary,
parameters.getApiLevel(),
- keepRulesHolder.get(),
- shrinkCoreLibrary)
+ keepRuleConsumer.get(),
+ shrinkDesugaredLibrary)
.run(parameters.getRuntime(), TestClass.class)
.assertSuccessWithOutput(expectedOutput);
}
@Test
public void testTimeR8() throws Exception {
- Box<String> keepRulesHolder = new Box<>("");
+ KeepRuleConsumer keepRuleConsumer = createKeepRuleConsumer(parameters);
testForR8(parameters.getBackend())
.addInnerClasses(JavaTimeTest.class)
.addKeepMainRule(TestClass.class)
.setMinApi(parameters.getApiLevel())
- .enableCoreLibraryDesugaring(parameters.getApiLevel())
- .addOptionsModification(
- options ->
- options.desugaredLibraryKeepRuleConsumer =
- ToolHelper.consumeString(keepRulesHolder::set))
+ .enableCoreLibraryDesugaring(parameters.getApiLevel(), keepRuleConsumer)
.compile()
.inspect(this::checkRewrittenInvokes)
.addDesugaredCoreLibraryRunClassPath(
this::buildDesugaredLibrary,
parameters.getApiLevel(),
- keepRulesHolder.get(),
- shrinkCoreLibrary)
+ keepRuleConsumer.get(),
+ shrinkDesugaredLibrary)
.run(parameters.getRuntime(), TestClass.class)
.assertSuccessWithOutput(expectedOutput);
}
diff --git a/src/test/java/com/android/tools/r8/desugar/corelib/JavaUtilFunctionTest.java b/src/test/java/com/android/tools/r8/desugar/corelib/JavaUtilFunctionTest.java
index e574c7c..30fd9d3 100644
--- a/src/test/java/com/android/tools/r8/desugar/corelib/JavaUtilFunctionTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/corelib/JavaUtilFunctionTest.java
@@ -26,17 +26,17 @@
public class JavaUtilFunctionTest extends CoreLibDesugarTestBase {
private final TestParameters parameters;
- private final boolean shrinkCoreLibrary;
+ private final boolean shrinkDesugaredLibrary;
private static final String expectedOutput = StringUtils.lines("Hello, world", "Hello, world");
- @Parameters(name = "{1}, shrinkCoreLibrary: {0}")
+ @Parameters(name = "{1}, shrinkDesugaredLibrary: {0}")
public static List<Object[]> data() {
return buildParameters(
BooleanUtils.values(), getTestParameters().withDexRuntimes().withAllApiLevels().build());
}
public JavaUtilFunctionTest(boolean shrinkDesugaredLibrary, TestParameters parameters) {
- this.shrinkCoreLibrary = shrinkDesugaredLibrary;
+ this.shrinkDesugaredLibrary = shrinkDesugaredLibrary;
this.parameters = parameters;
}
@@ -71,7 +71,7 @@
this::buildDesugaredLibrary,
parameters.getApiLevel(),
keepRuleConsumer.get(),
- shrinkCoreLibrary)
+ shrinkDesugaredLibrary)
.run(parameters.getRuntime(), TestClass.class)
.assertSuccessWithOutput(expectedOutput);
}
@@ -95,7 +95,7 @@
this::buildDesugaredLibrary,
parameters.getApiLevel(),
keepRuleConsumer.get(),
- shrinkCoreLibrary)
+ shrinkDesugaredLibrary)
.run(parameters.getRuntime(), TestClass.class)
.assertSuccessWithOutput(expectedOutput);
}
diff --git a/src/test/java/com/android/tools/r8/desugar/corelib/ProgramRewritingTest.java b/src/test/java/com/android/tools/r8/desugar/corelib/ProgramRewritingTest.java
index deb0bd4..c954d5f 100644
--- a/src/test/java/com/android/tools/r8/desugar/corelib/ProgramRewritingTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/corelib/ProgramRewritingTest.java
@@ -13,13 +13,14 @@
import static org.hamcrest.core.StringContains.containsString;
import static org.junit.Assert.assertFalse;
+import com.android.tools.r8.D8TestCompileResult;
import com.android.tools.r8.D8TestRunResult;
import com.android.tools.r8.R8TestRunResult;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.ToolHelper.DexVm;
+import com.android.tools.r8.utils.AndroidApiLevel;
import com.android.tools.r8.utils.BooleanUtils;
-import com.android.tools.r8.utils.Box;
import com.android.tools.r8.utils.StringUtils;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
@@ -41,51 +42,47 @@
private static final String TEST_CLASS = "stream.ProgramRewritingTestClass";
private final TestParameters parameters;
- private final boolean shrinkCoreLibrary;
+ private final boolean shrinkDesugaredLibrary;
- @Parameters(name = "{1}, shrinkCoreLibrary: {0}")
+ @Parameters(name = "{1}, shrinkDesugaredLibrary: {0}")
public static List<Object[]> data() {
return buildParameters(
BooleanUtils.values(), getTestParameters().withDexRuntimes().withAllApiLevels().build());
}
public ProgramRewritingTest(boolean shrinkDesugaredLibrary, TestParameters parameters) {
- this.shrinkCoreLibrary = shrinkDesugaredLibrary;
+ this.shrinkDesugaredLibrary = shrinkDesugaredLibrary;
this.parameters = parameters;
}
@Test
public void testProgramD8() throws Exception {
- Assume.assumeTrue("No desugaring for high API levels", requiresCoreLibDesugaring(parameters));
-
ArrayList<Path> coreLambdaStubs = new ArrayList<>();
coreLambdaStubs.add(ToolHelper.getCoreLambdaStubs());
- Box<String> keepRulesHolder = new Box<>("");
for (Boolean coreLambdaStubsActive : BooleanUtils.values()) {
- D8TestRunResult d8TestRunResult =
+ KeepRuleConsumer keepRuleConsumer = createKeepRuleConsumer(parameters);
+ D8TestCompileResult compileResult =
testForD8()
.addProgramFiles(Paths.get(ToolHelper.EXAMPLES_JAVA9_BUILD_DIR + "stream.jar"))
.setMinApi(parameters.getApiLevel())
- .enableCoreLibraryDesugaring(parameters.getApiLevel())
- .addOptionsModification(
- options ->
- options.desugaredLibraryKeepRuleConsumer =
- ToolHelper.consumeString(keepRulesHolder::set))
+ .enableCoreLibraryDesugaring(parameters.getApiLevel(), keepRuleConsumer)
.compile()
- .inspect(this::checkRewrittenInvokes)
- .addRunClasspathFiles(
- coreLambdaStubsActive
- ? buildDesugaredLibrary(
- parameters.getApiLevel(),
- keepRulesHolder.get(),
- shrinkCoreLibrary,
- coreLambdaStubs)
- : buildDesugaredLibrary(
- parameters.getApiLevel(), keepRulesHolder.get(), shrinkCoreLibrary))
- .run(parameters.getRuntime(), TEST_CLASS)
- .assertSuccess();
- assertLines2By2Correct(d8TestRunResult.getStdOut());
- assertGeneratedKeepRulesAreCorrect(keepRulesHolder.get());
+ .inspect(this::checkRewrittenInvokes);
+ if (parameters.getApiLevel().getLevel() < AndroidApiLevel.O.getLevel()) {
+ compileResult.addRunClasspathFiles(
+ buildCoreLambdaDesugaredLibrary(
+ parameters.getApiLevel(),
+ keepRuleConsumer.get(),
+ shrinkDesugaredLibrary,
+ coreLambdaStubsActive,
+ coreLambdaStubs));
+ }
+ D8TestRunResult d8TestRunResult =
+ compileResult.run(parameters.getRuntime(), TEST_CLASS).assertSuccess();
+ if (parameters.getApiLevel().getLevel() < AndroidApiLevel.N.getLevel()) {
+ assertLines2By2Correct(d8TestRunResult.getStdOut());
+ assertGeneratedKeepRulesAreCorrect(keepRuleConsumer.get());
+ }
String stdErr = d8TestRunResult.getStdErr();
if (parameters.getRuntime().asDex().getVm().isOlderThanOrEqual(DexVm.ART_4_4_4_HOST)) {
// Flaky: There might be a missing method on lambda deserialization.
@@ -98,11 +95,24 @@
}
}
+ private Path buildCoreLambdaDesugaredLibrary(
+ AndroidApiLevel apiLevel,
+ String keepRules,
+ boolean shrink,
+ boolean coreLambdaStubsActive,
+ ArrayList<Path> coreLambdaStubs) {
+ return coreLambdaStubsActive
+ ? buildDesugaredLibrary(apiLevel, keepRules, shrink, coreLambdaStubs)
+ : buildDesugaredLibrary(apiLevel, keepRules, shrink);
+ }
+
@Test
public void testProgramR8() throws Exception {
- Assume.assumeTrue("No desugaring for high API levels", requiresCoreLibDesugaring(parameters));
+ Assume.assumeTrue(
+ "TODO(b/139451198): Make the test run with new SDK.",
+ parameters.getApiLevel().getLevel() < AndroidApiLevel.O.getLevel());
for (Boolean minifying : BooleanUtils.values()) {
- Box<String> keepRulesHolder = new Box<>("");
+ KeepRuleConsumer keepRuleConsumer = createKeepRuleConsumer(parameters);
R8TestRunResult r8TestRunResult =
testForR8(parameters.getBackend())
.minification(minifying)
@@ -114,20 +124,20 @@
// TODO(b/140233505): Allow devirtualization once fixed.
options.enableDevirtualization = false;
})
- .addOptionsModification(
- options ->
- options.desugaredLibraryKeepRuleConsumer =
- ToolHelper.consumeString(keepRulesHolder::set))
- .enableCoreLibraryDesugaring(parameters.getApiLevel())
+ .enableCoreLibraryDesugaring(parameters.getApiLevel(), keepRuleConsumer)
.compile()
.inspect(this::checkRewrittenInvokes)
- .addRunClasspathFiles(
- buildDesugaredLibrary(
- parameters.getApiLevel(), keepRulesHolder.get(), shrinkCoreLibrary))
+ .addDesugaredCoreLibraryRunClassPath(
+ this::buildDesugaredLibrary,
+ parameters.getApiLevel(),
+ keepRuleConsumer.get(),
+ shrinkDesugaredLibrary)
.run(parameters.getRuntime(), TEST_CLASS)
.assertSuccess();
- assertLines2By2Correct(r8TestRunResult.getStdOut());
- assertGeneratedKeepRulesAreCorrect(keepRulesHolder.get());
+ if (parameters.getApiLevel().getLevel() < AndroidApiLevel.N.getLevel()) {
+ assertLines2By2Correct(r8TestRunResult.getStdOut());
+ assertGeneratedKeepRulesAreCorrect(keepRuleConsumer.get());
+ }
if (parameters.getRuntime().asDex().getVm().isOlderThanOrEqual(DexVm.ART_4_4_4_HOST)) {
// Flaky: There might be a missing method on lambda deserialization.
r8TestRunResult.assertStderrMatches(
@@ -141,7 +151,7 @@
}
private void checkRewrittenInvokes(CodeInspector inspector) {
- if (!requiresCoreLibDesugaring(parameters)) {
+ if (parameters.getApiLevel().getLevel() >= AndroidApiLevel.N.getLevel()) {
return;
}
ClassSubject classSubject = inspector.clazz(TEST_CLASS);
diff --git a/src/test/java/com/android/tools/r8/desugar/corelib/corelibjdktests/Jdk11AtomicTests.java b/src/test/java/com/android/tools/r8/desugar/corelib/corelibjdktests/Jdk11AtomicTests.java
index fcd428e..150fbf6 100644
--- a/src/test/java/com/android/tools/r8/desugar/corelib/corelibjdktests/Jdk11AtomicTests.java
+++ b/src/test/java/com/android/tools/r8/desugar/corelib/corelibjdktests/Jdk11AtomicTests.java
@@ -10,20 +10,20 @@
import static org.hamcrest.CoreMatchers.endsWith;
import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.TestRuntime.CfVm;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.ToolHelper.DexVm.Version;
-import com.android.tools.r8.utils.AndroidApiLevel;
+import com.android.tools.r8.utils.BooleanUtils;
import com.android.tools.r8.utils.StringUtils;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Collections;
-import org.junit.Assume;
+import java.util.List;
import org.junit.BeforeClass;
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 Jdk11AtomicTests extends Jdk11CoreLibTestBase {
@@ -39,21 +39,24 @@
ATOMIC_TESTS_FOLDER.resolve(ATOMIC_REFERENCE_TEST + JAVA_EXTENSION),
ATOMIC_TESTS_FOLDER.resolve(ATOMIC_UPDATERS + JAVA_EXTENSION)
};
- private final TestParameters parameters;
- @Parameterized.Parameters(name = "{0}")
- public static TestParametersCollection data() {
+ private final TestParameters parameters;
+ private final boolean shrinkDesugaredLibrary;
+
+ @Parameters(name = "{1}, shrinkDesugaredLibrary: {0}")
+ public static List<Object[]> data() {
// TODO(b/134732760): Skip Android 4.4.4 due to missing libjavacrypto.
- return getTestParameters()
- .withDexRuntime(Version.V4_0_4)
- .withDexRuntimesStartingFromIncluding(Version.V5_1_1)
- //TODO(b/134732760): Add support for R8 and JDK11.
- .withCfRuntime(CfVm.JDK11)
- .withAllApiLevels()
- .build();
+ return buildParameters(
+ BooleanUtils.values(),
+ getTestParameters()
+ .withDexRuntime(Version.V4_0_4)
+ .withDexRuntimesStartingFromIncluding(Version.V5_1_1)
+ .withAllApiLevels()
+ .build());
}
- public Jdk11AtomicTests(TestParameters parameters) {
+ public Jdk11AtomicTests(boolean shrinkDesugaredLibrary, TestParameters parameters) {
+ this.shrinkDesugaredLibrary = shrinkDesugaredLibrary;
this.parameters = parameters;
}
@@ -68,8 +71,7 @@
@Test
public void testD8AtomicReference() throws Exception {
- Assume.assumeTrue(parameters.isDexRuntime());
- Assume.assumeTrue("TODO(134732760): Fix Android 7+.", requiresCoreLibDesugaring(parameters));
+ KeepRuleConsumer keepRuleConsumer = createKeepRuleConsumer(parameters);
String verbosity = "2";
testForD8()
.addProgramFiles(
@@ -77,11 +79,14 @@
.addProgramFiles(testNGSupportProgramFiles())
.addProgramFiles(getPathsFiles())
.setMinApi(parameters.getApiLevel())
- .enableCoreLibraryDesugaring()
- .addLibraryFiles(ToolHelper.getAndroidJar(AndroidApiLevel.P))
+ .enableCoreLibraryDesugaring(parameters.getApiLevel(), keepRuleConsumer)
.compile()
.withArt6Plus64BitsLib()
- .addRunClasspathFiles(buildDesugaredLibraryWithJavaBaseExtension(parameters.getApiLevel()))
+ .addDesugaredCoreLibraryRunClassPath(
+ this::buildDesugaredLibrary,
+ parameters.getApiLevel(),
+ keepRuleConsumer.get(),
+ shrinkDesugaredLibrary)
.run(parameters.getRuntime(), "TestNGMainRunner", verbosity, ATOMIC_REFERENCE_TEST)
.assertSuccessWithOutputThatMatches(
endsWith(StringUtils.lines(ATOMIC_REFERENCE_TEST + ": SUCCESS")));
@@ -89,8 +94,7 @@
@Test
public void testD8AtomicUpdaters() throws Exception {
- Assume.assumeTrue(parameters.isDexRuntime());
- Assume.assumeTrue("TODO(134732760): Fix Android 7+.", requiresCoreLibDesugaring(parameters));
+ KeepRuleConsumer keepRuleConsumer = createKeepRuleConsumer(parameters);
String verbosity = "2";
testForD8()
.addProgramFiles(
@@ -98,11 +102,14 @@
.addProgramFiles(testNGSupportProgramFiles())
.addProgramFiles(getPathsFiles())
.setMinApi(parameters.getApiLevel())
- .enableCoreLibraryDesugaring()
- .addLibraryFiles(ToolHelper.getAndroidJar(AndroidApiLevel.P))
+ .enableCoreLibraryDesugaring(parameters.getApiLevel(), keepRuleConsumer)
.compile()
.withArt6Plus64BitsLib()
- .addRunClasspathFiles(buildDesugaredLibraryWithJavaBaseExtension(parameters.getApiLevel()))
+ .addDesugaredCoreLibraryRunClassPath(
+ this::buildDesugaredLibrary,
+ parameters.getApiLevel(),
+ keepRuleConsumer.get(),
+ shrinkDesugaredLibrary)
.run(parameters.getRuntime(), "TestNGMainRunner", verbosity, ATOMIC_UPDATERS)
.assertSuccessWithOutputThatMatches(
endsWith(StringUtils.lines(ATOMIC_UPDATERS + ": SUCCESS")));
diff --git a/src/test/java/com/android/tools/r8/desugar/corelib/corelibjdktests/Jdk11ConcurrentMapTests.java b/src/test/java/com/android/tools/r8/desugar/corelib/corelibjdktests/Jdk11ConcurrentMapTests.java
index e5e993d..d340245 100644
--- a/src/test/java/com/android/tools/r8/desugar/corelib/corelibjdktests/Jdk11ConcurrentMapTests.java
+++ b/src/test/java/com/android/tools/r8/desugar/corelib/corelibjdktests/Jdk11ConcurrentMapTests.java
@@ -13,11 +13,11 @@
import com.android.tools.r8.D8TestCompileResult;
import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.TestRuntime.CfVm;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.ToolHelper.DexVm.Version;
import com.android.tools.r8.utils.AndroidApiLevel;
+import com.android.tools.r8.utils.BooleanUtils;
import com.android.tools.r8.utils.StringUtils;
import java.nio.file.Path;
import java.nio.file.Paths;
@@ -29,6 +29,7 @@
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 Jdk11ConcurrentMapTests extends Jdk11CoreLibTestBase {
@@ -50,18 +51,22 @@
};
private final TestParameters parameters;
+ private final boolean shrinkDesugaredLibrary;
- @Parameterized.Parameters(name = "{0}")
- public static TestParametersCollection data() {
+ @Parameters(name = "{1}, shrinkDesugaredLibrary: {0}")
+ public static List<Object[]> data() {
// TODO(b/134732760): Skip Android 4.4.4 due to missing libjavacrypto.
- return getTestParameters()
- .withDexRuntime(Version.V4_0_4)
- .withDexRuntimesStartingFromIncluding(Version.V5_1_1)
- .withAllApiLevels()
- .build();
+ return buildParameters(
+ BooleanUtils.values(),
+ getTestParameters()
+ .withDexRuntime(Version.V4_0_4)
+ .withDexRuntimesStartingFromIncluding(Version.V5_1_1)
+ .withAllApiLevels()
+ .build());
}
- public Jdk11ConcurrentMapTests(TestParameters parameters) {
+ public Jdk11ConcurrentMapTests(boolean shrinkDesugaredLibrary, TestParameters parameters) {
+ this.shrinkDesugaredLibrary = shrinkDesugaredLibrary;
this.parameters = parameters;
}
@@ -94,27 +99,30 @@
public void testD8Concurrent() throws Exception {
// TODO(b/134732760): Support Java 9+ libraries.
// We skip the ConcurrentRemoveIf test because of the non desugared class CompletableFuture.
- Assume.assumeTrue("TODO(134732760): Fix Android 7+.", requiresCoreLibDesugaring(parameters));
+ KeepRuleConsumer keepRuleConsumer = createKeepRuleConsumer(parameters);
String verbosity = "2";
testForD8()
.addProgramFiles(CONCURRENT_COMPILED_TESTS_FILES)
.addProgramFiles(testNGSupportProgramFiles())
.addProgramFiles(getPathsFiles())
.setMinApi(parameters.getApiLevel())
- .enableCoreLibraryDesugaring()
+ .enableCoreLibraryDesugaring(parameters.getApiLevel(), keepRuleConsumer)
.addLibraryFiles(ToolHelper.getAndroidJar(AndroidApiLevel.P))
.compile()
.withArt6Plus64BitsLib()
- .addRunClasspathFiles(buildDesugaredLibrary(parameters.getApiLevel()))
+ .addDesugaredCoreLibraryRunClassPath(
+ this::buildDesugaredLibrary,
+ parameters.getApiLevel(),
+ keepRuleConsumer.get(),
+ shrinkDesugaredLibrary)
.run(parameters.getRuntime(), "TestNGMainRunner", verbosity, "ConcurrentModification")
.assertSuccessWithOutputThatMatches(
endsWith(StringUtils.lines("ConcurrentModification: SUCCESS")));
}
private Path[] concurrentHashTestToCompile() {
- if (parameters.getApiLevel().getLevel() >= AndroidApiLevel.O.getLevel()) {
- return CONCURRENT_HASH_COMPILED_TESTS_FILES;
- }
+ // We exclude WhiteBox.class because of Method handles, they are not supported on old devices
+ // and the test uses methods not present even on 28.
List<Path> toCompile = new ArrayList<>();
Collections.addAll(toCompile, CONCURRENT_HASH_COMPILED_TESTS_FILES);
toCompile.removeIf(file -> file.getFileName().toString().equals("WhiteBox.class"));
@@ -122,12 +130,7 @@
}
private String[] concurrentHashTestNGTestsToRun() {
- // We exclude WhiteBox.class because of Method handles.
- // This will likely never be supported in old Android devices.
List<String> toRun = new ArrayList<>();
- if (parameters.getApiLevel().getLevel() >= AndroidApiLevel.O.getLevel()) {
- toRun.add("WhiteBox");
- }
// TODO(b/134732760): Support Java 9+ libraries.
// We exclude ConcurrentAssociateTest and ConcurrentContainsKeyTest due to non
// desugared class CompletableFuture.
@@ -151,7 +154,9 @@
@Test
public void testD8ConcurrentHash() throws Exception {
- Assume.assumeTrue("TODO(134732760): Fix Android 7+.", requiresCoreLibDesugaring(parameters));
+ // TODO(b/134732760): Investigate failure when shrinkDesugaredLibrary is on.
+ Assume.assumeFalse(shrinkDesugaredLibrary);
+ KeepRuleConsumer keepRuleConsumer = createKeepRuleConsumer(parameters);
String verbosity = "2";
D8TestCompileResult d8TestCompileResult =
testForD8()
@@ -159,11 +164,15 @@
.addProgramFiles(testNGSupportProgramFiles())
.addProgramFiles(getPathsFiles())
.setMinApi(parameters.getApiLevel())
- .enableCoreLibraryDesugaring()
- .addLibraryFiles(ToolHelper.getAndroidJar(AndroidApiLevel.P))
+ .enableCoreLibraryDesugaring(parameters.getApiLevel(), keepRuleConsumer)
.compile()
.withArt6Plus64BitsLib()
- .addRunClasspathFiles(buildDesugaredLibrary(parameters.getApiLevel()));
+ .addDesugaredCoreLibraryRunClassPath(
+ this::buildDesugaredLibrary,
+ parameters.getApiLevel(),
+ keepRuleConsumer.get(),
+ shrinkDesugaredLibrary);
+ System.out.println(keepRuleConsumer.get());
for (String className : concurrentHashTestNGTestsToRun()) {
d8TestCompileResult
.run(parameters.getRuntime(), "TestNGMainRunner", verbosity, className)
diff --git a/src/test/java/com/android/tools/r8/desugar/corelib/corelibjdktests/Jdk11CoreLibTestBase.java b/src/test/java/com/android/tools/r8/desugar/corelib/corelibjdktests/Jdk11CoreLibTestBase.java
index 169c7f9..c106bec 100644
--- a/src/test/java/com/android/tools/r8/desugar/corelib/corelibjdktests/Jdk11CoreLibTestBase.java
+++ b/src/test/java/com/android/tools/r8/desugar/corelib/corelibjdktests/Jdk11CoreLibTestBase.java
@@ -100,8 +100,7 @@
assert JDK_11_JAVA_BASE_EXTENSION_COMPILED_FILES.length > 0;
}
- protected Path buildDesugaredLibraryWithJavaBaseExtension(AndroidApiLevel apiLevel)
- throws Exception {
+ protected Path buildDesugaredLibraryWithJavaBaseExtension(AndroidApiLevel apiLevel) {
return buildDesugaredLibrary(
apiLevel, "", false, ImmutableList.copyOf(JDK_11_JAVA_BASE_EXTENSION_COMPILED_FILES));
}
diff --git a/src/test/java/com/android/tools/r8/desugar/corelib/corelibjdktests/Jdk11StreamTests.java b/src/test/java/com/android/tools/r8/desugar/corelib/corelibjdktests/Jdk11StreamTests.java
index 8a36cd6..c773666 100644
--- a/src/test/java/com/android/tools/r8/desugar/corelib/corelibjdktests/Jdk11StreamTests.java
+++ b/src/test/java/com/android/tools/r8/desugar/corelib/corelibjdktests/Jdk11StreamTests.java
@@ -159,11 +159,6 @@
// Collectors
"filtering(",
"flatMapping(",
- // List
- "of(",
- // Optional
- "or(",
- "ifPresentOrElse("
};
}
@@ -190,11 +185,13 @@
@Test
public void testStream() throws Exception {
+ Assume.assumeTrue(
+ "Requires Java base extensions, should add it when not desugaring",
+ parameters.getApiLevel().getLevel() < AndroidApiLevel.N.getLevel());
// TODO(b/137876068): It seems to fail on windows because the method.
// getAllFilesWithSuffixInDirectory() finds different files on Windows (To be confirmed), so
// compilation is then different and raises an error.
Assume.assumeFalse(ToolHelper.isWindows());
- Assume.assumeTrue("TODO(134732760): Fix Android 7+.", requiresCoreLibDesugaring(parameters));
Map<String, String> runnableTests = getRunnableTests();
String verbosity = "2";
List<Path> filesToCompile =
@@ -209,10 +206,10 @@
.addProgramFiles(testNGSupportProgramFiles())
.addLibraryFiles(ToolHelper.getAndroidJar(AndroidApiLevel.P))
.setMinApi(parameters.getApiLevel())
- .enableCoreLibraryDesugaring()
+ .enableCoreLibraryDesugaring(parameters.getApiLevel())
.compile()
- .addRunClasspathFiles(
- buildDesugaredLibraryWithJavaBaseExtension(parameters.getApiLevel()))
+ .addDesugaredCoreLibraryRunClassPath(
+ this::buildDesugaredLibraryWithJavaBaseExtension, parameters.getApiLevel())
.withArtFrameworks()
.withArt6Plus64BitsLib();
int numSuccesses = 0;
@@ -247,10 +244,7 @@
// TODO(b/134732760): Investigate and fix these issues.
numHardFailures++;
} else {
- String errorMessage = "STDOUT:\n"+
- result.getStdOut()
- + "STDERR:\n" +
- result.getStdErr();
+ String errorMessage = "STDOUT:\n" + result.getStdOut() + "STDERR:\n" + result.getStdErr();
fail(errorMessage);
}
}
diff --git a/src/test/java/com/android/tools/r8/desugar/corelib/corelibjdktests/Jdk11TimeTests.java b/src/test/java/com/android/tools/r8/desugar/corelib/corelibjdktests/Jdk11TimeTests.java
index 3aefe01..95d53ad 100644
--- a/src/test/java/com/android/tools/r8/desugar/corelib/corelibjdktests/Jdk11TimeTests.java
+++ b/src/test/java/com/android/tools/r8/desugar/corelib/corelibjdktests/Jdk11TimeTests.java
@@ -11,12 +11,9 @@
import com.android.tools.r8.D8TestRunResult;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestParametersCollection;
-import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.ToolHelper.DexVm.Version;
-import com.android.tools.r8.utils.AndroidApiLevel;
import com.android.tools.r8.utils.StringUtils;
import java.nio.file.Paths;
-import org.junit.Assume;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -62,14 +59,15 @@
"test.java.time.TestTextParser.java",
"test.java.time.TestTextPrinter.java",
"test.java.time.TestChronoField.java",
- "test.java.util.TestFormatter.java"
- };
- // TODO(b/134732760): Investigate why these tests fail.
- private static String[] failuresToTriage =
- new String[] {
+ "test.java.util.TestFormatter.java",
+ // Following also fails using the default libs on P...
"test.java.time.chrono.TestEraDisplayName",
"test.java.time.format.TestDateTimeFormatter",
"test.java.time.TestLocalDate",
+ };
+ // TODO(b/134732760): Investigate why these tests fail.
+ private static String[] forEachProblem =
+ new String[] {
// ForEach problem
"test.java.time.format.TestNarrowMonthNamesAndDayNames",
};
@@ -130,7 +128,6 @@
@Test
public void testTime() throws Exception {
- Assume.assumeTrue("No desugaring on high API level.", requiresCoreLibDesugaring(parameters));
String verbosity = "2";
D8TestCompileResult compileResult =
testForD8()
@@ -138,7 +135,6 @@
.addProgramFiles(Paths.get(JDK_TESTS_BUILD_DIR + "jdk11TimeTests.jar"))
.addProgramFiles(Paths.get(JDK_TESTS_BUILD_DIR + "testng-6.10.jar"))
.addProgramFiles(Paths.get(JDK_TESTS_BUILD_DIR + "jcommander-1.48.jar"))
- .addLibraryFiles(ToolHelper.getAndroidJar(AndroidApiLevel.P))
.setMinApi(parameters.getApiLevel())
.enableCoreLibraryDesugaring(parameters.getApiLevel())
.compile()
@@ -150,15 +146,22 @@
compileResult.run(parameters.getRuntime(), "TestNGMainRunner", verbosity, success);
if (result.getStdErr().contains("Couldn't find any tzdata")) {
// TODO(b/134732760): fix missing time zone data.
+ } else if (result.getStdErr().contains("no microsecond precision")) {
+ // Emulator precision, won't fix.
} else {
assertTrue(result.getStdOut().contains(StringUtils.lines(success + ": SUCCESS")));
}
}
- for (String success : failuresToTriage) {
+ for (String success : forEachProblem) {
D8TestRunResult result =
compileResult.run(parameters.getRuntime(), "TestNGMainRunner", verbosity, success);
- assertTrue(
- result.getStdOut().contains("AssertionError") || result.getStdOut().contains("forEach("));
+ if (requiresAnyCoreLibDesugaring(parameters)) {
+ assertTrue(
+ result.getStdOut().contains("AssertionError")
+ || result.getStdOut().contains("forEach("));
+ } else {
+ assertTrue(result.getStdOut().contains(StringUtils.lines(success + ": SUCCESS")));
+ }
}
}
}