Convert desugared library test

Bug: b:231287675
Change-Id: Icec76d7972028d51f323436c03aff2eb9d444438
diff --git a/src/test/java/com/android/tools/r8/L8TestBuilder.java b/src/test/java/com/android/tools/r8/L8TestBuilder.java
index 3663677..7b84c77 100644
--- a/src/test/java/com/android/tools/r8/L8TestBuilder.java
+++ b/src/test/java/com/android/tools/r8/L8TestBuilder.java
@@ -44,6 +44,7 @@
       StringResource.fromFile(ToolHelper.getDesugarLibJsonForTesting());
   private List<Path> libraryFiles = new ArrayList<>();
   private ProgramConsumer programConsumer;
+  private boolean finalPrefixVerification = true;
 
   private L8TestBuilder(AndroidApiLevel apiLevel, Backend backend, TestState state) {
     this.apiLevel = apiLevel;
@@ -55,6 +56,11 @@
     return new L8TestBuilder(apiLevel, backend, state);
   }
 
+  public L8TestBuilder ignoreFinalPrefixVerification() {
+    finalPrefixVerification = false;
+    return this;
+  }
+
   public L8TestBuilder addProgramFiles(Collection<Path> programFiles) {
     this.additionalProgramFiles.addAll(programFiles);
     return this;
@@ -216,13 +222,16 @@
             mapping,
             state,
             backend.isCf() ? OutputMode.ClassFile : OutputMode.DexIndexed)
