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 {