Revert "Move backport test to java 11 package"
Revert submission 98720
Reason for revert: breaking bots
Reverted changes: /q/submissionid:98720
Change-Id: I8a37b238d8ff03ee50652dc4342a9758b889111b
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 12a7681..bb30566 100644
--- a/d8_r8/test_modules/tests_java_11/build.gradle.kts
+++ b/d8_r8/test_modules/tests_java_11/build.gradle.kts
@@ -3,6 +3,7 @@
// 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
new file mode 100644
index 0000000..d0888f8
--- /dev/null
+++ b/src/test/examplesJava11/backport/CharSequenceBackportJava11Main.java
@@ -0,0 +1,46 @@
+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
deleted file mode 100644
index dad526c..0000000
--- a/src/test/examplesJava11/backport/CharSequenceBackportJava11Test.java
+++ /dev/null
@@ -1,75 +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 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
new file mode 100644
index 0000000..d1f6fa1
--- /dev/null
+++ b/src/test/examplesJava11/backport/OptionalBackportJava11Main.java
@@ -0,0 +1,34 @@
+// 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/examplesJava11/backport/OptionalDoubleBackportJava11Main.java b/src/test/examplesJava11/backport/OptionalDoubleBackportJava11Main.java
new file mode 100644
index 0000000..1fa5617
--- /dev/null
+++ b/src/test/examplesJava11/backport/OptionalDoubleBackportJava11Main.java
@@ -0,0 +1,34 @@
+// 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/examplesJava11/backport/OptionalIntBackportJava11Main.java b/src/test/examplesJava11/backport/OptionalIntBackportJava11Main.java
new file mode 100644
index 0000000..9d1a09a
--- /dev/null
+++ b/src/test/examplesJava11/backport/OptionalIntBackportJava11Main.java
@@ -0,0 +1,34 @@
+// 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/examplesJava11/backport/OptionalLongBackportJava11Main.java b/src/test/examplesJava11/backport/OptionalLongBackportJava11Main.java
new file mode 100644
index 0000000..573bbba
--- /dev/null
+++ b/src/test/examplesJava11/backport/OptionalLongBackportJava11Main.java
@@ -0,0 +1,34 @@
+// 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/examplesJava11/backport/PredicateBackportJava11Main.java b/src/test/examplesJava11/backport/PredicateBackportJava11Main.java
new file mode 100644
index 0000000..d16674a
--- /dev/null
+++ b/src/test/examplesJava11/backport/PredicateBackportJava11Main.java
@@ -0,0 +1,36 @@
+// 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
deleted file mode 100644
index e8a28c6..0000000
--- a/src/test/examplesJava11/backport/PredicateBackportJava11Test.java
+++ /dev/null
@@ -1,65 +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 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
new file mode 100644
index 0000000..eaf2f8a
--- /dev/null
+++ b/src/test/examplesJava11/backport/StringBackportJava11Main.java
@@ -0,0 +1,138 @@
+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
deleted file mode 100644
index bb11b5e..0000000
--- a/src/test/examplesJava11/backport/StringBackportJava11Test.java
+++ /dev/null
@@ -1,156 +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 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
new file mode 100644
index 0000000..42a85c0
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/desugar/backports/CharSequenceBackportJava11Test.java
@@ -0,0 +1,37 @@
+// 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/examplesJava11/backport/OptionalBackportJava11Test.java b/src/test/java/com/android/tools/r8/desugar/backports/OptionalBackportJava11Test.java
similarity index 62%
rename from src/test/examplesJava11/backport/OptionalBackportJava11Test.java
rename to src/test/java/com/android/tools/r8/desugar/backports/OptionalBackportJava11Test.java
index ebbf952..a7255b6 100644
--- a/src/test/examplesJava11/backport/OptionalBackportJava11Test.java
+++ b/src/test/java/com/android/tools/r8/desugar/backports/OptionalBackportJava11Test.java
@@ -2,13 +2,17 @@
// 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;
+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.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;
@@ -26,8 +30,11 @@
.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, OptionalBackportJava11Main.class);
+ super(parameters, Optional.class, TEST_JAR, "backport.OptionalBackportJava11Main");
// 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).
@@ -37,31 +44,4 @@
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/OptionalDoubleBackportJava11Test.java b/src/test/java/com/android/tools/r8/desugar/backports/OptionalDoubleBackportJava11Test.java
similarity index 62%
rename from src/test/examplesJava11/backport/OptionalDoubleBackportJava11Test.java
rename to src/test/java/com/android/tools/r8/desugar/backports/OptionalDoubleBackportJava11Test.java
index de629a1..377ed2e 100644
--- a/src/test/examplesJava11/backport/OptionalDoubleBackportJava11Test.java
+++ b/src/test/java/com/android/tools/r8/desugar/backports/OptionalDoubleBackportJava11Test.java
@@ -2,13 +2,17 @@
// 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;
+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.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;
@@ -26,8 +30,11 @@
.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, OptionalDoubleBackportJava11Main.class);
+ super(parameters, OptionalDouble.class, TEST_JAR, "backport.OptionalDoubleBackportJava11Main");
// 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).
@@ -37,31 +44,4 @@
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/OptionalIntBackportJava11Test.java b/src/test/java/com/android/tools/r8/desugar/backports/OptionalIntBackportJava11Test.java
similarity index 62%
rename from src/test/examplesJava11/backport/OptionalIntBackportJava11Test.java
rename to src/test/java/com/android/tools/r8/desugar/backports/OptionalIntBackportJava11Test.java
index 90d40ef..95c6adc 100644
--- a/src/test/examplesJava11/backport/OptionalIntBackportJava11Test.java
+++ b/src/test/java/com/android/tools/r8/desugar/backports/OptionalIntBackportJava11Test.java
@@ -2,13 +2,17 @@
// 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;
+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.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;
@@ -26,8 +30,11 @@
.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, OptionalIntBackportJava11Main.class);
+ super(parameters, OptionalInt.class, TEST_JAR, "backport.OptionalIntBackportJava11Main");
// 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).
@@ -37,31 +44,4 @@
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/OptionalLongBackportJava11Test.java b/src/test/java/com/android/tools/r8/desugar/backports/OptionalLongBackportJava11Test.java
similarity index 62%
rename from src/test/examplesJava11/backport/OptionalLongBackportJava11Test.java
rename to src/test/java/com/android/tools/r8/desugar/backports/OptionalLongBackportJava11Test.java
index b6f9e43..7333cb9 100644
--- a/src/test/examplesJava11/backport/OptionalLongBackportJava11Test.java
+++ b/src/test/java/com/android/tools/r8/desugar/backports/OptionalLongBackportJava11Test.java
@@ -2,13 +2,17 @@
// 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;
+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.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;
@@ -26,8 +30,11 @@
.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, OptionalLongBackportJava11Main.class);
+ super(parameters, OptionalLong.class, TEST_JAR, "backport.OptionalLongBackportJava11Main");
// 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).
@@ -37,31 +44,4 @@
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/java/com/android/tools/r8/desugar/backports/PredicateBackportJava11Test.java b/src/test/java/com/android/tools/r8/desugar/backports/PredicateBackportJava11Test.java
new file mode 100644
index 0000000..d0a6c35
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/desugar/backports/PredicateBackportJava11Test.java
@@ -0,0 +1,42 @@
+// 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
new file mode 100644
index 0000000..e6d81ac
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/desugar/backports/StringBackportJava11Test.java
@@ -0,0 +1,40 @@
+// 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 ed256d5..18c8f65 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,8 +29,6 @@
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;
@@ -81,24 +79,11 @@
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(