-        .inspect(
-            inspector ->
-                inspector.forAllClasses(
-                    clazz ->
-                        assertTrue(
-                            clazz.getFinalName().startsWith("j$.")
-                                || clazz.getFinalName().startsWith("java."))));
+        .applyIf(
+            finalPrefixVerification,
+            compileResult ->
+                compileResult.inspect(
+                    inspector ->
+                        inspector.forAllClasses(
+                            clazz ->
+                                assertTrue(
+                                    clazz.getFinalName().startsWith("j$.")
+                                        || clazz.getFinalName().startsWith("java.")))));
   }
 
   private Collection<Path> getProgramFiles() {
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/ReleasedVersionsSmokeTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/ReleasedVersionsSmokeTest.java
index 44625b1..a343168 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/ReleasedVersionsSmokeTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/ReleasedVersionsSmokeTest.java
@@ -4,12 +4,18 @@
 
 package com.android.tools.r8.desugar.desugaredlibrary;
 
-import com.android.tools.r8.CompilationMode;
-import com.android.tools.r8.LibraryDesugaringTestConfiguration;
-import com.android.tools.r8.LibraryDesugaringTestConfiguration.Configuration;
+import static com.android.tools.r8.desugar.desugaredlibrary.test.CompilationSpecification.DEFAULT_SPECIFICATIONS;
+import static com.android.tools.r8.desugar.desugaredlibrary.test.LibraryDesugaringSpecification.JDK11;
+import static com.android.tools.r8.desugar.desugaredlibrary.test.LibraryDesugaringSpecification.JDK11_LEGACY;
+import static com.android.tools.r8.desugar.desugaredlibrary.test.LibraryDesugaringSpecification.JDK11_PATH;
+import static com.android.tools.r8.desugar.desugaredlibrary.test.LibraryDesugaringSpecification.JDK8;
+
 import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.desugar.desugaredlibrary.test.CompilationSpecification;
+import com.android.tools.r8.desugar.desugaredlibrary.test.LibraryDesugaringSpecification;
 import com.android.tools.r8.utils.AndroidApiLevel;
 import com.android.tools.r8.utils.StringUtils;
+import com.google.common.collect.ImmutableList;
 import java.time.Clock;
 import java.time.Duration;
 import java.time.ZoneId;
@@ -22,73 +28,60 @@
 @RunWith(Parameterized.class)
 public class ReleasedVersionsSmokeTest extends DesugaredLibraryTestBase {
 
+  private static final String EXPECTED_OUTPUT =
+      StringUtils.lines(
+          "true",
+          "Caught java.time.format.DateTimeParseException",
+          "true",
+          "1970-01-02T10:17:36.789Z",
+          "GMT",
+          "GMT",
+          "1000",
+          "Hello, world");
+  private static final String EXPECTED_OUTPUT_1_0_9 =
+      StringUtils.lines(
+          "true",
+          "Caught java.time.format.DateTimeParseException",
+          "true",
+          "1970-01-02T10:17:36.789Z",
+          "1000",
+          "Hello, world");
+
   private final TestParameters parameters;
-  private final Configuration configuration;
-  private static final String expectedOutput =
-      StringUtils.lines(
-          "true",
-          "Caught java.time.format.DateTimeParseException",
-          "true",
-          "1970-01-02T10:17:36.789Z",
-          "GMT",
-          "GMT",
-          "1000",
-          "Hello, world");
-  private static final String expectedOutput_1_0_9 =
-      StringUtils.lines(
-          "true",
-          "Caught java.time.format.DateTimeParseException",
-          "true",
-          "1970-01-02T10:17:36.789Z",
-          "1000",
-          "Hello, world");
+  private final CompilationSpecification compilationSpecification;
+  private final LibraryDesugaringSpecification libraryDesugaringSpecification;
 
-  @Parameters(name = "{0}, {1}")
+  @Parameters(name = "{0}, spec: {1}, {2}")
   public static List<Object[]> data() {
+    ImmutableList.Builder<LibraryDesugaringSpecification> builder = ImmutableList.builder();
+    builder.addAll(LibraryDesugaringSpecification.getReleased());
+    builder.add(JDK8, JDK11, JDK11_LEGACY, JDK11_PATH);
     return buildParameters(
-        Configuration.getReleased(),
-        getTestParameters().withDexRuntimes().withApiLevel(AndroidApiLevel.B).build());
+        getTestParameters().withDexRuntimes().withApiLevel(AndroidApiLevel.B).build(),
+        builder.build(),
+        DEFAULT_SPECIFICATIONS);
   }
 
-  public ReleasedVersionsSmokeTest(Configuration configuration, TestParameters parameters) {
-    this.configuration = configuration;
+  public ReleasedVersionsSmokeTest(
+      TestParameters parameters,
+      LibraryDesugaringSpecification libraryDesugaringSpecification,
+      CompilationSpecification compilationSpecification) {
     this.parameters = parameters;
+    this.compilationSpecification = compilationSpecification;
+    this.libraryDesugaringSpecification = libraryDesugaringSpecification;
   }
 
   @Test
-  public void testD8() throws Exception {
-    testForD8()
-        .addLibraryFiles(getLibraryFile())
-        .addInnerClasses(ReleasedVersionsSmokeTest.class)
-        .setMinApi(parameters.getApiLevel())
-        .enableCoreLibraryDesugaring(
-            LibraryDesugaringTestConfiguration.builder()
-                .setMinApi(parameters.getApiLevel())
-                .setConfiguration(configuration)
-                .withKeepRuleConsumer()
-                .setMode(CompilationMode.DEBUG)
-                .build())
-        .run(parameters.getRuntime(), TestClass.class, configuration.name())
-        .assertSuccessWithOutput(
-            configuration != Configuration.RELEASED_1_0_9 ? expectedOutput : expectedOutput_1_0_9);
-  }
-
-  @Test
-  public void testR8() throws Exception {
-    testForR8(parameters.getBackend())
-        .addLibraryFiles(getLibraryFile())
-        .addInnerClasses(ReleasedVersionsSmokeTest.class)
+  public void testSmoke() throws Throwable {
+    testForDesugaredLibrary(parameters, libraryDesugaringSpecification, compilationSpecification)
+        .addInnerClasses(getClass())
         .addKeepMainRule(TestClass.class)
-        .setMinApi(parameters.getApiLevel())
-        .enableCoreLibraryDesugaring(
-            LibraryDesugaringTestConfiguration.builder()
-                .setMinApi(parameters.getApiLevel())
-                .withKeepRuleConsumer()
-                .setMode(CompilationMode.RELEASE)
-                .build())
-        .run(parameters.getRuntime(), TestClass.class, configuration.name())
+        .ignoreL8FinalPrefixVerification()
+        .run(parameters.getRuntime(), TestClass.class, libraryDesugaringSpecification.toString())
         .assertSuccessWithOutput(
-            configuration != Configuration.RELEASED_1_0_9 ? expectedOutput : expectedOutput_1_0_9);
+            libraryDesugaringSpecification != LibraryDesugaringSpecification.RELEASED_1_0_9
+                ? EXPECTED_OUTPUT
+                : EXPECTED_OUTPUT_1_0_9);
   }
 
   static class TestClass {
@@ -106,7 +99,7 @@
           java.util.Date.from(new java.util.Date(123456789).toInstant()).toInstant());
 
       // Support for this was added in 1.0.10.
-      if (!configurationVersion.equals("RELEASED_1_0_9")) {
+      if (!configurationVersion.equals("RELEASED_1.0.9")) {
         java.util.TimeZone timeZone = java.util.TimeZone.getTimeZone(ZoneId.of("GMT"));
         System.out.println(timeZone.getID());
         System.out.println(timeZone.toZoneId().getId());
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/RequiredNonNullWithSupplierTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/RequiredNonNullWithSupplierTest.java
index 5780701..6a957ef 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/RequiredNonNullWithSupplierTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/RequiredNonNullWithSupplierTest.java
@@ -4,8 +4,12 @@
 
 package com.android.tools.r8.desugar.desugaredlibrary;
 
+import static com.android.tools.r8.desugar.desugaredlibrary.test.CompilationSpecification.DEFAULT_SPECIFICATIONS;
+import static com.android.tools.r8.desugar.desugaredlibrary.test.LibraryDesugaringSpecification.getJdk8Jdk11;
+
 import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.utils.BooleanUtils;
+import com.android.tools.r8.desugar.desugaredlibrary.test.CompilationSpecification;
+import com.android.tools.r8.desugar.desugaredlibrary.test.LibraryDesugaringSpecification;
 import com.android.tools.r8.utils.StringUtils;
 import java.util.List;
 import java.util.Objects;
@@ -13,6 +17,7 @@
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
 
 @RunWith(Parameterized.class)
 public class RequiredNonNullWithSupplierTest extends DesugaredLibraryTestBase {
@@ -20,41 +25,31 @@
   private static final String EXPECTED_OUTPUT = StringUtils.lines("SuppliedString2", "OK");
 
   private final TestParameters parameters;
-  private final boolean shrinkDesugaredLibrary;
+  private final CompilationSpecification compilationSpecification;
+  private final LibraryDesugaringSpecification libraryDesugaringSpecification;
 
-  @Parameterized.Parameters(name = "{1}, shrinkDesugaredLibrary: {0}")
+  @Parameters(name = "{0}, spec: {1}, {2}")
   public static List<Object[]> data() {
     return buildParameters(
-        BooleanUtils.values(), getTestParameters().withAllRuntimesAndApiLevels().build());
+        getTestParameters().withAllRuntimes().withAllApiLevelsAlsoForCf().build(),
+        getJdk8Jdk11(),
+        DEFAULT_SPECIFICATIONS);
   }
 
   public RequiredNonNullWithSupplierTest(
-      boolean shrinkDesugaredLibrary, TestParameters parameters) {
-    this.shrinkDesugaredLibrary = shrinkDesugaredLibrary;
+      TestParameters parameters,
+      LibraryDesugaringSpecification libraryDesugaringSpecification,
+      CompilationSpecification compilationSpecification) {
     this.parameters = parameters;
+    this.compilationSpecification = compilationSpecification;
+    this.libraryDesugaringSpecification = libraryDesugaringSpecification;
   }
 
   @Test
-  public void testRequiredNonNullWithSupplierTest() throws Exception {
-    if (parameters.isCfRuntime()) {
-      testForJvm()
-          .addInnerClasses(RequiredNonNullWithSupplierTest.class)
-          .run(parameters.getRuntime(), Executor.class)
-          .assertSuccessWithOutput(EXPECTED_OUTPUT);
-      return;
-    }
-    KeepRuleConsumer keepRuleConsumer = createKeepRuleConsumer(parameters);
-    testForD8()
-        .addLibraryFiles(getLibraryFile())
-        .addInnerClasses(RequiredNonNullWithSupplierTest.class)
-        .enableCoreLibraryDesugaring(parameters.getApiLevel(), keepRuleConsumer)
-        .setMinApi(parameters.getApiLevel())
-        .compile()
-        .addDesugaredCoreLibraryRunClassPath(
-            this::buildDesugaredLibrary,
-            parameters.getApiLevel(),
-            keepRuleConsumer.get(),
-            shrinkDesugaredLibrary)
+  public void testRequireNonNull() throws Throwable {
+    testForDesugaredLibrary(parameters, libraryDesugaringSpecification, compilationSpecification)
+        .addInnerClasses(getClass())
+        .addKeepMainRule(Executor.class)
         .run(parameters.getRuntime(), Executor.class)
         .assertSuccessWithOutput(EXPECTED_OUTPUT);
   }
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/RetargetAndBackportTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/RetargetAndBackportTest.java
index 50f2ce7..6d0d72f 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/RetargetAndBackportTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/RetargetAndBackportTest.java
@@ -7,6 +7,9 @@
 import static org.junit.Assert.assertTrue;
 
 import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestRuntime.CfVm;
+import com.android.tools.r8.ToolHelper;
+import com.android.tools.r8.ToolHelper.DexVm.Version;
 import com.android.tools.r8.ir.desugar.desugaredlibrary.legacyspecification.LegacyDesugaredLibrarySpecification;
 import com.android.tools.r8.ir.desugar.desugaredlibrary.legacyspecification.LegacyRewritingFlags;
 import com.android.tools.r8.ir.desugar.desugaredlibrary.legacyspecification.LegacyTopLevelFlags;
@@ -27,15 +30,16 @@
 @RunWith(Parameterized.class)
 public class RetargetAndBackportTest extends DesugaredLibraryTestBase implements Opcodes {
 
-  Backend backend;
+  private final TestParameters parameters;
 
   @Parameters(name = "{0} {1}")
   public static List<Object[]> data() {
-    return buildParameters(getTestParameters().withNoneRuntime().build(), Backend.values());
+    return buildParameters(
+        getTestParameters().withDexRuntime(Version.DEFAULT).withCfRuntime(CfVm.JDK11).build());
   }
 
-  public RetargetAndBackportTest(TestParameters parameters, Backend backend) {
-    this.backend = backend;
+  public RetargetAndBackportTest(TestParameters parameters) {
+    this.parameters = parameters;
   }
 
   /**
@@ -60,10 +64,10 @@
 
   @Test
   public void test() throws Exception {
-    testForL8(AndroidApiLevel.B, backend)
+    testForL8(AndroidApiLevel.B, parameters.getBackend())
         .noDefaultDesugarJDKLibs()
         .addProgramClassFileData(dump())
-        .addLibraryFiles(getLibraryFile())
+        .addLibraryFiles(ToolHelper.getAndroidJar(AndroidApiLevel.P.getLevel()))
         .addOptionsModifier(RetargetAndBackportTest::specifyDesugaredLibrary)
         .compile()
         .inspect(
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/RetargetOverrideTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/RetargetOverrideTest.java
index 5d9cf31..10f3ada 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/RetargetOverrideTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/RetargetOverrideTest.java
@@ -4,9 +4,12 @@
 
 package com.android.tools.r8.desugar.desugaredlibrary;
 
+import static com.android.tools.r8.desugar.desugaredlibrary.test.CompilationSpecification.SPECIFICATIONS_WITH_CF2CF;
+import static com.android.tools.r8.desugar.desugaredlibrary.test.LibraryDesugaringSpecification.getJdk8Jdk11;
+
 import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.utils.BooleanUtils;
-import java.nio.file.Path;
+import com.android.tools.r8.desugar.desugaredlibrary.test.CompilationSpecification;
+import com.android.tools.r8.desugar.desugaredlibrary.test.LibraryDesugaringSpecification;
 import java.time.Instant;
 import java.time.ZonedDateTime;
 import java.util.Date;
@@ -14,7 +17,6 @@
 import java.util.List;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.function.IntUnaryOperator;
-import org.junit.Assume;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -24,119 +26,33 @@
 public class RetargetOverrideTest extends DesugaredLibraryTestBase {
 
   private final TestParameters parameters;
-  private final boolean shrinkDesugaredLibrary;
+  private final CompilationSpecification compilationSpecification;
+  private final LibraryDesugaringSpecification libraryDesugaringSpecification;
 
-  @Parameters(name = "{1}, shrink: {0}")
+  @Parameters(name = "{0}, spec: {1}, {2}")
   public static List<Object[]> data() {
     return buildParameters(
-        BooleanUtils.values(),
-        getTestParameters().withAllRuntimes().withAllApiLevelsAlsoForCf().build());
+        getTestParameters().withAllRuntimes().withAllApiLevelsAlsoForCf().build(),
+        getJdk8Jdk11(),
+        SPECIFICATIONS_WITH_CF2CF);
   }
 
-  public RetargetOverrideTest(boolean shrinkDesugaredLibrary, TestParameters parameters) {
-    this.shrinkDesugaredLibrary = shrinkDesugaredLibrary;
+  public RetargetOverrideTest(
+      TestParameters parameters,
+      LibraryDesugaringSpecification libraryDesugaringSpecification,
+      CompilationSpecification compilationSpecification) {
     this.parameters = parameters;
+    this.compilationSpecification = compilationSpecification;
+    this.libraryDesugaringSpecification = libraryDesugaringSpecification;
   }
 
   @Test
-  public void testRetargetOverrideCf() throws Exception {
-    KeepRuleConsumer keepRuleConsumer = createKeepRuleConsumer(parameters);
-    Path desugaredTwice =
-        testForD8(Backend.CF)
-            .addLibraryFiles(getLibraryFile())
-            .addProgramFiles(
-                testForD8(Backend.CF)
-                    .addLibraryFiles(getLibraryFile())
-                    .addInnerClasses(RetargetOverrideTest.class)
-                    .enableCoreLibraryDesugaring(parameters.getApiLevel(), keepRuleConsumer)
-                    .setMinApi(parameters.getApiLevel())
-                    .compile()
-                    .writeToZip())
-            .enableCoreLibraryDesugaring(parameters.getApiLevel(), keepRuleConsumer)
-            .setMinApi(parameters.getApiLevel())
-            .addOptionsModification(
-                options -> options.desugarSpecificOptions().allowAllDesugaredInput = true)
-            .compile()
-            .writeToZip();
-
-    String stdout;
-    if (parameters.getRuntime().isDex()) {
-      // Convert to DEX without desugaring and run.
-      stdout =
-          testForD8(Backend.DEX)
-              .addProgramFiles(desugaredTwice)
-              .setMinApi(parameters.getApiLevel())
-              .disableDesugaring()
-              .compile()
-              .addDesugaredCoreLibraryRunClassPath(
-                  this::buildDesugaredLibrary,
-                  parameters.getApiLevel(),
-                  keepRuleConsumer.get(),
-                  shrinkDesugaredLibrary)
-              .run(
-                  parameters.getRuntime(),
-                  Executor.class,
-                  Boolean.toString(parameters.getRuntime().isCf()))
-              .assertSuccess()
-              .getStdOut();
-    } else {
-      // Run on the JVM with desugared library on classpath.
-      stdout =
-          testForJvm()
-              .addProgramFiles(desugaredTwice)
-              .addRunClasspathFiles(buildDesugaredLibraryClassFile(parameters.getApiLevel()))
-              .run(
-                  parameters.getRuntime(),
-                  Executor.class,
-                  Boolean.toString(parameters.getRuntime().isCf()))
-              .assertSuccess()
-              .getStdOut();
-    }
-    assertLines2By2Correct(stdout);
-  }
-
-  @Test
-  public void testRetargetOverrideD8() throws Exception {
-    Assume.assumeTrue(parameters.getRuntime().isDex());
-    KeepRuleConsumer keepRuleConsumer = createKeepRuleConsumer(parameters);
+  public void testRetargetOverride() throws Throwable {
     String stdout =
-        testForD8()
-            .addLibraryFiles(getLibraryFile())
-            .addInnerClasses(RetargetOverrideTest.class)
-            .enableCoreLibraryDesugaring(parameters.getApiLevel(), keepRuleConsumer)
-            .setMinApi(parameters.getApiLevel())
-            .compile()
-            .addDesugaredCoreLibraryRunClassPath(
-                this::buildDesugaredLibrary,
-                parameters.getApiLevel(),
-                keepRuleConsumer.get(),
-                shrinkDesugaredLibrary)
-            .run(
-                parameters.getRuntime(),
-                Executor.class,
-                Boolean.toString(parameters.getRuntime().isCf()))
-            .assertSuccess()
-            .getStdOut();
-    assertLines2By2Correct(stdout);
-  }
-
-  @Test
-  public void testRetargetOverrideR8() throws Exception {
-    Assume.assumeTrue(parameters.getRuntime().isDex());
-    KeepRuleConsumer keepRuleConsumer = createKeepRuleConsumer(parameters);
-    String stdout =
-        testForR8(Backend.DEX)
-            .addLibraryFiles(getLibraryFile())
+        testForDesugaredLibrary(
+                parameters, libraryDesugaringSpecification, compilationSpecification)
+            .addInnerClasses(getClass())
             .addKeepMainRule(Executor.class)
-            .addInnerClasses(RetargetOverrideTest.class)
-            .enableCoreLibraryDesugaring(parameters.getApiLevel(), keepRuleConsumer)
-            .setMinApi(parameters.getApiLevel())
-            .compile()
-            .addDesugaredCoreLibraryRunClassPath(
-                this::buildDesugaredLibrary,
-                parameters.getApiLevel(),
-                keepRuleConsumer.get(),
-                shrinkDesugaredLibrary)
             .run(
                 parameters.getRuntime(),
                 Executor.class,
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/test/DesugaredLibraryTestBuilder.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/test/DesugaredLibraryTestBuilder.java
index 7f0f151..c202629 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/test/DesugaredLibraryTestBuilder.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/test/DesugaredLibraryTestBuilder.java
@@ -7,6 +7,7 @@
 import com.android.tools.r8.CompilationFailedException;
 import com.android.tools.r8.D8TestCompileResult;
 import com.android.tools.r8.FeatureSplit;
+import com.android.tools.r8.L8TestBuilder;
 import com.android.tools.r8.L8TestCompileResult;
 import com.android.tools.r8.LibraryDesugaringTestConfiguration;
 import com.android.tools.r8.R8TestBuilder;
@@ -21,7 +22,6 @@
 import com.android.tools.r8.TestShrinkerBuilder;
 import com.android.tools.r8.desugar.desugaredlibrary.DesugaredLibraryTestBase;
 import com.android.tools.r8.ir.desugar.desugaredlibrary.DesugaredLibrarySpecificationParser;
-import com.android.tools.r8.utils.ConsumerUtils;
 import com.android.tools.r8.utils.InternalOptions;
 import java.io.IOException;
 import java.nio.file.Path;
@@ -37,9 +37,9 @@
   private final LibraryDesugaringSpecification libraryDesugaringSpecification;
   private final CompilationSpecification compilationSpecification;
   private final TestCompilerBuilder<?, ?, ?, ? extends SingleTestRunResult<?>, ?> builder;
+  private final L8TestBuilder l8Builder;
 
   private CustomLibrarySpecification customLibrarySpecification = null;
-  private Consumer<InternalOptions> l8OptionModifier = ConsumerUtils.emptyConsumer();
   private TestingKeepRuleConsumer keepRuleConsumer = null;
 
   public DesugaredLibraryTestBuilder(
@@ -52,6 +52,7 @@
     this.libraryDesugaringSpecification = libraryDesugaringSpecification;
     this.compilationSpecification = runSpecification;
     this.builder = generateBuilder();
+    this.l8Builder = generateL8Builder();
     setUp();
   }
 
@@ -85,6 +86,10 @@
     return test.testForD8(Backend.DEX);
   }
 
+  private L8TestBuilder generateL8Builder() {
+    return test.testForL8(parameters.getApiLevel(), parameters.getBackend());
+  }
+
   public DesugaredLibraryTestBuilder<T> setCustomLibrarySpecification(
       CustomLibrarySpecification customLibrarySpecification) {
     this.customLibrarySpecification = customLibrarySpecification;
@@ -94,7 +99,7 @@
 
   public DesugaredLibraryTestBuilder<T> addL8OptionsModification(
       Consumer<InternalOptions> optionModifier) {
-    l8OptionModifier = l8OptionModifier.andThen(optionModifier);
+    l8Builder.addOptionsModifier(optionModifier);
     return this;
   }
 
@@ -136,6 +141,11 @@
     return this;
   }
 
+  public DesugaredLibraryTestBuilder<T> ignoreL8FinalPrefixVerification() {
+    l8Builder.ignoreFinalPrefixVerification();
+    return this;
+  }
+
   public DesugaredLibraryTestBuilder<T> addProgramClassFileData(
       Collection<byte[]> programClassFileData) {
     builder.addProgramClassFileData(programClassFileData);
@@ -229,7 +239,7 @@
   }
 
   public DesugaredLibraryTestBuilder<T> disableL8AnnotationRemoval() {
-    l8OptionModifier = l8OptionModifier.andThen(opt -> opt.disableL8AnnotationRemoval = true);
+    l8Builder.setDisableL8AnnotationRemoval(true);
     return this;
   }
 
@@ -271,12 +281,11 @@
   }
 
   private L8TestCompileResult compileDesugaredLibrary(String keepRule) throws Exception {
-    return test.testForL8(parameters.getApiLevel(), parameters.getBackend())
+    return l8Builder
         .apply(
             b ->
                 libraryDesugaringSpecification.configureL8TestBuilder(
                     b, compilationSpecification.isL8Shrink(), keepRule))
-        .addOptionsModifier(l8OptionModifier)
         .compile();
   }
 
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/test/LibraryDesugaringSpecification.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/test/LibraryDesugaringSpecification.java
index badd572..d4e8e32 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/test/LibraryDesugaringSpecification.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/test/LibraryDesugaringSpecification.java
@@ -1,7 +1,6 @@
 // Copyright (c) 2022, the R8 project authors. Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-
 package com.android.tools.r8.desugar.desugaredlibrary.test;
 
 import static com.android.tools.r8.ToolHelper.DESUGARED_JDK_8_LIB_JAR;
@@ -28,7 +27,7 @@
   // Main head specifications.
   public static LibraryDesugaringSpecification JDK8 =
       new LibraryDesugaringSpecification(
-          "JDK8", false, DESUGARED_JDK_8_LIB_JAR, "desugar_jdk_libs.json", AndroidApiLevel.P);
+          "JDK8", DESUGARED_JDK_8_LIB_JAR, "desugar_jdk_libs.json", AndroidApiLevel.P);
   public static LibraryDesugaringSpecification JDK11 =
       new LibraryDesugaringSpecification(
           "JDK11", UNDESUGARED_JDK_11_LIB_JAR, "jdk11/desugar_jdk_libs.json", AndroidApiLevel.R);
@@ -65,43 +64,26 @@
           Paths.get("third_party/openjdk/desugar_jdk_libs_11/desugar_jdk_libs.jar"),
           "jdk11/desugar_jdk_libs_legacy.json",
           AndroidApiLevel.R);
-  private static final LibraryDesugaringSpecification RELEASED_1_0_9 =
-      new LibraryDesugaringSpecification("1.0.9", true, AndroidApiLevel.P);
-  private static final LibraryDesugaringSpecification RELEASED_1_0_10 =
-      new LibraryDesugaringSpecification("1.0.10", true, AndroidApiLevel.P);
-  private static final LibraryDesugaringSpecification RELEASED_1_1_0 =
-      new LibraryDesugaringSpecification("1.1.0", true, AndroidApiLevel.P);
-  private static final LibraryDesugaringSpecification RELEASED_1_1_1 =
-      new LibraryDesugaringSpecification("1.1.1", true, AndroidApiLevel.P);
-  private static final LibraryDesugaringSpecification RELEASED_1_1_5 =
-      new LibraryDesugaringSpecification("1.1.5", true, AndroidApiLevel.P);
-
+  public static final LibraryDesugaringSpecification RELEASED_1_0_9 =
+      new LibraryDesugaringSpecification("1.0.9", AndroidApiLevel.P);
+  public static final LibraryDesugaringSpecification RELEASED_1_0_10 =
+      new LibraryDesugaringSpecification("1.0.10", AndroidApiLevel.P);
+  public static final LibraryDesugaringSpecification RELEASED_1_1_0 =
+      new LibraryDesugaringSpecification("1.1.0", AndroidApiLevel.P);
+  public static final LibraryDesugaringSpecification RELEASED_1_1_1 =
+      new LibraryDesugaringSpecification("1.1.1", AndroidApiLevel.P);
+  public static final LibraryDesugaringSpecification RELEASED_1_1_5 =
+      new LibraryDesugaringSpecification("1.1.5", AndroidApiLevel.P);
   private final String name;
-  private final boolean isJdk11Based;
   private final Set<Path> desugarJdkLibs;
   private final Path specification;
   private final Set<Path> libraryFiles;
   private final String extraKeepRules;
 
   private LibraryDesugaringSpecification(
-      String name,
-      boolean isJdk11Based,
-      Path desugarJdkLibs,
-      String specificationPath,
-      AndroidApiLevel androidJarLevel) {
-    this(
-        name,
-        isJdk11Based,
-        ImmutableSet.of(desugarJdkLibs, ToolHelper.DESUGAR_LIB_CONVERSIONS),
-        Paths.get("src/library_desugar/" + specificationPath),
-        ToolHelper.getAndroidJar(androidJarLevel));
-  }
-
-  private LibraryDesugaringSpecification(
       String name, Path desugarJdkLibs, String specificationPath, AndroidApiLevel androidJarLevel) {
     this(
         name,
-        true,
         ImmutableSet.of(desugarJdkLibs, ToolHelper.DESUGAR_LIB_CONVERSIONS),
         Paths.get("src/library_desugar/" + specificationPath),
         ToolHelper.getAndroidJar(androidJarLevel));
@@ -109,16 +91,6 @@
 
   // This can be used to build custom specifications for testing purposes.
   public LibraryDesugaringSpecification(
-      String name,
-      boolean isJdk11Based,
-      Set<Path> desugarJdkLibs,
-      Path specification,
-      Path androidJar) {
-    this(name, isJdk11Based, desugarJdkLibs, specification, ImmutableSet.of(androidJar), "");
-  }
-
-  // This can be used to build custom specifications for testing purposes.
-  public LibraryDesugaringSpecification(
       String name, Set<Path> desugarJdkLibs, Path specification, Path androidJar) {
     this(name, desugarJdkLibs, specification, ImmutableSet.of(androidJar), "");
   }
@@ -130,30 +102,16 @@
       Path specification,
       Set<Path> libraryFiles,
       String extraKeepRules) {
-    this(name, false, desugarJdkLibs, specification, libraryFiles, extraKeepRules);
-  }
-
-  // This can be used to build custom specifications for testing purposes.
-  public LibraryDesugaringSpecification(
-      String name,
-      boolean isJdk11Based,
-      Set<Path> desugarJdkLibs,
-      Path specification,
-      Set<Path> libraryFiles,
-      String extraKeepRules) {
     this.name = name;
-    this.isJdk11Based = isJdk11Based;
     this.desugarJdkLibs = desugarJdkLibs;
     this.specification = specification;
     this.libraryFiles = libraryFiles;
     this.extraKeepRules = extraKeepRules;
   }
 
-  private LibraryDesugaringSpecification(
-      String version, boolean isJdk11Based, AndroidApiLevel androidJarLevel) {
+  private LibraryDesugaringSpecification(String version, AndroidApiLevel androidJarLevel) {
     this(
-        "Release_" + version,
-        isJdk11Based,
+        "RELEASED_" + version,
         ImmutableSet.of(
             Paths.get(DESUGARED_LIB_RELEASES_DIR, version, "desugar_jdk_libs.jar"),
             Paths.get(DESUGARED_LIB_RELEASES_DIR, version, "desugar_jdk_libs_configuration.jar")),
@@ -166,10 +124,6 @@
     return name;
   }
 
-  public boolean isJdk11Based() {
-    return isJdk11Based;
-  }
-
   public Set<Path> getDesugarJdkLibs() {
     return desugarJdkLibs;
   }