Modernize field rebinding and resolution tests.

Bug: 76191597
Change-Id: Iaa625d2ac13b27da24af500cacf44be9d3f98838
diff --git a/src/test/java/com/android/tools/r8/resolution/PublicFieldInnerClassTest.java b/src/test/java/com/android/tools/r8/resolution/PublicFieldInnerClassTest.java
index 7733339..8d35333 100644
--- a/src/test/java/com/android/tools/r8/resolution/PublicFieldInnerClassTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/PublicFieldInnerClassTest.java
@@ -1,22 +1,16 @@
 // Copyright (c) 2018, 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.resolution;
 
-public class PublicFieldInnerClassTest {
-  public static final Class<?>[] CLASSES = {
-      PrivateBase.class,
-      PrivateSubclass.class,
-      PackageBase.class,
-      PackageSubclass.class,
-      ProtectedBase.class,
-      ProtectedSubclass.class,
-      PublicBase.class,
-      PublicSubclass.class,
-      PublicFieldInnerClassTest.class
-  };
+import com.android.tools.r8.CompilationMode;
+import com.android.tools.r8.TestBase;
+import com.android.tools.r8.utils.StringUtils;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
 
+class PublicFieldInnerClassTestMain {
   private static class PrivateBase {
     public int value;
   }
@@ -68,3 +62,30 @@
     System.out.println(getPublic(new PublicSubclass()));
   }
 }
+
+@RunWith(Parameterized.class)
+public class PublicFieldInnerClassTest extends TestBase {
+  private static final Class CLASS = PublicFieldInnerClassTestMain.class;
+  private static final String EXPECTED_OUTPUT = StringUtils.lines("0", "0", "0", "0");
+
+  private final Backend backend;
+
+  @Parameterized.Parameters(name = "Backend: {0}")
+  public static Object[] data() {
+    return Backend.values();
+  }
+
+  public PublicFieldInnerClassTest(Backend backend) {
+    this.backend = backend;
+  }
+
+  @Test
+  public void test() throws Exception {
+    testForR8(backend)
+        .setMode(CompilationMode.DEBUG)
+        .addProgramClassesAndInnerClasses(CLASS)
+        .addKeepMainRule(CLASS)
+        .run(CLASS)
+        .assertSuccessWithOutput(EXPECTED_OUTPUT);
+  }
+}
diff --git a/src/test/java/com/android/tools/r8/resolution/PublicFieldInnerClassTestRunner.java b/src/test/java/com/android/tools/r8/resolution/PublicFieldInnerClassTestRunner.java
deleted file mode 100644
index d1fc83e..0000000
--- a/src/test/java/com/android/tools/r8/resolution/PublicFieldInnerClassTestRunner.java
+++ /dev/null
@@ -1,74 +0,0 @@
-// Copyright (c) 2018, 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.resolution;
-
-import static org.junit.Assert.assertEquals;
-
-import com.android.tools.r8.ClassFileConsumer;
-import com.android.tools.r8.CompilationMode;
-import com.android.tools.r8.DexIndexedConsumer;
-import com.android.tools.r8.ProgramConsumer;
-import com.android.tools.r8.R8Command;
-import com.android.tools.r8.R8Command.Builder;
-import com.android.tools.r8.TestBase;
-import com.android.tools.r8.ToolHelper;
-import com.android.tools.r8.ToolHelper.ProcessResult;
-import com.android.tools.r8.origin.Origin;
-import java.nio.file.Path;
-import java.util.Arrays;
-import java.util.List;
-import org.junit.Test;
-
-public class PublicFieldInnerClassTestRunner extends TestBase {
-  static final Class CLASS = PublicFieldInnerClassTest.class;
-  static final Class<?>[] CLASSES = PublicFieldInnerClassTest.CLASSES;
-
-  @Test
-  public void testCf() throws Exception {
-    ProcessResult runInput =
-        ToolHelper.runJava(ToolHelper.getClassPathForTests(), CLASS.getCanonicalName());
-    assertEquals(0, runInput.exitCode);
-    Path outCf = temp.getRoot().toPath().resolve("cf.jar");
-    build(new ClassFileConsumer.ArchiveConsumer(outCf));
-    ProcessResult runCf = ToolHelper.runJava(outCf, CLASS.getCanonicalName());
-    assertEquals(runInput.toString(), runCf.toString());
-    assertEquals(
-        -1,
-        runCf.stderr.indexOf("java.lang.NoSuchFieldError"));
-  }
-
-  @Test
-  public void testDex() throws Exception {
-    ProcessResult runInput =
-        ToolHelper.runJava(ToolHelper.getClassPathForTests(), CLASS.getCanonicalName());
-    assertEquals(0, runInput.exitCode);
-    Path outDex = temp.getRoot().toPath().resolve("dex.zip");
-    build(new DexIndexedConsumer.ArchiveConsumer(outDex));
-    // TODO(b/76191597): Change to runArtNoVerificationErrors + assertEquals when bug is fixed
-    ProcessResult runDex = ToolHelper.runArtNoVerificationErrorsRaw(
-        outDex.toString(), CLASS.getCanonicalName());
-    assertEquals(runInput.stdout, runDex.stdout);
-    assertEquals(runInput.exitCode, runDex.exitCode);
-    assertEquals(
-        -1,
-        runDex.stderr.indexOf("java.lang.NoSuchFieldError"));
-  }
-
-  private void build(ProgramConsumer consumer) throws Exception {
-    List<String> config = Arrays.asList(
-        "-keep public class " + CLASS.getCanonicalName() + " {",
-        "  public static void main(...);",
-        "}"
-    );
-    Builder builder = R8Command.builder()
-        .setMode(CompilationMode.DEBUG)
-        .addLibraryFiles(ToolHelper.getAndroidJar(ToolHelper.getMinApiLevelForDexVm()))
-        .setProgramConsumer(consumer)
-        .addProguardConfiguration(config, Origin.unknown());
-    for (Class<?> c : CLASSES) {
-      builder.addClassProgramData(ToolHelper.getClassAsBytes(c), Origin.unknown());
-    }
-    ToolHelper.runR8(builder.build());
-  }
-}