Add tests for -adaptclassstrings
Bug: 210825394
Bug: 210825389
Bug: 210699098
Change-Id: I9f4910acd67061fe020e414fb4ab4de699b254a7
diff --git a/src/test/java/com/android/tools/r8/naming/adaptclassstrings/AdaptClassStringKeepTest.java b/src/test/java/com/android/tools/r8/naming/adaptclassstrings/AdaptClassStringKeepTest.java
new file mode 100644
index 0000000..fd9cce7
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/naming/adaptclassstrings/AdaptClassStringKeepTest.java
@@ -0,0 +1,80 @@
+// Copyright (c) 2021, 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.naming.adaptclassstrings;
+
+import static com.android.tools.r8.utils.codeinspector.Matchers.isAbsent;
+import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.Assume.assumeTrue;
+
+import com.android.tools.r8.ProguardVersion;
+import com.android.tools.r8.TestBase;
+import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.utils.AndroidApiLevel;
+import com.android.tools.r8.utils.BooleanUtils;
+import java.util.List;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameter;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public class AdaptClassStringKeepTest extends TestBase {
+
+ @Parameter(0)
+ public TestParameters parameters;
+
+ @Parameter(1)
+ public boolean isCompat;
+
+ @Parameter(2)
+ public ProguardVersion proguardVersion;
+
+ @Parameters(name = "{0}, isCompat: {1}")
+ public static List<Object[]> data() {
+ return buildParameters(
+ getTestParameters().withSystemRuntime().build(),
+ BooleanUtils.values(),
+ ProguardVersion.values());
+ }
+
+ @Test
+ public void testProguard() throws Exception {
+ assumeTrue(isCompat);
+ testForProguard(proguardVersion)
+ .addInnerClasses(getClass())
+ .addKeepMainRule(Main.class)
+ .addKeepRules("-adaptclassstrings")
+ .addDontWarn(AdaptClassStringKeepTest.class)
+ .run(parameters.getRuntime(), Main.class)
+ .assertSuccessWithOutputLines("com.android.tools.r8.naming.adaptclassstrings.a")
+ .inspect(inspector -> assertThat(inspector.clazz(Foo.class), isPresent()));
+ }
+
+ @Test
+ public void testR8() throws Exception {
+ assumeTrue(proguardVersion == ProguardVersion.getLatest());
+ (isCompat ? testForR8Compat(parameters.getBackend()) : testForR8(parameters.getBackend()))
+ .addInnerClasses(getClass())
+ .setMinApi(AndroidApiLevel.B)
+ .addKeepMainRule(Main.class)
+ .addKeepRules("-adaptclassstrings")
+ .run(parameters.getRuntime(), Main.class)
+ .assertSuccessWithOutputLines(Foo.class.getName())
+ // TODO(b/210825389): We currently interpret -adaptclasstrings without pinning the class
+ .inspect(inspector -> assertThat(inspector.clazz(Foo.class), isAbsent()));
+ }
+
+ public static class Foo {}
+
+ public static class Main {
+
+ public static void main(String[] args) {
+ System.out.println(
+ "com.android.tools.r8.naming.adaptclassstrings.AdaptClassStringKeepTest$Foo");
+ }
+ }
+}
diff --git a/src/test/java/com/android/tools/r8/naming/RepackageMinificationNameClashTest.java b/src/test/java/com/android/tools/r8/naming/adaptclassstrings/AdaptClassStringWithRepackagingTest.java
similarity index 67%
copy from src/test/java/com/android/tools/r8/naming/RepackageMinificationNameClashTest.java
copy to src/test/java/com/android/tools/r8/naming/adaptclassstrings/AdaptClassStringWithRepackagingTest.java
index 0145ebd..6bcb1a5 100644
--- a/src/test/java/com/android/tools/r8/naming/RepackageMinificationNameClashTest.java
+++ b/src/test/java/com/android/tools/r8/naming/adaptclassstrings/AdaptClassStringWithRepackagingTest.java
@@ -2,7 +2,10 @@
// 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.naming;
+package com.android.tools.r8.naming.adaptclassstrings;
+
+import static com.android.tools.r8.utils.codeinspector.Matchers.isPresentAndRenamed;
+import static org.hamcrest.MatcherAssert.assertThat;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
@@ -14,8 +17,7 @@
import org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class)
-/** This is a regression test for b/210699098 */
-public class RepackageMinificationNameClashTest extends TestBase {
+public class AdaptClassStringWithRepackagingTest extends TestBase {
@Parameter() public TestParameters parameters;
@@ -29,13 +31,14 @@
testForR8(parameters.getBackend())
.addInnerClasses(getClass())
.setMinApi(parameters.getApiLevel())
+ .addKeepMainRule(Main.class)
.addKeepRules("-repackageclasses ''")
.addKeepRules("-adaptclassstrings")
.addKeepClassRulesWithAllowObfuscation(Foo.class)
- .addKeepMainRule(Main.class)
.run(parameters.getRuntime(), Main.class)
- // TODO(b/210699098): Should be RepackageMinificationNameClashTest$Foo.
- .assertSuccessWithOutputLines("a");
+ // TODO(b/210699098): The class is renamed and so should the output
+ .assertSuccessWithOutputLines(Foo.class.getName())
+ .inspect(inspector -> assertThat(inspector.clazz(Foo.class), isPresentAndRenamed()));
}
public static class Foo {}
@@ -43,7 +46,8 @@
public static class Main {
public static void main(String[] args) {
- System.out.println("RepackageMinificationNameClashTest$Foo");
+ System.out.println(
+ "com.android.tools.r8.naming.adaptclassstrings.AdaptClassStringWithRepackagingTest$Foo");
}
}
}
diff --git a/src/test/java/com/android/tools/r8/naming/RepackageMinificationNameClashTest.java b/src/test/java/com/android/tools/r8/naming/adaptclassstrings/RepackageMinificationNameClashTest.java
similarity index 96%
rename from src/test/java/com/android/tools/r8/naming/RepackageMinificationNameClashTest.java
rename to src/test/java/com/android/tools/r8/naming/adaptclassstrings/RepackageMinificationNameClashTest.java
index 0145ebd..00dc064 100644
--- a/src/test/java/com/android/tools/r8/naming/RepackageMinificationNameClashTest.java
+++ b/src/test/java/com/android/tools/r8/naming/adaptclassstrings/RepackageMinificationNameClashTest.java
@@ -2,7 +2,7 @@
// 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.naming;
+package com.android.tools.r8.naming.adaptclassstrings;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;