aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClément Béra <clementbera@google.com>2021-03-18 14:36:01 +0000
committerClément Béra <clementbera@google.com>2021-03-18 14:56:20 +0000
commitaa816726c408fa8704ea2531726c7e91bd2d0031 (patch)
tree03538eb148f2eb62954af9298fa50f0add677752
parentcac269b3a9cb0a58ec95e02c8d2b8df3820d0621 (diff)
downloadr8-aa816726c408fa8704ea2531726c7e91bd2d0031.tar.gz
Fix tests for JDK11 desugared library
Bug: 182463100 Change-Id: Id92284ace406e22f335aa432caec4371959e36b1
-rw-r--r--src/test/examplesJava9/stream/ProgramRewritingTestClass.java4
-rw-r--r--src/test/java/com/android/tools/r8/desugar/desugaredlibrary/CustomCollectionTest.java6
-rw-r--r--src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryTestBase.java5
-rw-r--r--src/test/java/com/android/tools/r8/desugar/desugaredlibrary/IterateTest.java102
-rw-r--r--src/test/java/com/android/tools/r8/desugar/desugaredlibrary/ProgramRewritingTest.java36
-rw-r--r--src/test/java/com/android/tools/r8/desugar/desugaredlibrary/SpliteratorTest.java103
-rw-r--r--src/test/java/com/android/tools/r8/desugar/desugaredlibrary/conversiontests/DuplicateAPIDesugaredLibTest.java6
-rw-r--r--src/test/java/com/android/tools/r8/desugar/desugaredlibrary/jdktests/Jdk11StreamTests.java107
8 files changed, 312 insertions, 57 deletions
diff --git a/src/test/examplesJava9/stream/ProgramRewritingTestClass.java b/src/test/examplesJava9/stream/ProgramRewritingTestClass.java
index 7eedeb93c..6bf4f12d3 100644
--- a/src/test/examplesJava9/stream/ProgramRewritingTestClass.java
+++ b/src/test/examplesJava9/stream/ProgramRewritingTestClass.java
@@ -27,11 +27,9 @@ public class ProgramRewritingTestClass {
ArrayList<Object> aList = new ArrayList<>();
Queue<Object> queue = new LinkedList<>();
LinkedHashSet<Object> lhs = new LinkedHashSet<>();
- // They both should be rewritten to invokeStatic to the dispatch class.
+ // Following should be rewritten to invokeStatic to the dispatch class.
System.out.println(set.spliterator().getClass().getName());
System.out.println("j$.util.Spliterators$IteratorSpliterator");
- System.out.println(list.spliterator().getClass().getName());
- System.out.println("j$.util.Spliterators$IteratorSpliterator");
// Following should be rewritten to invokeStatic to Collection dispatch class.
System.out.println(set.stream().getClass().getName());
System.out.println("j$.util.stream.ReferencePipeline$Head");
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/CustomCollectionTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/CustomCollectionTest.java
index 19cd88f85..514742c14 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/CustomCollectionTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/CustomCollectionTest.java
@@ -223,8 +223,9 @@ public class CustomCollectionTest extends DesugaredLibraryTestBase {
System.out.println(ccollection.spliterator().getClass().getName());
System.out.println("j$.util.Spliterators$IteratorSpliterator");
+ // See SpliteratorTest for the concrete class name.
System.out.println(cArrayList.spliterator().getClass().getName());
- System.out.println("j$.util.Spliterators$IteratorSpliterator");
+ System.out.println(new ArrayList<>().spliterator().getClass().getName());
System.out.println(cSortedSet.spliterator().getClass().getName());
System.out.println("j$.util.SortedSet$1");
System.out.println(customSortedSetWithReverseChain.spliterator().getClass().getName());
@@ -264,7 +265,8 @@ public class CustomCollectionTest extends DesugaredLibraryTestBase {
System.out.println(ccollection.spliterator().getClass().getName());
System.out.println("j$.util.Spliterators$IteratorSpliterator");
System.out.println(cArrayList.spliterator().getClass().getName());
- System.out.println("j$.util.Spliterators$IteratorSpliterator");
+ // See SpliteratorTest for the concrete class name.
+ System.out.println(new ArrayList<>().spliterator().getClass().getName());
System.out.println(cSortedSet.spliterator().getClass().getName());
System.out.println("j$.util.SortedSet$1");
System.out.println(customSortedSetWithReverseChain.spliterator().getClass().getName());
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 e927918db..8f1d451c9 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
@@ -61,6 +61,11 @@ public class DesugaredLibraryTestBase extends TestBase {
System.out.println("Forcing the usage of JDK11 desugared library.");
}
+ public static boolean isJDK11DesugaredLibrary() {
+ String property = System.getProperty("desugar_jdk_json_dir", "");
+ return property.contains("jdk11");
+ }
+
// For conversions tests, we need DexRuntimes where classes to convert are present (DexRuntimes
// above N and O depending if Stream or Time APIs are used), but we need to compile the program
// with a minAPI below to force the use of conversions.
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/IterateTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/IterateTest.java
new file mode 100644
index 000000000..41935e4e6
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/IterateTest.java
@@ -0,0 +1,102 @@
+// Copyright (c) 2019, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+package com.android.tools.r8.desugar.desugaredlibrary;
+
+import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.utils.BooleanUtils;
+import com.android.tools.r8.utils.StringUtils;
+import java.nio.file.Path;
+import java.util.List;
+import java.util.stream.IntStream;
+import org.junit.Assume;
+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 IterateTest extends DesugaredLibraryTestBase {
+
+ private final TestParameters parameters;
+ private final boolean shrinkDesugaredLibrary;
+ private static final String EXPECTED_OUTPUT = StringUtils.lines("1");
+
+ @Parameters(name = "{1}, shrinkDesugaredLibrary: {0}")
+ public static List<Object[]> data() {
+ return buildParameters(
+ BooleanUtils.values(),
+ getTestParameters().withAllRuntimes().withAllApiLevelsAlsoForCf().build());
+ }
+
+ public IterateTest(boolean shrinkDesugaredLibrary, TestParameters parameters) {
+ this.shrinkDesugaredLibrary = shrinkDesugaredLibrary;
+ this.parameters = parameters;
+ }
+
+ @Test
+ public void testIterateD8Cf() throws Exception {
+ // Only test without shrinking desugared library.
+ Assume.assumeFalse(shrinkDesugaredLibrary);
+ // Use D8 to desugar with Java classfile output.
+ Path jar =
+ testForD8(Backend.CF)
+ .addInnerClasses(IterateTest.class)
+ .setMinApi(parameters.getApiLevel())
+ .enableCoreLibraryDesugaring(parameters.getApiLevel())
+ .compile()
+ .writeToZip();
+
+ if (parameters.getRuntime().isDex()) {
+ // Convert to DEX without desugaring and run.
+ testForD8()
+ .addProgramFiles(jar)
+ .setMinApi(parameters.getApiLevel())
+ .disableDesugaring()
+ .compile()
+ .addRunClasspathFiles(buildDesugaredLibrary(parameters.getApiLevel()))
+ .run(parameters.getRuntime(), Main.class)
+ .assertSuccessWithOutput(EXPECTED_OUTPUT);
+ } else {
+ // Run on the JVM with desugared library on classpath.
+ testForJvm()
+ .addProgramFiles(jar)
+ .addRunClasspathFiles(buildDesugaredLibraryClassFile(parameters.getApiLevel()))
+ .run(parameters.getRuntime(), Main.class)
+ .assertSuccessWithOutput(EXPECTED_OUTPUT);
+ }
+ }
+
+ @Test
+ public void testIterate() throws Exception {
+ if (parameters.isCfRuntime()) {
+ testForJvm()
+ .addInnerClasses(IterateTest.class)
+ .run(parameters.getRuntime(), Main.class)
+ .assertSuccessWithOutput(EXPECTED_OUTPUT);
+ return;
+ }
+ KeepRuleConsumer keepRuleConsumer = createKeepRuleConsumer(parameters);
+ testForD8()
+ .addInnerClasses(IterateTest.class)
+ .setMinApi(parameters.getApiLevel())
+ .enableCoreLibraryDesugaring(parameters.getApiLevel(), keepRuleConsumer)
+ .compile()
+ .addDesugaredCoreLibraryRunClassPath(
+ this::buildDesugaredLibrary,
+ parameters.getApiLevel(),
+ keepRuleConsumer.get(),
+ shrinkDesugaredLibrary)
+ .run(parameters.getRuntime(), Main.class)
+ .assertSuccessWithOutput(EXPECTED_OUTPUT);
+ }
+
+ static class Main {
+
+ public static void main(String[] args) {
+ IntStream iterate = IntStream.iterate(1, x -> x + 3);
+ System.out.println(iterate.findFirst().getAsInt());
+ }
+ }
+}
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/ProgramRewritingTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/ProgramRewritingTest.java
index 082253b52..aa05c9d86 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/ProgramRewritingTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/ProgramRewritingTest.java
@@ -14,7 +14,6 @@ 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.TestShrinkerBuilder;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.ToolHelper.DexVm;
import com.android.tools.r8.utils.AndroidApiLevel;
@@ -154,28 +153,24 @@ public class ProgramRewritingTest extends DesugaredLibraryTestBase {
.streamInstructions()
.filter(instr -> instr.isInvokeInterface() || instr.isInvokeStatic())
.collect(Collectors.toList());
- assertEquals(23, invokes.size());
+ assertEquals(22, invokes.size());
assertInvokeStaticMatching(invokes, 0, "Set$-EL;->spliterator");
- assertInvokeStaticMatching(invokes, 1, "List$-EL;->spliterator");
- assertInvokeStaticMatching(invokes, 2, "Collection$-EL;->stream");
- assertInvokeInterfaceMatching(invokes, 3, "Set;->iterator");
- assertInvokeStaticMatching(invokes, 4, "Collection$-EL;->stream");
- assertInvokeStaticMatching(invokes, 5, "Set$-EL;->spliterator");
- assertInvokeInterfaceMatching(invokes, 9, "Iterator;->remove");
+ assertInvokeStaticMatching(invokes, 1, "Collection$-EL;->stream");
+ assertInvokeInterfaceMatching(invokes, 2, "Set;->iterator");
+ assertInvokeStaticMatching(invokes, 3, "Collection$-EL;->stream");
+ assertInvokeStaticMatching(invokes, 4, "Set$-EL;->spliterator");
+ assertInvokeInterfaceMatching(invokes, 8, "Iterator;->remove");
+ assertInvokeStaticMatching(invokes, 9, "DesugarArrays;->spliterator");
assertInvokeStaticMatching(invokes, 10, "DesugarArrays;->spliterator");
- assertInvokeStaticMatching(invokes, 11, "DesugarArrays;->spliterator");
+ assertInvokeStaticMatching(invokes, 11, "DesugarArrays;->stream");
assertInvokeStaticMatching(invokes, 12, "DesugarArrays;->stream");
- assertInvokeStaticMatching(invokes, 13, "DesugarArrays;->stream");
- assertInvokeStaticMatching(invokes, 14, "Collection$-EL;->stream");
- assertInvokeStaticMatching(invokes, 15, "IntStream$-CC;->range");
- assertInvokeStaticMatching(invokes, 17, "Comparator$-CC;->comparingInt");
- assertInvokeStaticMatching(invokes, 18, "List$-EL;->sort");
- assertInvokeStaticMatching(invokes, 20, "Comparator$-CC;->comparingInt");
- assertInvokeStaticMatching(invokes, 21, "List$-EL;->sort");
- assertInvokeStaticMatching(invokes, 22, "Collection$-EL;->stream");
- // TODO (b/134732760): Support Java 9 Stream APIs
- // assertTrue(invokes.get(17).isInvokeStatic());
- // assertTrue(invokes.get(17).toString().contains("Stream$-CC;->iterate"));
+ assertInvokeStaticMatching(invokes, 13, "Collection$-EL;->stream");
+ assertInvokeStaticMatching(invokes, 14, "IntStream$-CC;->range");
+ assertInvokeStaticMatching(invokes, 16, "Comparator$-CC;->comparingInt");
+ assertInvokeStaticMatching(invokes, 17, "List$-EL;->sort");
+ assertInvokeStaticMatching(invokes, 19, "Comparator$-CC;->comparingInt");
+ assertInvokeStaticMatching(invokes, 20, "List$-EL;->sort");
+ assertInvokeStaticMatching(invokes, 21, "Collection$-EL;->stream");
}
private void assertInvokeInterfaceMatching(List<InstructionSubject> invokes, int i, String s) {
@@ -193,7 +188,6 @@ public class ProgramRewritingTest extends DesugaredLibraryTestBase {
StringUtils.lines(
"-keep class j$.util.List$-EL {",
" void sort(java.util.List, java.util.Comparator);",
- " j$.util.Spliterator spliterator(java.util.List);",
"}",
"-keep class j$.util.Collection$-EL {",
" j$.util.stream.Stream stream(java.util.Collection);",
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/SpliteratorTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/SpliteratorTest.java
new file mode 100644
index 000000000..5af29c367
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/SpliteratorTest.java
@@ -0,0 +1,103 @@
+// Copyright (c) 2019, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+package com.android.tools.r8.desugar.desugaredlibrary;
+
+import static junit.framework.TestCase.assertTrue;
+
+import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.utils.StringUtils;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.LinkedList;
+import java.util.List;
+import org.junit.Assume;
+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 SpliteratorTest extends DesugaredLibraryTestBase {
+
+ private final TestParameters parameters;
+ private static final String EXPECTED_OUTPUT_JDK11 =
+ StringUtils.lines(
+ "j$.util.AbstractList$RandomAccessSpliterator",
+ "j$.util.AbstractList$RandomAccessSpliterator",
+ "j$.util.Spliterators$IteratorSpliterator",
+ "j$.util.Spliterators$IteratorSpliterator");
+ private static final String EXPECTED_OUTPUT_JDK8 =
+ StringUtils.lines(
+ "j$.util.Spliterators$IteratorSpliterator",
+ "j$.util.Spliterators$IteratorSpliterator",
+ "j$.util.Spliterators$IteratorSpliterator",
+ "j$.util.Spliterators$IteratorSpliterator");
+
+ @Parameters(name = "{0}")
+ public static List<Object[]> data() {
+ return buildParameters(getTestParameters().withDexRuntimes().withAllApiLevels().build());
+ }
+
+ public SpliteratorTest(TestParameters parameters) {
+ this.parameters = parameters;
+ }
+
+ @Test
+ public void testSpliterator() throws Exception {
+ Assume.assumeTrue(requiresEmulatedInterfaceCoreLibDesugaring(parameters));
+ testForD8()
+ .addInnerClasses(SpliteratorTest.class)
+ .setMinApi(parameters.getApiLevel())
+ .enableCoreLibraryDesugaring(parameters.getApiLevel())
+ .compile()
+ .inspect(this::validateInterfaces)
+ .addDesugaredCoreLibraryRunClassPath(this::buildDesugaredLibrary, parameters.getApiLevel())
+ .run(parameters.getRuntime(), Main.class)
+ .assertSuccessWithOutput(
+ isJDK11DesugaredLibrary() ? EXPECTED_OUTPUT_JDK11 : EXPECTED_OUTPUT_JDK8);
+ }
+
+ private void validateInterfaces(CodeInspector inspector) {
+ assertTrue(
+ inspector
+ .clazz("com.android.tools.r8.desugar.desugaredlibrary.SpliteratorTest$MyArrayList")
+ .getDexProgramClass()
+ .interfaces
+ .toString()
+ .contains("j$.util.List"));
+ assertTrue(
+ inspector
+ .clazz("com.android.tools.r8.desugar.desugaredlibrary.SpliteratorTest$MyLinkedList")
+ .getDexProgramClass()
+ .interfaces
+ .toString()
+ .contains("j$.util.List"));
+ }
+
+ static class Main {
+
+ public static void main(String[] args) {
+ System.out.println(new ArrayList<>().spliterator().getClass().getName());
+ System.out.println(new MyArrayList<>().spliterator().getClass().getName());
+ System.out.println(new LinkedList<>().spliterator().getClass().getName());
+ System.out.println(new MyLinkedList<>().spliterator().getClass().getName());
+ }
+ }
+
+ static class MyArrayList<E> extends ArrayList<E> {
+ @Override
+ public void sort(Comparator<? super E> c) {
+ // Override to force j$ interface.
+ }
+ }
+
+ static class MyLinkedList<E> extends LinkedList<E> {
+ @Override
+ public void sort(Comparator<? super E> c) {
+ // Override to force j$ interface.
+ }
+ }
+}
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/conversiontests/DuplicateAPIDesugaredLibTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/conversiontests/DuplicateAPIDesugaredLibTest.java
index 812cd3419..9a251a919 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/conversiontests/DuplicateAPIDesugaredLibTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/conversiontests/DuplicateAPIDesugaredLibTest.java
@@ -82,8 +82,12 @@ public class DuplicateAPIDesugaredLibTest extends DesugaredLibraryTestBase {
private void assertDupMethod(CodeInspector inspector, boolean supportAllCallbacksFromLibrary) {
ClassSubject clazz = inspector.clazz("j$.util.concurrent.ConcurrentHashMap");
+ int numForEachMethods =
+ isJDK11DesugaredLibrary()
+ ? supportAllCallbacksFromLibrary ? 4 : 3
+ : supportAllCallbacksFromLibrary ? 2 : 1;
assertEquals(
- supportAllCallbacksFromLibrary ? 2 : 1,
+ numForEachMethods,
clazz.virtualMethods().stream().filter(m -> m.getOriginalName().equals("forEach")).count());
}
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/jdktests/Jdk11StreamTests.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/jdktests/Jdk11StreamTests.java
index 0901c28eb..355343dd8 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/jdktests/Jdk11StreamTests.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/jdktests/Jdk11StreamTests.java
@@ -73,23 +73,31 @@ public class Jdk11StreamTests extends Jdk11DesugaredLibraryTestBase {
return files;
}
- private static String[] FAILING_RUNNABLE_TESTS =
- new String[] {
- // J9 failure.
- "org/openjdk/tests/java/util/stream/SpliteratorTest.java",
- "org/openjdk/tests/java/util/stream/WhileOpStatefulTest.java",
- "org/openjdk/tests/java/util/stream/IterateTest.java",
- "org/openjdk/tests/java/util/stream/WhileOpTest.java",
- // Assertion error
- "org/openjdk/tests/java/util/stream/StreamCloseTest.java",
- "org/openjdk/tests/java/util/stream/CollectAndSummaryStatisticsTest.java",
- "org/openjdk/tests/java/util/stream/CountTest.java",
- // J9 Random problem
- "org/openjdk/tests/java/util/stream/LongPrimitiveOpsTests.java",
- "org/openjdk/tests/java/util/stream/IntPrimitiveOpsTests.java",
- "org/openjdk/tests/java/util/stream/DoublePrimitiveOpsTests.java"
+ private static final String[] FAILING_RUNNABLE_TESTS = new String[] {
+ // Disabled, D8 generated code raises AbstractMethodError instead of NPE because of API
+ // unsupported in the desugared library.
+ // "org/openjdk/tests/java/util/stream/SpliteratorTest.java",
+ // Disabled because both the stream close issue and the Random issue (See below).
+ // "org/openjdk/tests/java/util/stream/LongPrimitiveOpsTests.java",
// Disabled because explicit cast done on a wrapped value.
// "org/openjdk/tests/java/util/SplittableRandomTest.java",
+ // Disabled due to a desugaring failure due to the extended library used for the test.
+ // "org/openjdk/tests/java/util/stream/IterateTest.java",
+ };
+
+ // Cannot succeed with JDK 8 desugared library because use J9 features.
+ // Stream close issue with try with resource desugaring mixed with partial library desugaring.
+ public static final String[] STREAM_CLOSE_TESTS =
+ new String[] {"org/openjdk/tests/java/util/stream/StreamCloseTest.java"};
+
+ // Cannot succeed with JDK 8 desugared library because use J9 features.
+ public static final String[] SUCCESSFUL_RUNNABLE_TESTS_ON_JDK11_AND_V7 =
+ new String[] {
+ // Require the virtual method isDefault() in class java/lang/reflect/Method.
+ "org/openjdk/tests/java/util/stream/WhileOpTest.java",
+ "org/openjdk/tests/java/util/stream/WhileOpStatefulTest.java",
+ // Require a Random method not present before Android 7 and not desugared.
+ "org/openjdk/tests/java/util/stream/IntPrimitiveOpsTests.java"
};
// Disabled because time to run > 1 min for each test.
@@ -108,6 +116,15 @@ public class Jdk11StreamTests extends Jdk11DesugaredLibraryTestBase {
"org/openjdk/tests/java/util/stream/ToArrayOpTest.java"
};
+ private static final String[] SUCCESSFUL_RUNNABLE_TESTS_ON_JDK11_ONLY =
+ new String[] {
+ // Assertion error
+ "org/openjdk/tests/java/util/stream/CollectAndSummaryStatisticsTest.java",
+ "org/openjdk/tests/java/util/stream/CountTest.java",
+ // J9 Random problem
+ "org/openjdk/tests/java/util/stream/DoublePrimitiveOpsTests.java",
+ };
+
private static String[] SUCCESSFUL_RUNNABLE_TESTS =
new String[] {
"org/openjdk/tests/java/util/stream/FindFirstOpTest.java",
@@ -136,6 +153,37 @@ public class Jdk11StreamTests extends Jdk11DesugaredLibraryTestBase {
"org/openjdk/tests/java/util/stream/FindAnyOpTest.java"
};
+ private Map<String, String> getSuccessfulTests() {
+ Map<String, String> runnableTests = getRunnableTests(SUCCESSFUL_RUNNABLE_TESTS);
+ if (isJDK11DesugaredLibrary()) {
+ runnableTests.putAll(getRunnableTests(SUCCESSFUL_RUNNABLE_TESTS_ON_JDK11_ONLY));
+ if (parameters.getDexRuntimeVersion().isNewerThanOrEqual(Version.V7_0_0)) {
+ runnableTests.putAll(getRunnableTests(SUCCESSFUL_RUNNABLE_TESTS_ON_JDK11_AND_V7));
+ }
+ if (!parameters.getApiLevel().isLessThanOrEqualTo(AndroidApiLevel.K)) {
+ runnableTests.putAll(getRunnableTests(STREAM_CLOSE_TESTS));
+ }
+ }
+ return runnableTests;
+ }
+
+ private Map<String, String> getFailingTests() {
+ Map<String, String> runnableTests = getRunnableTests(FAILING_RUNNABLE_TESTS);
+ if (!isJDK11DesugaredLibrary()) {
+ runnableTests.putAll(getRunnableTests(SUCCESSFUL_RUNNABLE_TESTS_ON_JDK11_ONLY));
+ runnableTests.putAll(getRunnableTests(SUCCESSFUL_RUNNABLE_TESTS_ON_JDK11_AND_V7));
+ runnableTests.putAll(getRunnableTests(STREAM_CLOSE_TESTS));
+ } else {
+ if (parameters.getApiLevel().isLessThanOrEqualTo(AndroidApiLevel.K)) {
+ runnableTests.putAll(getRunnableTests(STREAM_CLOSE_TESTS));
+ }
+ if (!parameters.getDexRuntimeVersion().isNewerThanOrEqual(Version.V7_0_0)) {
+ runnableTests.putAll(getRunnableTests(SUCCESSFUL_RUNNABLE_TESTS_ON_JDK11_AND_V7));
+ }
+ }
+ return runnableTests;
+ }
+
private static Map<String, String> getRunnableTests(String[] tests) {
IdentityHashMap<String, String> pathToName = new IdentityHashMap<>();
int javaExtSize = JAVA_EXTENSION.length();
@@ -150,16 +198,18 @@ public class Jdk11StreamTests extends Jdk11DesugaredLibraryTestBase {
private static String[] missingDesugaredMethods() {
// These methods are from Java 9 and not supported in the current desugared libraries.
- return new String[]{
- // Stream
- "takeWhile(",
- "dropWhile(",
- "iterate(",
- "range(",
- "doubles(",
- // Collectors
- "filtering(",
- "flatMapping(",
+ return new String[] {
+ // Stream
+ "takeWhile(",
+ "dropWhile(",
+ "iterate(",
+ "range(",
+ "doubles(",
+ // Collectors
+ "filtering(",
+ "flatMapping(",
+ // isDefault()Z in class Ljava/lang/reflect/Method
+ "isDefault("
};
}
@@ -262,7 +312,7 @@ public class Jdk11StreamTests extends Jdk11DesugaredLibraryTestBase {
private void runSuccessfulTests(D8TestCompileResult compileResult) throws Exception {
String verbosity = "2"; // Increase verbosity for debugging.
- Map<String, String> runnableTests = getRunnableTests(SUCCESSFUL_RUNNABLE_TESTS);
+ Map<String, String> runnableTests = getSuccessfulTests();
for (String path : runnableTests.keySet()) {
assert runnableTests.get(path) != null;
D8TestRunResult result =
@@ -281,7 +331,7 @@ public class Jdk11StreamTests extends Jdk11DesugaredLibraryTestBase {
// For failing runnable tests, we just ensure that they do not fail due to desugaring, but
// due to an expected failure (missing API, etc.).
String verbosity = "2"; // Increase verbosity for debugging.
- Map<String, String> runnableTests = getRunnableTests(FAILING_RUNNABLE_TESTS);
+ Map<String, String> runnableTests = getFailingTests();
for (String path : runnableTests.keySet()) {
assert runnableTests.get(path) != null;
D8TestRunResult result =
@@ -291,9 +341,6 @@ public class Jdk11StreamTests extends Jdk11DesugaredLibraryTestBase {
if (stdout.contains("java.lang.NoSuchMethodError")
&& Arrays.stream(missingDesugaredMethods()).anyMatch(stdout::contains)) {
// TODO(b/134732760): support Java 9 APIs.
- } else if (stdout.contains("java.lang.NoSuchMethodError")
- && stdout.contains("org.openjdk.tests.java.util.stream.IterateTest.testIterate")) {
- // TODO(b/134732760): support Java 9 APIs.
} else if (stdout.contains("in class Ljava/util/Random")
&& stdout.contains("java.lang.NoSuchMethodError")) {
// TODO(b/134732760): Random Java 9 Apis, support or do not use them.