Add partial runs of remaining resource shrinker tests

There are still a few legace resource shrinker tests (not using
optimized) where we don't do partial testing. We don't support legacy
mode in partial so no point in adding these (and then assuming not partial).

Bug: b/405338406
Change-Id: I16c9f12f481f8cc4d1aa7c6c499d2ba1cb82df3d
Fixes: 405338406
diff --git a/src/test/java/com/android/tools/r8/androidresources/ResourceIDCannonicalizationTest.java b/src/test/java/com/android/tools/r8/androidresources/ResourceIDCannonicalizationTest.java
index 7f81005..bd37f02 100644
--- a/src/test/java/com/android/tools/r8/androidresources/ResourceIDCannonicalizationTest.java
+++ b/src/test/java/com/android/tools/r8/androidresources/ResourceIDCannonicalizationTest.java
@@ -26,7 +26,11 @@
 
   @Parameters(name = "{0}")
   public static TestParametersCollection parameters() {
-    return getTestParameters().withDefaultDexRuntime().withAllApiLevels().build();
+    return getTestParameters()
+        .withDefaultDexRuntime()
+        .withPartialCompilation()
+        .withAllApiLevels()
+        .build();
   }
 
   public static AndroidTestResource getTestResources(TemporaryFolder temp) throws Exception {
@@ -38,8 +42,7 @@
 
   @Test
   public void testR8() throws Exception {
-    testForR8(parameters.getBackend())
-        .setMinApi(parameters)
+    testForR8(parameters)
         .addProgramClasses(FooBar.class)
         .addAndroidResources(getTestResources(temp))
         .addKeepMainRule(FooBar.class)
@@ -57,7 +60,9 @@
                       .streamInstructions()
                       .filter(i -> i.isConstNumber(EXPECTED_RESOURCE_NUMBER))
                       .count();
-              assertEquals(1, constNumbers);
+              if (!parameters.isRandomPartialCompilation()) {
+                assertEquals(1, constNumbers);
+              }
             })
         .inspectShrunkenResources(
             resourceTableInspector -> {
diff --git a/src/test/java/com/android/tools/r8/androidresources/ResourceShrinkerLoggingTest.java b/src/test/java/com/android/tools/r8/androidresources/ResourceShrinkerLoggingTest.java
index 43ed954..3759c64 100644
--- a/src/test/java/com/android/tools/r8/androidresources/ResourceShrinkerLoggingTest.java
+++ b/src/test/java/com/android/tools/r8/androidresources/ResourceShrinkerLoggingTest.java
@@ -13,6 +13,7 @@
 import com.android.tools.r8.utils.BooleanUtils;
 import com.google.common.collect.ImmutableList;
 import java.util.List;
+import org.junit.Assume;
 import org.junit.Test;
 import org.junit.rules.TemporaryFolder;
 import org.junit.runner.RunWith;
@@ -32,7 +33,11 @@
   @Parameters(name = "{0}, optimized: {1}")
   public static List<Object[]> data() {
     return buildParameters(
-        getTestParameters().withDefaultDexRuntime().withAllApiLevels().build(),
+        getTestParameters()
+            .withDefaultDexRuntime()
+            .withAllApiLevels()
+            .withPartialCompilation()
+            .build(),
         BooleanUtils.values());
   }
 
@@ -45,8 +50,8 @@
 
   @Test
   public void testR8() throws Exception {
-    testForR8(parameters.getBackend())
-        .setMinApi(parameters)
+    Assume.assumeTrue(optimized || parameters.getPartialCompilationTestParameters().isNone());
+    testForR8(parameters)
         .addProgramClasses(FooBar.class)
         .applyIf(optimized, R8TestBuilder::enableOptimizedShrinking)
         .addResourceShrinkerLogCapture()
@@ -58,10 +63,12 @@
               resourceTableInspector.assertContainsResourceWithName("string", "bar");
               resourceTableInspector.assertContainsResourceWithName("string", "foo");
               resourceTableInspector.assertContainsResourceWithName("drawable", "foobar");
-              resourceTableInspector.assertDoesNotContainResourceWithName(
-                  "string", "unused_string");
-              resourceTableInspector.assertDoesNotContainResourceWithName(
-                  "drawable", "unused_drawable");
+              if (!parameters.isRandomPartialCompilation()) {
+                resourceTableInspector.assertDoesNotContainResourceWithName(
+                    "string", "unused_string");
+                resourceTableInspector.assertDoesNotContainResourceWithName(
+                    "drawable", "unused_drawable");
+              }
             })
         .inspectResourceShrinkerLog(
             inspector -> {
@@ -80,8 +87,9 @@
                 inspector.ensureReachableOptimized("string", "bar");
                 inspector.ensureReachableOptimized("string", "foo");
                 inspector.ensureReachableOptimized("drawable", "foobar");
-
-                inspector.ensureUnreachableOptimized("drawable", "unused_drawable");
+                if (!parameters.isRandomPartialCompilation()) {
+                  inspector.ensureUnreachableOptimized("drawable", "unused_drawable");
+                }
               }
             })
         .run(parameters.getRuntime(), FooBar.class)
