Chained calls in Record tests

Introduced test API for inspect with options consumer
and enableJVMPreview to be able to express the Record
test with chained calls

Change-Id: Id67b4e1f0cdab7e3f9b3a93c2ed0f686681e14b4
diff --git a/src/test/java/com/android/tools/r8/TestCompileResult.java b/src/test/java/com/android/tools/r8/TestCompileResult.java
index b80c482..69bf834 100644
--- a/src/test/java/com/android/tools/r8/TestCompileResult.java
+++ b/src/test/java/com/android/tools/r8/TestCompileResult.java
@@ -283,6 +283,14 @@
     return self();
   }
 
+  public CR enableJVMPreview() {
+    assert getBackend() == Backend.CF;
+    if (!vmArguments.contains("--enable-preview")) {
+      vmArguments.add("--enable-preview");
+    }
+    return self();
+  }
+
   public CR enableRuntimeAssertions(boolean enable) {
     if (getBackend() == Backend.CF) {
       if (enable) {
@@ -360,6 +368,13 @@
     return self();
   }
 
+  public <E extends Throwable> CR inspectWithOptions(
+      ThrowingConsumer<CodeInspector, E> consumer, Consumer<InternalOptions> debugOptionsConsumer)
+      throws IOException, E {
+    consumer.accept(inspector(debugOptionsConsumer));
+    return self();
+  }
+
   public CR assertNoMessages() {
     getDiagnosticMessages().assertNoMessages();
     return self();
diff --git a/src/test/java/com/android/tools/r8/desugar/records/EmptyRecordTest.java b/src/test/java/com/android/tools/r8/desugar/records/EmptyRecordTest.java
index 10e2d10..817114e 100644
--- a/src/test/java/com/android/tools/r8/desugar/records/EmptyRecordTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/records/EmptyRecordTest.java
@@ -11,7 +11,6 @@
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.TestRuntime.CfRuntime;
 import com.android.tools.r8.utils.StringUtils;
-import java.nio.file.Path;
 import java.util.List;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -63,20 +62,16 @@
   @Test
   public void testR8() throws Exception {
     if (parameters.isCfRuntime()) {
-      Path output =
-          testForR8(parameters.getBackend())
-              .addProgramClassFileData(PROGRAM_DATA)
-              .setMinApi(parameters.getApiLevel())
-              .addKeepRules(RECORD_KEEP_RULE)
-              .addKeepMainRule(MAIN_TYPE)
-              .addLibraryFiles(RecordTestUtils.getJdk15LibraryFiles(temp))
-              .addOptionsModification(TestingOptions::allowExperimentClassFileVersion)
-              .compile()
-              .writeToZip();
-      RecordTestUtils.assertRecordsAreRecords(output);
-      testForJvm()
-          .addRunClasspathFiles(output)
-          .enablePreview()
+      testForR8(parameters.getBackend())
+          .addProgramClassFileData(PROGRAM_DATA)
+          .setMinApi(parameters.getApiLevel())
+          .addKeepRules(RECORD_KEEP_RULE)
+          .addKeepMainRule(MAIN_TYPE)
+          .addLibraryFiles(RecordTestUtils.getJdk15LibraryFiles(temp))
+          .addOptionsModification(TestingOptions::allowExperimentClassFileVersion)
+          .compile()
+          .inspect(RecordTestUtils::assertRecordsAreRecords)
+          .enableJVMPreview()
           .run(parameters.getRuntime(), MAIN_TYPE)
           .assertSuccessWithOutput(EXPECTED_RESULT);
       return;
diff --git a/src/test/java/com/android/tools/r8/desugar/records/RecordInstanceOfTest.java b/src/test/java/com/android/tools/r8/desugar/records/RecordInstanceOfTest.java
index d6639de..6d0f1a3 100644
--- a/src/test/java/com/android/tools/r8/desugar/records/RecordInstanceOfTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/records/RecordInstanceOfTest.java
@@ -11,7 +11,6 @@
 import com.android.tools.r8.TestRuntime.CfRuntime;
 import com.android.tools.r8.utils.InternalOptions.TestingOptions;
 import com.android.tools.r8.utils.StringUtils;
-import java.nio.file.Path;
 import java.util.List;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -55,7 +54,6 @@
         .addProgramClassFileData(PROGRAM_DATA)
         .setMinApi(parameters.getApiLevel())
         .addOptionsModification(TestingOptions::allowExperimentClassFileVersion)
-        
         .compile()
         .run(parameters.getRuntime(), MAIN_TYPE)
         .assertSuccessWithOutput(EXPECTED_RESULT);
@@ -64,20 +62,16 @@
   @Test
   public void testR8() throws Exception {
     if (parameters.isCfRuntime()) {
-      Path output =
-          testForR8(parameters.getBackend())
-              .addProgramClassFileData(PROGRAM_DATA)
-              .setMinApi(parameters.getApiLevel())
-              .addKeepRules(RECORD_KEEP_RULE)
-              .addKeepMainRule(MAIN_TYPE)
-              .addLibraryFiles(RecordTestUtils.getJdk15LibraryFiles(temp))
-              .addOptionsModification(TestingOptions::allowExperimentClassFileVersion)
-              .compile()
-              .writeToZip();
-      RecordTestUtils.assertRecordsAreRecords(output);
-      testForJvm()
-          .addRunClasspathFiles(output)
-          .enablePreview()
+      testForR8(parameters.getBackend())
+          .addProgramClassFileData(PROGRAM_DATA)
+          .setMinApi(parameters.getApiLevel())
+          .addKeepRules(RECORD_KEEP_RULE)
+          .addKeepMainRule(MAIN_TYPE)
+          .addLibraryFiles(RecordTestUtils.getJdk15LibraryFiles(temp))
+          .addOptionsModification(TestingOptions::allowExperimentClassFileVersion)
+          .compile()
+          .inspect(RecordTestUtils::assertRecordsAreRecords)
+          .enableJVMPreview()
           .run(parameters.getRuntime(), MAIN_TYPE)
           .assertSuccessWithOutput(EXPECTED_RESULT);
       return;
diff --git a/src/test/java/com/android/tools/r8/desugar/records/RecordInvokeCustomTest.java b/src/test/java/com/android/tools/r8/desugar/records/RecordInvokeCustomTest.java
index dac4ff8..3326483 100644
--- a/src/test/java/com/android/tools/r8/desugar/records/RecordInvokeCustomTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/records/RecordInvokeCustomTest.java
@@ -11,7 +11,6 @@
 import com.android.tools.r8.TestRuntime.CfRuntime;
 import com.android.tools.r8.utils.InternalOptions.TestingOptions;
 import com.android.tools.r8.utils.StringUtils;
-import java.nio.file.Path;
 import java.util.List;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -68,7 +67,6 @@
         .addProgramClassFileData(PROGRAM_DATA)
         .setMinApi(parameters.getApiLevel())
         .addOptionsModification(TestingOptions::allowExperimentClassFileVersion)
-        
         .compile()
         .run(parameters.getRuntime(), MAIN_TYPE)
         .assertSuccessWithOutput(EXPECTED_RESULT);
@@ -77,20 +75,16 @@
   @Test
   public void testR8() throws Exception {
     if (parameters.isCfRuntime()) {
-      Path output =
-          testForR8(parameters.getBackend())
-              .addProgramClassFileData(PROGRAM_DATA)
-              .setMinApi(parameters.getApiLevel())
-              .addKeepRules(RECORD_KEEP_RULE)
-              .addKeepMainRule(MAIN_TYPE)
-              .addLibraryFiles(RecordTestUtils.getJdk15LibraryFiles(temp))
-              .addOptionsModification(TestingOptions::allowExperimentClassFileVersion)
-              .compile()
-              .writeToZip();
-      RecordTestUtils.assertRecordsAreRecords(output);
-      testForJvm()
-          .addRunClasspathFiles(output)
-          .enablePreview()
+      testForR8(parameters.getBackend())
+          .addProgramClassFileData(PROGRAM_DATA)
+          .setMinApi(parameters.getApiLevel())
+          .addKeepRules(RECORD_KEEP_RULE)
+          .addKeepMainRule(MAIN_TYPE)
+          .addLibraryFiles(RecordTestUtils.getJdk15LibraryFiles(temp))
+          .addOptionsModification(TestingOptions::allowExperimentClassFileVersion)
+          .compile()
+          .inspect(RecordTestUtils::assertRecordsAreRecords)
+          .enableJVMPreview()
           .run(parameters.getRuntime(), MAIN_TYPE)
           .assertSuccessWithOutput(EXPECTED_RESULT);
       return;
diff --git a/src/test/java/com/android/tools/r8/desugar/records/RecordReflectionTest.java b/src/test/java/com/android/tools/r8/desugar/records/RecordReflectionTest.java
index e67ccd5..cad3c5b 100644
--- a/src/test/java/com/android/tools/r8/desugar/records/RecordReflectionTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/records/RecordReflectionTest.java
@@ -11,7 +11,6 @@
 import com.android.tools.r8.TestRuntime.CfRuntime;
 import com.android.tools.r8.utils.InternalOptions.TestingOptions;
 import com.android.tools.r8.utils.StringUtils;
-import java.nio.file.Path;
 import java.util.List;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -59,20 +58,16 @@
 
   @Test
   public void testR8Cf() throws Exception {
-    Path output =
-        testForR8(parameters.getBackend())
-            .addProgramClassFileData(PROGRAM_DATA)
-            .setMinApi(parameters.getApiLevel())
-            .addKeepRules(RECORD_KEEP_RULE)
-            .addKeepMainRule(MAIN_TYPE)
-            .addLibraryFiles(RecordTestUtils.getJdk15LibraryFiles(temp))
-            .addOptionsModification(TestingOptions::allowExperimentClassFileVersion)
-            .compile()
-            .writeToZip();
-    RecordTestUtils.assertRecordsAreRecords(output);
-    testForJvm()
-        .addRunClasspathFiles(output)
-        .enablePreview()
+    testForR8(parameters.getBackend())
+        .addProgramClassFileData(PROGRAM_DATA)
+        .setMinApi(parameters.getApiLevel())
+        .addKeepRules(RECORD_KEEP_RULE)
+        .addKeepMainRule(MAIN_TYPE)
+        .addLibraryFiles(RecordTestUtils.getJdk15LibraryFiles(temp))
+        .addOptionsModification(TestingOptions::allowExperimentClassFileVersion)
+        .compile()
+        .inspect(RecordTestUtils::assertRecordsAreRecords)
+        .enableJVMPreview()
         .run(parameters.getRuntime(), MAIN_TYPE)
         .assertSuccessWithOutput(EXPECTED_RESULT);
   }
diff --git a/src/test/java/com/android/tools/r8/desugar/records/RecordTestUtils.java b/src/test/java/com/android/tools/r8/desugar/records/RecordTestUtils.java
index 837ee72..224a873 100644
--- a/src/test/java/com/android/tools/r8/desugar/records/RecordTestUtils.java
+++ b/src/test/java/com/android/tools/r8/desugar/records/RecordTestUtils.java
@@ -100,8 +100,7 @@
     return result.toArray(new byte[0][0]);
   }
 
-  public static void assertRecordsAreRecords(Path output) throws IOException {
-    CodeInspector inspector = new CodeInspector(output);
+  public static void assertRecordsAreRecords(CodeInspector inspector) {
     for (FoundClassSubject clazz : inspector.allClasses()) {
       if (clazz.getDexProgramClass().superType.toString().equals("java.lang.Record")) {
         assertTrue(clazz.getDexProgramClass().isRecord());
@@ -109,10 +108,7 @@
     }
   }
 
-  public static void assertNoJavaLangRecord(Path output) throws IOException {
-    CodeInspector inspector =
-        new CodeInspector(
-            output, options -> options.testing.disableRecordApplicationReaderMap = true);
+  public static void assertNoJavaLangRecord(CodeInspector inspector) {
     assertThat(inspector.clazz("java.lang.Record"), isAbsent());
   }
 }
diff --git a/src/test/java/com/android/tools/r8/desugar/records/RecordWithMembersTest.java b/src/test/java/com/android/tools/r8/desugar/records/RecordWithMembersTest.java
index cff0cab..4b2c62a 100644
--- a/src/test/java/com/android/tools/r8/desugar/records/RecordWithMembersTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/records/RecordWithMembersTest.java
@@ -11,7 +11,6 @@
 import com.android.tools.r8.TestRuntime.CfRuntime;
 import com.android.tools.r8.utils.InternalOptions.TestingOptions;
 import com.android.tools.r8.utils.StringUtils;
-import java.nio.file.Path;
 import java.util.List;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -65,20 +64,16 @@
   @Test
   public void testR8() throws Exception {
     if (parameters.isCfRuntime()) {
-      Path output =
-          testForR8(parameters.getBackend())
-              .addProgramClassFileData(PROGRAM_DATA)
-              .setMinApi(parameters.getApiLevel())
-              .addKeepRules(RECORD_KEEP_RULE)
-              .addKeepMainRule(MAIN_TYPE)
-              .addLibraryFiles(RecordTestUtils.getJdk15LibraryFiles(temp))
-              .addOptionsModification(TestingOptions::allowExperimentClassFileVersion)
-              .compile()
-              .writeToZip();
-      RecordTestUtils.assertRecordsAreRecords(output);
-      testForJvm()
-          .addRunClasspathFiles(output)
-          .enablePreview()
+      testForR8(parameters.getBackend())
+          .addProgramClassFileData(PROGRAM_DATA)
+          .setMinApi(parameters.getApiLevel())
+          .addKeepRules(RECORD_KEEP_RULE)
+          .addKeepMainRule(MAIN_TYPE)
+          .addLibraryFiles(RecordTestUtils.getJdk15LibraryFiles(temp))
+          .addOptionsModification(TestingOptions::allowExperimentClassFileVersion)
+          .compile()
+          .inspect(RecordTestUtils::assertRecordsAreRecords)
+          .enableJVMPreview()
           .run(parameters.getRuntime(), MAIN_TYPE)
           .assertSuccessWithOutput(EXPECTED_RESULT);
       return;
diff --git a/src/test/java/com/android/tools/r8/desugar/records/SimpleRecordTest.java b/src/test/java/com/android/tools/r8/desugar/records/SimpleRecordTest.java
index 3656545..ad338ed 100644
--- a/src/test/java/com/android/tools/r8/desugar/records/SimpleRecordTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/records/SimpleRecordTest.java
@@ -6,14 +6,11 @@
 
 import static com.android.tools.r8.desugar.records.RecordTestUtils.RECORD_KEEP_RULE;
 
-import com.android.tools.r8.D8TestCompileResult;
-import com.android.tools.r8.R8TestCompileResult;
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.TestRuntime.CfRuntime;
 import com.android.tools.r8.utils.InternalOptions.TestingOptions;
 import com.android.tools.r8.utils.StringUtils;
-import java.nio.file.Path;
 import java.util.List;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -54,81 +51,79 @@
           .run(parameters.getRuntime(), MAIN_TYPE)
           .assertSuccessWithOutput(EXPECTED_RESULT);
     }
-    D8TestCompileResult compile =
-        testForD8(parameters.getBackend())
-            .addProgramClassFileData(PROGRAM_DATA)
-            .setMinApi(parameters.getApiLevel())
-            .addOptionsModification(TestingOptions::allowExperimentClassFileVersion)
-            .compile();
-    RecordTestUtils.assertNoJavaLangRecord(compile.writeToZip());
-    compile.run(parameters.getRuntime(), MAIN_TYPE).assertSuccessWithOutput(EXPECTED_RESULT);
+    testForD8(parameters.getBackend())
+        .addProgramClassFileData(PROGRAM_DATA)
+        .setMinApi(parameters.getApiLevel())
+        .addOptionsModification(TestingOptions::allowExperimentClassFileVersion)
+        .compile()
+        .inspectWithOptions(
+            RecordTestUtils::assertNoJavaLangRecord,
+            options -> options.testing.disableRecordApplicationReaderMap = true)
+        .run(parameters.getRuntime(), MAIN_TYPE)
+        .assertSuccessWithOutput(EXPECTED_RESULT);
   }
 
   @Test
   public void testR8() throws Exception {
     if (parameters.isCfRuntime()) {
-      Path output =
-          testForR8(parameters.getBackend())
-              .addProgramClassFileData(PROGRAM_DATA)
-              .setMinApi(parameters.getApiLevel())
-              .addKeepRules(RECORD_KEEP_RULE)
-              .addKeepMainRule(MAIN_TYPE)
-              .addLibraryFiles(RecordTestUtils.getJdk15LibraryFiles(temp))
-              .addOptionsModification(TestingOptions::allowExperimentClassFileVersion)
-              .compile()
-              .writeToZip();
-      RecordTestUtils.assertRecordsAreRecords(output);
-      testForJvm()
-          .addRunClasspathFiles(output)
-          .enablePreview()
+      testForR8(parameters.getBackend())
+          .addProgramClassFileData(PROGRAM_DATA)
+          .setMinApi(parameters.getApiLevel())
+          .addKeepRules(RECORD_KEEP_RULE)
+          .addKeepMainRule(MAIN_TYPE)
+          .addLibraryFiles(RecordTestUtils.getJdk15LibraryFiles(temp))
+          .addOptionsModification(TestingOptions::allowExperimentClassFileVersion)
+          .compile()
+          .inspect(RecordTestUtils::assertRecordsAreRecords)
+          .enableJVMPreview()
           .run(parameters.getRuntime(), MAIN_TYPE)
           .assertSuccessWithOutput(EXPECTED_RESULT);
       return;
     }
-    R8TestCompileResult compile =
-        testForR8(parameters.getBackend())
-            .addProgramClassFileData(PROGRAM_DATA)
-            .setMinApi(parameters.getApiLevel())
-            .addKeepRules(RECORD_KEEP_RULE)
-            .addKeepMainRule(MAIN_TYPE)
-            .addOptionsModification(TestingOptions::allowExperimentClassFileVersion)
-            .compile();
-    RecordTestUtils.assertNoJavaLangRecord(compile.writeToZip());
-    compile.run(parameters.getRuntime(), MAIN_TYPE).assertSuccessWithOutput(EXPECTED_RESULT);
+    testForR8(parameters.getBackend())
+        .addProgramClassFileData(PROGRAM_DATA)
+        .setMinApi(parameters.getApiLevel())
+        .addKeepRules(RECORD_KEEP_RULE)
+        .addKeepMainRule(MAIN_TYPE)
+        .addOptionsModification(TestingOptions::allowExperimentClassFileVersion)
+        .compile()
+        .inspectWithOptions(
+            RecordTestUtils::assertNoJavaLangRecord,
+            options -> options.testing.disableRecordApplicationReaderMap = true)
+        .run(parameters.getRuntime(), MAIN_TYPE)
+        .assertSuccessWithOutput(EXPECTED_RESULT);
   }
 
   @Test
   public void testR8NoMinification() throws Exception {
     if (parameters.isCfRuntime()) {
-      Path output =
-          testForR8(parameters.getBackend())
-              .addProgramClassFileData(PROGRAM_DATA)
-              .noMinification()
-              .setMinApi(parameters.getApiLevel())
-              .addKeepRules(RECORD_KEEP_RULE)
-              .addKeepMainRule(MAIN_TYPE)
-              .addLibraryFiles(RecordTestUtils.getJdk15LibraryFiles(temp))
-              .addOptionsModification(TestingOptions::allowExperimentClassFileVersion)
-              .compile()
-              .writeToZip();
-      RecordTestUtils.assertRecordsAreRecords(output);
-      testForJvm()
-          .addRunClasspathFiles(output)
-          .enablePreview()
+      testForR8(parameters.getBackend())
+          .addProgramClassFileData(PROGRAM_DATA)
+          .noMinification()
+          .setMinApi(parameters.getApiLevel())
+          .addKeepRules(RECORD_KEEP_RULE)
+          .addKeepMainRule(MAIN_TYPE)
+          .addLibraryFiles(RecordTestUtils.getJdk15LibraryFiles(temp))
+          .addOptionsModification(TestingOptions::allowExperimentClassFileVersion)
+          .compile()
+          .inspect(RecordTestUtils::assertRecordsAreRecords)
+          .enableJVMPreview()
           .run(parameters.getRuntime(), MAIN_TYPE)
           .assertSuccessWithOutput(EXPECTED_RESULT);
       return;
     }
-    R8TestCompileResult compile =
-        testForR8(parameters.getBackend())
-            .addProgramClassFileData(PROGRAM_DATA)
-            .noMinification()
-            .setMinApi(parameters.getApiLevel())
-            .addKeepRules(RECORD_KEEP_RULE)
-            .addKeepMainRule(MAIN_TYPE)
-            .addOptionsModification(TestingOptions::allowExperimentClassFileVersion)
-            .compile();
-    RecordTestUtils.assertNoJavaLangRecord(compile.writeToZip());
-    compile.run(parameters.getRuntime(), MAIN_TYPE).assertSuccessWithOutput(EXPECTED_RESULT);
+    testForR8(parameters.getBackend())
+        .addProgramClassFileData(PROGRAM_DATA)
+        .noMinification()
+        .setMinApi(parameters.getApiLevel())
+        .addKeepRules(RECORD_KEEP_RULE)
+        .addKeepMainRule(MAIN_TYPE)
+        .addOptionsModification(TestingOptions::allowExperimentClassFileVersion)
+        .compile()
+        .inspectWithOptions(
+            RecordTestUtils::assertNoJavaLangRecord,
+            options -> options.testing.disableRecordApplicationReaderMap = true)
+        .run(parameters.getRuntime(), MAIN_TYPE)
+        .assertSuccessWithOutput(EXPECTED_RESULT);
   }
 }