Backport R8 partial test setup

Change-Id: Ic3a370ba317559e8b085774525a7cf15cabe14b7
diff --git a/src/test/testbase/java/com/android/tools/r8/PartialCompilationTestParameters.java b/src/test/testbase/java/com/android/tools/r8/PartialCompilationTestParameters.java
new file mode 100644
index 0000000..74fc752
--- /dev/null
+++ b/src/test/testbase/java/com/android/tools/r8/PartialCompilationTestParameters.java
@@ -0,0 +1,31 @@
+// Copyright (c) 2025, 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;
+
+public enum PartialCompilationTestParameters {
+  NONE,
+  INCLUDE_ALL,
+  EXCLUDE_ALL,
+  RANDOM;
+
+  public boolean isNone() {
+    return this == NONE;
+  }
+
+  public boolean isSome() {
+    return !isNone();
+  }
+
+  public boolean isIncludeAll() {
+    return this == INCLUDE_ALL;
+  }
+
+  public boolean isExcludeAll() {
+    return this == EXCLUDE_ALL;
+  }
+
+  public boolean isRandom() {
+    return this == RANDOM;
+  }
+}
diff --git a/src/test/testbase/java/com/android/tools/r8/TestBase.java b/src/test/testbase/java/com/android/tools/r8/TestBase.java
index fffa833..2a5466d 100644
--- a/src/test/testbase/java/com/android/tools/r8/TestBase.java
+++ b/src/test/testbase/java/com/android/tools/r8/TestBase.java
@@ -210,6 +210,18 @@
     return testForR8(temp, backend);
   }
 
+  public R8TestBuilder<? extends R8TestCompileResultBase<?>, R8TestRunResult, ?> testForR8(
+      TestParameters parameters) {
+    return testForR8(parameters.getBackend(), parameters.getPartialCompilationTestParameters())
+        .applyIf(parameters.hasApiLevel(), b -> b.setMinApi(parameters));
+  }
+
+  public R8TestBuilder<? extends R8TestCompileResultBase<?>, R8TestRunResult, ?> testForR8(
+      Backend backend, PartialCompilationTestParameters parameters) {
+    assertTrue(parameters.isNone());
+    return testForR8(backend);
+  }
+
   public R8PartialTestBuilder testForR8Partial(Backend backend) {
     return testForR8Partial(temp, backend);
   }
@@ -238,6 +250,17 @@
     return testForD8(temp, backend);
   }
 
+  public TestCompilerBuilder<?, ?, ?, ?, ?> testForD8(TestParameters parameters) {
+    return testForD8(parameters.getBackend(), parameters.getPartialCompilationTestParameters())
+        .applyIf(parameters.hasApiLevel(), b -> b.setMinApi(parameters));
+  }
+
+  public TestCompilerBuilder<?, ?, ?, ?, ?> testForD8(
+      Backend backend, PartialCompilationTestParameters partialCompilationTestParameters) {
+    assertTrue(partialCompilationTestParameters.isNone());
+    return testForD8(backend);
+  }
+
   public AssistantTestBuilder testForAssistant() {
     return AssistantTestBuilder.create(new TestState(temp));
   }
diff --git a/src/test/testbase/java/com/android/tools/r8/TestParameters.java b/src/test/testbase/java/com/android/tools/r8/TestParameters.java
index ef797e2..4eea4a8 100644
--- a/src/test/testbase/java/com/android/tools/r8/TestParameters.java
+++ b/src/test/testbase/java/com/android/tools/r8/TestParameters.java
@@ -175,6 +175,10 @@
     testCompilerBuilder.setMinApi(apiLevel);
   }
 
+  public boolean hasApiLevel() {
+    return apiLevel != null;
+  }
+
   // TODO(b/270021825): Tests should not access the underlying API level directly, but may be
   //  allowed to query if the api level satisfies some condition.
   @Deprecated
@@ -205,6 +209,10 @@
     return runtime.asCf();
   }
 
+  public PartialCompilationTestParameters getPartialCompilationTestParameters() {
+    return PartialCompilationTestParameters.NONE;
+  }
+
   // Access to underlying runtime/wrapper.
   public TestRuntime getRuntime() {
     return runtime;
diff --git a/src/test/testbase/java/com/android/tools/r8/TestParametersBuilder.java b/src/test/testbase/java/com/android/tools/r8/TestParametersBuilder.java
index 16a0997..6f7ffc2 100644
--- a/src/test/testbase/java/com/android/tools/r8/TestParametersBuilder.java
+++ b/src/test/testbase/java/com/android/tools/r8/TestParametersBuilder.java
@@ -181,6 +181,22 @@
         vm -> vm != startExcluding && startExcluding.isOlderThanOrEqual(vm));
   }
 
+  public TestParametersBuilder withPartialCompilation() {
+    return this;
+  }
+
+  public TestParametersBuilder withIncludeAllPartialCompilation() {
+    return this;
+  }
+
+  public TestParametersBuilder withExcludeAllPartialCompilation() {
+    return this;
+  }
+
+  public TestParametersBuilder withRandomPartialCompilation() {
+    return this;
+  }
+
   /** Add all available DEX runtimes ending at and including {@param endInclusive}. */
   public TestParametersBuilder withDexRuntimesEndingAtIncluding(DexVm.Version endInclusive) {
     return withDexRuntimeFilter(vm -> vm.isOlderThanOrEqual(endInclusive));