diff --git a/src/test/java/com/android/tools/r8/androidresources/ResourceShrinkingMultiApkAsFeaturesplits.java b/src/test/java/com/android/tools/r8/androidresources/ResourceShrinkingMultiApkAsFeaturesplits.java
index 97534c6..1d0655a 100644
--- a/src/test/java/com/android/tools/r8/androidresources/ResourceShrinkingMultiApkAsFeaturesplits.java
+++ b/src/test/java/com/android/tools/r8/androidresources/ResourceShrinkingMultiApkAsFeaturesplits.java
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.androidresources;
 
-import com.android.tools.r8.R8FullTestBuilder;
+import com.android.tools.r8.R8TestCompileResultBase;
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.ToolHelper;
@@ -11,6 +11,7 @@
 import com.android.tools.r8.androidresources.AndroidResourceTestingUtils.AndroidTestResourceBuilder;
 import com.android.tools.r8.utils.BooleanUtils;
 import java.util.List;
+import org.junit.Assume;
 import org.junit.Test;
 import org.junit.rules.TemporaryFolder;
 import org.junit.runner.RunWith;
@@ -33,7 +34,11 @@
   @Parameters(name = "{0}, optimized: {1}")
   public static List<Object[]> data() {
     return buildParameters(
-        getTestParameters().withDefaultDexRuntime().withAllApiLevels().build(),
+        getTestParameters()
+            .withDefaultDexRuntime()
+            .withPartialCompilation()
+            .withAllApiLevels()
+            .build(),
         BooleanUtils.values());
   }
 
