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));