Update retraceproguard tests to use test parameters

Change-Id: I4de14fad1f4fa114ae3ae923de6b8dba23dfa0c5
diff --git a/src/test/java/com/android/tools/r8/naming/retraceproguard/DesugarLambdaRetraceTest.java b/src/test/java/com/android/tools/r8/naming/retraceproguard/DesugarLambdaRetraceTest.java
index 458cb07..4ba3cbf 100644
--- a/src/test/java/com/android/tools/r8/naming/retraceproguard/DesugarLambdaRetraceTest.java
+++ b/src/test/java/com/android/tools/r8/naming/retraceproguard/DesugarLambdaRetraceTest.java
@@ -10,7 +10,7 @@
 import static org.junit.Assert.assertEquals;
 
 import com.android.tools.r8.CompilationMode;
-import com.android.tools.r8.ToolHelper;
+import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.naming.retraceproguard.StackTrace.StackTraceLine;
 import com.android.tools.r8.utils.BooleanUtils;
 import com.google.common.collect.ImmutableList;
@@ -24,14 +24,16 @@
 @RunWith(Parameterized.class)
 public class DesugarLambdaRetraceTest extends RetraceTestBase {
 
-  @Parameters(name = "Backend: {0}, mode: {1}, compat: {2}")
+  @Parameters(name = "{0}, mode: {1}, compat: {2}")
   public static Collection<Object[]> data() {
     return buildParameters(
-        ToolHelper.getBackends(), CompilationMode.values(), BooleanUtils.values());
+        getTestParameters().withAllRuntimesAndApiLevels().build(),
+        CompilationMode.values(),
+        BooleanUtils.values());
   }
 
