Regression tests for synthetic duplication.

Bug: 169095082
Bug: 169183194
Change-Id: I0b47f37e64c2ef8e7684e69ae23946c29705eb20
diff --git a/src/test/java/com/android/tools/r8/desugar/backports/BackportDuplicationTest.java b/src/test/java/com/android/tools/r8/desugar/backports/BackportDuplicationTest.java
index 31575df..c805af6 100644
--- a/src/test/java/com/android/tools/r8/desugar/backports/BackportDuplicationTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/backports/BackportDuplicationTest.java
@@ -7,7 +7,10 @@
 import static org.hamcrest.CoreMatchers.not;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
 
+import com.android.tools.r8.CompilationFailedException;
+import com.android.tools.r8.OutputMode;
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.TestParametersCollection;
@@ -155,6 +158,34 @@
             });
   }
 
+  @Test(expected = CompilationFailedException.class)
+  public void testD8FilePerClassFile() throws Exception {
+    runD8FilePerMode(OutputMode.DexFilePerClassFile);
+    fail("b/169095082");
+  }
+
+  @Test
+  public void testD8FilePerClass() throws Exception {
+    runD8FilePerMode(OutputMode.DexFilePerClass);
+  }
+
+  public void runD8FilePerMode(OutputMode outputMode) throws Exception {
+    Path perClassOutput =
+        testForD8(parameters.getBackend())
+            .setOutputMode(outputMode)
+            .addProgramClasses(CLASSES)
+            .setMinApi(parameters.getApiLevel())
+            .compile()
+            .writeToZip();
+    testForD8()
+        .addProgramFiles(perClassOutput)
+        .setMinApi(parameters.getApiLevel())
+        .run(parameters.getRuntime(), TestClass.class)
+        .assertSuccessWithOutput(EXPECTED)
+        .inspect(this::checkNoInternalSyntheticNames)
+        .inspect(this::checkExpectedSynthetics);
+  }
+
   private void checkNoInternalSyntheticNames(CodeInspector inspector) {
     inspector.forAllClasses(
         clazz -> {
diff --git a/src/test/java/com/android/tools/r8/desugar/backports/BackportMainDexTest.java b/src/test/java/com/android/tools/r8/desugar/backports/BackportMainDexTest.java
index 424a48f..4db43fe 100644
--- a/src/test/java/com/android/tools/r8/desugar/backports/BackportMainDexTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/backports/BackportMainDexTest.java
@@ -9,12 +9,15 @@
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
+import static org.junit.Assert.fail;
 import static org.junit.Assume.assumeTrue;
 
 import com.android.tools.r8.ByteDataView;
+import com.android.tools.r8.CompilationFailedException;
 import com.android.tools.r8.DexIndexedConsumer;
 import com.android.tools.r8.DiagnosticsHandler;
 import com.android.tools.r8.GenerateMainDexListRunResult;
+import com.android.tools.r8.OutputMode;
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.TestParametersCollection;
@@ -151,6 +154,39 @@
     checkMainDex(mainDexConsumer);
   }
 
+  @Test(expected = CompilationFailedException.class)
+  public void testD8FilePerClassFile() throws Exception {
+    runD8FilePerMode(OutputMode.DexFilePerClassFile);
+    fail("b/169095082");
+  }
+
+  @Test
+  public void testD8FilePerClass() throws Exception {
+    runD8FilePerMode(OutputMode.DexFilePerClass);
+  }
+
+  private void runD8FilePerMode(OutputMode outputMode) throws Exception {
+    assumeTrue(parameters.isDexRuntime());
+    Path perClassOutput =
+        testForD8(parameters.getBackend())
+            .setOutputMode(outputMode)
+            .addProgramClasses(CLASSES)
+            .setMinApi(parameters.getApiLevel())
+            .compile()
+            .writeToZip();
+    MainDexConsumer mainDexConsumer = new MainDexConsumer();
+    testForD8()
+        .addProgramFiles(perClassOutput)
+        .setMinApi(parameters.getApiLevel())
+        .addMainDexListClasses(MiniAssert.class, TestClass.class, User2.class)
+        .setProgramConsumer(mainDexConsumer)
+        .compile()
+        .inspect(this::checkExpectedSynthetics)
+        .run(parameters.getRuntime(), TestClass.class, getRunArgs())
+        .assertSuccessWithOutput(EXPECTED);
+    checkMainDex(mainDexConsumer);
+  }
+
   // TODO(b/168584485): This test should be removed once support is dropped.
   @Test
   public void testD8MergingWithTraceCf() throws Exception {