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;