Update backport tests of Android 14 and 15 methods
* int CharSequence.compare(CharSequence, CharSequence) was added in
Android 14
* Character.toString(int) was added in Android 15
Bug: b/343127842
Change-Id: I448c19fe3a710d8a7a8d4a2d35f69d80974bd09a
diff --git a/src/test/examplesJava11/backport/CharacterBackportJava11Main.java b/src/test/examplesJava11/backport/CharacterBackportJava11Main.java
deleted file mode 100644
index 487c7b0..0000000
--- a/src/test/examplesJava11/backport/CharacterBackportJava11Main.java
+++ /dev/null
@@ -1,33 +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;
-
-public final class CharacterBackportJava11Main {
- public static void main(String[] args) {
- testToStringCodepoint();
- }
-
- private static void testToStringCodepoint() {
- for (int i = Character.MIN_CODE_POINT; i <= Character.MAX_CODE_POINT; i++) {
- String expected = new StringBuilder().appendCodePoint(i).toString();
- assertEquals(expected, Character.toString(i));
- }
-
- try {
- throw new AssertionError(Character.toString(Character.MIN_CODE_POINT - 1));
- } catch (IllegalArgumentException expected) {
- }
- try {
- throw new AssertionError(Character.toString(Character.MAX_CODE_POINT + 1));
- } catch (IllegalArgumentException 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/java/com/android/tools/r8/BackportedMethodListTest.java b/src/test/java/com/android/tools/r8/BackportedMethodListTest.java
index 5ef5e9c..f003fdf 100644
--- a/src/test/java/com/android/tools/r8/BackportedMethodListTest.java
+++ b/src/test/java/com/android/tools/r8/BackportedMethodListTest.java
@@ -92,16 +92,15 @@
&& (mode == Mode.LIBRARY_DESUGAR || apiLevel >= AndroidApiLevel.N.getLevel()),
backports.contains("java/util/OptionalLong#isEmpty()Z"));
- // Java 9, 10 and 11 method added at API level S.
+ // Java 9, 10 and 11 methods added at API level S.
assertEquals(
apiLevel < AndroidApiLevel.S.getLevel(),
backports.contains("java/lang/StrictMath#multiplyExact(JI)J"));
- // Java 9, 10 and 11 method added at API level S.
assertEquals(
apiLevel < AndroidApiLevel.S.getLevel(),
backports.contains("java/util/List#copyOf(Ljava/util/Collection;)Ljava/util/List;"));
- // Java 9, 10 and 11 method added at API level T.
+ // Java 9, 10 and 11 methods added at API level T.
assertEquals(
apiLevel < AndroidApiLevel.T.getLevel(),
backports.contains("java/lang/Integer#parseInt(Ljava/lang/CharSequence;III)I"));
@@ -109,8 +108,16 @@
apiLevel < AndroidApiLevel.T.getLevel(),
backports.contains("java/lang/String#repeat(I)Ljava/lang/String;"));
- // Java 9, 10 and 11 methods not yet added.
- assertTrue(backports.contains("java/lang/Character#toString(I)Ljava/lang/String;"));
+ // Java 9, 10 and 11 method added at API level U.
+ assertEquals(
+ apiLevel < AndroidApiLevel.U.getLevel(),
+ backports.contains(
+ "java/lang/CharSequence#compare(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)I"));
+
+ // Java 9, 10 and 11 method added at API level V.
+ assertEquals(
+ apiLevel < AndroidApiLevel.V.getLevel(),
+ backports.contains("java/lang/Character#toString(I)Ljava/lang/String;"));
}
private void addLibraryDesugaring(BackportedMethodListCommand.Builder builder) {
diff --git a/src/test/java/com/android/tools/r8/desugar/backports/AbstractBackportTest.java b/src/test/java/com/android/tools/r8/desugar/backports/AbstractBackportTest.java
index dbea395..7fcd792 100644
--- a/src/test/java/com/android/tools/r8/desugar/backports/AbstractBackportTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/backports/AbstractBackportTest.java
@@ -90,6 +90,11 @@
}
AbstractBackportTest(
+ TestParameters parameters, Class<?> targetClass, List<byte[]> testClassFileData) {
+ this(parameters, new ClassInfo(targetClass), new ClassInfo(testClassFileData), null, null);
+ }
+
+ AbstractBackportTest(
TestParameters parameters, String className, List<byte[]> testClassFileData) {
this(parameters, new ClassInfo(className), new ClassInfo(testClassFileData), null, null);
}
diff --git a/src/test/java/com/android/tools/r8/desugar/backports/CharacterBackportJava11Test.java b/src/test/java/com/android/tools/r8/desugar/backports/CharacterBackportJava11Test.java
deleted file mode 100644
index 735ba69..0000000
--- a/src/test/java/com/android/tools/r8/desugar/backports/CharacterBackportJava11Test.java
+++ /dev/null
@@ -1,37 +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 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 CharacterBackportJava11Test 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 CharacterBackportJava11Test(TestParameters parameters) {
- super(parameters, Character.class, TEST_JAR, "backport.CharacterBackportJava11Main");
- // 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/CharacterBackportTest.java b/src/test/java/com/android/tools/r8/desugar/backports/CharacterBackportTest.java
index 2345798..f9daa35 100644
--- a/src/test/java/com/android/tools/r8/desugar/backports/CharacterBackportTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/backports/CharacterBackportTest.java
@@ -5,7 +5,9 @@
package com.android.tools.r8.desugar.backports;
import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.desugar.backports.CharacterBackportTest.Main.MockCharacter;
import com.android.tools.r8.utils.AndroidApiLevel;
+import com.google.common.collect.ImmutableList;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
@@ -17,8 +19,16 @@
return getTestParameters().withAllRuntimes().withAllApiLevelsAlsoForCf().build();
}
- public CharacterBackportTest(TestParameters parameters) {
- super(parameters, Character.class, Main.class);
+ public CharacterBackportTest(TestParameters parameters) throws Exception {
+ super(
+ parameters,
+ Character.class,
+ ImmutableList.of(
+ transformer(Main.class)
+ .replaceClassDescriptorInMethodInstructions(
+ descriptor(MockCharacter.class), descriptor(Character.class))
+ .transform()));
+ registerTarget(AndroidApiLevel.V, 11);
registerTarget(AndroidApiLevel.N, 8);
registerTarget(AndroidApiLevel.K, 7);
}
@@ -44,5 +54,29 @@
assertTrue(Character.compare(Character.MIN_VALUE, Character.MIN_VALUE) == 0);
assertTrue(Character.compare(Character.MAX_VALUE, Character.MAX_VALUE) == 0);
}
+
+ // Character.toString(int) added in JDK-11. Use MockCharacter and transformer to compile test
+ // with -target 8
+ static class MockCharacter {
+ static String toString(int i) {
+ throw new RuntimeException("MockCharacter.toString(int i)");
+ }
+ }
+
+ private static void testToString() {
+ for (int i = Character.MIN_CODE_POINT; i <= Character.MAX_CODE_POINT; i++) {
+ String expected = new StringBuilder().appendCodePoint(i).toString();
+ assertEquals(expected, MockCharacter.toString(i));
+ }
+
+ try {
+ throw new AssertionError(MockCharacter.toString(Character.MIN_CODE_POINT - 1));
+ } catch (IllegalArgumentException expected) {
+ }
+ try {
+ throw new AssertionError(MockCharacter.toString(Character.MAX_CODE_POINT + 1));
+ } catch (IllegalArgumentException expected) {
+ }
+ }
}
}