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