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;"))