Enum unboxing: Test snap rule
Bug: 150417819
Change-Id: Iedd2f6c3271b9649aef824bcee0ceb6f0288807a
diff --git a/src/test/java/com/android/tools/r8/enumunboxing/ComparisonEnumUnboxingTest.java b/src/test/java/com/android/tools/r8/enumunboxing/ComparisonEnumUnboxingTest.java
index b13c250..19c069d 100644
--- a/src/test/java/com/android/tools/r8/enumunboxing/ComparisonEnumUnboxingTest.java
+++ b/src/test/java/com/android/tools/r8/enumunboxing/ComparisonEnumUnboxingTest.java
@@ -23,7 +23,7 @@
private final TestParameters parameters;
private final boolean enumValueOptimization;
- private final boolean enumKeepRules;
+ private final KeepRule enumKeepRules;
@Parameters(name = "{0} valueOpt: {1} keep: {2}")
public static List<Object[]> data() {
@@ -31,7 +31,7 @@
}
public ComparisonEnumUnboxingTest(
- TestParameters parameters, boolean enumValueOptimization, boolean enumKeepRules) {
+ TestParameters parameters, boolean enumValueOptimization, KeepRule enumKeepRules) {
this.parameters = parameters;
this.enumValueOptimization = enumValueOptimization;
this.enumKeepRules = enumKeepRules;
@@ -45,7 +45,7 @@
.addKeepMainRules(INPUTS)
.enableInliningAnnotations()
.enableNeverClassInliningAnnotations()
- .addKeepRules(enumKeepRules ? KEEP_ENUM : "")
+ .addKeepRules(enumKeepRules.getKeepRule())
.addOptionsModification(opt -> enableEnumOptions(opt, enumValueOptimization))
.allowDiagnosticInfoMessages()
.setMinApi(parameters.getApiLevel())
diff --git a/src/test/java/com/android/tools/r8/enumunboxing/EnumUnboxingTestBase.java b/src/test/java/com/android/tools/r8/enumunboxing/EnumUnboxingTestBase.java
index b7ebc83..399b6b0 100644
--- a/src/test/java/com/android/tools/r8/enumunboxing/EnumUnboxingTestBase.java
+++ b/src/test/java/com/android/tools/r8/enumunboxing/EnumUnboxingTestBase.java
@@ -10,18 +10,49 @@
import com.android.tools.r8.Diagnostic;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestDiagnosticMessages;
-import com.android.tools.r8.TestRuntime.CfVm;
-import com.android.tools.r8.ToolHelper.DexVm;
import com.android.tools.r8.utils.BooleanUtils;
import com.android.tools.r8.utils.InternalOptions;
import com.android.tools.r8.utils.StringUtils;
+import com.google.common.collect.ImmutableList;
import java.util.List;
public class EnumUnboxingTestBase extends TestBase {
- static final String KEEP_ENUM =
- "-keepclassmembers enum * { public static **[] values(); public static **"
- + " valueOf(java.lang.String); }";
+ private static final String KEEP_ENUM_STUDIO =
+ "-keepclassmembers enum * {\n"
+ + " public static **[] values();\n"
+ + " public static ** valueOf(java.lang.String);\n"
+ + "}";
+ private static final String KEEP_ENUM_SNAP =
+ "-keepclassmembers enum * {\n"
+ + "<fields>;\n"
+ + " public static **[] values();\n"
+ + " public static ** valueOf(java.lang.String);\n"
+ + "}";
+ private static final List<KeepRule> KEEP_ENUM =
+ ImmutableList.of(
+ new KeepRule("none", ""),
+ new KeepRule("studio", KEEP_ENUM_STUDIO),
+ new KeepRule("snap", KEEP_ENUM_SNAP));
+
+ public static class KeepRule {
+ private final String name;
+ private final String keepRule;
+
+ private KeepRule(String name, String keepRule) {
+ this.name = name;
+ this.keepRule = keepRule;
+ }
+
+ public String getKeepRule() {
+ return keepRule;
+ }
+
+ @Override
+ public String toString() {
+ return name;
+ }
+ }
public void assertLines2By2Correct(String string) {
List<String> lines = StringUtils.splitLines(string);
@@ -58,13 +89,8 @@
static List<Object[]> enumUnboxingTestParameters() {
return buildParameters(
- getTestParameters()
- .withCfRuntime(CfVm.JDK9)
- .withDexRuntime(DexVm.Version.first())
- .withDexRuntime(DexVm.Version.last())
- .withAllApiLevels()
- .build(),
+ getTestParameters().withAllRuntimesAndApiLevels().withAllApiLevels().build(),
BooleanUtils.values(),
- BooleanUtils.values());
+ KEEP_ENUM);
}
}
diff --git a/src/test/java/com/android/tools/r8/enumunboxing/FailingEnumUnboxingTest.java b/src/test/java/com/android/tools/r8/enumunboxing/FailingEnumUnboxingTest.java
index 4f13c05..ad16ee1 100644
--- a/src/test/java/com/android/tools/r8/enumunboxing/FailingEnumUnboxingTest.java
+++ b/src/test/java/com/android/tools/r8/enumunboxing/FailingEnumUnboxingTest.java
@@ -38,7 +38,7 @@
private final TestParameters parameters;
private final boolean enumValueOptimization;
- private final boolean enumKeepRules;
+ private final KeepRule enumKeepRules;
@Parameters(name = "{0} valueOpt: {1} keep: {2}")
public static List<Object[]> data() {
@@ -46,7 +46,7 @@
}
public FailingEnumUnboxingTest(
- TestParameters parameters, boolean enumValueOptimization, boolean enumKeepRules) {
+ TestParameters parameters, boolean enumValueOptimization, KeepRule enumKeepRules) {
this.parameters = parameters;
this.enumValueOptimization = enumValueOptimization;
this.enumKeepRules = enumKeepRules;
@@ -64,7 +64,7 @@
.noTreeShaking() // Disabled to avoid merging Itf into EnumInterface.
.enableInliningAnnotations()
.enableNeverClassInliningAnnotations()
- .addKeepRules(enumKeepRules ? KEEP_ENUM : "")
+ .addKeepRules(enumKeepRules.getKeepRule())
.addOptionsModification(opt -> enableEnumOptions(opt, enumValueOptimization))
.allowDiagnosticInfoMessages()
.setMinApi(parameters.getApiLevel())
diff --git a/src/test/java/com/android/tools/r8/enumunboxing/FailingMethodEnumUnboxingTest.java b/src/test/java/com/android/tools/r8/enumunboxing/FailingMethodEnumUnboxingTest.java
index 6a3ffea..8e7be57 100644
--- a/src/test/java/com/android/tools/r8/enumunboxing/FailingMethodEnumUnboxingTest.java
+++ b/src/test/java/com/android/tools/r8/enumunboxing/FailingMethodEnumUnboxingTest.java
@@ -29,13 +29,13 @@
ToString.class,
EnumSetTest.class,
FailingPhi.class,
- FailingReturnType.class,
- FailingParameterType.class
+ FailingReturnType.class,
+ FailingParameterType.class
};
private final TestParameters parameters;
private final boolean enumValueOptimization;
- private final boolean enumKeepRules;
+ private final KeepRule enumKeepRules;
@Parameters(name = "{0} valueOpt: {1} keep: {2}")
public static List<Object[]> data() {
@@ -43,7 +43,7 @@
}
public FailingMethodEnumUnboxingTest(
- TestParameters parameters, boolean enumValueOptimization, boolean enumKeepRules) {
+ TestParameters parameters, boolean enumValueOptimization, KeepRule enumKeepRules) {
this.parameters = parameters;
this.enumValueOptimization = enumValueOptimization;
this.enumKeepRules = enumKeepRules;
@@ -55,7 +55,7 @@
testForR8(parameters.getBackend())
.addInnerClasses(FailingMethodEnumUnboxingTest.class)
.addKeepMainRules(FAILURES)
- .addKeepRules(enumKeepRules ? KEEP_ENUM : "")
+ .addKeepRules(enumKeepRules.getKeepRule())
.addOptionsModification(opt -> enableEnumOptions(opt, enumValueOptimization))
.allowDiagnosticInfoMessages()
.enableInliningAnnotations()
@@ -71,7 +71,7 @@
assertEnumIsBoxed(
failure.getDeclaredClasses()[0], failure.getSimpleName(), m))
.run(parameters.getRuntime(), failure);
- if (failure == EnumSetTest.class && !enumKeepRules) {
+ if (failure == EnumSetTest.class && enumKeepRules.getKeepRule().isEmpty()) {
// EnumSet and EnumMap cannot be used without the enumKeepRules.
run.assertFailure();
} else {
diff --git a/src/test/java/com/android/tools/r8/enumunboxing/FieldPutEnumUnboxingTest.java b/src/test/java/com/android/tools/r8/enumunboxing/FieldPutEnumUnboxingTest.java
index 129230a..f2ed08b 100644
--- a/src/test/java/com/android/tools/r8/enumunboxing/FieldPutEnumUnboxingTest.java
+++ b/src/test/java/com/android/tools/r8/enumunboxing/FieldPutEnumUnboxingTest.java
@@ -25,7 +25,7 @@
private final TestParameters parameters;
private final boolean enumValueOptimization;
- private final boolean enumKeepRules;
+ private final KeepRule enumKeepRules;
@Parameters(name = "{0} valueOpt: {1} keep: {2}")
public static List<Object[]> data() {
@@ -33,7 +33,7 @@
}
public FieldPutEnumUnboxingTest(
- TestParameters parameters, boolean enumValueOptimization, boolean enumKeepRules) {
+ TestParameters parameters, boolean enumValueOptimization, KeepRule enumKeepRules) {
this.parameters = parameters;
this.enumValueOptimization = enumValueOptimization;
this.enumKeepRules = enumKeepRules;
@@ -45,7 +45,7 @@
testForR8(parameters.getBackend())
.addInnerClasses(FieldPutEnumUnboxingTest.class)
.addKeepMainRules(INPUTS)
- .addKeepRules(enumKeepRules ? KEEP_ENUM : "")
+ .addKeepRules(enumKeepRules.getKeepRule())
.addOptionsModification(opt -> enableEnumOptions(opt, enumValueOptimization))
.allowDiagnosticInfoMessages()
.enableInliningAnnotations()
diff --git a/src/test/java/com/android/tools/r8/enumunboxing/OrdinalEnumUnboxingTest.java b/src/test/java/com/android/tools/r8/enumunboxing/OrdinalEnumUnboxingTest.java
index 91cd718..b388ed7 100644
--- a/src/test/java/com/android/tools/r8/enumunboxing/OrdinalEnumUnboxingTest.java
+++ b/src/test/java/com/android/tools/r8/enumunboxing/OrdinalEnumUnboxingTest.java
@@ -20,7 +20,7 @@
private final TestParameters parameters;
private final boolean enumValueOptimization;
- private final boolean enumKeepRules;
+ private final KeepRule enumKeepRules;
@Parameters(name = "{0} valueOpt: {1} keep: {2}")
public static List<Object[]> data() {
@@ -28,7 +28,7 @@
}
public OrdinalEnumUnboxingTest(
- TestParameters parameters, boolean enumValueOptimization, boolean enumKeepRules) {
+ TestParameters parameters, boolean enumValueOptimization, KeepRule enumKeepRules) {
this.parameters = parameters;
this.enumValueOptimization = enumValueOptimization;
this.enumKeepRules = enumKeepRules;
@@ -41,7 +41,7 @@
testForR8(parameters.getBackend())
.addProgramClasses(classToTest, ENUM_CLASS)
.addKeepMainRule(classToTest)
- .addKeepRules(enumKeepRules ? KEEP_ENUM : "")
+ .addKeepRules(enumKeepRules.getKeepRule())
.enableNeverClassInliningAnnotations()
.addOptionsModification(opt -> enableEnumOptions(opt, enumValueOptimization))
.allowDiagnosticInfoMessages()
diff --git a/src/test/java/com/android/tools/r8/enumunboxing/PhiEnumUnboxingTest.java b/src/test/java/com/android/tools/r8/enumunboxing/PhiEnumUnboxingTest.java
index 62ccaf8..ba217f6 100644
--- a/src/test/java/com/android/tools/r8/enumunboxing/PhiEnumUnboxingTest.java
+++ b/src/test/java/com/android/tools/r8/enumunboxing/PhiEnumUnboxingTest.java
@@ -21,7 +21,7 @@
private final TestParameters parameters;
private final boolean enumValueOptimization;
- private final boolean enumKeepRules;
+ private final KeepRule enumKeepRules;
@Parameters(name = "{0} valueOpt: {1} keep: {2}")
public static List<Object[]> data() {
@@ -29,7 +29,7 @@
}
public PhiEnumUnboxingTest(
- TestParameters parameters, boolean enumValueOptimization, boolean enumKeepRules) {
+ TestParameters parameters, boolean enumValueOptimization, KeepRule enumKeepRules) {
this.parameters = parameters;
this.enumValueOptimization = enumValueOptimization;
this.enumKeepRules = enumKeepRules;
@@ -42,7 +42,7 @@
testForR8(parameters.getBackend())
.addProgramClasses(classToTest, ENUM_CLASS)
.addKeepMainRule(classToTest)
- .addKeepRules(enumKeepRules ? KEEP_ENUM : "")
+ .addKeepRules(enumKeepRules.getKeepRule())
.enableInliningAnnotations()
.enableNeverClassInliningAnnotations()
.addOptionsModification(opt -> enableEnumOptions(opt, enumValueOptimization))
diff --git a/src/test/java/com/android/tools/r8/enumunboxing/PinnedEnumUnboxingTest.java b/src/test/java/com/android/tools/r8/enumunboxing/PinnedEnumUnboxingTest.java
index 3c34d67..355c6a1 100644
--- a/src/test/java/com/android/tools/r8/enumunboxing/PinnedEnumUnboxingTest.java
+++ b/src/test/java/com/android/tools/r8/enumunboxing/PinnedEnumUnboxingTest.java
@@ -5,7 +5,6 @@
package com.android.tools.r8.enumunboxing;
import com.android.tools.r8.NeverClassInline;
-import com.android.tools.r8.R8TestRunResult;
import com.android.tools.r8.TestParameters;
import java.util.List;
import org.junit.Test;
@@ -20,7 +19,7 @@
private final TestParameters parameters;
private final boolean enumValueOptimization;
- private final boolean enumKeepRules;
+ private final KeepRule enumKeepRules;
@Parameters(name = "{0} valueOpt: {1} keep: {2}")
public static List<Object[]> data() {
@@ -28,7 +27,7 @@
}
public PinnedEnumUnboxingTest(
- TestParameters parameters, boolean enumValueOptimization, boolean enumKeepRules) {
+ TestParameters parameters, boolean enumValueOptimization, KeepRule enumKeepRules) {
this.parameters = parameters;
this.enumValueOptimization = enumValueOptimization;
this.enumKeepRules = enumKeepRules;
@@ -37,21 +36,20 @@
@Test
public void testEnumUnboxing() throws Exception {
Class<MainWithKeptEnum> classToTest = MainWithKeptEnum.class;
- R8TestRunResult run =
- testForR8(parameters.getBackend())
- .addProgramClasses(classToTest, ENUM_CLASS)
- .addKeepMainRule(classToTest)
- .addKeepClassRules(MyEnum.class)
- .addKeepRules(enumKeepRules ? KEEP_ENUM : "")
- .enableNeverClassInliningAnnotations()
- .addOptionsModification(opt -> enableEnumOptions(opt, enumValueOptimization))
- .allowDiagnosticInfoMessages()
- .setMinApi(parameters.getApiLevel())
- .compile()
- .inspectDiagnosticMessages(
- m -> assertEnumIsBoxed(ENUM_CLASS, classToTest.getSimpleName(), m))
- .run(parameters.getRuntime(), classToTest)
- .assertSuccessWithOutputLines("0");
+ testForR8(parameters.getBackend())
+ .addProgramClasses(classToTest, ENUM_CLASS)
+ .addKeepMainRule(classToTest)
+ .addKeepClassRules(MyEnum.class)
+ .addKeepRules(enumKeepRules.getKeepRule())
+ .enableNeverClassInliningAnnotations()
+ .addOptionsModification(opt -> enableEnumOptions(opt, enumValueOptimization))
+ .allowDiagnosticInfoMessages()
+ .setMinApi(parameters.getApiLevel())
+ .compile()
+ .inspectDiagnosticMessages(
+ m -> assertEnumIsBoxed(ENUM_CLASS, classToTest.getSimpleName(), m))
+ .run(parameters.getRuntime(), classToTest)
+ .assertSuccessWithOutputLines("0");
}
@NeverClassInline
diff --git a/src/test/java/com/android/tools/r8/enumunboxing/SwitchEnumUnboxingTest.java b/src/test/java/com/android/tools/r8/enumunboxing/SwitchEnumUnboxingTest.java
index 88dd987..4bfa568 100644
--- a/src/test/java/com/android/tools/r8/enumunboxing/SwitchEnumUnboxingTest.java
+++ b/src/test/java/com/android/tools/r8/enumunboxing/SwitchEnumUnboxingTest.java
@@ -21,7 +21,7 @@
private final TestParameters parameters;
private final boolean enumValueOptimization;
- private final boolean enumKeepRules;
+ private final KeepRule enumKeepRules;
@Parameters(name = "{0} valueOpt: {1} keep: {2}")
public static List<Object[]> data() {
@@ -29,7 +29,7 @@
}
public SwitchEnumUnboxingTest(
- TestParameters parameters, boolean enumValueOptimization, boolean enumKeepRules) {
+ TestParameters parameters, boolean enumValueOptimization, KeepRule enumKeepRules) {
this.parameters = parameters;
this.enumValueOptimization = enumValueOptimization;
this.enumKeepRules = enumKeepRules;
@@ -42,7 +42,7 @@
testForR8(parameters.getBackend())
.addInnerClasses(SwitchEnumUnboxingTest.class)
.addKeepMainRule(classToTest)
- .addKeepRules(enumKeepRules ? KEEP_ENUM : "")
+ .addKeepRules(enumKeepRules.getKeepRule())
.enableInliningAnnotations()
.enableNeverClassInliningAnnotations()
.addOptionsModification(opt -> enableEnumOptions(opt, enumValueOptimization))