Refactor Cf to Cf test
Add base class with utilities.
Bug: 147485959
Change-Id: I1ee076ce3c0091b0aa3c089c7c22649b9dfc4448
diff --git a/src/test/java/com/android/tools/r8/D8TestBuilder.java b/src/test/java/com/android/tools/r8/D8TestBuilder.java
index d6732bd..edfb00c 100644
--- a/src/test/java/com/android/tools/r8/D8TestBuilder.java
+++ b/src/test/java/com/android/tools/r8/D8TestBuilder.java
@@ -19,12 +19,12 @@
extends TestCompilerBuilder<
D8Command, Builder, D8TestCompileResult, D8TestRunResult, D8TestBuilder> {
- private D8TestBuilder(TestState state, Builder builder) {
- super(state, builder, Backend.DEX);
+ private D8TestBuilder(TestState state, Builder builder, Backend backend) {
+ super(state, builder, backend);
}
- public static D8TestBuilder create(TestState state) {
- return new D8TestBuilder(state, D8Command.builder(state.getDiagnosticsHandler()));
+ public static D8TestBuilder create(TestState state, Backend backend) {
+ return new D8TestBuilder(state, D8Command.builder(state.getDiagnosticsHandler()), backend);
}
@Override
diff --git a/src/test/java/com/android/tools/r8/TestBase.java b/src/test/java/com/android/tools/r8/TestBase.java
index 7c3ddff..7938666 100644
--- a/src/test/java/com/android/tools/r8/TestBase.java
+++ b/src/test/java/com/android/tools/r8/TestBase.java
@@ -134,8 +134,12 @@
return ExternalR8TestBuilder.create(new TestState(temp), backend, runtime);
}
+ public static D8TestBuilder testForD8(TemporaryFolder temp, Backend backend) {
+ return D8TestBuilder.create(new TestState(temp), backend);
+ }
+
public static D8TestBuilder testForD8(TemporaryFolder temp) {
- return D8TestBuilder.create(new TestState(temp));
+ return D8TestBuilder.create(new TestState(temp), Backend.DEX);
}
public static DXTestBuilder testForDX(TemporaryFolder temp) {
@@ -171,7 +175,11 @@
}
public D8TestBuilder testForD8() {
- return testForD8(temp);
+ return testForD8(temp, Backend.DEX);
+ }
+
+ public D8TestBuilder testForD8(Backend backend) {
+ return testForD8(temp, backend);
}
public DXTestBuilder testForDX() {
diff --git a/src/test/java/com/android/tools/r8/TestDiagnosticMessagesImpl.java b/src/test/java/com/android/tools/r8/TestDiagnosticMessagesImpl.java
index 44f046b..eba971d 100644
--- a/src/test/java/com/android/tools/r8/TestDiagnosticMessagesImpl.java
+++ b/src/test/java/com/android/tools/r8/TestDiagnosticMessagesImpl.java
@@ -50,7 +50,11 @@
@Override
public void warning(Diagnostic warning) {
- warnings.add(warning);
+ // When testing D8 with class file output this warning is always emitted. Discard this, as
+ // for tests this is not relevant.
+ if (!warning.equals("Compiling to Java class files with D8 is not officially supported")) {
+ warnings.add(warning);
+ }
}
@Override
@@ -58,14 +62,17 @@
errors.add(error);
}
+ @Override
public List<Diagnostic> getInfos() {
return infos;
}
+ @Override
public List<Diagnostic> getWarnings() {
return warnings;
}
+ @Override
public List<Diagnostic> getErrors() {
return errors;
}
@@ -80,6 +87,7 @@
messages.size());
}
+ @Override
public TestDiagnosticMessages assertNoMessages() {
assertEmpty("info", getInfos());
assertEmpty("warning", getWarnings());
@@ -87,6 +95,7 @@
return this;
}
+ @Override
public TestDiagnosticMessages assertOnlyInfos() {
assertNotEquals(0, getInfos().size());
assertEmpty("warning", getWarnings());
@@ -94,6 +103,7 @@
return this;
}
+ @Override
public TestDiagnosticMessages assertOnlyWarnings() {
assertEmpty("info", getInfos());
assertNotEquals(0, getWarnings().size());
@@ -101,6 +111,7 @@
return this;
}
+ @Override
public TestDiagnosticMessages assertOnlyErrors() {
assertEmpty("info", getInfos());
assertEmpty("warning", getWarnings());
@@ -108,16 +119,19 @@
return this;
}
+ @Override
public TestDiagnosticMessages assertInfosCount(int count) {
assertEquals(count, getInfos().size());
return this;
}
+ @Override
public TestDiagnosticMessages assertWarningsCount(int count) {
assertEquals(count, getWarnings().size());
return this;
}
+ @Override
public TestDiagnosticMessages assertErrorsCount(int count) {
assertEquals(count, getErrors().size());
return this;
diff --git a/src/test/java/com/android/tools/r8/desugar/DesugarToClassFile.java b/src/test/java/com/android/tools/r8/desugar/DesugarToClassFile.java
index ec742ee..e8ac332 100644
--- a/src/test/java/com/android/tools/r8/desugar/DesugarToClassFile.java
+++ b/src/test/java/com/android/tools/r8/desugar/DesugarToClassFile.java
@@ -4,16 +4,11 @@
package com.android.tools.r8.desugar;
-import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
-import static org.hamcrest.CoreMatchers.containsString;
-import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.Assert.assertTrue;
-import com.android.tools.r8.OutputMode;
import com.android.tools.r8.TestBase;
-import com.android.tools.r8.TestDiagnosticMessages;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestParametersCollection;
-import com.android.tools.r8.utils.codeinspector.ClassSubject;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
import java.nio.file.Path;
import org.junit.Test;
@@ -23,45 +18,43 @@
@RunWith(Parameterized.class)
public class DesugarToClassFile extends TestBase {
- private final TestParameters parameters;
-
@Parameterized.Parameters(name = "{0}")
public static TestParametersCollection data() {
return getTestParameters().withAllRuntimes().withAllApiLevelsAlsoForCf().build();
}
+ private final TestParameters parameters;
+
public DesugarToClassFile(TestParameters parameters) {
this.parameters = parameters;
}
- private void checkSomething(CodeInspector inspector) {
- ClassSubject classSubject = inspector.clazz(TestClass.class);
- assertThat(classSubject, isPresent());
+ private void checkHasCompanionClass(CodeInspector inspector) {
+ assertTrue(
+ inspector.allClasses().stream()
+ .anyMatch(subject -> subject.getOriginalName().endsWith("$-CC")));
}
- private void checkDiagnostics(TestDiagnosticMessages messages) {
- messages.assertOnlyWarnings();
- messages.assertWarningsCount(1);
- assertThat(
- messages.getWarnings().get(0).getDiagnosticMessage(),
- containsString("not officially supported"));
+ private void checkHasLambdaClass(CodeInspector inspector) {
+ assertTrue(
+ inspector.allClasses().stream()
+ .anyMatch(subject -> subject.getOriginalName().contains("-$$Lambda$")));
}
@Test
public void test() throws Exception {
// Use D8 to desugar with Java classfile output.
Path jar =
- testForD8()
+ testForD8(Backend.CF)
.addInnerClasses(DesugarToClassFile.class)
.setMinApi(parameters.getApiLevel())
- .setOutputMode(OutputMode.ClassFile)
.compile()
- .inspectDiagnosticMessages(this::checkDiagnostics)
- .inspect(this::checkSomething)
+ .inspect(this::checkHasCompanionClass)
+ .inspect(this::checkHasLambdaClass)
.writeToZip();
if (parameters.getRuntime().isCf()) {
- // Run on the JVM
+ // Run on the JVM.
testForJvm()
.addProgramFiles(jar)
.run(parameters.getRuntime(), TestClass.class)
@@ -71,8 +64,8 @@
// Convert to DEX without desugaring.
testForD8()
.addProgramFiles(jar)
- .setEnableDesugaring(false)
.setMinApi(parameters.getApiLevel())
+ .setEnableDesugaring(false)
.run(parameters.getRuntime(), TestClass.class)
.assertSuccessWithOutputLines("Hello, world!", "I::foo");
}