Parameterize compilation failure tests and update expectations.

Change-Id: Iff2267148444e69d090036e7fc9c6e902689d677
diff --git a/src/test/java/com/android/tools/r8/d8/DuplicateAnnotationTest.java b/src/test/java/com/android/tools/r8/d8/DuplicateAnnotationTest.java
index 68bcc37..962cec0 100644
--- a/src/test/java/com/android/tools/r8/d8/DuplicateAnnotationTest.java
+++ b/src/test/java/com/android/tools/r8/d8/DuplicateAnnotationTest.java
@@ -7,10 +7,13 @@
 import static org.hamcrest.CoreMatchers.containsString;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.Assert.fail;
+import static org.junit.Assume.assumeTrue;
 
 import com.android.tools.r8.CompilationFailedException;
 import com.android.tools.r8.DexFilePerClassFileConsumer.ArchiveConsumer;
 import com.android.tools.r8.TestBase;
+import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersCollection;
 import com.android.tools.r8.ToolHelper;
 import com.android.tools.r8.utils.StringUtils;
 import com.android.tools.r8.utils.codeinspector.AnnotationSubject;
@@ -24,6 +27,8 @@
 import java.lang.annotation.Target;
 import java.nio.file.Path;
 import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
 
 @Retention(RetentionPolicy.CLASS)
 @Target({ElementType.METHOD, ElementType.FIELD})
@@ -58,16 +63,30 @@
   }
 }
 
+@RunWith(Parameterized.class)
 public class DuplicateAnnotationTest extends TestBase {
 
+  private final TestParameters parameters;
+
+  @Parameterized.Parameters(name = "{0}")
+  public static TestParametersCollection data() {
+    return getTestParameters().withAllRuntimes().build();
+  }
+
+  public DuplicateAnnotationTest(TestParameters parameters) {
+    this.parameters = parameters;
+  }
+
   @Test
   public void testMergingViaD8() throws Exception {
+    assumeTrue("D8 tests.", parameters.isDexRuntime());
     Path dex1 = temp.newFile("classes1.zip").toPath().toAbsolutePath();
     CodeInspector inspector =
         testForD8()
             .addProgramClasses(TestA.class)
             .setIntermediate(true)
             .setProgramConsumer(new ArchiveConsumer(dex1))
+            .setMinApi(parameters.getRuntime())
             .compile()
             .inspector();
 
@@ -85,6 +104,7 @@
             .addProgramClasses(TestB.class)
             .setIntermediate(true)
             .setProgramConsumer(new ArchiveConsumer(dex2))
+            .setMinApi(parameters.getRuntime())
             .compile()
             .inspector();
     ClassSubject testB = inspector.clazz(TestB.class);
@@ -109,17 +129,20 @@
     testForD8()
         .addProgramFiles(dex1, dex2)
         .setProgramConsumer(new ArchiveConsumer(merged))
+        .setMinApi(parameters.getRuntime())
         .compile();
   }
 
   @Test
   public void testDuplicationInInput() throws Exception {
+    assumeTrue("D8 tests.", parameters.isDexRuntime());
     Path dex1 = temp.newFile("classes1.zip").toPath().toAbsolutePath();
     try {
       testForD8()
           .addProgramClassFileData(TestADump.dump())
           .setIntermediate(true)
           .setProgramConsumer(new ArchiveConsumer(dex1))
+          .setMinApi(parameters.getRuntime())
           .compile();
       fail("Expected to fail due to multiple annotations");
     } catch (CompilationFailedException e) {
@@ -130,6 +153,7 @@
 
   @Test
   public void testJVMOutput() throws Exception {
+    assumeTrue("Only run JVM reference on CF runtimes", parameters.isCfRuntime());
     testForJvm()
         .addProgramClassFileData(
             TestADump.dump(),
diff --git a/src/test/java/com/android/tools/r8/d8/MemberAndLocalClassTest.java b/src/test/java/com/android/tools/r8/d8/MemberAndLocalClassTest.java
index e4afafd..d764204 100644
--- a/src/test/java/com/android/tools/r8/d8/MemberAndLocalClassTest.java
+++ b/src/test/java/com/android/tools/r8/d8/MemberAndLocalClassTest.java
@@ -10,19 +10,36 @@
 
 import com.android.tools.r8.CompilationFailedException;
 import com.android.tools.r8.TestBase;
+import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersCollection;
 import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
 import org.objectweb.asm.ClassWriter;
 import org.objectweb.asm.Label;
 import org.objectweb.asm.MethodVisitor;
 import org.objectweb.asm.Opcodes;
 
+@RunWith(Parameterized.class)
 public class MemberAndLocalClassTest extends TestBase {
 
+  private final TestParameters parameters;
+
+  @Parameterized.Parameters(name = "{0}")
+  public static TestParametersCollection data() {
+    return getTestParameters().withDexRuntimes().build();
+  }
+
+  public MemberAndLocalClassTest(TestParameters parameters) {
+    this.parameters = parameters;
+  }
+
   @Test
   public void testD8() throws Exception {
     try {
       testForD8()
           .addProgramClassFileData(Dump.dump())
+          .setMinApi(parameters.getRuntime())
           .compile();
       fail("Expected to fail due to invalid EnclosingMethod attribute");
     } catch (CompilationFailedException e) {
diff --git a/src/test/java/com/android/tools/r8/d8/NonNamedMemberClassTest.java b/src/test/java/com/android/tools/r8/d8/NonNamedMemberClassTest.java
index 4ba6754..7cf5867 100644
--- a/src/test/java/com/android/tools/r8/d8/NonNamedMemberClassTest.java
+++ b/src/test/java/com/android/tools/r8/d8/NonNamedMemberClassTest.java
@@ -5,21 +5,46 @@
 
 import static org.hamcrest.CoreMatchers.containsString;
 
+import com.android.tools.r8.D8TestCompileResult;
 import com.android.tools.r8.TestBase;
+import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersCollection;
+import com.android.tools.r8.ToolHelper.DexVm;
 import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
 import org.objectweb.asm.ClassWriter;
 import org.objectweb.asm.Label;
 import org.objectweb.asm.MethodVisitor;
 import org.objectweb.asm.Opcodes;
 
+@RunWith(Parameterized.class)
 public class NonNamedMemberClassTest extends TestBase {
 
+  private final TestParameters parameters;
+
+  @Parameterized.Parameters(name = "{0}")
+  public static TestParametersCollection data() {
+    return getTestParameters().withDexRuntimes().build();
+  }
+
+  public NonNamedMemberClassTest(TestParameters parameters) {
+    this.parameters = parameters;
+  }
+
   @Test
   public void testD8() throws Exception {
-    testForD8()
-        .addProgramClassFileData(Dump.dump())
-        .compile()
-        .assertOnlyInfos()
+    D8TestCompileResult result =
+        testForD8()
+            .addProgramClassFileData(Dump.dump())
+            .setMinApi(parameters.getRuntime())
+            .compile();
+    if (parameters.getRuntime().asDex().getVm().isOlderThanOrEqual(DexVm.ART_6_0_1_HOST)) {
+      result.assertWarningMessageThatMatches(containsString("desugaring"));
+    } else {
+      result.assertOnlyInfos();
+    }
+    result
         .assertInfoMessageThatMatches(containsString("InnerClasses attributes are recovered"))
         .assertInfoMessageThatMatches(containsString("inner: LWebContext$Companion;"))
         .assertInfoMessageThatMatches(containsString("outer: LWebContext;"))