Add runtime to test result

Change-Id: I94ed3b81cd88897c5c27fa3cdc378716fab55014
diff --git a/src/test/java/com/android/tools/r8/D8TestCompileResult.java b/src/test/java/com/android/tools/r8/D8TestCompileResult.java
index e4ea07c..117ca7b 100644
--- a/src/test/java/com/android/tools/r8/D8TestCompileResult.java
+++ b/src/test/java/com/android/tools/r8/D8TestCompileResult.java
@@ -24,7 +24,7 @@
   }
 
   @Override
-  public D8TestRunResult createRunResult(ProcessResult result) {
-    return new D8TestRunResult(app, result);
+  public D8TestRunResult createRunResult(TestRuntime runtime, ProcessResult result) {
+    return new D8TestRunResult(app, runtime, result);
   }
 }
diff --git a/src/test/java/com/android/tools/r8/D8TestRunResult.java b/src/test/java/com/android/tools/r8/D8TestRunResult.java
index 1aa095a..cd4b663 100644
--- a/src/test/java/com/android/tools/r8/D8TestRunResult.java
+++ b/src/test/java/com/android/tools/r8/D8TestRunResult.java
@@ -9,8 +9,8 @@
 
 public class D8TestRunResult extends TestRunResult<D8TestRunResult> {
 
-  public D8TestRunResult(AndroidApp app, ProcessResult result) {
-    super(app, result);
+  public D8TestRunResult(AndroidApp app, TestRuntime runtime, ProcessResult result) {
+    super(app, runtime, result);
   }
 
   @Override
diff --git a/src/test/java/com/android/tools/r8/DXTestCompileResult.java b/src/test/java/com/android/tools/r8/DXTestCompileResult.java
index 4313211..3cf9b73 100644
--- a/src/test/java/com/android/tools/r8/DXTestCompileResult.java
+++ b/src/test/java/com/android/tools/r8/DXTestCompileResult.java
@@ -23,7 +23,7 @@
   }
 
   @Override
-  public DXTestRunResult createRunResult(ProcessResult result) {
-    return new DXTestRunResult(app, result);
+  public DXTestRunResult createRunResult(TestRuntime runtime, ProcessResult result) {
+    return new DXTestRunResult(app, runtime, result);
   }
 }
diff --git a/src/test/java/com/android/tools/r8/DXTestRunResult.java b/src/test/java/com/android/tools/r8/DXTestRunResult.java
index 830cbd8..bcec2f3 100644
--- a/src/test/java/com/android/tools/r8/DXTestRunResult.java
+++ b/src/test/java/com/android/tools/r8/DXTestRunResult.java
@@ -9,8 +9,8 @@
 
 public class DXTestRunResult extends TestRunResult<DXTestRunResult> {
 
-  public DXTestRunResult(AndroidApp app, ProcessResult result) {
-    super(app, result);
+  public DXTestRunResult(AndroidApp app, TestRuntime runtime, ProcessResult result) {
+    super(app, runtime, result);
   }
 
   @Override
diff --git a/src/test/java/com/android/tools/r8/Dex2OatTestRunResult.java b/src/test/java/com/android/tools/r8/Dex2OatTestRunResult.java
index 1a4e0ec..f364232 100644
--- a/src/test/java/com/android/tools/r8/Dex2OatTestRunResult.java
+++ b/src/test/java/com/android/tools/r8/Dex2OatTestRunResult.java
@@ -13,8 +13,8 @@
 
 public class Dex2OatTestRunResult extends TestRunResult<Dex2OatTestRunResult> {
 
-  public Dex2OatTestRunResult(AndroidApp app, ProcessResult result) {
-    super(app, result);
+  public Dex2OatTestRunResult(AndroidApp app, TestRuntime runtime, ProcessResult result) {
+    super(app, runtime, result);
   }
 
   @Override
diff --git a/src/test/java/com/android/tools/r8/ExternalR8TestCompileResult.java b/src/test/java/com/android/tools/r8/ExternalR8TestCompileResult.java
index 290f6ac..04a37fa 100644
--- a/src/test/java/com/android/tools/r8/ExternalR8TestCompileResult.java
+++ b/src/test/java/com/android/tools/r8/ExternalR8TestCompileResult.java
@@ -63,7 +63,7 @@
   }
 
   @Override
-  protected ExternalR8TestRunResult createRunResult(ProcessResult result) {
-    return new ExternalR8TestRunResult(app, outputJar, proguardMap, result);
+  protected ExternalR8TestRunResult createRunResult(TestRuntime runtime, ProcessResult result) {
+    return new ExternalR8TestRunResult(app, outputJar, proguardMap, runtime, result);
   }
 }
diff --git a/src/test/java/com/android/tools/r8/ExternalR8TestRunResult.java b/src/test/java/com/android/tools/r8/ExternalR8TestRunResult.java
index f301b78..28e2835 100644
--- a/src/test/java/com/android/tools/r8/ExternalR8TestRunResult.java
+++ b/src/test/java/com/android/tools/r8/ExternalR8TestRunResult.java
@@ -19,8 +19,12 @@
   private final String proguardMap;
 
   public ExternalR8TestRunResult(
-      AndroidApp app, Path outputJar, String proguardMap, ProcessResult result) {
-    super(app, result);
+      AndroidApp app,
+      Path outputJar,
+      String proguardMap,
+      TestRuntime runtime,
+      ProcessResult result) {
+    super(app, runtime, result);
     this.outputJar = outputJar;
     this.proguardMap = proguardMap;
   }
diff --git a/src/test/java/com/android/tools/r8/GenerateMainDexListRunResult.java b/src/test/java/com/android/tools/r8/GenerateMainDexListRunResult.java
index b9842f2..166feeb 100644
--- a/src/test/java/com/android/tools/r8/GenerateMainDexListRunResult.java
+++ b/src/test/java/com/android/tools/r8/GenerateMainDexListRunResult.java
@@ -11,7 +11,7 @@
   List<String> mainDexList;
 
   public GenerateMainDexListRunResult(List<String> mainDexList) {
-    super(null, null);
+    super(null, null, null);
     this.mainDexList = mainDexList;
   }
 
diff --git a/src/test/java/com/android/tools/r8/JvmTestBuilder.java b/src/test/java/com/android/tools/r8/JvmTestBuilder.java
index c6a5026..06f97ce 100644
--- a/src/test/java/com/android/tools/r8/JvmTestBuilder.java
+++ b/src/test/java/com/android/tools/r8/JvmTestBuilder.java
@@ -39,9 +39,9 @@
   }
 
   @Override
+  @Deprecated
   public JvmTestRunResult run(String mainClass) throws IOException {
-    ProcessResult result = ToolHelper.runJava(classpath, mainClass);
-    return new JvmTestRunResult(builder.build(), result);
+    return run(TestRuntime.getDefaultJavaRuntime(), mainClass);
   }
 
   public JvmTestRunResult run(TestRuntime runtime, String mainClass, String... args)
@@ -49,7 +49,7 @@
     assert runtime.isCf();
     ProcessResult result =
         ToolHelper.runJava(runtime.asCf().getVm(), classpath, ObjectArrays.concat(mainClass, args));
-    return new JvmTestRunResult(builder.build(), result);
+    return new JvmTestRunResult(builder.build(), runtime, result);
   }
 
   @Override
diff --git a/src/test/java/com/android/tools/r8/JvmTestRunResult.java b/src/test/java/com/android/tools/r8/JvmTestRunResult.java
index b7a71fd..a94fd38 100644
--- a/src/test/java/com/android/tools/r8/JvmTestRunResult.java
+++ b/src/test/java/com/android/tools/r8/JvmTestRunResult.java
@@ -9,8 +9,8 @@
 
 public class JvmTestRunResult extends TestRunResult<JvmTestRunResult> {
 
-  public JvmTestRunResult(AndroidApp app, ProcessResult result) {
-    super(app, result);
+  public JvmTestRunResult(AndroidApp app, TestRuntime runtime, ProcessResult result) {
+    super(app, runtime, result);
   }
 
   @Override
diff --git a/src/test/java/com/android/tools/r8/ProguardTestCompileResult.java b/src/test/java/com/android/tools/r8/ProguardTestCompileResult.java
index 0ed5425..fbb8282 100644
--- a/src/test/java/com/android/tools/r8/ProguardTestCompileResult.java
+++ b/src/test/java/com/android/tools/r8/ProguardTestCompileResult.java
@@ -42,7 +42,7 @@
   }
 
   @Override
-  public ProguardTestRunResult createRunResult(ProcessResult result) {
-    return new ProguardTestRunResult(app, result, proguardMap);
+  public ProguardTestRunResult createRunResult(TestRuntime runtime, ProcessResult result) {
+    return new ProguardTestRunResult(app, runtime, result, proguardMap);
   }
 }
diff --git a/src/test/java/com/android/tools/r8/ProguardTestRunResult.java b/src/test/java/com/android/tools/r8/ProguardTestRunResult.java
index e242a38..de24d38 100644
--- a/src/test/java/com/android/tools/r8/ProguardTestRunResult.java
+++ b/src/test/java/com/android/tools/r8/ProguardTestRunResult.java
@@ -16,8 +16,9 @@
 
   private final String proguardMap;
 
-  public ProguardTestRunResult(AndroidApp app, ProcessResult result, String proguardMap) {
-    super(app, result);
+  public ProguardTestRunResult(
+      AndroidApp app, TestRuntime runtime, ProcessResult result, String proguardMap) {
+    super(app, runtime, result);
     this.proguardMap = proguardMap;
   }
 
diff --git a/src/test/java/com/android/tools/r8/R8TestCompileResult.java b/src/test/java/com/android/tools/r8/R8TestCompileResult.java
index 8e63f34..c4ec2aa 100644
--- a/src/test/java/com/android/tools/r8/R8TestCompileResult.java
+++ b/src/test/java/com/android/tools/r8/R8TestCompileResult.java
@@ -83,8 +83,8 @@
   }
 
   @Override
-  public R8TestRunResult createRunResult(ProcessResult result) {
-    return new R8TestRunResult(app, result, proguardMap, this::graphInspector);
+  public R8TestRunResult createRunResult(TestRuntime runtime, ProcessResult result) {
+    return new R8TestRunResult(app, runtime, result, proguardMap, this::graphInspector);
   }
 
   public String getProguardMap() {
diff --git a/src/test/java/com/android/tools/r8/R8TestRunResult.java b/src/test/java/com/android/tools/r8/R8TestRunResult.java
index 835c959..12faade 100644
--- a/src/test/java/com/android/tools/r8/R8TestRunResult.java
+++ b/src/test/java/com/android/tools/r8/R8TestRunResult.java
@@ -29,10 +29,11 @@
 
   public R8TestRunResult(
       AndroidApp app,
+      TestRuntime runtime,
       ProcessResult result,
       String proguardMap,
       GraphInspectorSupplier graphInspector) {
-    super(app, result);
+    super(app, runtime, result);
     this.proguardMap = proguardMap;
     this.graphInspector = graphInspector;
   }
diff --git a/src/test/java/com/android/tools/r8/TestCompileResult.java b/src/test/java/com/android/tools/r8/TestCompileResult.java
index 4c6f535..8c643ff 100644
--- a/src/test/java/com/android/tools/r8/TestCompileResult.java
+++ b/src/test/java/com/android/tools/r8/TestCompileResult.java
@@ -9,6 +9,7 @@
 
 import com.android.tools.r8.ClassFileConsumer.ArchiveConsumer;
 import com.android.tools.r8.TestBase.Backend;
+import com.android.tools.r8.TestRuntime.DexRuntime;
 import com.android.tools.r8.ToolHelper.ArtCommandBuilder;
 import com.android.tools.r8.ToolHelper.DexVm;
 import com.android.tools.r8.ToolHelper.ProcessResult;
@@ -81,7 +82,7 @@
     return outputMode;
   }
 
-  protected abstract RR createRunResult(ProcessResult result);
+  protected abstract RR createRunResult(TestRuntime runtime, ProcessResult result);
 
   @Deprecated
   public RR run(Class<?> mainClass) throws ExecutionException, IOException {
@@ -94,7 +95,10 @@
     assertThat(mainClassSubject, isPresent());
     switch (getBackend()) {
       case DEX:
-        return runArt(null, additionalRunClassPath, mainClassSubject.getFinalName());
+        return runArt(
+            new DexRuntime(ToolHelper.getDexVm()),
+            additionalRunClassPath,
+            mainClassSubject.getFinalName());
       case CF:
         return runJava(
             TestRuntime.getDefaultJavaRuntime(),
@@ -124,8 +128,7 @@
     ClassSubject mainClassSubject = inspector().clazz(mainClass);
     assertThat("Did you forget a keep rule for the main method?", mainClassSubject, isPresent());
     if (runtime.isDex()) {
-      return runArt(
-          runtime.asDex().getVm(), additionalRunClassPath, mainClassSubject.getFinalName(), args);
+      return runArt(runtime, additionalRunClassPath, mainClassSubject.getFinalName(), args);
     }
     assert runtime.isCf();
     return runJava(
@@ -293,11 +296,13 @@
         .build();
     ProcessResult result =
         ToolHelper.runJava(runtime.asCf().getVm(), vmArguments, classPath, arguments);
-    return createRunResult(result);
+    return createRunResult(runtime, result);
   }
 
-  private RR runArt(DexVm vm, List<Path> additionalClassPath, String mainClass, String... arguments)
+  private RR runArt(
+      TestRuntime runtime, List<Path> additionalClassPath, String mainClass, String... arguments)
       throws IOException {
+    DexVm vm = runtime.asDex().getVm();
     // TODO(b/127785410): Always assume a non-null runtime.
     Path out = state.getNewTempFolder().resolve("out.zip");
     app.writeToZip(out, OutputMode.DexIndexed);
@@ -312,24 +317,16 @@
     ProcessResult result =
         ToolHelper.runArtRaw(
             classPath, mainClass, commandConsumer, vm, withArtFrameworks, arguments);
-    return createRunResult(result);
-  }
-
-  @Deprecated
-  public Dex2OatTestRunResult runDex2Oat() throws IOException {
-    return runDex2Oat(ToolHelper.getDexVm());
+    return createRunResult(runtime, result);
   }
 
   public Dex2OatTestRunResult runDex2Oat(TestRuntime runtime) throws IOException {
-    return runDex2Oat(runtime.asDex().getVm());
-  }
-
-  public Dex2OatTestRunResult runDex2Oat(DexVm vm) throws IOException {
     assert getBackend() == DEX;
+    DexVm vm = runtime.asDex().getVm();
     Path tmp = state.getNewTempFolder();
     Path jarFile = tmp.resolve("out.jar");
     Path oatFile = tmp.resolve("out.oat");
     app.writeToZip(jarFile, OutputMode.DexIndexed);
-    return new Dex2OatTestRunResult(app, ToolHelper.runDex2OatRaw(jarFile, oatFile, vm));
+    return new Dex2OatTestRunResult(app, runtime, ToolHelper.runDex2OatRaw(jarFile, oatFile, vm));
   }
 }
diff --git a/src/test/java/com/android/tools/r8/TestRunResult.java b/src/test/java/com/android/tools/r8/TestRunResult.java
index 4dd10a1..c3acc45 100644
--- a/src/test/java/com/android/tools/r8/TestRunResult.java
+++ b/src/test/java/com/android/tools/r8/TestRunResult.java
@@ -21,10 +21,12 @@
 
 public abstract class TestRunResult<RR extends TestRunResult<?>> {
   protected final AndroidApp app;
+  private final TestRuntime runtime;
   private final ProcessResult result;
 
-  public TestRunResult(AndroidApp app, ProcessResult result) {
+  public TestRunResult(AndroidApp app, TestRuntime runtime, ProcessResult result) {
     this.app = app;
+    this.runtime = runtime;
     this.result = result;
   }
 
diff --git a/src/test/java/com/android/tools/r8/maindexlist/MainDexWithSynthesizedClassesTest.java b/src/test/java/com/android/tools/r8/maindexlist/MainDexWithSynthesizedClassesTest.java
index 94e2a9c..d102004 100644
--- a/src/test/java/com/android/tools/r8/maindexlist/MainDexWithSynthesizedClassesTest.java
+++ b/src/test/java/com/android/tools/r8/maindexlist/MainDexWithSynthesizedClassesTest.java
@@ -81,9 +81,7 @@
   private void checkCompilationResult(D8TestCompileResult compileResult) throws Exception {
     if (parameters.getRuntime().asDex().getMinApiLevel().getLevel()
         < nativeMultiDexLevel.getLevel()) {
-      compileResult
-          .runDex2Oat(parameters.getRuntime().asDex().getVm())
-          .assertNoVerificationErrors();
+      compileResult.runDex2Oat(parameters.getRuntime()).assertNoVerificationErrors();
     } else {
       compileResult.run(parameters.getRuntime(), TestClass.class).assertSuccessWithOutput(EXPECTED);
     }
diff --git a/src/test/java/com/android/tools/r8/regress/b118075510/Regress118075510Runner.java b/src/test/java/com/android/tools/r8/regress/b118075510/Regress118075510Runner.java
index 12bd452..e562b4f 100644
--- a/src/test/java/com/android/tools/r8/regress/b118075510/Regress118075510Runner.java
+++ b/src/test/java/com/android/tools/r8/regress/b118075510/Regress118075510Runner.java
@@ -5,21 +5,39 @@
 
 import com.android.tools.r8.AsmTestBase;
 import com.android.tools.r8.CompilationFailedException;
+import com.android.tools.r8.CompilationMode;
 import com.android.tools.r8.D8TestCompileResult;
+import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.utils.AndroidApiLevel;
 import com.android.tools.r8.utils.StringUtils;
 import com.android.tools.r8.utils.codeinspector.CodeInspector;
 import com.android.tools.r8.utils.codeinspector.MethodSubject;
 import java.io.IOException;
+import java.util.List;
 import java.util.concurrent.ExecutionException;
 import org.junit.Assert;
 import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
 
+@RunWith(Parameterized.class)
 public class Regress118075510Runner extends AsmTestBase {
 
   public static final Class<?> CLASS = Regress118075510Test.class;
   public static final String EXPECTED = StringUtils.lines("0", "0");
 
+  private final TestParameters parameters;
+
+  @Parameterized.Parameters(name = "{0}, {1}")
+  public static List<Object[]> data() {
+    return buildParameters(
+        getTestParameters().withDexRuntimes().withAllApiLevels().build(), CompilationMode.values());
+  }
+
+  public Regress118075510Runner(TestParameters parameters, CompilationMode mode) {
+    this.parameters = parameters;
+  }
+
   @Test
   public void test()
       throws CompilationFailedException, IOException, ExecutionException, NoSuchMethodException {
@@ -32,9 +50,9 @@
     checkMethodContainsLongSignum(inspector, "fooNoTryCatch");
     checkMethodContainsLongSignum(inspector, "fooWithTryCatch");
     // Check the program runs on ART/Dalvik
-    d8Result.run(CLASS).assertSuccessWithOutput(EXPECTED);
+    d8Result.run(parameters.getRuntime(), CLASS).assertSuccessWithOutput(EXPECTED);
     // Check the program can be dex2oat compiled to arm64. This will diverge without the fixup.
-    d8Result.runDex2Oat().assertSuccess();
+    d8Result.runDex2Oat(parameters.getRuntime()).assertSuccess();
   }
 
   private void checkMethodContainsLongSignum(CodeInspector inspector, String methodName)
diff --git a/src/test/java/com/android/tools/r8/regress/b77842465/Regress77842465.java b/src/test/java/com/android/tools/r8/regress/b77842465/Regress77842465.java
index 3ab3467..196ca52 100644
--- a/src/test/java/com/android/tools/r8/regress/b77842465/Regress77842465.java
+++ b/src/test/java/com/android/tools/r8/regress/b77842465/Regress77842465.java
@@ -5,6 +5,8 @@
 
 import com.android.tools.r8.AsmTestBase;
 import com.android.tools.r8.CompilationFailedException;
+import com.android.tools.r8.TestRuntime.DexRuntime;
+import com.android.tools.r8.ToolHelper;
 import com.android.tools.r8.utils.AndroidApiLevel;
 import java.io.IOException;
 import org.junit.Test;
@@ -18,7 +20,7 @@
         .noDesugaring()
         .setMinApi(AndroidApiLevel.M)
         .compile()
-        .runDex2Oat()
+        .runDex2Oat(new DexRuntime(ToolHelper.getDexVm()))
         .assertSuccess();
   }
 }