Change minification tests to also cover aggresive mode.
Bug:
Change-Id: I9e3216e01d26f89bd5d32545757c09fffb1547b4
diff --git a/src/test/java/com/android/tools/r8/TestBase.java b/src/test/java/com/android/tools/r8/TestBase.java
index c417787..384c1ff 100644
--- a/src/test/java/com/android/tools/r8/TestBase.java
+++ b/src/test/java/com/android/tools/r8/TestBase.java
@@ -348,4 +348,14 @@
DexApplication dexApplication = new ApplicationReader(app, options, new Timing("XX")).read();
System.out.println(SmaliWriter.smali(dexApplication, options));
}
+
+ public enum MinifyMode {
+ NONE,
+ JAVA,
+ AGGRESSIVE;
+
+ public boolean isMinify() {
+ return this != NONE;
+ }
+ }
}
diff --git a/src/test/java/com/android/tools/r8/debug/DebugTestBase.java b/src/test/java/com/android/tools/r8/debug/DebugTestBase.java
index f3fd9d2..65e7dca 100644
--- a/src/test/java/com/android/tools/r8/debug/DebugTestBase.java
+++ b/src/test/java/com/android/tools/r8/debug/DebugTestBase.java
@@ -135,7 +135,7 @@
setUp(null, null);
}
- protected static List<String> proguardConfigurations = Collections.<String>emptyList();
+ protected static List<String> proguardConfigurations = Collections.emptyList();
protected static boolean writeProguardMap = false;
protected static void setUp(
diff --git a/src/test/java/com/android/tools/r8/debug/MinificationTest.java b/src/test/java/com/android/tools/r8/debug/MinificationTest.java
index db41173..f4d566c 100644
--- a/src/test/java/com/android/tools/r8/debug/MinificationTest.java
+++ b/src/test/java/com/android/tools/r8/debug/MinificationTest.java
@@ -3,8 +3,8 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.debug;
+import com.android.tools.r8.TestBase.MinifyMode;
import com.google.common.collect.ImmutableList;
-import java.util.Arrays;
import java.util.Collection;
import org.junit.BeforeClass;
import org.junit.Test;
@@ -19,35 +19,41 @@
@Parameterized.Parameters(name = "minification: {0}, proguardMap: {1}")
public static Collection minificationControl() {
- return Arrays.asList(new Object[][] {{false, false}, {true, false}, {true, true}});
+ ImmutableList.Builder<Object> builder = ImmutableList.builder();
+ for (MinifyMode mode : MinifyMode.values()) {
+ builder.add((Object) new Object[]{mode, false});
+ if (mode.isMinify()) {
+ builder.add((Object) new Object[]{mode, true});
+ }
+ }
+ return builder.build();
}
private static boolean firstRun = true;
- private static boolean minificationEnabled;
+ private static MinifyMode minificationMode;
- public MinificationTest(boolean enableMinification, boolean writeProguardMap) throws Exception {
+ public MinificationTest(MinifyMode minificationMode, boolean writeProguardMap) throws Exception {
// TODO(tamaskenez) The way we're shadowing and calling the static setUp() methods should be
// updated when we refactor DebugTestBase.
if (firstRun
- || this.minificationEnabled != enableMinification
- || this.writeProguardMap != writeProguardMap) {
+ || MinificationTest.minificationMode != minificationMode
+ || DebugTestBase.writeProguardMap != writeProguardMap) {
firstRun = false;
- this.minificationEnabled = enableMinification;
- this.writeProguardMap = writeProguardMap;
+ MinificationTest.minificationMode = minificationMode;
+ DebugTestBase.writeProguardMap = writeProguardMap;
- if (minificationEnabled) {
- proguardConfigurations =
- ImmutableList.of(
- "-keep public class Minified { public static void main(java.lang.String[]); }");
- setUp(
- null,
- pg -> {
- pg.addKeepAttributePatterns(ImmutableList.of("SourceFile", "LineNumberTable"));
- });
- } else {
- setUp(null, null);
+ if (MinificationTest.minificationMode.isMinify()) {
+ ImmutableList.Builder<String> builder = ImmutableList.builder();
+ builder.add("-keep public class Minified { public static void main(java.lang.String[]); }");
+ builder.add("-keepattributes SourceFile");
+ builder.add("-keepattributes LineNumberTable");
+ if (minificationMode == MinifyMode.AGGRESSIVE) {
+ builder.add("-overloadaggressively");
+ }
+ proguardConfigurations = builder.build();
}
+ setUp(null, null);
}
}
@@ -56,7 +62,7 @@
@Test
public void testBreakInMainClass() throws Throwable {
- boolean minifiedNames = (minificationEnabled && !writeProguardMap);
+ boolean minifiedNames = (minificationMode.isMinify() && !writeProguardMap);
final String className = "Minified";
final String methodName = minifiedNames ? "a" : "test";
final String signature = "()V";
@@ -79,7 +85,7 @@
@Test
public void testBreakInPossiblyRenamedClass() throws Throwable {
- boolean minifiedNames = (minificationEnabled && !writeProguardMap);
+ boolean minifiedNames = (minificationMode.isMinify() && !writeProguardMap);
final String className = "Minified";
final String innerClassName = minifiedNames ? "a" : "Minified$Inner";
final String innerMethodName = minifiedNames ? "a" : "innerTest";
diff --git a/src/test/java/com/android/tools/r8/shaking/TreeShakingTest.java b/src/test/java/com/android/tools/r8/shaking/TreeShakingTest.java
index c45ae37..b477ee8 100644
--- a/src/test/java/com/android/tools/r8/shaking/TreeShakingTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/TreeShakingTest.java
@@ -7,6 +7,7 @@
import com.android.tools.r8.CompilationException;
import com.android.tools.r8.R8Command;
+import com.android.tools.r8.TestBase.MinifyMode;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.ToolHelper.ArtCommandBuilder;
import com.android.tools.r8.dex.Constants;
@@ -67,34 +68,29 @@
);
private static final Set<String> IGNORED = ImmutableSet.of(
// there's no point in running those without obfuscation
- "shaking1:keep-rules-repackaging.txt:DEX:false",
- "shaking1:keep-rules-repackaging.txt:JAR:false",
- "shaking16:keep-rules-1.txt:DEX:false",
- "shaking16:keep-rules-1.txt:JAR:false",
- "shaking16:keep-rules-2.txt:DEX:false",
- "shaking16:keep-rules-2.txt:JAR:false",
- "shaking15:keep-rules.txt:DEX:false",
- "shaking15:keep-rules.txt:JAR:false",
- "minifygeneric:keep-rules.txt:DEX:false",
- "minifygeneric:keep-rules.txt:JAR:false",
- "minifygenericwithinner:keep-rules.txt:DEX:false",
- "minifygenericwithinner:keep-rules.txt:JAR:false",
- // TODO(62048823): Inlining tests don't use allowaccessmodification.
- "inlining:keep-rules.txt:DEX:true",
- "inlining:keep-rules.txt:JAR:true",
- "inlining:keep-rules-discard.txt:DEX:true",
- "inlining:keep-rules-discard.txt:JAR:true"
+ "shaking1:keep-rules-repackaging.txt:DEX:NONE",
+ "shaking1:keep-rules-repackaging.txt:JAR:NONE",
+ "shaking16:keep-rules-1.txt:DEX:NONE",
+ "shaking16:keep-rules-1.txt:JAR:NONE",
+ "shaking16:keep-rules-2.txt:DEX:NONE",
+ "shaking16:keep-rules-2.txt:JAR:NONE",
+ "shaking15:keep-rules.txt:DEX:NONE",
+ "shaking15:keep-rules.txt:JAR:NONE",
+ "minifygeneric:keep-rules.txt:DEX:NONE",
+ "minifygeneric:keep-rules.txt:JAR:NONE",
+ "minifygenericwithinner:keep-rules.txt:DEX:NONE",
+ "minifygenericwithinner:keep-rules.txt:JAR:NONE"
);
// TODO(65355452): Reenable or remove inlining tests.
private static Set<String> SKIPPED = ImmutableSet.of("inlining");
- private final boolean minify;
+ private final MinifyMode minify;
private enum Frontend {
DEX, JAR
- }
+ }
private final Frontend kind;
private final String originalDex;
private final String programFile;
@@ -102,13 +98,14 @@
private final List<String> keepRulesFiles;
private final Consumer<DexInspector> inspection;
private final BiConsumer<String, String> outputComparator;
+
private BiConsumer<DexInspector, DexInspector> dexComparator;
@Rule
public TemporaryFolder temp = ToolHelper.getTemporaryFolderForTest();
public TreeShakingTest(String test, Frontend kind, String mainClass, List<String> keepRulesFiles,
- boolean minify, Consumer<DexInspector> inspection,
+ MinifyMode minify, Consumer<DexInspector> inspection,
BiConsumer<String, String> outputComparator,
BiConsumer<DexInspector, DexInspector> dexComparator) {
this.kind = kind;
@@ -141,9 +138,10 @@
.addProguardConfigurationConsumer(builder -> {
builder.setPrintMapping(true);
builder.setPrintMappingFile(out.resolve(AndroidApp.DEFAULT_PROGUARD_MAP_FILE));
+ builder.setOverloadAggressively(minify == MinifyMode.AGGRESSIVE);
+ builder.setObfuscating(minify.isMinify());
})
.addLibraryFiles(JAR_LIBRARIES)
- .setMinification(minify)
.build();
ToolHelper.runR8(command, options -> {
options.inlineAccessors = inline;
@@ -414,6 +412,7 @@
Assert.assertFalse(inspector.clazz("nestedproto1.GeneratedNestedProto$NestedTwo").isPresent());
}
+
private static void nestedproto2UnusedFieldsAreGone(DexInspector inspector) {
ClassSubject protoClass = inspector.clazz("nestedproto2.GeneratedNestedProto$Outer");
Assert.assertTrue(protoClass.isPresent());
@@ -426,7 +425,6 @@
Assert.assertFalse(inspector.clazz("nestedproto2.GeneratedNestedProto$NestedTwo").isPresent());
}
-
private static void enumprotoUnusedFieldsAreGone(DexInspector inspector) {
ClassSubject protoClass = inspector.clazz("enumproto.GeneratedEnumProto$Enum");
Assert.assertTrue(protoClass.isPresent());
@@ -833,18 +831,16 @@
if (SKIPPED.contains(test)) {
return;
}
- addTestCase(testCases, test, Frontend.JAR, mainClass, keepName, keepList, false, inspection,
- outputComparator, dexComparator);
- addTestCase(testCases, test, Frontend.DEX, mainClass, keepName, keepList, false, inspection,
- outputComparator, dexComparator);
- addTestCase(testCases, test, Frontend.JAR, mainClass, keepName, keepList, true, inspection,
- outputComparator, dexComparator);
- addTestCase(testCases, test, Frontend.DEX, mainClass, keepName, keepList, true, inspection,
- outputComparator, dexComparator);
+ for (MinifyMode mode : MinifyMode.values()) {
+ addTestCase(testCases, test, Frontend.JAR, mainClass, keepName, keepList, mode, inspection,
+ outputComparator, dexComparator);
+ addTestCase(testCases, test, Frontend.DEX, mainClass, keepName, keepList, mode, inspection,
+ outputComparator, dexComparator);
+ }
}
private static void addTestCase(List<Object[]> testCases, String test, Frontend kind,
- String mainClass, String keepName, List<String> keepList, boolean minify,
+ String mainClass, String keepName, List<String> keepList, MinifyMode minify,
Consumer<DexInspector> inspection, BiConsumer<String, String> outputComparator,
BiConsumer<DexInspector, DexInspector> dexComparator) {
if (!IGNORED_FLAGS.contains(test + ":" + keepName)
@@ -910,13 +906,15 @@
if (dexComparator != null) {
DexInspector ref = new DexInspector(Paths.get(originalDex));
DexInspector inspector = new DexInspector(generated,
- minify ? temp.getRoot().toPath().resolve(DEFAULT_PROGUARD_MAP_FILE).toString() : null);
+ minify.isMinify() ? temp.getRoot().toPath().resolve(DEFAULT_PROGUARD_MAP_FILE).toString()
+ : null);
dexComparator.accept(ref, inspector);
}
if (inspection != null) {
DexInspector inspector = new DexInspector(generated,
- minify ? temp.getRoot().toPath().resolve(DEFAULT_PROGUARD_MAP_FILE).toString() : null);
+ minify.isMinify() ? temp.getRoot().toPath().resolve(DEFAULT_PROGUARD_MAP_FILE).toString()
+ : null);
inspection.accept(inspector);
}
}