Remove broken test on 2.1
diff --git a/src/main/java/com/android/tools/r8/Version.java b/src/main/java/com/android/tools/r8/Version.java
index 59db0a2..e9f227a 100644
--- a/src/main/java/com/android/tools/r8/Version.java
+++ b/src/main/java/com/android/tools/r8/Version.java
@@ -11,7 +11,7 @@
// This field is accessed from release scripts using simple pattern matching.
// Therefore, changing this field could break our release scripts.
- public static final String LABEL = "2.1.49";
+ public static final String LABEL = "2.1.50";
private Version() {
}
diff --git a/src/test/java/com/android/tools/r8/enumunboxing/EnumToStringLibTest.java b/src/test/java/com/android/tools/r8/enumunboxing/EnumToStringLibTest.java
deleted file mode 100644
index 83393bf..0000000
--- a/src/test/java/com/android/tools/r8/enumunboxing/EnumToStringLibTest.java
+++ /dev/null
@@ -1,218 +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.enumunboxing;
-
-import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
-import static com.android.tools.r8.utils.codeinspector.Matchers.isPresentAndRenamed;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.core.StringContains.containsString;
-
-import com.android.tools.r8.R8TestCompileResult;
-import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.references.Reference;
-import com.android.tools.r8.utils.BooleanUtils;
-import com.android.tools.r8.utils.codeinspector.ClassSubject;
-import com.android.tools.r8.utils.codeinspector.CodeInspector;
-import java.util.List;
-import org.junit.Assume;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
-
-@RunWith(Parameterized.class)
-public class EnumToStringLibTest extends EnumUnboxingTestBase {
-
- private final TestParameters parameters;
- private final boolean enumValueOptimization;
- private final EnumKeepRules enumKeepRules;
- private final boolean enumUnboxing;
-
- @Parameterized.Parameters(name = "{0} valueOpt: {1} keep: {2} unbox: {3}")
- public static List<Object[]> data() {
- return buildParameters(
- getTestParameters().withDexRuntimes().withAllApiLevels().build(),
- BooleanUtils.values(),
- getAllEnumKeepRules(),
- BooleanUtils.values());
- }
-
- public EnumToStringLibTest(
- TestParameters parameters,
- boolean enumValueOptimization,
- EnumKeepRules enumKeepRules,
- boolean enumUnboxing) {
- this.parameters = parameters;
- this.enumValueOptimization = enumValueOptimization;
- this.enumKeepRules = enumKeepRules;
- this.enumUnboxing = enumUnboxing;
- }
-
- @Test
- public void testToStringLib() throws Exception {
- Assume.assumeFalse(
- "The test rely on valueOf, so only studio or snap keep rules are valid.",
- enumKeepRules == EnumKeepRules.NONE);
- // Compile the lib cf to cf.
- R8TestCompileResult javaLibShrunk = compileLibrary();
- assertEnumFieldsMinified(javaLibShrunk.inspector());
- // Compile the program with the lib.
- R8TestCompileResult compile =
- testForR8(parameters.getBackend())
- .addProgramClasses(AlwaysCorrectProgram.class, AlwaysCorrectProgram2.class)
- .addProgramFiles(javaLibShrunk.writeToZip())
- .addKeepMainRule(AlwaysCorrectProgram.class)
- .addKeepMainRule(AlwaysCorrectProgram2.class)
- .addKeepRules(enumKeepRules.getKeepRules())
- .addOptionsModification(
- options -> {
- options.enableEnumUnboxing = enumUnboxing;
- options.enableEnumValueOptimization = enumValueOptimization;
- options.enableEnumSwitchMapRemoval = enumValueOptimization;
- options.testing.enableEnumUnboxingDebugLogs = enumUnboxing;
- })
- .allowDiagnosticInfoMessages(enumUnboxing)
- .setMinApi(parameters.getApiLevel())
- .compile();
- compile
- .run(parameters.getRuntime(), AlwaysCorrectProgram.class)
- .assertSuccessWithOutputLines("0", "1", "2", "0", "1", "2", "0", "1", "2");
- if (!enumKeepRules.isSnap() && enumUnboxing) {
- // TODO(b/160667929): Fix toString and enum unboxing.
- compile
- .run(parameters.getRuntime(), AlwaysCorrectProgram2.class)
- .assertFailureWithErrorThatMatches(containsString("IllegalArgumentException"));
- return;
- }
- compile
- .run(parameters.getRuntime(), AlwaysCorrectProgram2.class)
- .assertSuccessWithOutputLines("0", "1", "2", "0", "1", "2");
- }
-
- private void assertEnumFieldsMinified(CodeInspector codeInspector) throws Exception {
- if (enumKeepRules.isSnap()) {
- return;
- }
- ClassSubject clazz = codeInspector.clazz(ToStringLib.LibEnum.class);
- assertThat(clazz, isPresent());
- for (String fieldName : new String[] {"COFFEE", "BEAN", "SUGAR"}) {
- assertThat(
- codeInspector.field(ToStringLib.LibEnum.class.getField(fieldName)),
- isPresentAndRenamed());
- }
- }
-
- private R8TestCompileResult compileLibrary() throws Exception {
- return testForR8(Backend.CF)
- .addProgramClasses(ToStringLib.class, ToStringLib.LibEnum.class)
- .addKeepRules(enumKeepRules.getKeepRules())
- // TODO(b/160535629): Work-around on some optimizations relying on $VALUES name.
- .addKeepRules(
- "-keep enum "
- + ToStringLib.LibEnum.class.getName()
- + " { static "
- + ToStringLib.LibEnum.class.getName()
- + "[] $VALUES; }")
- .addOptionsModification(opt -> enableEnumOptions(opt, enumValueOptimization))
- .addKeepMethodRules(
- Reference.methodFromMethod(
- ToStringLib.class.getDeclaredMethod("lookupByName", String.class)),
- Reference.methodFromMethod(ToStringLib.class.getDeclaredMethod("getCoffee")),
- Reference.methodFromMethod(ToStringLib.class.getDeclaredMethod("getBean")),
- Reference.methodFromMethod(ToStringLib.class.getDeclaredMethod("getSugar")),
- Reference.methodFromMethod(ToStringLib.class.getDeclaredMethod("directCoffee")),
- Reference.methodFromMethod(ToStringLib.class.getDeclaredMethod("directBean")),
- Reference.methodFromMethod(ToStringLib.class.getDeclaredMethod("directSugar")))
- .addKeepClassRules(ToStringLib.LibEnum.class)
- .allowDiagnosticMessages()
- .setMinApi(parameters.getApiLevel())
- .compile()
- .inspectDiagnosticMessages(
- msg ->
- assertEnumIsBoxed(
- ToStringLib.LibEnum.class, ToStringLib.LibEnum.class.getSimpleName(), msg));
- }
-
- // This class emulates a library with the three public methods getEnumXXX.
- public static class ToStringLib {
-
- // We pick names here that we assume won't be picked by the minifier (i.e., not a,b,c).
- public enum LibEnum {
- COFFEE,
- BEAN,
- SUGAR;
- }
-
- // If there is a keep rule on LibEnum fields, then ToStringLib.lookupByName("COFFEE")
- // should answer 0, else, the behavior of ToStringLib.lookupByName("COFFEE") is undefined.
- // ToStringLib.lookupByName(LibEnum.COFFEE.toString()) should always answer 0, no matter
- // what keep rules are on LibEnum.
- public static int lookupByName(String key) {
- if (key == null) {
- return -1;
- } else if (key.contains(LibEnum.COFFEE.name())) {
- return LibEnum.COFFEE.ordinal();
- } else if (key.contains(LibEnum.BEAN.name())) {
- return LibEnum.BEAN.ordinal();
- } else if (key.contains(LibEnum.SUGAR.name())) {
- return LibEnum.SUGAR.ordinal();
- } else {
- return -2;
- }
- }
-
- // The following method should always return 0, no matter what keep rules are on LibEnum.
- public static int directCoffee() {
- return LibEnum.valueOf(LibEnum.COFFEE.toString()).ordinal();
- }
-
- public static int directBean() {
- return LibEnum.valueOf(LibEnum.BEAN.toString()).ordinal();
- }
-
- public static int directSugar() {
- return LibEnum.valueOf(LibEnum.SUGAR.toString()).ordinal();
- }
-
- public static LibEnum getCoffee() {
- return LibEnum.COFFEE;
- }
-
- public static LibEnum getBean() {
- return LibEnum.BEAN;
- }
-
- public static LibEnum getSugar() {
- return LibEnum.SUGAR;
- }
- }
-
- // The next two classes emulate a program using the ToStringLib library.
- public static class AlwaysCorrectProgram {
-
- public static void main(String[] args) {
- System.out.println(ToStringLib.directCoffee());
- System.out.println(ToStringLib.directBean());
- System.out.println(ToStringLib.directSugar());
- System.out.println(ToStringLib.lookupByName(ToStringLib.getCoffee().toString()));
- System.out.println(ToStringLib.lookupByName(ToStringLib.getBean().toString()));
- System.out.println(ToStringLib.lookupByName(ToStringLib.getSugar().toString()));
- System.out.println(ToStringLib.LibEnum.valueOf(ToStringLib.getCoffee().toString()).ordinal());
- System.out.println(ToStringLib.LibEnum.valueOf(ToStringLib.getBean().toString()).ordinal());
- System.out.println(ToStringLib.LibEnum.valueOf(ToStringLib.getSugar().toString()).ordinal());
- }
- }
-
- public static class AlwaysCorrectProgram2 {
-
- public static void main(String[] args) {
- System.out.println(ToStringLib.lookupByName("COFFEE"));
- System.out.println(ToStringLib.lookupByName("BEAN"));
- System.out.println(ToStringLib.lookupByName("SUGAR"));
- System.out.println(ToStringLib.LibEnum.valueOf("COFFEE").ordinal());
- System.out.println(ToStringLib.LibEnum.valueOf("BEAN").ordinal());
- System.out.println(ToStringLib.LibEnum.valueOf("SUGAR").ordinal());
- }
- }
-}