Fix PublicMethodsTest

Added parametrization and check for min API level for when constructors
can be removed.

Bug: b/173751869
Change-Id: I8e9060ed585bcd5ce84d13f84d7ff3b12a22fa08
diff --git a/src/test/java/com/android/tools/r8/shaking/methods/MethodsTestBase.java b/src/test/java/com/android/tools/r8/shaking/methods/MethodsTestBase.java
index fe6a0aa..1cff714 100644
--- a/src/test/java/com/android/tools/r8/shaking/methods/MethodsTestBase.java
+++ b/src/test/java/com/android/tools/r8/shaking/methods/MethodsTestBase.java
@@ -6,6 +6,8 @@
 
 import com.android.tools.r8.NoVerticalClassMerging;
 import com.android.tools.r8.TestBase;
+import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersCollection;
 import com.android.tools.r8.utils.StringUtils;
 import com.android.tools.r8.utils.codeinspector.CodeInspector;
 import com.google.common.collect.ImmutableList;
@@ -13,9 +15,22 @@
 import java.util.List;
 import java.util.function.BiConsumer;
 import java.util.function.Function;
+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 abstract class MethodsTestBase extends TestBase {
 
+  @Parameter(0)
+  public static TestParameters parameters;
+
+  @Parameters(name = "{0}")
+  public static TestParametersCollection data() {
+    return getTestParameters().withDexRuntimesAndAllApiLevels().build();
+  }
+
   public enum Shrinker {
     Proguard,
     R8Full,
@@ -37,7 +52,8 @@
   public void testOnR8(
       List<String> keepRules, BiConsumer<CodeInspector, Shrinker> inspector, String expected)
       throws Throwable {
-    testForR8(Backend.DEX)
+    testForR8(parameters.getBackend())
+        .setMinApi(parameters.getApiLevel())
         .enableNoVerticalClassMergingAnnotations()
         .addProgramClasses(getClasses())
         .addKeepRules(keepRules)
@@ -50,7 +66,7 @@
   public void testOnR8Compat(
       List<String> keepRules, BiConsumer<CodeInspector, Shrinker> inspector, String expected)
       throws Throwable {
-    testForR8Compat(Backend.DEX)
+    testForR8Compat(parameters.getBackend())
         .enableNoVerticalClassMergingAnnotations()
         .addProgramClasses(getClasses())
         .addKeepRules(keepRules)
diff --git a/src/test/java/com/android/tools/r8/shaking/methods/pblc/PublicMethodsTest.java b/src/test/java/com/android/tools/r8/shaking/methods/pblc/PublicMethodsTest.java
index 67e25b2..477a310 100644
--- a/src/test/java/com/android/tools/r8/shaking/methods/pblc/PublicMethodsTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/methods/pblc/PublicMethodsTest.java
@@ -10,6 +10,7 @@
 
 import com.android.tools.r8.NoVerticalClassMerging;
 import com.android.tools.r8.shaking.methods.MethodsTestBase;
+import com.android.tools.r8.utils.AndroidApiLevel;
 import com.android.tools.r8.utils.codeinspector.ClassSubject;
 import com.android.tools.r8.utils.codeinspector.CodeInspector;
 import com.google.common.collect.ImmutableList;
@@ -65,6 +66,11 @@
     return Main.class;
   }
 
+  private boolean willShrinkConstructors(Shrinker shrinker) {
+    return shrinker.isR8Full()
+        && parameters.getApiLevel().isGreaterThanOrEqualTo(AndroidApiLevel.L);
+  }
+
   private static BiConsumer<CodeInspector, Shrinker> applyInspectorIf(
       Predicate<Shrinker> predicate,
       BiConsumer<CodeInspector, Shrinker> thenInspector,
@@ -175,7 +181,7 @@
     runTest(
         "-keep class **.SubSub { *; }",
         applyInspectorIf(
-            Shrinker::isR8Full,
+            this::willShrinkConstructors,
             this::checkAllMethodsAndSubSubConstructor,
             this::checkAllMethodsAndAllConstructors),
         allMethodsOutput());
@@ -186,7 +192,7 @@
     runTest(
         "-keep class **.SubSub { <methods>; }",
         applyInspectorIf(
-            Shrinker::isR8Full,
+            this::willShrinkConstructors,
             this::checkAllMethodsAndSubSubConstructor,
             this::checkAllMethodsAndAllConstructors),
         allMethodsOutput());
@@ -205,7 +211,7 @@
     runTest(
         "-keep class **.SubSub { <init>(); void m*(); }",
         applyInspectorIf(
-            Shrinker::isR8Full,
+            this::willShrinkConstructors,
             this::checkAllMethodsAndSubSubConstructor,
             this::checkAllMethodsAndAllConstructors),
         allMethodsOutput());
@@ -221,7 +227,9 @@
     runTest(
         "-keep class **.SubSub { <init>(); void m1(); }",
         applyInspectorIf(
-            Shrinker::isR8Full, this::checkM1AndSubSubConstructor, this::checkM1AndAllConstructors),
+            this::willShrinkConstructors,
+            this::checkM1AndSubSubConstructor,
+            this::checkM1AndAllConstructors),
         onlyM1Output());
   }
 
@@ -235,7 +243,9 @@
     runTest(
         "-keep class **.SubSub { <init>(); void m2(); }",
         applyInspectorIf(
-            Shrinker::isR8Full, this::checkM2AndSubSubConstructor, this::checkM2AndAllConstructors),
+            this::willShrinkConstructors,
+            this::checkM2AndSubSubConstructor,
+            this::checkM2AndAllConstructors),
         onlyM2Output());
   }
 
@@ -249,7 +259,9 @@
     runTest(
         "-keep class **.SubSub { <init>(); void m3(); }",
         applyInspectorIf(
-            Shrinker::isR8Full, this::checkM3AndSubSubConstructor, this::checkM3AndAllConstructors),
+            this::willShrinkConstructors,
+            this::checkM3AndSubSubConstructor,
+            this::checkM3AndAllConstructors),
         onlyM3Output());
   }