@@ -53,45 +58,55 @@
 
   @Test
   public void test() throws Exception {
+    Assume.assumeTrue(optimized || parameters.getPartialCompilationTestParameters().isNone());
     TemporaryFolder featureSplitTemp = ToolHelper.getTemporaryFolderForTest();
     featureSplitTemp.create();
     String featureSplitName = "featuresplit";
-    testForR8(parameters.getBackend())
-        .setMinApi(parameters)
-        .addProgramClasses(Base.class)
-        .addAndroidResources(getTestResources(temp, true, VIEW))
-        .addFeatureSplitAndroidResources(
-            // For the feature, we don't add the R class (we already have it in the base)
-            // and to test we add one less xml file.
-            getTestResources(featureSplitTemp, false, VIEW), featureSplitName)
-        .applyIf(optimized, R8FullTestBuilder::enableOptimizedShrinking)
-        .addKeepMainRule(Base.class)
-        .compile()
-        .inspectShrunkenResources(
-            resourceTableInspector -> {
-              resourceTableInspector.assertContainsResourceWithName("string", "used");
-              resourceTableInspector.assertDoesNotContainResourceWithName("string", "unused");
-              resourceTableInspector.assertContainsResourceWithName("xml", "both_used");
-              resourceTableInspector.assertDoesNotContainResourceWithName("xml", "both_unused");
-              resourceTableInspector.assertContainsResourceWithName("xml", "only_in_base");
-            })
-        .inspectShrunkenResourcesForFeature(
-            resourceTableInspector -> {
-              resourceTableInspector.assertContainsResourceWithName("string", "used");
-              resourceTableInspector.assertDoesNotContainResourceWithName("string", "unused");
-              resourceTableInspector.assertContainsResourceWithName("xml", "both_used");
-              resourceTableInspector.assertDoesNotContainResourceWithName("xml", "both_unused");
-              resourceTableInspector.assertDoesNotContainResourceWithName("xml", "only_in_base");
-            },
-            featureSplitName)
-        .assertResourceFile("res/xml/both_used.xml", true)
-        .assertResourceFile("res/xml/only_in_base.xml", true)
-        .assertResourceFile("res/xml/both_unused.xml", false)
-        .assertFeatureResourceFile("res/xml/both_used.xml", true, featureSplitName)
-        .assertFeatureResourceFile("res/xml/both_unused.xml", false, featureSplitName)
-        .assertFeatureResourceFile("res/xml/only_in_base.xml", false, featureSplitName)
-        .run(parameters.getRuntime(), Base.class)
-        .assertSuccess();
+    R8TestCompileResultBase<?> compileResult =
+        testForR8(parameters)
+            .addProgramClasses(Base.class)
+            .addAndroidResources(getTestResources(temp, true, VIEW))
+            .addFeatureSplitAndroidResources(
+                // For the feature, we don't add the R class (we already have it in the base)
+                // and to test we add one less xml file.
+                getTestResources(featureSplitTemp, false, VIEW), featureSplitName)
+            .applyIf(optimized, b -> b.enableOptimizedShrinking())
+            .addKeepMainRule(Base.class)
+            .compile()
+            .inspectShrunkenResources(
+                resourceTableInspector -> {
+                  resourceTableInspector.assertContainsResourceWithName("string", "used");
+                  resourceTableInspector.assertContainsResourceWithName("xml", "both_used");
+                  resourceTableInspector.assertContainsResourceWithName("xml", "only_in_base");
+                  if (!parameters.isRandomPartialCompilation()) {
+                    resourceTableInspector.assertDoesNotContainResourceWithName("string", "unused");
+                    resourceTableInspector.assertDoesNotContainResourceWithName(
+                        "xml", "both_unused");
+                  }
+                })
+            .inspectShrunkenResourcesForFeature(
+                resourceTableInspector -> {
+                  resourceTableInspector.assertContainsResourceWithName("string", "used");
+                  resourceTableInspector.assertContainsResourceWithName("xml", "both_used");
+                  if (!parameters.isRandomPartialCompilation()) {
+                    resourceTableInspector.assertDoesNotContainResourceWithName("string", "unused");
+                    resourceTableInspector.assertDoesNotContainResourceWithName(
+                        "xml", "both_unused");
+                    resourceTableInspector.assertDoesNotContainResourceWithName(
+                        "xml", "only_in_base");
+                  }
+                },
+                featureSplitName)
+            .assertResourceFile("res/xml/both_used.xml", true)
+            .assertResourceFile("res/xml/only_in_base.xml", true)
+            .assertFeatureResourceFile("res/xml/both_used.xml", true, featureSplitName);
+    if (!parameters.isRandomPartialCompilation()) {
+      compileResult
+          .assertResourceFile("res/xml/both_unused.xml", false)
+          .assertFeatureResourceFile("res/xml/both_unused.xml", false, featureSplitName)
+          .assertFeatureResourceFile("res/xml/only_in_base.xml", false, featureSplitName);
+    }
+    compileResult.run(parameters.getRuntime(), Base.class).assertSuccess();
   }
 
   public static class Base {
diff --git a/src/test/java/com/android/tools/r8/androidresources/ResourceShrinkingWithFeatures.java b/src/test/java/com/android/tools/r8/androidresources/ResourceShrinkingWithFeatures.java
index e924ca6..818afca 100644
--- a/src/test/java/com/android/tools/r8/androidresources/ResourceShrinkingWithFeatures.java
+++ b/src/test/java/com/android/tools/r8/androidresources/ResourceShrinkingWithFeatures.java
@@ -7,9 +7,9 @@
 import static org.junit.Assert.fail;
 
 import com.android.tools.r8.CompilationFailedException;
-import com.android.tools.r8.R8FullTestBuilder;
 import com.android.tools.r8.R8TestBuilder;
-import com.android.tools.r8.R8TestCompileResult;
+import com.android.tools.r8.R8TestCompileResultBase;
+import com.android.tools.r8.R8TestRunResult;
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.ToolHelper;
@@ -19,6 +19,7 @@
 import com.android.tools.r8.utils.BooleanUtils;
 import java.io.IOException;
 import java.util.List;
+import org.junit.Assume;
 import org.junit.Test;
 import org.junit.rules.TemporaryFolder;
 import org.junit.runner.RunWith;
@@ -41,7 +42,11 @@
   @Parameters(name = "{0}, optimized: {1}, feature_package_id: {2}")
   public static List<Object[]> data() {
     return buildParameters(
-        getTestParameters().withDefaultDexRuntime().withAllApiLevels().build(),
+        getTestParameters()
+            .withDefaultDexRuntime()
+            .withPartialCompilation()
+            .withAllApiLevels()
+            .build(),
         BooleanUtils.values(),
         // Ensure that we can handle resource ids both bigger and smaller than 127, see
         // b/378470047
@@ -65,9 +70,9 @@
 
   @Test
   public void testFailureIfNotResourcesOrCode() throws Exception {
+    Assume.assumeTrue(optimized || parameters.getPartialCompilationTestParameters().isNone());
     try {
-      testForR8(parameters.getBackend())
-          .setMinApi(parameters)
+      testForR8(parameters)
           .addProgramClasses(Base.class)
           .applyIf(optimized, R8TestBuilder::enableOptimizedShrinking)
           .addFeatureSplit(builder -> builder.build())
@@ -94,21 +99,22 @@
   }
 
   private void testR8(boolean referenceFromBase) throws Exception {
+    Assume.assumeTrue(optimized || parameters.getPartialCompilationTestParameters().isNone());
     TemporaryFolder featureSplitTemp = ToolHelper.getTemporaryFolderForTest();
     featureSplitTemp.create();
-    R8FullTestBuilder r8FullTestBuilder =
-        testForR8(parameters.getBackend()).setMinApi(parameters).addProgramClasses(Base.class);
+    R8TestBuilder<? extends R8TestCompileResultBase<?>, R8TestRunResult, ?> r8FullTestBuilder =
+        testForR8(parameters).addProgramClasses(Base.class);
     if (referenceFromBase) {
       r8FullTestBuilder.addProgramClasses(FeatureSplit.FeatureSplitMain.class);
     } else {
       r8FullTestBuilder.addFeatureSplit(FeatureSplit.FeatureSplitMain.class);
     }
-    R8TestCompileResult compile =
+    R8TestCompileResultBase<?> compile =
         r8FullTestBuilder
             .addAndroidResources(getTestResources(temp))
             .addFeatureSplitAndroidResources(
                 getFeatureSplitTestResources(featureSplitTemp), FeatureSplit.class.getName())
-            .applyIf(optimized, R8FullTestBuilder::enableOptimizedShrinking)
+            .applyIf(optimized, R8TestBuilder::enableOptimizedShrinking)
             .addKeepMainRule(Base.class)
             .addKeepMainRule(FeatureSplitMain.class)
             .compile();
@@ -116,13 +122,18 @@
         .inspectShrunkenResources(
             resourceTableInspector -> {
               resourceTableInspector.assertContainsResourceWithName("string", "base_used");
-              resourceTableInspector.assertDoesNotContainResourceWithName("string", "base_unused");
+              if (!parameters.isRandomPartialCompilation()) {
+                resourceTableInspector.assertDoesNotContainResourceWithName(
+                    "string", "base_unused");
+              }
             })
         .inspectShrunkenResourcesForFeature(
             resourceTableInspector -> {
-                resourceTableInspector.assertContainsResourceWithName("string", "feature_used");
+              resourceTableInspector.assertContainsResourceWithName("string", "feature_used");
+              if (!parameters.isRandomPartialCompilation()) {
                 resourceTableInspector.assertDoesNotContainResourceWithName(
                     "string", "feature_unused");
+              }
             },
             FeatureSplit.class.getName())
         .run(parameters.getRuntime(), Base.class)
diff --git a/src/test/java/com/android/tools/r8/androidresources/ResourceShrinkingWithFeaturesAndDuplicatedResEntryTest.java b/src/test/java/com/android/tools/r8/androidresources/ResourceShrinkingWithFeaturesAndDuplicatedResEntryTest.java
index ae4b83f..cc75a09 100644
--- a/src/test/java/com/android/tools/r8/androidresources/ResourceShrinkingWithFeaturesAndDuplicatedResEntryTest.java
+++ b/src/test/java/com/android/tools/r8/androidresources/ResourceShrinkingWithFeaturesAndDuplicatedResEntryTest.java
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.androidresources;
 
-import com.android.tools.r8.R8FullTestBuilder;
+import com.android.tools.r8.R8TestBuilder;
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.ToolHelper;
@@ -12,6 +12,7 @@
 import com.android.tools.r8.utils.BooleanUtils;
 import java.io.IOException;
 import java.util.List;
+import org.junit.Assume;
 import org.junit.Test;
 import org.junit.rules.TemporaryFolder;
 import org.junit.runner.RunWith;
@@ -33,7 +34,11 @@
   @Parameters(name = "{0}, optimized: {1}")
   public static List<Object[]> data() {
     return buildParameters(
-        getTestParameters().withDefaultDexRuntime().withAllApiLevels().build(),
+        getTestParameters()
+            .withDefaultDexRuntime()
+            .withPartialCompilation()
+            .withAllApiLevels()
+            .build(),
         BooleanUtils.values());
   }
 
@@ -60,35 +65,40 @@
 
   @Test
   public void testR8() throws Exception {
+    Assume.assumeTrue(optimized || parameters.getPartialCompilationTestParameters().isNone());
     TemporaryFolder featureSplitTemp = ToolHelper.getTemporaryFolderForTest();
     featureSplitTemp.create();
-    testForR8(parameters.getBackend())
-        .setMinApi(parameters)
+    testForR8(parameters)
         .addProgramClasses(Base.class)
         .addFeatureSplit(FeatureSplit.FeatureSplitMain.class)
         .addAndroidResources(getTestResources(temp))
         .addFeatureSplitAndroidResources(
             getFeatureSplitTestResources(featureSplitTemp), FeatureSplit.class.getName())
-        .applyIf(optimized, R8FullTestBuilder::enableOptimizedShrinking)
+        .applyIf(optimized, R8TestBuilder::enableOptimizedShrinking)
         .addKeepMainRule(Base.class)
         .addKeepMainRule(FeatureSplit.FeatureSplitMain.class)
         .compile()
         .inspectShrunkenResources(
             resourceTableInspector -> {
-              resourceTableInspector.assertDoesNotContainResourceWithName("xml", "base_unused_xml");
               resourceTableInspector.assertContainsResourceWithName("xml", "base_used_xml");
               resourceTableInspector.assertContainsResourceWithName("xml", "duplicated_xml");
-              resourceTableInspector.assertDoesNotContainResourceWithName(
-                  "string", "duplicated_xml");
+              if (!parameters.isRandomPartialCompilation()) {
+                resourceTableInspector.assertDoesNotContainResourceWithName(
+                    "xml", "base_unused_xml");
+                resourceTableInspector.assertDoesNotContainResourceWithName(
+                    "string", "duplicated_xml");
+              }
             })
         .inspectShrunkenResourcesForFeature(
             resourceTableInspector -> {
-              resourceTableInspector.assertDoesNotContainResourceWithName(
-                  "xml", "feature_unused_xml");
               resourceTableInspector.assertContainsResourceWithName("xml", "feature_used_xml");
               resourceTableInspector.assertContainsResourceWithName("xml", "duplicated_xml");
-              resourceTableInspector.assertDoesNotContainResourceWithName(
-                  "string", "duplicated_xml");
+              if (!parameters.isRandomPartialCompilation()) {
+                resourceTableInspector.assertDoesNotContainResourceWithName(
+                    "xml", "feature_unused_xml");
+                resourceTableInspector.assertDoesNotContainResourceWithName(
+                    "string", "duplicated_xml");
+              }
             },
             FeatureSplit.class.getName())
         .run(parameters.getRuntime(), Base.class)
diff --git a/src/test/java/com/android/tools/r8/androidresources/ResourceShrinkingWithSeveralFeaturesTest.java b/src/test/java/com/android/tools/r8/androidresources/ResourceShrinkingWithSeveralFeaturesTest.java
index 584f521..fc1f76d 100644
--- a/src/test/java/com/android/tools/r8/androidresources/ResourceShrinkingWithSeveralFeaturesTest.java
+++ b/src/test/java/com/android/tools/r8/androidresources/ResourceShrinkingWithSeveralFeaturesTest.java
@@ -15,6 +15,7 @@
 import com.google.common.collect.ImmutableList;
 import java.io.IOException;
 import java.util.List;
+import org.junit.Assume;
 import org.junit.Test;
 import org.junit.rules.TemporaryFolder;
 import org.junit.runner.RunWith;
@@ -34,7 +35,11 @@
   @Parameters(name = "{0}, optimized: {1}")
   public static List<Object[]> data() {
     return buildParameters(
-        getTestParameters().withDefaultDexRuntime().withAllApiLevels().build(),
+        getTestParameters()
+            .withDefaultDexRuntime()
+            .withAllApiLevels()
+            .withPartialCompilation()
+            .build(),
         BooleanUtils.values());
   }
 
@@ -64,13 +69,13 @@
 
   @Test
   public void testR8() throws Exception {
+    Assume.assumeTrue(optimized || parameters.getPartialCompilationTestParameters().isNone());
     TemporaryFolder featureSplitTemp = ToolHelper.getTemporaryFolderForTest();
     featureSplitTemp.create();
 
     TemporaryFolder featureSplit2Temp = ToolHelper.getTemporaryFolderForTest();
     featureSplit2Temp.create();
-    testForR8(parameters.getBackend())
-        .setMinApi(parameters)
+    testForR8(parameters)
         .addProgramClasses(Base.class)
         .addFeatureSplit(FeatureSplitMain.class)
         .addFeatureSplit(FeatureSplit2Main.class)
@@ -88,20 +93,27 @@
         .inspectShrunkenResources(
             resourceTableInspector -> {
               resourceTableInspector.assertContainsResourceWithName("string", "base_used");
-              resourceTableInspector.assertDoesNotContainResourceWithName("string", "base_unused");
+              if (!parameters.isRandomPartialCompilation()) {
+                resourceTableInspector.assertDoesNotContainResourceWithName(
+                    "string", "base_unused");
+              }
             })
         .inspectShrunkenResourcesForFeature(
             resourceTableInspector -> {
               resourceTableInspector.assertContainsResourceWithName("string", "feature_used");
-              resourceTableInspector.assertDoesNotContainResourceWithName(
-                  "string", "feature_unused");
+              if (!parameters.isRandomPartialCompilation()) {
+                resourceTableInspector.assertDoesNotContainResourceWithName(
+                    "string", "feature_unused");
+              }
             },
             FeatureSplit.class.getName())
         .inspectShrunkenResourcesForFeature(
             resourceTableInspector -> {
               resourceTableInspector.assertContainsResourceWithName("string", "feature2_used");
-              resourceTableInspector.assertDoesNotContainResourceWithName(
-                  "string", "feature2_unused");
+              if (!parameters.isRandomPartialCompilation()) {
+                resourceTableInspector.assertDoesNotContainResourceWithName(
+                    "string", "feature2_unused");
+              }
             },
             FeatureSplit2.class.getName())
         .inspectResourceShrinkerLog(
@@ -117,7 +129,9 @@
               for (String unused :
                   ImmutableList.of("base_unused", "feature_unused", "feature2_unused")) {
                 if (optimized) {
-                  inspector.ensureUnreachableOptimized("string", unused);
+                  if (!parameters.isRandomPartialCompilation()) {
+                    inspector.ensureUnreachableOptimized("string", unused);
+                  }
                 } else {
                   inspector.ensureUnreachable("string", unused);
                 }
diff --git a/src/test/java/com/android/tools/r8/androidresources/SyntheticResourceTypeTest.java b/src/test/java/com/android/tools/r8/androidresources/SyntheticResourceTypeTest.java
index 39f81a6..a257436 100644
--- a/src/test/java/com/android/tools/r8/androidresources/SyntheticResourceTypeTest.java
+++ b/src/test/java/com/android/tools/r8/androidresources/SyntheticResourceTypeTest.java
@@ -25,7 +25,11 @@
 
   @Parameters(name = "{0}")
   public static TestParametersCollection parameters() {
-    return getTestParameters().withDefaultDexRuntime().withAllApiLevels().build();
+    return getTestParameters()
+        .withDefaultDexRuntime()
+        .withAllApiLevels()
+        .withPartialCompilation()
+        .build();
   }
 
   public static AndroidTestResource getTestResources(TemporaryFolder temp) throws Exception {
@@ -57,8 +61,7 @@
 
   @Test
   public void testR8() throws Exception {
-    testForR8(parameters.getBackend())
-        .setMinApi(parameters)
+    testForR8(parameters)
         .addProgramClasses(FooBar.class)
         .addAndroidResources(getTestResources(temp))
         .addKeepMainRule(FooBar.class)
@@ -69,7 +72,9 @@
               resourceTableInspector.assertContainsResourceWithName("drawable", "foo");
               // The synthetic macro entries should not be touched by the resource shrinker.
               resourceTableInspector.assertContainsResourceWithName("macro", "macro_name");
-              resourceTableInspector.assertDoesNotContainResourceWithName("drawable", "bar");
+              if (!parameters.isRandomPartialCompilation()) {
+                resourceTableInspector.assertDoesNotContainResourceWithName("drawable", "bar");
+              }
             });
   }
 
diff --git a/src/test/java/com/android/tools/r8/androidresources/TestNameRemovalInResourceTable.java b/src/test/java/com/android/tools/r8/androidresources/TestNameRemovalInResourceTable.java
index b9d73a0..bef5ad8 100644
--- a/src/test/java/com/android/tools/r8/androidresources/TestNameRemovalInResourceTable.java
+++ b/src/test/java/com/android/tools/r8/androidresources/TestNameRemovalInResourceTable.java
@@ -7,13 +7,14 @@
 import static org.junit.Assert.assertTrue;
 
 import com.android.tools.r8.R8TestBuilder;
-import com.android.tools.r8.R8TestCompileResult;
+import com.android.tools.r8.R8TestCompileResultBase;
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.androidresources.AndroidResourceTestingUtils.AndroidTestResource;
 import com.android.tools.r8.androidresources.AndroidResourceTestingUtils.AndroidTestResourceBuilder;
 import com.android.tools.r8.utils.BooleanUtils;
 import java.util.List;
+import org.junit.Assume;
 import org.junit.Test;
 import org.junit.rules.TemporaryFolder;
 import org.junit.runner.RunWith;
@@ -33,7 +34,11 @@
   @Parameters(name = "{0}, optimized: {1}")
   public static List<Object[]> data() {
     return buildParameters(
-        getTestParameters().withDefaultDexRuntime().withAllApiLevels().build(),
+        getTestParameters()
+            .withDefaultDexRuntime()
+            .withAllApiLevels()
+            .withPartialCompilation()
+            .build(),
         BooleanUtils.values());
   }
 
@@ -46,9 +51,9 @@
 
   @Test
   public void testR8() throws Exception {
-    R8TestCompileResult r8TestCompileResult =
-        testForR8(parameters.getBackend())
-            .setMinApi(parameters)
+    Assume.assumeTrue(optimized || parameters.getPartialCompilationTestParameters().isNone());
+    R8TestCompileResultBase<?> r8TestCompileResult =
+        testForR8(parameters)
             .addProgramClasses(FooBar.class)
             .addAndroidResources(getTestResources(temp))
             .applyIf(optimized, R8TestBuilder::enableOptimizedShrinking)
@@ -60,17 +65,21 @@
               resourceTableInspector.assertContainsResourceWithName("string", "bar");
               resourceTableInspector.assertContainsResourceWithName("string", "foo");
               resourceTableInspector.assertContainsResourceWithName("drawable", "foobar");
-              resourceTableInspector.assertDoesNotContainResourceWithName(
-                  "string", "unused_string");
-              resourceTableInspector.assertDoesNotContainResourceWithName(
-                  "drawable", "unused_drawable");
+              if (!parameters.isRandomPartialCompilation()) {
+                resourceTableInspector.assertDoesNotContainResourceWithName(
+                    "string", "unused_string");
+                resourceTableInspector.assertDoesNotContainResourceWithName(
+                    "drawable", "unused_drawable");
+              }
             })
         .run(parameters.getRuntime(), FooBar.class)
         .assertSuccess();
     String dumpResources = r8TestCompileResult.dumpResources();
     if (optimized) {
-      assertFalse(dumpResources.contains("unused_string"));
-      assertFalse(dumpResources.contains("unused_drawable"));
+      if (!parameters.isRandomPartialCompilation()) {
+        assertFalse(dumpResources.contains("unused_string"));
+        assertFalse(dumpResources.contains("unused_drawable"));
+      }
     } else {
       assertTrue(dumpResources.contains("unused_string"));
       assertTrue(dumpResources.contains("unused_drawable"));
diff --git a/src/test/java/com/android/tools/r8/androidresources/TestResourceInlining.java b/src/test/java/com/android/tools/r8/androidresources/TestResourceInlining.java
index 76aa9d0..f9de0e0 100644
--- a/src/test/java/com/android/tools/r8/androidresources/TestResourceInlining.java
+++ b/src/test/java/com/android/tools/r8/androidresources/TestResourceInlining.java
@@ -19,6 +19,7 @@
 import java.io.IOException;
 import java.nio.file.Path;
 import java.util.List;
+import org.junit.Assume;
 import org.junit.Test;
 import org.junit.rules.TemporaryFolder;
 import org.junit.runner.RunWith;
@@ -41,7 +42,11 @@
   @Parameters(name = "{0}, optimize: {1}, addResourcesSubclass: {2}")
   public static List<Object[]> data() {
     return buildParameters(
-        getTestParameters().withDefaultDexRuntime().withAllApiLevels().build(),
+        getTestParameters()
+            .withDefaultDexRuntime()
+            .withAllApiLevels()
+            .withPartialCompilation()
+            .build(),
         BooleanUtils.values(),
         BooleanUtils.values());
   }
@@ -76,8 +81,8 @@
 
   @Test
   public void testR8Optimized() throws Exception {
-    testForR8(parameters.getBackend())
-        .setMinApi(parameters)
+    Assume.assumeTrue(optimize || parameters.getPartialCompilationTestParameters().isNone());
+    testForR8(parameters)
         .addProgramClassFileData(
             AndroidResourceTestingUtils.transformResourcesReferences(FooBar.class))
         .applyIf(
@@ -94,7 +99,9 @@
         .inspectShrunkenResources(
             resourceTableInspector -> {
               if (optimize && !addResourcesSubclass) {
-                resourceTableInspector.assertDoesNotContainResourceWithName("string", "foo");
+                if (!parameters.isRandomPartialCompilation()) {
+                  resourceTableInspector.assertDoesNotContainResourceWithName("string", "foo");
+                }
               } else {
                 // When there are resource subclasses we should not inline, since this can have
                 // side effects (or return different values).
@@ -104,31 +111,35 @@
               resourceTableInspector.assertContainsResourceWithName("string", "bar");
               // Has overlayable value, don't inline
               resourceTableInspector.assertContainsResourceWithName("string", "overlayable");
-              resourceTableInspector.assertDoesNotContainResourceWithName(
-                  "string", "unused_string");
+              if (!parameters.isRandomPartialCompilation()) {
+                resourceTableInspector.assertDoesNotContainResourceWithName(
+                    "string", "unused_string");
+              }
             })
         .inspect(
             inspector -> {
               // We should have removed one of the calls to getString if we are optimizing.
               MethodSubject mainMethodSubject = inspector.clazz(FooBar.class).mainMethod();
               assertThat(mainMethodSubject, isPresent());
-              assertEquals(
-                  mainMethodSubject
-                      .streamInstructions()
-                      .filter(InstructionSubject::isInvokeVirtual)
-                      .filter(
-                          i ->
-                              i.getMethod()
-                                  .holder
-                                  .descriptor
-                                  .toString()
-                                  .equals(DexItemFactory.androidResourcesDescriptorString))
-                      .count(),
-                  optimize && !addResourcesSubclass ? 2 : 3);
+              if (!parameters.isRandomPartialCompilation()) {
+                assertEquals(
+                    mainMethodSubject
+                        .streamInstructions()
+                        .filter(InstructionSubject::isInvokeVirtual)
+                        .filter(
+                            i ->
+                                i.getMethod()
+                                    .holder
+                                    .descriptor
+                                    .toString()
+                                    .equals(DexItemFactory.androidResourcesDescriptorString))
+                        .count(),
+                    optimize && !addResourcesSubclass ? 2 : 3);
+              }
             })
         .run(parameters.getRuntime(), FooBar.class)
         .applyIf(
-            optimize && !addResourcesSubclass,
+            optimize && !addResourcesSubclass && !parameters.isRandomPartialCompilation(),
             result -> {
               result.assertSuccessWithOutputLines(
                   "foo", Resources.GET_STRING_VALUE, Resources.GET_STRING_VALUE);
diff --git a/src/test/java/com/android/tools/r8/androidresources/XmlFilesWithClassReferences.java b/src/test/java/com/android/tools/r8/androidresources/XmlFilesWithClassReferences.java
index e69669b..cdaa7cd 100644
--- a/src/test/java/com/android/tools/r8/androidresources/XmlFilesWithClassReferences.java
+++ b/src/test/java/com/android/tools/r8/androidresources/XmlFilesWithClassReferences.java
@@ -31,7 +31,11 @@
 
   @Parameters(name = "{0}")
   public static TestParametersCollection parameters() {
-    return getTestParameters().withDefaultDexRuntime().withAllApiLevels().build();
+    return getTestParameters()
+        .withDefaultDexRuntime()
+        .withAllApiLevels()
+        .withPartialCompilation()
+        .build();
   }
 
   public static String VIEW_WITH_CLASS_ATTRIBUTE_REFERENCE =
@@ -85,8 +89,7 @@
   public void testXmlReferenceWithBarClassInserted(String xmlFile, boolean assertFoo)
       throws Exception {
     String formatedXmlFile = String.format(xmlFile, Bar.class.getTypeName());
-    testForR8(parameters.getBackend())
-        .setMinApi(parameters)
+    testForR8(parameters)
         .addProgramClasses(TestClass.class, Bar.class, BarFoo.class)
         .addAndroidResources(getTestResources(temp, formatedXmlFile))
         .addKeepMainRule(TestClass.class)
@@ -104,8 +107,10 @@
               assertThat(barClass, isPresentAndNotRenamed());
               // We should have two and only two methods, the two constructors.
               assertEquals(barClass.allMethods(MethodSubject::isInstanceInitializer).size(), 2);
-              assertEquals(barClass.allMethods().size(), 2);
-              assertThat(codeInspector.clazz(BarFoo.class), assertFoo ? isPresent() : isAbsent());
+              if (!parameters.isRandomPartialCompilation()) {
+                assertEquals(barClass.allMethods().size(), 2);
+                assertThat(codeInspector.clazz(BarFoo.class), assertFoo ? isPresent() : isAbsent());
+              }
             })
         .assertSuccess();
   }
diff --git a/src/test/java/com/android/tools/r8/androidresources/XmlSelfReferenceTest.java b/src/test/java/com/android/tools/r8/androidresources/XmlSelfReferenceTest.java
index f14c778..9f33237 100644
--- a/src/test/java/com/android/tools/r8/androidresources/XmlSelfReferenceTest.java
+++ b/src/test/java/com/android/tools/r8/androidresources/XmlSelfReferenceTest.java
@@ -23,7 +23,11 @@
 
   @Parameters(name = "{0}")
   public static TestParametersCollection parameters() {
-    return getTestParameters().withDefaultDexRuntime().withAllApiLevels().build();
+    return getTestParameters()
+        .withDefaultDexRuntime()
+        .withAllApiLevels()
+        .withPartialCompilation()
+        .build();
   }
 
   public static String MANIFEST_WITH_XML_REFERENCE =
@@ -55,8 +59,7 @@
 
   @Test
   public void testR8() throws Exception {
-    testForR8(parameters.getBackend())
-        .setMinApi(parameters)
+    testForR8(parameters)
         .addAndroidResources(getTestResources(temp))
         .enableOptimizedShrinking()
         .compile()