Add addDefaultRuntimeLibrary utility method to test builders

Also allow library dependencies to be added to the JVM builder.

Change-Id: I2dfc4142400fc317d38a73f66ae143cd2ed9321c
diff --git a/src/test/java/com/android/tools/r8/JvmTestBuilder.java b/src/test/java/com/android/tools/r8/JvmTestBuilder.java
index 4317ca8..e59ea66 100644
--- a/src/test/java/com/android/tools/r8/JvmTestBuilder.java
+++ b/src/test/java/com/android/tools/r8/JvmTestBuilder.java
@@ -73,12 +73,12 @@
 
   @Override
   public JvmTestBuilder addLibraryFiles(Collection<Path> files) {
-    throw new Unimplemented("No support for changing the Java runtime library.");
+    return addRunClasspathFiles(files);
   }
 
   @Override
   public JvmTestBuilder addLibraryClasses(Collection<Class<?>> classes) {
-    throw new Unimplemented("No support for changing the Java runtime library.");
+    return addRunClasspathFiles(writeClassesToJar(classes));
   }
 
   @Override
diff --git a/src/test/java/com/android/tools/r8/R8TestBuilder.java b/src/test/java/com/android/tools/r8/R8TestBuilder.java
index 935de02..3c8a16b 100644
--- a/src/test/java/com/android/tools/r8/R8TestBuilder.java
+++ b/src/test/java/com/android/tools/r8/R8TestBuilder.java
@@ -256,6 +256,7 @@
     return self();
   }
 
+  @Override
   public T addMainDexListClasses(Class<?>... classes) {
     builder.addMainDexClasses(
         Arrays.stream(classes).map(Class::getTypeName).collect(Collectors.toList()));
diff --git a/src/test/java/com/android/tools/r8/TestBaseBuilder.java b/src/test/java/com/android/tools/r8/TestBaseBuilder.java
index 4f512b7..4388754 100644
--- a/src/test/java/com/android/tools/r8/TestBaseBuilder.java
+++ b/src/test/java/com/android/tools/r8/TestBaseBuilder.java
@@ -19,7 +19,7 @@
         C extends BaseCommand,
         B extends BaseCommand.Builder<C, B>,
         CR extends TestBaseResult<CR, RR>,
-        RR extends TestRunResult,
+        RR extends TestRunResult<RR>,
         T extends TestBaseBuilder<C, B, CR, RR, T>>
     extends TestBuilder<RR, T> {
 
diff --git a/src/test/java/com/android/tools/r8/TestBuilder.java b/src/test/java/com/android/tools/r8/TestBuilder.java
index 9a874c2..50a5a1f 100644
--- a/src/test/java/com/android/tools/r8/TestBuilder.java
+++ b/src/test/java/com/android/tools/r8/TestBuilder.java
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8;
 
+import com.android.tools.r8.TestBase.Backend;
 import com.android.tools.r8.debug.DebugTestConfig;
 import com.android.tools.r8.errors.Unimplemented;
 import com.android.tools.r8.utils.ListUtils;
@@ -14,7 +15,7 @@
 import java.util.List;
 import java.util.concurrent.ExecutionException;
 
-public abstract class TestBuilder<RR extends TestRunResult, T extends TestBuilder<RR, T>> {
+public abstract class TestBuilder<RR extends TestRunResult<RR>, T extends TestBuilder<RR, T>> {
 
   private final TestState state;
 
@@ -134,6 +135,16 @@
     return addLibraryFiles(Arrays.asList(files));
   }
 
+  public T addDefaultRuntimeLibrary(TestParameters parameters) {
+    if (parameters.getBackend() == Backend.DEX) {
+      addLibraryFiles(ToolHelper.getFirstSupportedAndroidJar(parameters.getApiLevel()));
+    } else {
+      assert parameters.getBackend() == Backend.CF;
+      addLibraryFiles(ToolHelper.getJava8RuntimeJar());
+    }
+    return self();
+  }
+
   public T addClasspathClasses(Class<?>... classes) {
     return addClasspathClasses(Arrays.asList(classes));
   }
diff --git a/src/test/java/com/android/tools/r8/TestCompilerBuilder.java b/src/test/java/com/android/tools/r8/TestCompilerBuilder.java
index da1bc91..6f6263a 100644
--- a/src/test/java/com/android/tools/r8/TestCompilerBuilder.java
+++ b/src/test/java/com/android/tools/r8/TestCompilerBuilder.java
@@ -34,7 +34,7 @@
         C extends BaseCompilerCommand,
         B extends BaseCompilerCommand.Builder<C, B>,
         CR extends TestCompileResult<CR, RR>,
-        RR extends TestRunResult,
+        RR extends TestRunResult<RR>,
         T extends TestCompilerBuilder<C, B, CR, RR, T>>
     extends TestBaseBuilder<C, B, CR, RR, T> {