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()); - } - } -}