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());
- }
-}