diff options
author | Clément Béra <clementbera@google.com> | 2021-03-18 14:36:01 +0000 |
---|---|---|
committer | Clément Béra <clementbera@google.com> | 2021-03-18 14:56:20 +0000 |
commit | aa816726c408fa8704ea2531726c7e91bd2d0031 (patch) | |
tree | 03538eb148f2eb62954af9298fa50f0add677752 | |
parent | cac269b3a9cb0a58ec95e02c8d2b8df3820d0621 (diff) | |
download | r8-aa816726c408fa8704ea2531726c7e91bd2d0031.tar.gz |
Fix tests for JDK11 desugared library
Bug: 182463100
Change-Id: Id92284ace406e22f335aa432caec4371959e36b1
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. |