Update KeepNonVisibilityBridgeMethodsTest to use new testing API

Change-Id: I29f0c7545a76c9ca751732c962c37d6f32b37166
diff --git a/src/test/java/com/android/tools/r8/TestShrinkerBuilder.java b/src/test/java/com/android/tools/r8/TestShrinkerBuilder.java
index 99cd060..1c2f334 100644
--- a/src/test/java/com/android/tools/r8/TestShrinkerBuilder.java
+++ b/src/test/java/com/android/tools/r8/TestShrinkerBuilder.java
@@ -157,6 +157,10 @@
     return self();
   }
 
+  public T allowAccessModification() {
+    return allowAccessModification(true);
+  }
+
   public T allowAccessModification(boolean allowAccessModification) {
     if (allowAccessModification) {
       return addKeepRules("-allowaccessmodification");
diff --git a/src/test/java/com/android/tools/r8/bridgeremoval/bridgestokeep/DataAdapter.java b/src/test/java/com/android/tools/r8/bridgeremoval/bridgestokeep/DataAdapter.java
index eae4025..5209511 100644
--- a/src/test/java/com/android/tools/r8/bridgeremoval/bridgestokeep/DataAdapter.java
+++ b/src/test/java/com/android/tools/r8/bridgeremoval/bridgestokeep/DataAdapter.java
@@ -4,10 +4,12 @@
 
 package com.android.tools.r8.bridgeremoval.bridgestokeep;
 
+import com.android.tools.r8.NeverMerge;
+
 public interface DataAdapter {
 
-  interface Observer extends ObservableList.Observer {
-  }
+  @NeverMerge
+  interface Observer extends ObservableList.Observer {}
 
   void registerObserver(Observer observer);
 }
\ No newline at end of file
diff --git a/src/test/java/com/android/tools/r8/bridgeremoval/bridgestokeep/KeepNonVisibilityBridgeMethodsTest.java b/src/test/java/com/android/tools/r8/bridgeremoval/bridgestokeep/KeepNonVisibilityBridgeMethodsTest.java
index 29437c0..a1a73e9 100644
--- a/src/test/java/com/android/tools/r8/bridgeremoval/bridgestokeep/KeepNonVisibilityBridgeMethodsTest.java
+++ b/src/test/java/com/android/tools/r8/bridgeremoval/bridgestokeep/KeepNonVisibilityBridgeMethodsTest.java
@@ -4,54 +4,63 @@
 
 package com.android.tools.r8.bridgeremoval.bridgestokeep;
 
+import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
+import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.Assert.assertTrue;
 
 import com.android.tools.r8.TestBase;
-import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.utils.BooleanUtils;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
 import com.android.tools.r8.utils.codeinspector.MethodSubject;
-import com.google.common.collect.ImmutableList;
-import java.lang.reflect.Method;
 import java.util.List;
 import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
 
+@RunWith(Parameterized.class)
 public class KeepNonVisibilityBridgeMethodsTest extends TestBase {
 
-  private String keepMainAllowAccessModification(Class<?> clazz, boolean obfuscate) {
-    return "-keep public class " + clazz.getCanonicalName() + " {\n"
-        + "  public static void main(java.lang.String[]);\n"
-        + "}\n"
-        + "-allowaccessmodification\n"
-        + (obfuscate ? "-printmapping" : "-dontobfuscate\n");
+  private final boolean minification;
+  private final TestParameters parameters;
+
+  @Parameters(name = "{1}, minification: {0}")
+  public static List<Object[]> data() {
+    return buildParameters(BooleanUtils.values(), getTestParameters().withDexRuntimes().build());
   }
 
-  private void run(boolean obfuscate) throws Exception {
-    List<Class<?>> classes =
-        ImmutableList.of(
+  public KeepNonVisibilityBridgeMethodsTest(boolean minification, TestParameters parameters) {
+    this.minification = minification;
+    this.parameters = parameters;
+  }
+
+  @Test
+  public void test() throws Exception {
+    testForR8(parameters.getBackend())
+        .addProgramClassesAndInnerClasses(
             DataAdapter.class,
             SimpleDataAdapter.class,
             ObservableList.class,
             SimpleObservableList.class,
-            Main.class);
-    String proguardConfig = keepMainAllowAccessModification(Main.class, obfuscate);
-    CodeInspector inspector = new CodeInspector(compileWithR8(classes, proguardConfig));
+            Main.class)
+        .addKeepMainRule(Main.class)
+        .allowAccessModification()
+        // TODO(b/120764902): MemberSubject.getOriginalName() is not working without the @NeverMerge
+        //  annotation on DataAdapter.Observer.
+        .enableMergeAnnotations()
+        .minification(minification)
+        .setMinApi(parameters.getRuntime())
+        .compile()
+        .inspect(
+            inspector -> {
+              ClassSubject classSubject = inspector.clazz(SimpleDataAdapter.class);
+              assertThat(classSubject, isPresent());
 
-    // The bridge for registerObserver cannot be removed.
-    Method registerObserver =
-        SimpleDataAdapter.class.getMethod("registerObserver", DataAdapter.Observer.class);
-    MethodSubject subject = inspector.method(registerObserver);
-    assertTrue(subject.isPresent());
-    // The method is there, but it might be unmarked as a bridge if
-    // another method is inlined into it.
-    // assertTrue(subject.isBridge());
-  }
-
-  @Test
-  public void testWithObfuscation() throws Exception {
-    run(true);
-  }
-
-  @Test
-  public void testWithoutObfuscation() throws Exception {
-    run(false);
+              MethodSubject subject = classSubject.uniqueMethodWithName("registerObserver");
+              assertTrue(subject.isPresent());
+            })
+        .run(parameters.getRuntime(), Main.class)
+        .assertSuccess();
   }
 }
diff --git a/src/test/java/com/android/tools/r8/bridgeremoval/bridgestokeep/SimpleObservableList.java b/src/test/java/com/android/tools/r8/bridgeremoval/bridgestokeep/SimpleObservableList.java
index 5af0ff2..e6eceb7 100644
--- a/src/test/java/com/android/tools/r8/bridgeremoval/bridgestokeep/SimpleObservableList.java
+++ b/src/test/java/com/android/tools/r8/bridgeremoval/bridgestokeep/SimpleObservableList.java
@@ -5,12 +5,13 @@
 package com.android.tools.r8.bridgeremoval.bridgestokeep;
 
 import com.android.tools.r8.bridgeremoval.bridgestokeep.ObservableList.Observer;
+import java.util.ArrayList;
 import java.util.List;
 
 public class SimpleObservableList<O extends Observer>
     implements ObservableList<O> {
 
-  private List<O> observers;
+  private List<O> observers = new ArrayList<>();
 
   @Override
   public void registerObserver(O observer) {