-  public DesugarLambdaRetraceTest(Backend backend, CompilationMode mode, boolean compat) {
-    super(backend, mode, compat);
+  public DesugarLambdaRetraceTest(TestParameters parameters, CompilationMode mode, boolean compat) {
+    super(parameters, mode, compat);
   }
 
   @Override
@@ -47,7 +49,7 @@
   private int expectedActualStackTraceHeight() {
     // In debug mode the expected stack trace height differs since there is no lambda desugaring
     // for CF.
-    return mode == CompilationMode.RELEASE ? 2 : (backend == Backend.CF ? 4 : 5);
+    return mode == CompilationMode.RELEASE ? 2 : (parameters.isCfRuntime() ? 4 : 5);
   }
 
   private boolean isSynthesizedLambdaFrame(StackTraceLine line) {
@@ -68,7 +70,7 @@
   private void checkIsSameExceptForFileName(
       StackTrace actualStackTrace, StackTrace retracedStackTrace) {
     // Even when SourceFile is present retrace replaces the file name in the stack trace.
-    if (backend == Backend.CF) {
+    if (parameters.isCfRuntime()) {
       // TODO(122440196): Additional code to locate issue.
       if (!isSameExceptForFileName(expectedStackTrace).matches(retracedStackTrace)) {
         System.out.println("Expected original:");
@@ -107,7 +109,7 @@
   private void checkIsSameExceptForFileNameAndLineNumber(
       StackTrace actualStackTrace, StackTrace retracedStackTrace) {
     // Even when SourceFile is present retrace replaces the file name in the stack trace.
-    if (backend == Backend.CF) {
+    if (parameters.isCfRuntime()) {
       // TODO(122440196): Additional code to locate issue.
       if (!isSameExceptForFileNameAndLineNumber(expectedStackTrace).matches(retracedStackTrace)) {
         System.out.println("Expected original:");
diff --git a/src/test/java/com/android/tools/r8/naming/retraceproguard/DesugarStaticInterfaceMethodsRetraceTest.java b/src/test/java/com/android/tools/r8/naming/retraceproguard/DesugarStaticInterfaceMethodsRetraceTest.java
index 599fa3b..69d3fe6 100644
--- a/src/test/java/com/android/tools/r8/naming/retraceproguard/DesugarStaticInterfaceMethodsRetraceTest.java
+++ b/src/test/java/com/android/tools/r8/naming/retraceproguard/DesugarStaticInterfaceMethodsRetraceTest.java
@@ -11,7 +11,7 @@
 import com.android.tools.r8.CompilationMode;
 import com.android.tools.r8.NeverInline;
 import com.android.tools.r8.R8TestBuilder;
-import com.android.tools.r8.ToolHelper;
+import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.utils.BooleanUtils;
 import com.google.common.collect.ImmutableList;
 import java.util.Collection;
@@ -23,15 +23,17 @@
 @RunWith(Parameterized.class)
 public class DesugarStaticInterfaceMethodsRetraceTest extends RetraceTestBase {
 
-  @Parameters(name = "Backend: {0}, mode: {1}, compat: {2}")
+  @Parameters(name = "{0}, mode: {1}, compat: {2}")
   public static Collection<Object[]> data() {
     return buildParameters(
-        ToolHelper.getBackends(), CompilationMode.values(), BooleanUtils.values());
+        getTestParameters().withAllRuntimesAndApiLevels().build(),
+        CompilationMode.values(),
+        BooleanUtils.values());
   }
 
   public DesugarStaticInterfaceMethodsRetraceTest(
-      Backend backend, CompilationMode mode, boolean compat) {
-    super(backend, mode, compat);
+      TestParameters parameters, CompilationMode mode, boolean compat) {
+    super(parameters, mode, compat);
   }
 
   @Override
@@ -54,11 +56,13 @@
   public void testSourceFileAndLineNumberTable() throws Exception {
     // TODO(b/186015503): This test fails when mapping via PCs.
     //  also the test should be updated to use TestParameters and api levels.
-    assumeTrue("b/186015503", !backend.isDex() || mode != CompilationMode.RELEASE);
+    assumeTrue("b/186015503", !parameters.isDexRuntime() || mode != CompilationMode.RELEASE);
     // This also fails when desugaring due to the change in companion method stacks.
     assumeTrue(
-        ToolHelper.getMinApiLevelForDexVm()
-            .isGreaterThanOrEqualTo(apiLevelWithDefaultInterfaceMethodsSupport()));
+        parameters.isCfRuntime()
+            || parameters
+                .getApiLevel()
+                .isGreaterThanOrEqualTo(apiLevelWithDefaultInterfaceMethodsSupport()));
     runTest(
         ImmutableList.of("-keepattributes SourceFile,LineNumberTable"),
         // For the desugaring to companion classes the retrace stacktrace is still the same
diff --git a/src/test/java/com/android/tools/r8/naming/retraceproguard/InliningRetraceTest.java b/src/test/java/com/android/tools/r8/naming/retraceproguard/InliningRetraceTest.java
index ae6a985..82e841f 100644
--- a/src/test/java/com/android/tools/r8/naming/retraceproguard/InliningRetraceTest.java
+++ b/src/test/java/com/android/tools/r8/naming/retraceproguard/InliningRetraceTest.java
@@ -11,12 +11,10 @@
 import static org.junit.Assume.assumeTrue;
 
 import com.android.tools.r8.CompilationMode;
-import com.android.tools.r8.ToolHelper;
-import com.android.tools.r8.ToolHelper.DexVm.Version;
+import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.utils.BooleanUtils;
 import com.google.common.collect.ImmutableList;
 import java.util.Collection;
-import java.util.Collections;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -25,16 +23,16 @@
 @RunWith(Parameterized.class)
 public class InliningRetraceTest extends RetraceTestBase {
 
-  @Parameters(name = "Backend: {0}, mode: {1}")
+  @Parameters(name = "{0}, mode: {1}, compat: {2}")
   public static Collection<Object[]> data() {
-    return ToolHelper.getDexVm().getVersion() == Version.V5_1_1
-        ? Collections.emptyList()
-        : buildParameters(
-            ToolHelper.getBackends(), CompilationMode.values(), BooleanUtils.values());
+    return buildParameters(
+        getTestParameters().withAllRuntimesAndApiLevels().build(),
+        CompilationMode.values(),
+        BooleanUtils.values());
   }
 
-  public InliningRetraceTest(Backend backend, CompilationMode mode, boolean value) {
-    super(backend, mode, value);
+  public InliningRetraceTest(TestParameters parameters, CompilationMode mode, boolean value) {
+    super(parameters, mode, value);
   }
 
   @Override
@@ -43,7 +41,12 @@
   }
 
   private int expectedActualStackTraceHeight() {
-    return mode == CompilationMode.RELEASE ? 1 : 4;
+    int height = mode == CompilationMode.RELEASE ? 1 : 4;
+    if (parameters.isDexRuntime() && parameters.getDexRuntimeVersion().isDalvik()) {
+      // Dalvik places a stack trace line in the bottom.
+      height += 1;
+    }
+    return height;
   }
 
   @Test
@@ -60,7 +63,7 @@
   @Test
   public void testLineNumberTableOnly() throws Exception {
     assumeTrue(compat);
-    assumeTrue(backend == Backend.DEX);
+    assumeTrue(parameters.isDexRuntime());
     runTest(
         ImmutableList.of("-keepattributes LineNumberTable"),
         (StackTrace actualStackTrace, StackTrace retracedStackTrace) -> {
@@ -72,7 +75,7 @@
   @Test
   public void testNoLineNumberTable() throws Exception {
     assumeTrue(compat);
-    assumeTrue(backend == Backend.DEX);
+    assumeTrue(parameters.isDexRuntime());
     runTest(
         ImmutableList.of(),
         (StackTrace actualStackTrace, StackTrace retracedStackTrace) -> {
diff --git a/src/test/java/com/android/tools/r8/naming/retraceproguard/RetraceTestBase.java b/src/test/java/com/android/tools/r8/naming/retraceproguard/RetraceTestBase.java
index c84c685..b172763 100644
--- a/src/test/java/com/android/tools/r8/naming/retraceproguard/RetraceTestBase.java
+++ b/src/test/java/com/android/tools/r8/naming/retraceproguard/RetraceTestBase.java
@@ -8,6 +8,8 @@
 import com.android.tools.r8.R8TestBuilder;
 import com.android.tools.r8.R8TestRunResult;
 import com.android.tools.r8.TestBase;
+import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.naming.retraceproguard.StackTrace.StackTraceLine;
 import com.google.common.collect.ImmutableList;
 import java.util.Collection;
 import java.util.List;
@@ -15,12 +17,13 @@
 import org.junit.Before;
 
 public abstract class RetraceTestBase extends TestBase {
-  protected Backend backend;
+
+  protected TestParameters parameters;
   protected CompilationMode mode;
   protected boolean compat;
 
-  public RetraceTestBase(Backend backend, CompilationMode mode, boolean compat) {
-    this.backend = backend;
+  public RetraceTestBase(TestParameters parameters, CompilationMode mode, boolean compat) {
+    this.parameters = parameters;
     this.mode = mode;
     this.compat = compat;
   }
@@ -39,24 +42,26 @@
   public void setup() throws Exception {
     // Get the expected stack trace by running on the JVM.
     expectedStackTrace =
-        testForJvm()
-            .addTestClasspath()
-            .run(getMainClass())
+        testForRuntime(parameters)
+            .addProgramClasses(getClasses())
+            .run(parameters.getRuntime(), getMainClass())
             .assertFailure()
-            .map(StackTrace::extractFromJvm);
+            .map(StackTrace::extract)
+            .filter(this::isNotDalvikNativeStartMethod);
   }
 
   public void runTest(List<String> keepRules, BiConsumer<StackTrace, StackTrace> checker)
       throws Exception {
     R8TestRunResult result =
-        (compat ? testForR8Compat(backend) : testForR8(backend))
+        (compat ? testForR8Compat(parameters.getBackend()) : testForR8(parameters.getBackend()))
             .setMode(mode)
             .enableProguardTestOptions()
             .addProgramClasses(getClasses())
             .addKeepMainRule(getMainClass())
             .addKeepRules(keepRules)
+            .setMinApi(parameters.getApiLevel())
             .apply(this::configure)
-            .run(getMainClass())
+            .run(parameters.getRuntime(), getMainClass())
             .assertFailure();
 
     // Extract actual stack trace and retraced stack trace from failed run result.
@@ -70,4 +75,9 @@
 
     checker.accept(actualStackTrace, retracedStackTrace);
   }
+
+  protected boolean isNotDalvikNativeStartMethod(StackTraceLine retracedStackTraceLine) {
+    return !(retracedStackTraceLine.className.equals("dalvik.system.NativeStart")
+        && retracedStackTraceLine.methodName.equals("main"));
+  }
 }
diff --git a/src/test/java/com/android/tools/r8/naming/retraceproguard/StackTrace.java b/src/test/java/com/android/tools/r8/naming/retraceproguard/StackTrace.java
index be74127..92b78b6 100644
--- a/src/test/java/com/android/tools/r8/naming/retraceproguard/StackTrace.java
+++ b/src/test/java/com/android/tools/r8/naming/retraceproguard/StackTrace.java
@@ -11,6 +11,7 @@
 import com.android.tools.r8.SingleTestRunResult;
 import com.android.tools.r8.ToolHelper;
 import com.android.tools.r8.ToolHelper.DexVm;
+import com.android.tools.r8.utils.Box;
 import com.android.tools.r8.utils.FileUtils;
 import com.android.tools.r8.utils.StringUtils;
 import com.google.common.base.Equivalence;
@@ -203,6 +204,20 @@
     return extractFromJvm(result.getStdErr());
   }
 
+  public static StackTrace extract(SingleTestRunResult<?> result) {
+    Box<StackTrace> stackTraceBox = new Box<>();
+    result.forCfRuntime(
+        ignored -> {
+          stackTraceBox.set(extractFromJvm(result.getStdErr()));
+        });
+    result.forDexRuntimeSatisfying(
+        version -> true,
+        ignored -> {
+          stackTraceBox.set(extractFromArt(result.getStdErr()));
+        });
+    return stackTraceBox.get();
+  }
+
   public StackTrace retrace(String map, Path tempFolder) throws IOException {
     Path mapFile = tempFolder.resolve("map");
     Path stackTraceFile = tempFolder.resolve("stackTrace");
diff --git a/src/test/java/com/android/tools/r8/naming/retraceproguard/VerticalClassMergingRetraceTest.java b/src/test/java/com/android/tools/r8/naming/retraceproguard/VerticalClassMergingRetraceTest.java
index 41c6451..e354915 100644
--- a/src/test/java/com/android/tools/r8/naming/retraceproguard/VerticalClassMergingRetraceTest.java
+++ b/src/test/java/com/android/tools/r8/naming/retraceproguard/VerticalClassMergingRetraceTest.java
@@ -12,7 +12,7 @@
 import com.android.tools.r8.CompilationMode;
 import com.android.tools.r8.NeverInline;
 import com.android.tools.r8.R8TestBuilder;
-import com.android.tools.r8.ToolHelper;
+import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.naming.retraceproguard.StackTrace.StackTraceLine;
 import com.android.tools.r8.utils.BooleanUtils;
 import com.google.common.collect.ImmutableList;
@@ -28,14 +28,17 @@
 public class VerticalClassMergingRetraceTest extends RetraceTestBase {
   private Set<StackTraceLine> haveSeenLines = new HashSet<>();
 
-  @Parameters(name = "Backend: {0}, mode: {1}, compat: {2}")
+  @Parameters(name = "{0}, mode: {1}, compat: {2}")
   public static Collection<Object[]> data() {
     return buildParameters(
-        ToolHelper.getBackends(), CompilationMode.values(), BooleanUtils.values());
+        getTestParameters().withAllRuntimesAndApiLevels().build(),
+        CompilationMode.values(),
+        BooleanUtils.values());
   }
 
-  public VerticalClassMergingRetraceTest(Backend backend, CompilationMode mode, boolean compat) {
-    super(backend, mode, compat);
+  public VerticalClassMergingRetraceTest(
+      TestParameters parameters, CompilationMode mode, boolean compat) {
+    super(parameters, mode, compat);
   }
 
   @Override
@@ -55,7 +58,12 @@
 
   private int expectedActualStackTraceHeight() {
     // In RELEASE mode, a synthetic bridge will be added by vertical class merger.
-    return mode == CompilationMode.RELEASE ? 3 : 2;
+    int height = mode == CompilationMode.RELEASE ? 3 : 2;
+    if (parameters.isDexRuntime() && parameters.getDexRuntimeVersion().isDalvik()) {
+      // Dalvik places a stack trace line in the bottom.
+      height += 1;
+    }
+    return height;
   }
 
   private boolean filterSynthesizedMethodWhenLineNumberAvailable(
@@ -79,7 +87,9 @@
               mode == CompilationMode.DEBUG
                   ? retracedStackTrace
                   : retracedStackTrace.filter(this::filterSynthesizedMethodWhenLineNumberAvailable);
-          assertThat(reprocessedStackTrace, isSameExceptForFileName(expectedStackTrace));
+          assertThat(
+              reprocessedStackTrace.filter(this::isNotDalvikNativeStartMethod),
+              isSameExceptForFileName(expectedStackTrace));
           assertEquals(expectedActualStackTraceHeight(), actualStackTrace.size());
         });
   }
@@ -87,7 +97,7 @@
   @Test
   public void testLineNumberTableOnly() throws Exception {
     assumeTrue(compat);
-    assumeTrue(backend == Backend.DEX);
+    assumeTrue(parameters.isDexRuntime());
     runTest(
         ImmutableList.of("-keepattributes LineNumberTable"),
         (StackTrace actualStackTrace, StackTrace retracedStackTrace) -> {
@@ -95,7 +105,9 @@
               mode == CompilationMode.DEBUG
                   ? retracedStackTrace
                   : retracedStackTrace.filter(this::filterSynthesizedMethodWhenLineNumberAvailable);
-          assertThat(reprocessedStackTrace, isSameExceptForFileName(expectedStackTrace));
+          assertThat(
+              reprocessedStackTrace.filter(this::isNotDalvikNativeStartMethod),
+              isSameExceptForFileName(expectedStackTrace));
           assertEquals(expectedActualStackTraceHeight(), actualStackTrace.size());
         });
   }
@@ -103,7 +115,7 @@
   @Test
   public void testNoLineNumberTable() throws Exception {
     assumeTrue(compat);
-    assumeTrue(backend == Backend.DEX);
+    assumeTrue(parameters.isDexRuntime());
     haveSeenLines.clear();
     runTest(
         ImmutableList.of(),
@@ -113,7 +125,8 @@
                   ? retracedStackTrace
                   : retracedStackTrace.filter(this::filterSynthesizedMethod);
           assertThat(
-              reprocessedStackTrace, isSameExceptForFileNameAndLineNumber(expectedStackTrace));
+              reprocessedStackTrace.filter(this::isNotDalvikNativeStartMethod),
+              isSameExceptForFileNameAndLineNumber(expectedStackTrace));
           assertEquals(expectedActualStackTraceHeight(), actualStackTrace.size());
         });
   }