Move backport test to java 11 package
Bug: b/380808556
Change-Id: I6fb814aba2be9cba076912db970efa92cc4f3558
diff --git a/d8_r8/test_modules/tests_java_11/build.gradle.kts b/d8_r8/test_modules/tests_java_11/build.gradle.kts
index bb30566..12a7681 100644
--- a/d8_r8/test_modules/tests_java_11/build.gradle.kts
+++ b/d8_r8/test_modules/tests_java_11/build.gradle.kts
@@ -3,7 +3,6 @@
// BSD-style license that can be found in the LICENSE file.
import org.gradle.api.JavaVersion
-import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
`kotlin-dsl`
diff --git a/src/test/examplesJava11/backport/CharSequenceBackportJava11Main.java b/src/test/examplesJava11/backport/CharSequenceBackportJava11Main.java
deleted file mode 100644
index d0888f8..0000000
--- a/src/test/examplesJava11/backport/CharSequenceBackportJava11Main.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package backport;
-
-public final class CharSequenceBackportJava11Main {
- public static void main(String[] args) {
- testCompare();
- }
-
- private static void testCompare() {
- assertTrue(CharSequence.compare("Hello", "Hello") == 0);
-
- assertTrue(CharSequence.compare("Hey", "Hello") > 0);
- assertTrue(CharSequence.compare("Hello", "Hey") < 0);
-
- assertTrue(CharSequence.compare("Hel", "Hello") < 0);
- assertTrue(CharSequence.compare("Hello", "Hel") > 0);
-
- assertTrue(CharSequence.compare("", "") == 0);
- assertTrue(CharSequence.compare("", "Hello") < 0);
- assertTrue(CharSequence.compare("Hello", "") > 0);
-
- // Different CharSequence types:
- assertTrue(CharSequence.compare("Hello", new StringBuilder("Hello")) == 0);
- assertTrue(CharSequence.compare(new StringBuffer("hey"), "Hello") > 0);
- assertTrue(CharSequence.compare(new StringBuffer("Hello"), new StringBuilder("Hey")) < 0);
-
- try {
- throw new AssertionError(CharSequence.compare(null, "Hello"));
- } catch (NullPointerException expected) {
- }
- try {
- throw new AssertionError(CharSequence.compare("Hello", null));
- } catch (NullPointerException expected) {
- }
- try {
- // Ensure a == b fast path does not happen before null checks.
- throw new AssertionError(CharSequence.compare(null, null));
- } catch (NullPointerException expected) {
- }
- }
-
- private static void assertTrue(boolean value) {
- if (!value) {
- throw new AssertionError("Expected <true> but was <false>");
- }
- }
-}
diff --git a/src/test/examplesJava11/backport/CharSequenceBackportJava11Test.java b/src/test/examplesJava11/backport/CharSequenceBackportJava11Test.java
new file mode 100644
index 0000000..dad526c
--- /dev/null
+++ b/src/test/examplesJava11/backport/CharSequenceBackportJava11Test.java
@@ -0,0 +1,75 @@
+// Copyright (c) 2020, 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 backport;
+
+import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestRuntime.CfVm;
+import com.android.tools.r8.desugar.backports.AbstractBackportTest;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class CharSequenceBackportJava11Test extends AbstractBackportTest {
+ @Parameters(name = "{0}")
+ public static Iterable<?> data() {
+ return getTestParameters()
+ .withDexRuntimes()
+ .withCfRuntimesStartingFromIncluding(CfVm.JDK11)
+ .withAllApiLevelsAlsoForCf()
+ .build();
+ }
+
+ public CharSequenceBackportJava11Test(TestParameters parameters) {
+ super(parameters, Character.class, CharSequenceBackportJava11Main.class);
+ // Note: None of the methods in this test exist in the latest android.jar. If/when they ship in
+ // an actual API level, migrate these tests to CharacterBackportTest.
+ }
+
+ public static class CharSequenceBackportJava11Main {
+ public static void main(String[] args) {
+ testCompare();
+ }
+
+ private static void testCompare() {
+ assertTrue(CharSequence.compare("Hello", "Hello") == 0);
+
+ assertTrue(CharSequence.compare("Hey", "Hello") > 0);
+ assertTrue(CharSequence.compare("Hello", "Hey") < 0);
+
+ assertTrue(CharSequence.compare("Hel", "Hello") < 0);
+ assertTrue(CharSequence.compare("Hello", "Hel") > 0);
+
+ assertTrue(CharSequence.compare("", "") == 0);
+ assertTrue(CharSequence.compare("", "Hello") < 0);
+ assertTrue(CharSequence.compare("Hello", "") > 0);
+
+ // Different CharSequence types:
+ assertTrue(CharSequence.compare("Hello", new StringBuilder("Hello")) == 0);
+ assertTrue(CharSequence.compare(new StringBuffer("hey"), "Hello") > 0);
+ assertTrue(CharSequence.compare(new StringBuffer("Hello"), new StringBuilder("Hey")) < 0);
+
+ try {
+ throw new AssertionError(CharSequence.compare(null, "Hello"));
+ } catch (NullPointerException expected) {
+ }
+ try {
+ throw new AssertionError(CharSequence.compare("Hello", null));
+ } catch (NullPointerException expected) {
+ }
+ try {
+ // Ensure a == b fast path does not happen before null checks.
+ throw new AssertionError(CharSequence.compare(null, null));
+ } catch (NullPointerException expected) {
+ }
+ }
+
+ private static void assertTrue(boolean value) {
+ if (!value) {
+ throw new AssertionError("Expected <true> but was <false>");
+ }
+ }
+ }
+}
diff --git a/src/test/examplesJava11/backport/OptionalBackportJava11Main.java b/src/test/examplesJava11/backport/OptionalBackportJava11Main.java
deleted file mode 100644
index d1f6fa1..0000000
--- a/src/test/examplesJava11/backport/OptionalBackportJava11Main.java
+++ /dev/null
@@ -1,34 +0,0 @@
-// 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 backport;
-
-import java.util.Optional;
-
-public final class OptionalBackportJava11Main {
-
- public static void main(String[] args) {
- testIsEmpty();
- }
-
- private static void testIsEmpty() {
- Optional<String> present = Optional.of("hey");
- assertFalse(present.isEmpty());
-
- Optional<String> absent = Optional.empty();
- assertTrue(absent.isEmpty());
- }
-
- private static void assertTrue(boolean value) {
- if (!value) {
- throw new AssertionError("Expected <true> but was <false>");
- }
- }
-
- private static void assertFalse(boolean value) {
- if (value) {
- throw new AssertionError("Expected <false> but was <true>");
- }
- }
-}
diff --git a/src/test/java/com/android/tools/r8/desugar/backports/OptionalBackportJava11Test.java b/src/test/examplesJava11/backport/OptionalBackportJava11Test.java
similarity index 62%
rename from src/test/java/com/android/tools/r8/desugar/backports/OptionalBackportJava11Test.java
rename to src/test/examplesJava11/backport/OptionalBackportJava11Test.java
index a7255b6..ebbf952 100644
--- a/src/test/java/com/android/tools/r8/desugar/backports/OptionalBackportJava11Test.java
+++ b/src/test/examplesJava11/backport/OptionalBackportJava11Test.java
@@ -2,17 +2,13 @@
// 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.backports;
-
-import static com.android.tools.r8.utils.FileUtils.JAR_EXTENSION;
+package backport;
import com.android.tools.r8.TestParameters;
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.desugar.backports.AbstractBackportTest;
import com.android.tools.r8.utils.AndroidApiLevel;
-import java.nio.file.Path;
-import java.nio.file.Paths;
import java.util.Optional;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -30,11 +26,8 @@
.build();
}
- private static final Path TEST_JAR =
- Paths.get(ToolHelper.EXAMPLES_JAVA11_JAR_DIR).resolve("backport" + JAR_EXTENSION);
-
public OptionalBackportJava11Test(TestParameters parameters) {
- super(parameters, Optional.class, TEST_JAR, "backport.OptionalBackportJava11Main");
+ super(parameters, Optional.class, OptionalBackportJava11Main.class);
// Note: The methods in this test exist in android.jar from Android T. When R8 builds targeting
// Java 11 move these tests to OptionalBackportTest (out of examplesJava11).
@@ -44,4 +37,31 @@
registerTarget(AndroidApiLevel.T, 2);
}
+
+ public static class OptionalBackportJava11Main {
+
+ public static void main(String[] args) {
+ testIsEmpty();
+ }
+
+ private static void testIsEmpty() {
+ Optional<String> present = Optional.of("hey");
+ assertFalse(present.isEmpty());
+
+ Optional<String> absent = Optional.empty();
+ assertTrue(absent.isEmpty());
+ }
+
+ private static void assertTrue(boolean value) {
+ if (!value) {
+ throw new AssertionError("Expected <true> but was <false>");
+ }
+ }
+
+ private static void assertFalse(boolean value) {
+ if (value) {
+ throw new AssertionError("Expected <false> but was <true>");
+ }
+ }
+ }
}
diff --git a/src/test/examplesJava11/backport/OptionalDoubleBackportJava11Main.java b/src/test/examplesJava11/backport/OptionalDoubleBackportJava11Main.java
deleted file mode 100644
index 1fa5617..0000000
--- a/src/test/examplesJava11/backport/OptionalDoubleBackportJava11Main.java
+++ /dev/null
@@ -1,34 +0,0 @@
-// 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 backport;
-
-import java.util.OptionalDouble;
-
-public final class OptionalDoubleBackportJava11Main {
-
- public static void main(String[] args) {
- testIsEmpty();
- }
-
- private static void testIsEmpty() {
- OptionalDouble present = OptionalDouble.of(2d);
- assertFalse(present.isEmpty());
-
- OptionalDouble absent = OptionalDouble.empty();
- assertTrue(absent.isEmpty());
- }
-
- private static void assertTrue(boolean value) {
- if (!value) {
- throw new AssertionError("Expected <true> but was <false>");
- }
- }
-
- private static void assertFalse(boolean value) {
- if (value) {
- throw new AssertionError("Expected <false> but was <true>");
- }
- }
-}
diff --git a/src/test/java/com/android/tools/r8/desugar/backports/OptionalDoubleBackportJava11Test.java b/src/test/examplesJava11/backport/OptionalDoubleBackportJava11Test.java
similarity index 62%
rename from src/test/java/com/android/tools/r8/desugar/backports/OptionalDoubleBackportJava11Test.java
rename to src/test/examplesJava11/backport/OptionalDoubleBackportJava11Test.java
index 377ed2e..de629a1 100644
--- a/src/test/java/com/android/tools/r8/desugar/backports/OptionalDoubleBackportJava11Test.java
+++ b/src/test/examplesJava11/backport/OptionalDoubleBackportJava11Test.java
@@ -2,17 +2,13 @@
// 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.backports;
-
-import static com.android.tools.r8.utils.FileUtils.JAR_EXTENSION;
+package backport;
import com.android.tools.r8.TestParameters;
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.desugar.backports.AbstractBackportTest;
import com.android.tools.r8.utils.AndroidApiLevel;
-import java.nio.file.Path;
-import java.nio.file.Paths;
import java.util.OptionalDouble;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -30,11 +26,8 @@
.build();
}
- private static final Path TEST_JAR =
- Paths.get(ToolHelper.EXAMPLES_JAVA11_JAR_DIR).resolve("backport" + JAR_EXTENSION);
-
public OptionalDoubleBackportJava11Test(TestParameters parameters) {
- super(parameters, OptionalDouble.class, TEST_JAR, "backport.OptionalDoubleBackportJava11Main");
+ super(parameters, OptionalDouble.class, OptionalDoubleBackportJava11Main.class);
// Note: The methods in this test exist in android.jar from Android T. When R8 builds targeting
// Java 11 move these tests to OptionalBackportTest (out of examplesJava11).
@@ -44,4 +37,31 @@
registerTarget(AndroidApiLevel.T, 2);
}
+
+ public static class OptionalDoubleBackportJava11Main {
+
+ public static void main(String[] args) {
+ testIsEmpty();
+ }
+
+ private static void testIsEmpty() {
+ OptionalDouble present = OptionalDouble.of(2d);
+ assertFalse(present.isEmpty());
+
+ OptionalDouble absent = OptionalDouble.empty();
+ assertTrue(absent.isEmpty());
+ }
+
+ private static void assertTrue(boolean value) {
+ if (!value) {
+ throw new AssertionError("Expected <true> but was <false>");
+ }
+ }
+
+ private static void assertFalse(boolean value) {
+ if (value) {
+ throw new AssertionError("Expected <false> but was <true>");
+ }
+ }
+ }
}
diff --git a/src/test/examplesJava11/backport/OptionalIntBackportJava11Main.java b/src/test/examplesJava11/backport/OptionalIntBackportJava11Main.java
deleted file mode 100644
index 9d1a09a..0000000
--- a/src/test/examplesJava11/backport/OptionalIntBackportJava11Main.java
+++ /dev/null
@@ -1,34 +0,0 @@
-// 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 backport;
-
-import java.util.OptionalInt;
-
-public final class OptionalIntBackportJava11Main {
-
- public static void main(String[] args) {
- testIsEmpty();
- }
-
- private static void testIsEmpty() {
- OptionalInt present = OptionalInt.of(2);
- assertFalse(present.isEmpty());
-
- OptionalInt absent = OptionalInt.empty();
- assertTrue(absent.isEmpty());
- }
-
- private static void assertTrue(boolean value) {
- if (!value) {
- throw new AssertionError("Expected <true> but was <false>");
- }
- }
-
- private static void assertFalse(boolean value) {
- if (value) {
- throw new AssertionError("Expected <false> but was <true>");
- }
- }
-}
diff --git a/src/test/java/com/android/tools/r8/desugar/backports/OptionalIntBackportJava11Test.java b/src/test/examplesJava11/backport/OptionalIntBackportJava11Test.java
similarity index 62%
rename from src/test/java/com/android/tools/r8/desugar/backports/OptionalIntBackportJava11Test.java
rename to src/test/examplesJava11/backport/OptionalIntBackportJava11Test.java
index 95c6adc..90d40ef 100644
--- a/src/test/java/com/android/tools/r8/desugar/backports/OptionalIntBackportJava11Test.java
+++ b/src/test/examplesJava11/backport/OptionalIntBackportJava11Test.java
@@ -2,17 +2,13 @@
// 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.backports;
-
-import static com.android.tools.r8.utils.FileUtils.JAR_EXTENSION;
+package backport;
import com.android.tools.r8.TestParameters;
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.desugar.backports.AbstractBackportTest;
import com.android.tools.r8.utils.AndroidApiLevel;
-import java.nio.file.Path;
-import java.nio.file.Paths;
import java.util.OptionalInt;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -30,11 +26,8 @@
.build();
}
- private static final Path TEST_JAR =
- Paths.get(ToolHelper.EXAMPLES_JAVA11_JAR_DIR).resolve("backport" + JAR_EXTENSION);
-
public OptionalIntBackportJava11Test(TestParameters parameters) {
- super(parameters, OptionalInt.class, TEST_JAR, "backport.OptionalIntBackportJava11Main");
+ super(parameters, OptionalInt.class, OptionalIntBackportJava11Main.class);
// Note: The methods in this test exist in android.jar from Android T. When R8 builds targeting
// Java 11 move these tests to OptionalBackportTest (out of examplesJava11).
@@ -44,4 +37,31 @@
registerTarget(AndroidApiLevel.T, 2);
}
+
+ public static class OptionalIntBackportJava11Main {
+
+ public static void main(String[] args) {
+ testIsEmpty();
+ }
+
+ private static void testIsEmpty() {
+ OptionalInt present = OptionalInt.of(2);
+ assertFalse(present.isEmpty());
+
+ OptionalInt absent = OptionalInt.empty();
+ assertTrue(absent.isEmpty());
+ }
+
+ private static void assertTrue(boolean value) {
+ if (!value) {
+ throw new AssertionError("Expected <true> but was <false>");
+ }
+ }
+
+ private static void assertFalse(boolean value) {
+ if (value) {
+ throw new AssertionError("Expected <false> but was <true>");
+ }
+ }
+ }
}
diff --git a/src/test/examplesJava11/backport/OptionalLongBackportJava11Main.java b/src/test/examplesJava11/backport/OptionalLongBackportJava11Main.java
deleted file mode 100644
index 573bbba..0000000
--- a/src/test/examplesJava11/backport/OptionalLongBackportJava11Main.java
+++ /dev/null
@@ -1,34 +0,0 @@
-// 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 backport;
-
-import java.util.OptionalLong;
-
-public final class OptionalLongBackportJava11Main {
-
- public static void main(String[] args) {
- testIsEmpty();
- }
-
- private static void testIsEmpty() {
- OptionalLong present = OptionalLong.of(2L);
- assertFalse(present.isEmpty());
-
- OptionalLong absent = OptionalLong.empty();
- assertTrue(absent.isEmpty());
- }
-
- private static void assertTrue(boolean value) {
- if (!value) {
- throw new AssertionError("Expected <true> but was <false>");
- }
- }
-
- private static void assertFalse(boolean value) {
- if (value) {
- throw new AssertionError("Expected <false> but was <true>");
- }
- }
-}
diff --git a/src/test/java/com/android/tools/r8/desugar/backports/OptionalLongBackportJava11Test.java b/src/test/examplesJava11/backport/OptionalLongBackportJava11Test.java
similarity index 62%
rename from src/test/java/com/android/tools/r8/desugar/backports/OptionalLongBackportJava11Test.java
rename to src/test/examplesJava11/backport/OptionalLongBackportJava11Test.java
index 7333cb9..b6f9e43 100644
--- a/src/test/java/com/android/tools/r8/desugar/backports/OptionalLongBackportJava11Test.java
+++ b/src/test/examplesJava11/backport/OptionalLongBackportJava11Test.java
@@ -2,17 +2,13 @@
// 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.backports;
-
-import static com.android.tools.r8.utils.FileUtils.JAR_EXTENSION;
+package backport;
import com.android.tools.r8.TestParameters;
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.desugar.backports.AbstractBackportTest;
import com.android.tools.r8.utils.AndroidApiLevel;
-import java.nio.file.Path;
-import java.nio.file.Paths;
import java.util.OptionalLong;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -30,11 +26,8 @@
.build();
}
- private static final Path TEST_JAR =
- Paths.get(ToolHelper.EXAMPLES_JAVA11_JAR_DIR).resolve("backport" + JAR_EXTENSION);
-
public OptionalLongBackportJava11Test(TestParameters parameters) {
- super(parameters, OptionalLong.class, TEST_JAR, "backport.OptionalLongBackportJava11Main");
+ super(parameters, OptionalLong.class, OptionalLongBackportJava11Main.class);
// Note: The methods in this test exist in android.jar from Android T. When R8 builds targeting
// Java 11 move these tests to OptionalBackportTest (out of examplesJava11).
@@ -44,4 +37,31 @@
registerTarget(AndroidApiLevel.T, 2);
}
+
+ public static class OptionalLongBackportJava11Main {
+
+ public static void main(String[] args) {
+ testIsEmpty();
+ }
+
+ private static void testIsEmpty() {
+ OptionalLong present = OptionalLong.of(2L);
+ assertFalse(present.isEmpty());
+
+ OptionalLong absent = OptionalLong.empty();
+ assertTrue(absent.isEmpty());
+ }
+
+ private static void assertTrue(boolean value) {
+ if (!value) {
+ throw new AssertionError("Expected <true> but was <false>");
+ }
+ }
+
+ private static void assertFalse(boolean value) {
+ if (value) {
+ throw new AssertionError("Expected <false> but was <true>");
+ }
+ }
+ }
}
diff --git a/src/test/examplesJava11/backport/PredicateBackportJava11Main.java b/src/test/examplesJava11/backport/PredicateBackportJava11Main.java
deleted file mode 100644
index d16674a..0000000
--- a/src/test/examplesJava11/backport/PredicateBackportJava11Main.java
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright (c) 2022, 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 backport;
-
-import java.util.Objects;
-import java.util.function.Predicate;
-
-public final class PredicateBackportJava11Main {
- public static void main(String[] args) {
- testNot();
- }
-
- private static void testNot() {
-
- Predicate<Object> isNull = Objects::isNull;
- Predicate<Object> notNull = Predicate.not(isNull);
-
- assertEquals(notNull.test(null), false);
- assertEquals(notNull.test("something"), true);
-
- try {
- Predicate.not(null);
- throw new AssertionError("Expected to throw NPE");
- } catch (Throwable t) {
- // Expected.
- }
- }
-
- private static void assertEquals(Object expected, Object actual) {
- if (expected != actual && (expected == null || !expected.equals(actual))) {
- throw new AssertionError("Expected <" + expected + "> but was <" + actual + '>');
- }
- }
-}
diff --git a/src/test/examplesJava11/backport/PredicateBackportJava11Test.java b/src/test/examplesJava11/backport/PredicateBackportJava11Test.java
new file mode 100644
index 0000000..e8a28c6
--- /dev/null
+++ b/src/test/examplesJava11/backport/PredicateBackportJava11Test.java
@@ -0,0 +1,65 @@
+// Copyright (c) 2022, 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 backport;
+
+import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestRuntime.CfVm;
+import com.android.tools.r8.ToolHelper.DexVm.Version;
+import com.android.tools.r8.desugar.backports.AbstractBackportTest;
+import com.android.tools.r8.utils.AndroidApiLevel;
+import java.util.Objects;
+import java.util.OptionalLong;
+import java.util.function.Predicate;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class PredicateBackportJava11Test extends AbstractBackportTest {
+ @Parameters(name = "{0}")
+ public static Iterable<?> data() {
+ return getTestParameters()
+ .withDexRuntimesStartingFromIncluding(Version.V7_0_0)
+ .withApiLevelsStartingAtIncluding(AndroidApiLevel.N)
+ .withCfRuntimesStartingFromIncluding(CfVm.JDK11)
+ .enableApiLevelsForCf()
+ .build();
+ }
+
+ public PredicateBackportJava11Test(TestParameters parameters) {
+ super(parameters, OptionalLong.class, PredicateBackportJava11Main.class);
+
+ // Available since N as part of library desugaring.
+ ignoreInvokes("not");
+ }
+
+ public static class PredicateBackportJava11Main {
+ public static void main(String[] args) {
+ testNot();
+ }
+
+ private static void testNot() {
+
+ Predicate<Object> isNull = Objects::isNull;
+ Predicate<Object> notNull = Predicate.not(isNull);
+
+ assertEquals(notNull.test(null), false);
+ assertEquals(notNull.test("something"), true);
+
+ try {
+ Predicate.not(null);
+ throw new AssertionError("Expected to throw NPE");
+ } catch (Throwable t) {
+ // Expected.
+ }
+ }
+
+ private static void assertEquals(Object expected, Object actual) {
+ if (expected != actual && (expected == null || !expected.equals(actual))) {
+ throw new AssertionError("Expected <" + expected + "> but was <" + actual + '>');
+ }
+ }
+ }
+}
diff --git a/src/test/examplesJava11/backport/StringBackportJava11Main.java b/src/test/examplesJava11/backport/StringBackportJava11Main.java
deleted file mode 100644
index eaf2f8a..0000000
--- a/src/test/examplesJava11/backport/StringBackportJava11Main.java
+++ /dev/null
@@ -1,138 +0,0 @@
-package backport;
-
-public final class StringBackportJava11Main {
- public static void main(String[] args) {
- testRepeat();
- testIsBlank();
- testStrip();
- testStripLeading();
- testStripTrailing();
- }
-
- private static void testRepeat() {
- try {
- throw new AssertionError("hey".repeat(-1));
- } catch (IllegalArgumentException e) {
- assertEquals("count is negative: -1", e.getMessage());
- }
-
- assertEquals("", "".repeat(0));
- assertEquals("", "".repeat(1));
- assertEquals("", "".repeat(2));
-
- assertEquals("", "hey".repeat(0));
- assertEquals("hey", "hey".repeat(1));
- assertEquals("heyhey", "hey".repeat(2));
- assertEquals("heyheyhey", "hey".repeat(3));
- assertEquals("heyheyheyhey", "hey".repeat(4));
-
- try {
- "\u03B1\u03B2".repeat(Integer.MAX_VALUE);
- throw new AssertionError("Expected to throw OutOfMemoryError");
- } catch (OutOfMemoryError e) {
- // Expected.
- }
- }
-
- /** Per {@link Character#isWhitespace(int)} */
- private static final String WHITESPACE = ""
- // Unicode "Zs" category:
- + "\u0020"
- + "\u1680"
- //+ "\u00A0" Exception per Javadoc
- + "\u1680"
- + "\u2000"
- + "\u2001"
- + "\u2002"
- + "\u2003"
- + "\u2004"
- + "\u2005"
- + "\u2006"
- //+ "\u2007" Exception per Javadoc
- + "\u2008"
- + "\u2009"
- + "\u200A"
- //+ "\u200F" Exception per Javadoc
- //+ "\u205F" Not honored on Android 4.0.4
- + "\u3000"
- // Unicode "Zl" category:
- + "\u2028"
- // Unicode "Zp" category:
- + "\u2029"
- // Others:
- + "\t"
- + "\n"
- + "\u000B"
- + "\f"
- + "\r"
- + "\u001C"
- + "\u001D"
- + "\u001E"
- + "\u001F"
- ;
-
- public static void testIsBlank() {
- assertEquals(true, "".isBlank());
- assertEquals(true, WHITESPACE.isBlank());
-
- // Android <=4.0.4 does not recognize this as whitespace. Just ensure local consistency.
- assertEquals(Character.isWhitespace(0x205F), "\u205F".isBlank());
-
- assertEquals(false, "a".isBlank());
- assertEquals(false, "å".isBlank());
- assertEquals(false, "a\u030A".isBlank());
- assertEquals(false, "\uD83D\uDE00".isBlank());
- assertEquals(false, (WHITESPACE + "a").isBlank());
- assertEquals(false, ("a" + WHITESPACE).isBlank());
- }
-
- public static void testStrip() {
- assertEquals("", "".strip());
- assertEquals("", WHITESPACE.strip());
- assertEquals("a", "a".strip());
- assertEquals("a", (WHITESPACE + "a").strip());
- assertEquals("a", ("a" + WHITESPACE).strip());
- assertEquals("a", (WHITESPACE + "a" + WHITESPACE).strip());
- assertEquals("a" + WHITESPACE + "a", ("a" + WHITESPACE + "a").strip());
- assertEquals("a" + WHITESPACE + "a", (WHITESPACE + "a" + WHITESPACE + "a").strip());
- assertEquals("a" + WHITESPACE + "a", ("a" + WHITESPACE + "a" + WHITESPACE).strip());
- assertEquals("a" + WHITESPACE + "a",
- (WHITESPACE + "a" + WHITESPACE + "a" + WHITESPACE).strip());
- }
-
- public static void testStripLeading() {
- assertEquals("", "".stripLeading());
- assertEquals("", WHITESPACE.stripLeading());
- assertEquals("a", "a".stripLeading());
- assertEquals("a", (WHITESPACE + "a").stripLeading());
- assertEquals("a" + WHITESPACE, ("a" + WHITESPACE).stripLeading());
- assertEquals("a" + WHITESPACE, (WHITESPACE + "a" + WHITESPACE).stripLeading());
- assertEquals("a" + WHITESPACE + "a", ("a" + WHITESPACE + "a").stripLeading());
- assertEquals("a" + WHITESPACE + "a", (WHITESPACE + "a" + WHITESPACE + "a").stripLeading());
- assertEquals("a" + WHITESPACE + "a" + WHITESPACE,
- ("a" + WHITESPACE + "a" + WHITESPACE).stripLeading());
- assertEquals("a" + WHITESPACE + "a" + WHITESPACE,
- (WHITESPACE + "a" + WHITESPACE + "a" + WHITESPACE).stripLeading());
- }
-
- public static void testStripTrailing() {
- assertEquals("", "".stripTrailing());
- assertEquals("", WHITESPACE.stripTrailing());
- assertEquals("a", "a".stripTrailing());
- assertEquals(WHITESPACE + "a", (WHITESPACE + "a").stripTrailing());
- assertEquals("a", ("a" + WHITESPACE).stripTrailing());
- assertEquals(WHITESPACE + "a", (WHITESPACE + "a" + WHITESPACE).stripTrailing());
- assertEquals("a" + WHITESPACE + "a", ("a" + WHITESPACE + "a").stripTrailing());
- assertEquals(WHITESPACE + "a" + WHITESPACE + "a",
- (WHITESPACE + "a" + WHITESPACE + "a").stripTrailing());
- assertEquals("a" + WHITESPACE + "a", ("a" + WHITESPACE + "a" + WHITESPACE).stripTrailing());
- assertEquals(WHITESPACE + "a" + WHITESPACE + "a",
- (WHITESPACE + "a" + WHITESPACE + "a" + WHITESPACE).stripTrailing());
- }
-
- private static void assertEquals(Object expected, Object actual) {
- if (expected != actual && (expected == null || !expected.equals(actual))) {
- throw new AssertionError("Expected <" + expected + "> but was <" + actual + '>');
- }
- }
-}
diff --git a/src/test/examplesJava11/backport/StringBackportJava11Test.java b/src/test/examplesJava11/backport/StringBackportJava11Test.java
new file mode 100644
index 0000000..bb11b5e
--- /dev/null
+++ b/src/test/examplesJava11/backport/StringBackportJava11Test.java
@@ -0,0 +1,156 @@
+// 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 backport;
+
+import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestRuntime.CfVm;
+import com.android.tools.r8.desugar.backports.AbstractBackportTest;
+import com.android.tools.r8.utils.AndroidApiLevel;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public final class StringBackportJava11Test extends AbstractBackportTest {
+ @Parameters(name = "{0}")
+ public static Iterable<?> data() {
+ return getTestParameters()
+ .withDexRuntimes()
+ .withCfRuntimesStartingFromIncluding(CfVm.JDK11)
+ .withAllApiLevelsAlsoForCf()
+ .build();
+ }
+
+ public StringBackportJava11Test(TestParameters parameters) {
+ super(parameters, String.class, StringBackportJava11Main.class);
+ // Note: The methods in this test exist in android.jar from Android T. When R8 builds targeting
+ // Java 11 move these tests to StringBackportTest (out of examplesJava11).
+
+ registerTarget(AndroidApiLevel.T, 49);
+ }
+
+ public static class StringBackportJava11Main {
+ public static void main(String[] args) {
+ testRepeat();
+ testIsBlank();
+ testStrip();
+ testStripLeading();
+ testStripTrailing();
+ }
+
+ private static void testRepeat() {
+ try {
+ throw new AssertionError("hey".repeat(-1));
+ } catch (IllegalArgumentException e) {
+ assertEquals("count is negative: -1", e.getMessage());
+ }
+
+ assertEquals("", "".repeat(0));
+ assertEquals("", "".repeat(1));
+ assertEquals("", "".repeat(2));
+
+ assertEquals("", "hey".repeat(0));
+ assertEquals("hey", "hey".repeat(1));
+ assertEquals("heyhey", "hey".repeat(2));
+ assertEquals("heyheyhey", "hey".repeat(3));
+ assertEquals("heyheyheyhey", "hey".repeat(4));
+
+ try {
+ "\u03B1\u03B2".repeat(Integer.MAX_VALUE);
+ throw new AssertionError("Expected to throw OutOfMemoryError");
+ } catch (OutOfMemoryError e) {
+ // Expected.
+ }
+ }
+
+ /** Per {@link Character#isWhitespace(int)} */
+ private static final String WHITESPACE =
+ ""
+ // Unicode "Zs" category:
+ + "\u0020" + "\u1680"
+ // + "\u00A0" Exception per Javadoc
+ + "\u1680" + "\u2000" + "\u2001" + "\u2002" + "\u2003" + "\u2004" + "\u2005" + "\u2006"
+ // + "\u2007" Exception per Javadoc
+ + "\u2008" + "\u2009" + "\u200A"
+ // + "\u200F" Exception per Javadoc
+ // + "\u205F" Not honored on Android 4.0.4
+ + "\u3000"
+ // Unicode "Zl" category:
+ + "\u2028"
+ // Unicode "Zp" category:
+ + "\u2029"
+ // Others:
+ + "\t" + "\n" + "\u000B" + "\f" + "\r" + "\u001C" + "\u001D" + "\u001E" + "\u001F";
+
+ public static void testIsBlank() {
+ assertEquals(true, "".isBlank());
+ assertEquals(true, WHITESPACE.isBlank());
+
+ // Android <=4.0.4 does not recognize this as whitespace. Just ensure local consistency.
+ assertEquals(Character.isWhitespace(0x205F), "\u205F".isBlank());
+
+ assertEquals(false, "a".isBlank());
+ assertEquals(false, "å".isBlank());
+ assertEquals(false, "a\u030A".isBlank());
+ assertEquals(false, "\uD83D\uDE00".isBlank());
+ assertEquals(false, (WHITESPACE + "a").isBlank());
+ assertEquals(false, ("a" + WHITESPACE).isBlank());
+ }
+
+ public static void testStrip() {
+ assertEquals("", "".strip());
+ assertEquals("", WHITESPACE.strip());
+ assertEquals("a", "a".strip());
+ assertEquals("a", (WHITESPACE + "a").strip());
+ assertEquals("a", ("a" + WHITESPACE).strip());
+ assertEquals("a", (WHITESPACE + "a" + WHITESPACE).strip());
+ assertEquals("a" + WHITESPACE + "a", ("a" + WHITESPACE + "a").strip());
+ assertEquals("a" + WHITESPACE + "a", (WHITESPACE + "a" + WHITESPACE + "a").strip());
+ assertEquals("a" + WHITESPACE + "a", ("a" + WHITESPACE + "a" + WHITESPACE).strip());
+ assertEquals(
+ "a" + WHITESPACE + "a", (WHITESPACE + "a" + WHITESPACE + "a" + WHITESPACE).strip());
+ }
+
+ public static void testStripLeading() {
+ assertEquals("", "".stripLeading());
+ assertEquals("", WHITESPACE.stripLeading());
+ assertEquals("a", "a".stripLeading());
+ assertEquals("a", (WHITESPACE + "a").stripLeading());
+ assertEquals("a" + WHITESPACE, ("a" + WHITESPACE).stripLeading());
+ assertEquals("a" + WHITESPACE, (WHITESPACE + "a" + WHITESPACE).stripLeading());
+ assertEquals("a" + WHITESPACE + "a", ("a" + WHITESPACE + "a").stripLeading());
+ assertEquals("a" + WHITESPACE + "a", (WHITESPACE + "a" + WHITESPACE + "a").stripLeading());
+ assertEquals(
+ "a" + WHITESPACE + "a" + WHITESPACE,
+ ("a" + WHITESPACE + "a" + WHITESPACE).stripLeading());
+ assertEquals(
+ "a" + WHITESPACE + "a" + WHITESPACE,
+ (WHITESPACE + "a" + WHITESPACE + "a" + WHITESPACE).stripLeading());
+ }
+
+ public static void testStripTrailing() {
+ assertEquals("", "".stripTrailing());
+ assertEquals("", WHITESPACE.stripTrailing());
+ assertEquals("a", "a".stripTrailing());
+ assertEquals(WHITESPACE + "a", (WHITESPACE + "a").stripTrailing());
+ assertEquals("a", ("a" + WHITESPACE).stripTrailing());
+ assertEquals(WHITESPACE + "a", (WHITESPACE + "a" + WHITESPACE).stripTrailing());
+ assertEquals("a" + WHITESPACE + "a", ("a" + WHITESPACE + "a").stripTrailing());
+ assertEquals(
+ WHITESPACE + "a" + WHITESPACE + "a",
+ (WHITESPACE + "a" + WHITESPACE + "a").stripTrailing());
+ assertEquals("a" + WHITESPACE + "a", ("a" + WHITESPACE + "a" + WHITESPACE).stripTrailing());
+ assertEquals(
+ WHITESPACE + "a" + WHITESPACE + "a",
+ (WHITESPACE + "a" + WHITESPACE + "a" + WHITESPACE).stripTrailing());
+ }
+
+ private static void assertEquals(Object expected, Object actual) {
+ if (expected != actual && (expected == null || !expected.equals(actual))) {
+ throw new AssertionError("Expected <" + expected + "> but was <" + actual + '>');
+ }
+ }
+ }
+}
diff --git a/src/test/java/com/android/tools/r8/desugar/backports/CharSequenceBackportJava11Test.java b/src/test/java/com/android/tools/r8/desugar/backports/CharSequenceBackportJava11Test.java
deleted file mode 100644
index 42a85c0..0000000
--- a/src/test/java/com/android/tools/r8/desugar/backports/CharSequenceBackportJava11Test.java
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright (c) 2020, 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.backports;
-
-import static com.android.tools.r8.utils.FileUtils.JAR_EXTENSION;
-
-import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.TestRuntime.CfVm;
-import com.android.tools.r8.ToolHelper;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
-import org.junit.runners.Parameterized.Parameters;
-
-@RunWith(Parameterized.class)
-public final class CharSequenceBackportJava11Test extends AbstractBackportTest {
- @Parameters(name = "{0}")
- public static Iterable<?> data() {
- return getTestParameters()
- .withDexRuntimes()
- .withCfRuntimesStartingFromIncluding(CfVm.JDK11)
- .withAllApiLevelsAlsoForCf()
- .build();
- }
-
- private static final Path TEST_JAR =
- Paths.get(ToolHelper.EXAMPLES_JAVA11_JAR_DIR).resolve("backport" + JAR_EXTENSION);
-
- public CharSequenceBackportJava11Test(TestParameters parameters) {
- super(parameters, Character.class, TEST_JAR, "backport.CharSequenceBackportJava11Main");
- // Note: None of the methods in this test exist in the latest android.jar. If/when they ship in
- // an actual API level, migrate these tests to CharacterBackportTest.
- }
-}
diff --git a/src/test/java/com/android/tools/r8/desugar/backports/PredicateBackportJava11Test.java b/src/test/java/com/android/tools/r8/desugar/backports/PredicateBackportJava11Test.java
deleted file mode 100644
index d0a6c35..0000000
--- a/src/test/java/com/android/tools/r8/desugar/backports/PredicateBackportJava11Test.java
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright (c) 2022, 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.backports;
-
-import static com.android.tools.r8.utils.FileUtils.JAR_EXTENSION;
-
-import com.android.tools.r8.TestParameters;
-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 java.nio.file.Path;
-import java.nio.file.Paths;
-import java.util.OptionalLong;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
-import org.junit.runners.Parameterized.Parameters;
-
-@RunWith(Parameterized.class)
-public final class PredicateBackportJava11Test extends AbstractBackportTest {
- @Parameters(name = "{0}")
- public static Iterable<?> data() {
- return getTestParameters()
- .withDexRuntimesStartingFromIncluding(Version.V7_0_0)
- .withApiLevelsStartingAtIncluding(AndroidApiLevel.N)
- .withCfRuntimesStartingFromIncluding(CfVm.JDK11)
- .enableApiLevelsForCf()
- .build();
- }
-
- private static final Path TEST_JAR =
- Paths.get(ToolHelper.EXAMPLES_JAVA11_JAR_DIR).resolve("backport" + JAR_EXTENSION);
-
- public PredicateBackportJava11Test(TestParameters parameters) {
- super(parameters, OptionalLong.class, TEST_JAR, "backport.PredicateBackportJava11Main");
-
- // Available since N as part of library desugaring.
- ignoreInvokes("not");
- }
-}
diff --git a/src/test/java/com/android/tools/r8/desugar/backports/StringBackportJava11Test.java b/src/test/java/com/android/tools/r8/desugar/backports/StringBackportJava11Test.java
deleted file mode 100644
index e6d81ac..0000000
--- a/src/test/java/com/android/tools/r8/desugar/backports/StringBackportJava11Test.java
+++ /dev/null
@@ -1,40 +0,0 @@
-// 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.backports;
-
-import static com.android.tools.r8.utils.FileUtils.JAR_EXTENSION;
-
-import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.TestRuntime.CfVm;
-import com.android.tools.r8.ToolHelper;
-import com.android.tools.r8.utils.AndroidApiLevel;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
-import org.junit.runners.Parameterized.Parameters;
-
-@RunWith(Parameterized.class)
-public final class StringBackportJava11Test extends AbstractBackportTest {
- @Parameters(name = "{0}")
- public static Iterable<?> data() {
- return getTestParameters()
- .withDexRuntimes()
- .withCfRuntimesStartingFromIncluding(CfVm.JDK11)
- .withAllApiLevelsAlsoForCf()
- .build();
- }
-
- private static final Path TEST_JAR =
- Paths.get(ToolHelper.EXAMPLES_JAVA11_JAR_DIR).resolve("backport" + JAR_EXTENSION);
-
- public StringBackportJava11Test(TestParameters parameters) {
- super(parameters, String.class, TEST_JAR, "backport.StringBackportJava11Main");
- // Note: The methods in this test exist in android.jar from Android T. When R8 builds targeting
- // Java 11 move these tests to StringBackportTest (out of examplesJava11).
-
- registerTarget(AndroidApiLevel.T, 49);
- }
-}
diff --git a/src/test/testbase/java/com/android/tools/r8/desugar/backports/AbstractBackportTest.java b/src/test/testbase/java/com/android/tools/r8/desugar/backports/AbstractBackportTest.java
index 18c8f65..ed256d5 100644
--- a/src/test/testbase/java/com/android/tools/r8/desugar/backports/AbstractBackportTest.java
+++ b/src/test/testbase/java/com/android/tools/r8/desugar/backports/AbstractBackportTest.java
@@ -29,6 +29,8 @@
import it.unimi.dsi.fastutil.ints.Int2IntAVLTreeMap;
import it.unimi.dsi.fastutil.ints.Int2IntSortedMap;
import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
import java.nio.file.Path;
import java.util.HashSet;
import java.util.List;
@@ -79,11 +81,24 @@
TestBuilder<?, ?> addAsProgramClass(TestBuilder<?, ?> builder) throws IOException {
if (clazz != null) {
+ addStrippedOuter(builder);
return builder.addProgramClassesAndInnerClasses(clazz);
} else {
return builder.addProgramClassFileData(classFileData);
}
}
+
+ private void addStrippedOuter(TestBuilder<?, ?> builder) throws IOException {
+ try {
+ Method getNestHost = Class.class.getDeclaredMethod("getNestHost");
+ Class<?> nestHost = (Class<?>) getNestHost.invoke(clazz);
+ if (nestHost != null && nestHost != clazz) {
+ builder.addStrippedOuter(nestHost);
+ }
+ } catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException e) {
+ // Ignored on old JDKs.
+ }
+ }
}
protected AbstractBackportTest(