Update main-dex list test to new test infrastructure.

Change-Id: If041acf2aa409fe38f2221f3c04406b88444bc93
diff --git a/src/test/java/com/android/tools/r8/maindexlist/MainDexListOutputTest.java b/src/test/java/com/android/tools/r8/maindexlist/MainDexListOutputTest.java
index 123744d..447ed7e 100644
--- a/src/test/java/com/android/tools/r8/maindexlist/MainDexListOutputTest.java
+++ b/src/test/java/com/android/tools/r8/maindexlist/MainDexListOutputTest.java
@@ -4,32 +4,29 @@
 
 package com.android.tools.r8.maindexlist;
 
+import static com.android.tools.r8.DiagnosticsMatcher.diagnosticMessage;
 import static org.hamcrest.CoreMatchers.containsString;
-import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
 
 import com.android.tools.r8.CompilationFailedException;
-import com.android.tools.r8.DexIndexedConsumer;
-import com.android.tools.r8.DexIndexedConsumer.ArchiveConsumer;
-import com.android.tools.r8.Diagnostic;
 import com.android.tools.r8.DiagnosticsHandler;
-import com.android.tools.r8.OutputMode;
-import com.android.tools.r8.R8Command;
 import com.android.tools.r8.StringConsumer;
+import com.android.tools.r8.StringConsumer.FileConsumer;
 import com.android.tools.r8.TestBase;
-import com.android.tools.r8.ToolHelper;
-import com.android.tools.r8.origin.Origin;
+import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersCollection;
 import com.android.tools.r8.utils.AndroidApiLevel;
 import com.android.tools.r8.utils.FileUtils;
-import com.android.tools.r8.utils.StringDiagnostic;
 import com.google.common.collect.ImmutableList;
-import java.io.IOException;
 import java.nio.file.Path;
 import java.util.stream.Collectors;
 import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
 
+@RunWith(Parameterized.class)
 public class MainDexListOutputTest extends TestBase {
 
   interface MyConsumer<T> {
@@ -67,50 +64,45 @@
     }
   }
 
-  class Reporter implements DiagnosticsHandler {
-    int errorCount = 0;
-
-    @Override
-    public void error(Diagnostic error) {
-      errorCount++;
-      assertTrue(error instanceof StringDiagnostic);
-      assertTrue(error.getDiagnosticMessage().contains("main-dex"));
-    }
+  @Parameters(name = "{0}")
+  public static TestParametersCollection data() {
+    return getTestParameters().withNoneRuntime().build();
   }
 
-  @Test
+  public MainDexListOutputTest(TestParameters parameters) {
+    parameters.assertNoneRuntime();
+  }
+
+  @Test(expected = CompilationFailedException.class)
   public void testNoMainDex() throws Exception {
-    Reporter reporter = new Reporter();
-    try {
-      Path mainDexListOutput = temp.getRoot().toPath().resolve("main-dex-output.txt");
-      R8Command.builder(reporter)
-          .setProgramConsumer(DexIndexedConsumer.emptyConsumer())
-          .addClassProgramData(
-              ToolHelper.getClassAsBytes(HelloWorldMain.class), Origin.unknown())
-          .setMainDexListOutputPath(mainDexListOutput)
-          .build();
-      fail("Expect to fail");
-    } catch (CompilationFailedException e) {
-      assertEquals(1, reporter.errorCount);
-      assertThat(
-          e.getCause().getMessage(),
-          containsString("--main-dex-list-output require --main-dex-rules and/or --main-dex-list"));
-    }
+    Path mainDexListOutput = temp.getRoot().toPath().resolve("main-dex-output.txt");
+    testForR8(Backend.DEX)
+        .addProgramClasses(HelloWorldMain.class)
+        .setMainDexListConsumer(new FileConsumer(mainDexListOutput))
+        .setMinApi(AndroidApiLevel.K)
+        .compileWithExpectedDiagnostics(
+            diagnostics ->
+                diagnostics
+                    .assertOnlyErrors()
+                    .assertErrorsMatch(
+                        diagnosticMessage(
+                            containsString(
+                                "--main-dex-list-output require --main-dex-rules and/or"
+                                    + " --main-dex-list"))));
   }
 
   @Test
   public void testWithMainDex() throws Exception {
     Path mainDexRules = writeTextToTempFile(keepMainProguardConfiguration(HelloWorldMain.class));
     Path mainDexListOutput = temp.getRoot().toPath().resolve("main-dex-output.txt");
-    R8Command command =
-        ToolHelper.prepareR8CommandBuilder(readClasses(HelloWorldMain.class))
-            .setDisableTreeShaking(true)
-            .setDisableMinification(true)
-            .addMainDexRulesFiles(mainDexRules)
-            .setMainDexListOutputPath(mainDexListOutput)
-            .setOutput(temp.getRoot().toPath(), OutputMode.DexIndexed)
-            .build();
-    ToolHelper.runR8(command);
+    testForR8(Backend.DEX)
+        .addProgramClasses(HelloWorldMain.class)
+        .noTreeShaking()
+        .noMinification()
+        .setMinApi(AndroidApiLevel.K)
+        .addMainDexRuleFiles(mainDexRules)
+        .setMainDexListConsumer(new FileConsumer(mainDexListOutput))
+        .compile();
     // Main dex list with the single class.
     assertEquals(
         ImmutableList.of(HelloWorldMain.class.getTypeName().replace('.', '/') + ".class"),
@@ -121,7 +113,7 @@
   }
 
   @Test
-  public void testD8DesugaredLambdasInMainDexList() throws IOException, CompilationFailedException {
+  public void testD8DesugaredLambdasInMainDexList() throws Exception {
     Path mainDexList = writeTextToTempFile(testClassMainDexName);
     TestMainDexListConsumer consumer = new TestMainDexListConsumer();
     testForD8()
@@ -134,17 +126,16 @@
   }
 
   @Test
-  public void testD8DesugaredLambdasInMainDexListMerging()
-      throws IOException, CompilationFailedException {
+  public void testD8DesugaredLambdasInMainDexListMerging() throws Exception {
     Path mainDexList = writeTextToTempFile(testClassMainDexName);
-    Path dexOutput = temp.getRoot().toPath().resolve("classes.zip");
     // Build intermediate dex code first.
-    testForD8()
-        .setMinApi(AndroidApiLevel.K)
-        .addProgramClasses(ImmutableList.of(TestClass.class, MyConsumer.class))
-        .setIntermediate(true)
-        .setProgramConsumer(new ArchiveConsumer(dexOutput))
-        .compile();
+    Path dexOutput =
+        testForD8()
+            .setMinApi(AndroidApiLevel.K)
+            .addProgramClasses(ImmutableList.of(TestClass.class, MyConsumer.class))
+            .setIntermediate(true)
+            .compile()
+            .writeToZip();
     // Now test that when merging with a main dex list it is correctly updated.
     TestMainDexListConsumer consumer = new TestMainDexListConsumer();
     testForD8()