Move shared/basic testing utilities to a testbase module

Bug: 327326057
Change-Id: I0ffaaf3fc9a5db57df41b06fa45d273b2595da2e
diff --git a/d8_r8/test/build.gradle.kts b/d8_r8/test/build.gradle.kts
index ef3e504..2bd2638 100644
--- a/d8_r8/test/build.gradle.kts
+++ b/d8_r8/test/build.gradle.kts
@@ -80,18 +80,22 @@
     archiveFileName.set("r8test_base.jar")
   }
 
-  // When testing R8 lib with relocated deps we must relocate kotlinx.metadata in the tests, since
-  // types from kotlinx.metadata are used on the R8 main/R8 test boundary.
-  //
-  // This is not needed when testing R8 lib excluding deps since we simply include the deps on the
-  // classpath at runtime.
-  val relocateTestsForR8LibWithRelocatedDeps by registering(Exec::class) {
-    dependsOn(packageTests, r8WithRelocatedDepsTask)
-    val r8WithRelocatedDepsJar = r8WithRelocatedDepsTask.getSingleOutputFile()
-    val testJar = packageTests.getSingleOutputFile()
-    inputs.files(r8WithRelocatedDepsJar, testJar)
-    val outputJar = file(Paths.get("build", "libs", "r8tests-relocated.jar"))
+  val packageTestBaseExcludeKeep by registering(Jar::class) {
+    dependsOn(packageTestBase)
+    from(zipTree(packageTestBase.getSingleOutputFile()))
+    // TODO(b/328353718): we have com.android.tools.r8.Keep in both test_base and main
+    exclude("com/android/tools/r8/Keep.class")
+    archiveFileName.set("r8test_base_no_keep.jar")
+  }
+
+
+  fun Exec.executeRelocator(jarProvider: TaskProvider<*>, artifactName: String) {
+    dependsOn(r8WithRelocatedDepsTask, jarProvider)
+    val outputJar = file(Paths.get("build", "libs", artifactName))
     outputs.file(outputJar)
+    val r8WithRelocatedDepsJar = r8WithRelocatedDepsTask.getSingleOutputFile()
+    val testJar = jarProvider.getSingleOutputFile()
+    inputs.files(r8WithRelocatedDepsJar, testJar)
     commandLine = baseCompilerCommandLine(
       r8WithRelocatedDepsJar,
       "relocator",
@@ -103,6 +107,19 @@
              "kotlinx.metadata.**->com.android.tools.r8.jetbrains.kotlinx.metadata"))
   }
 
+  // When testing R8 lib with relocated deps we must relocate kotlinx.metadata in the tests, since
+  // types from kotlinx.metadata are used on the R8 main/R8 test boundary.
+  //
+  // This is not needed when testing R8 lib excluding deps since we simply include the deps on the
+  // classpath at runtime.
+  val relocateTestsForR8LibWithRelocatedDeps by registering(Exec::class) {
+    executeRelocator(packageTests, "r8tests-relocated.jar")
+  }
+
+  val relocateTestBaseForR8LibWithRelocatedDeps by registering(Exec::class) {
+    executeRelocator(packageTestBase, "r8testbase-relocated.jar")
+  }
+
   fun Exec.generateKeepRulesForR8Lib(
           targetJarProvider: Task, testJarProviders: List<TaskProvider<*>>, artifactName: String) {
     dependsOn(
@@ -146,7 +163,7 @@
   val generateKeepRulesForR8LibWithRelocatedDeps by registering(Exec::class) {
     generateKeepRulesForR8Lib(
             r8WithRelocatedDepsTask,
-            listOf(relocateTestsForR8LibWithRelocatedDeps, packageTestBase),
+            listOf(relocateTestsForR8LibWithRelocatedDeps, relocateTestBaseForR8LibWithRelocatedDeps),
             "generated-keep-rules-r8lib.txt")
   }
 
@@ -258,12 +275,12 @@
             r8JarProvider,
             r8WithRelocatedDepsTask,
             testJarProvider,
-            packageTestBase)
+            packageTestBaseExcludeKeep)
     val keepRulesFile = keepRulesFileProvider.getSingleOutputFile()
     val rtJar = resolve(ThirdPartyDeps.java8Runtime, "rt.jar").getSingleFile()
     val r8Jar = r8JarProvider.getSingleOutputFile()
     val r8WithRelocatedDepsJar = r8WithRelocatedDepsTask.getSingleOutputFile()
-    val testBaseJar = packageTestBase.getSingleOutputFile()
+    val testBaseJar = packageTestBaseExcludeKeep.getSingleOutputFile()
     val testDepsJar = packageTestDeps.getSingleOutputFile()
     val testJar = testJarProvider.getSingleOutputFile()
     inputs.files(keepRulesFile, rtJar, r8Jar, r8WithRelocatedDepsJar, testDepsJar, testJar)
@@ -306,7 +323,7 @@
     rewriteTestsForR8Lib(
             generateTestKeepRulesR8LibWithRelocatedDeps,
             r8WithRelocatedDepsTask,
-            packageTestBase,
+            relocateTestBaseForR8LibWithRelocatedDeps,
             "r8libtestbase-cf.jar",
             false)
   }
@@ -333,6 +350,13 @@
     into(outputDir)
   }
 
+  val unzipTestBase by registering(Copy::class) {
+    dependsOn(cleanUnzipTests, packageTestBase)
+    val outputDir = file("${buildDir}/unpacked/testbase")
+    from(zipTree(packageTestBase.getSingleOutputFile()))
+    into(outputDir)
+  }
+
   fun Copy.unzipRewrittenTestsForR8Lib(
           rewrittenTestJarProvider: TaskProvider<Exec>, outDirName: String) {
     dependsOn(rewrittenTestJarProvider)
@@ -374,6 +398,7 @@
             rewriteTestBaseForR8LibWithRelocatedDeps,
             unzipRewrittenTests,
             unzipTests,
+            unzipTestBase,
             gradle.includedBuild("shared").task(":downloadDeps"))
     if (!project.hasProperty("no_internal")) {
       dependsOn(gradle.includedBuild("shared").task(":downloadDepsInternal"))
@@ -392,6 +417,8 @@
             rewriteTestBaseForR8LibWithRelocatedDeps.getSingleOutputFile())
     testClassesDirs = unzipRewrittenTests.get().getOutputs().getFiles()
     systemProperty("TEST_DATA_LOCATION", unzipTests.getSingleOutputFile())
+    systemProperty("TESTBASE_DATA_LOCATION", unzipTestBase.getSingleOutputFile())
+
     systemProperty(
       "BUILD_PROP_KEEPANNO_RUNTIME_PATH",
       keepAnnoCompileTask.getOutputs().getFiles().getAsPath().split(File.pathSeparator)[0])
diff --git a/d8_r8/test_modules/tests_java_8/build.gradle.kts b/d8_r8/test_modules/tests_java_8/build.gradle.kts
index 1d76606..779cd6c 100644
--- a/d8_r8/test_modules/tests_java_8/build.gradle.kts
+++ b/d8_r8/test_modules/tests_java_8/build.gradle.kts
@@ -131,6 +131,9 @@
     dependsOn(sourceSetDependencyTask)
     systemProperty("TEST_DATA_LOCATION",
                    layout.buildDirectory.dir("classes/java/test").get().toString())
+    systemProperty("TESTBASE_DATA_LOCATION",
+                   testbaseJavaCompileTask.outputs.files.getAsPath().split(File.pathSeparator)[0])
+
     systemProperty(
       "BUILD_PROP_KEEPANNO_RUNTIME_PATH",
       keepAnnoCompileTask.outputs.files.getAsPath().split(File.pathSeparator)[0])
diff --git a/src/test/bootstrap/com/android/tools/r8/bootstrap/RetraceStackTraceFunctionalCompositionTest.java b/src/test/bootstrap/com/android/tools/r8/bootstrap/RetraceStackTraceFunctionalCompositionTest.java
index 7fcb455..35f157d 100644
--- a/src/test/bootstrap/com/android/tools/r8/bootstrap/RetraceStackTraceFunctionalCompositionTest.java
+++ b/src/test/bootstrap/com/android/tools/r8/bootstrap/RetraceStackTraceFunctionalCompositionTest.java
@@ -16,7 +16,6 @@
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.TestParametersCollection;
 import com.android.tools.r8.ToolHelper;
-import com.android.tools.r8.dex.Marker.Backend;
 import com.android.tools.r8.retrace.ProguardMapProducer;
 import com.android.tools.r8.retrace.ProguardMappingSupplier;
 import com.android.tools.r8.retrace.Retrace;
diff --git a/src/test/java/com/android/tools/r8/benchmarks/BenchmarkResultsCollection.java b/src/test/java/com/android/tools/r8/benchmarks/BenchmarkResultsCollection.java
index a960739..14b10f4 100644
--- a/src/test/java/com/android/tools/r8/benchmarks/BenchmarkResultsCollection.java
+++ b/src/test/java/com/android/tools/r8/benchmarks/BenchmarkResultsCollection.java
@@ -3,7 +3,6 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.benchmarks;
 
-import com.android.tools.r8.benchmarks.BenchmarkRunner.ResultMode;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
diff --git a/src/test/java/com/android/tools/r8/benchmarks/BenchmarkResultsSingle.java b/src/test/java/com/android/tools/r8/benchmarks/BenchmarkResultsSingle.java
index fc6540e..e0bb9f193 100644
--- a/src/test/java/com/android/tools/r8/benchmarks/BenchmarkResultsSingle.java
+++ b/src/test/java/com/android/tools/r8/benchmarks/BenchmarkResultsSingle.java
@@ -3,7 +3,6 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.benchmarks;
 
-import com.android.tools.r8.benchmarks.BenchmarkRunner.ResultMode;
 import it.unimi.dsi.fastutil.longs.LongArrayList;
 import it.unimi.dsi.fastutil.longs.LongList;
 import java.util.Set;
diff --git a/src/test/java/com/android/tools/r8/benchmarks/BenchmarkResultsWarmup.java b/src/test/java/com/android/tools/r8/benchmarks/BenchmarkResultsWarmup.java
index 86b1dc4..2ac97a6 100644
--- a/src/test/java/com/android/tools/r8/benchmarks/BenchmarkResultsWarmup.java
+++ b/src/test/java/com/android/tools/r8/benchmarks/BenchmarkResultsWarmup.java
@@ -3,7 +3,6 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.benchmarks;
 
-import com.android.tools.r8.benchmarks.BenchmarkRunner.ResultMode;
 import it.unimi.dsi.fastutil.longs.LongArrayList;
 import it.unimi.dsi.fastutil.longs.LongList;
 
diff --git a/src/test/java/com/android/tools/r8/benchmarks/BenchmarkRunner.java b/src/test/java/com/android/tools/r8/benchmarks/BenchmarkRunner.java
index f210e18..2fed6dc 100644
--- a/src/test/java/com/android/tools/r8/benchmarks/BenchmarkRunner.java
+++ b/src/test/java/com/android/tools/r8/benchmarks/BenchmarkRunner.java
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.benchmarks;
 
-import com.android.tools.r8.utils.StringUtils;
+import com.android.tools.r8.benchmarks.BenchmarkResults.ResultMode;
 
 public class BenchmarkRunner {
 
@@ -11,20 +11,10 @@
     void run(BenchmarkResults results) throws Exception;
   }
 
-  public enum ResultMode {
-    AVERAGE,
-    SUM;
-
-    @Override
-    public String toString() {
-      return StringUtils.toLowerCase(name());
-    }
-  }
-
   private final BenchmarkConfig config;
   private int warmups = 0;
   private int iterations = 1;
-  private ResultMode resultMode = ResultMode.AVERAGE;
+  private ResultMode resultMode = BenchmarkResults.ResultMode.AVERAGE;
 
   private BenchmarkRunner(BenchmarkConfig config) {
     this.config = config;
@@ -45,12 +35,12 @@
   }
 
   public BenchmarkRunner reportResultAverage() {
-    resultMode = ResultMode.AVERAGE;
+    resultMode = BenchmarkResults.ResultMode.AVERAGE;
     return this;
   }
 
   public BenchmarkRunner reportResultSum() {
-    resultMode = ResultMode.SUM;
+    resultMode = BenchmarkResults.ResultMode.SUM;
     return this;
   }
 
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/boxedprimitives/BoxedByteReturnPropagationTest.java b/src/test/java/com/android/tools/r8/ir/optimize/boxedprimitives/BoxedByteReturnPropagationTest.java
index 3043c57..a9f0afe 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/boxedprimitives/BoxedByteReturnPropagationTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/boxedprimitives/BoxedByteReturnPropagationTest.java
@@ -11,7 +11,6 @@
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.TestParametersCollection;
-import com.android.tools.r8.ir.optimize.boxedprimitives.BoxedBooleanReturnPropagationTest.Main;
 import com.android.tools.r8.utils.codeinspector.InstructionSubject;
 import com.android.tools.r8.utils.codeinspector.MethodSubject;
 import org.junit.Test;
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/boxedprimitives/BoxedCharacterReturnPropagationTest.java b/src/test/java/com/android/tools/r8/ir/optimize/boxedprimitives/BoxedCharacterReturnPropagationTest.java
index 6542212..cca4303 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/boxedprimitives/BoxedCharacterReturnPropagationTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/boxedprimitives/BoxedCharacterReturnPropagationTest.java
@@ -11,7 +11,6 @@
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.TestParametersCollection;
-import com.android.tools.r8.ir.optimize.boxedprimitives.BoxedByteReturnPropagationTest.Main;
 import com.android.tools.r8.utils.codeinspector.InstructionSubject;
 import com.android.tools.r8.utils.codeinspector.MethodSubject;
 import org.junit.Test;
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/boxedprimitives/BoxedDoubleReturnPropagationTest.java b/src/test/java/com/android/tools/r8/ir/optimize/boxedprimitives/BoxedDoubleReturnPropagationTest.java
index a383a2d..c3944d5 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/boxedprimitives/BoxedDoubleReturnPropagationTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/boxedprimitives/BoxedDoubleReturnPropagationTest.java
@@ -11,7 +11,6 @@
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.TestParametersCollection;
-import com.android.tools.r8.ir.optimize.boxedprimitives.BoxedCharacterReturnPropagationTest.Main;
 import com.android.tools.r8.utils.codeinspector.InstructionSubject;
 import com.android.tools.r8.utils.codeinspector.MethodSubject;
 import org.junit.Test;
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/boxedprimitives/BoxedFloatReturnPropagationTest.java b/src/test/java/com/android/tools/r8/ir/optimize/boxedprimitives/BoxedFloatReturnPropagationTest.java
index ca68794..2b7ba63 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/boxedprimitives/BoxedFloatReturnPropagationTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/boxedprimitives/BoxedFloatReturnPropagationTest.java
@@ -11,7 +11,6 @@
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.TestParametersCollection;
-import com.android.tools.r8.ir.optimize.boxedprimitives.BoxedCharacterReturnPropagationTest.Main;
 import com.android.tools.r8.utils.codeinspector.InstructionSubject;
 import com.android.tools.r8.utils.codeinspector.MethodSubject;
 import org.junit.Test;
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/boxedprimitives/BoxedIntegerReturnPropagationTest.java b/src/test/java/com/android/tools/r8/ir/optimize/boxedprimitives/BoxedIntegerReturnPropagationTest.java
index 0f205ea..bc39ab8 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/boxedprimitives/BoxedIntegerReturnPropagationTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/boxedprimitives/BoxedIntegerReturnPropagationTest.java
@@ -11,7 +11,6 @@
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.TestParametersCollection;
-import com.android.tools.r8.ir.optimize.boxedprimitives.BoxedCharacterReturnPropagationTest.Main;
 import com.android.tools.r8.utils.codeinspector.InstructionSubject;
 import com.android.tools.r8.utils.codeinspector.MethodSubject;
 import org.junit.Test;
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/boxedprimitives/BoxedLongReturnPropagationTest.java b/src/test/java/com/android/tools/r8/ir/optimize/boxedprimitives/BoxedLongReturnPropagationTest.java
index e588489..53aebf8 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/boxedprimitives/BoxedLongReturnPropagationTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/boxedprimitives/BoxedLongReturnPropagationTest.java
@@ -11,7 +11,6 @@
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.TestParametersCollection;
-import com.android.tools.r8.ir.optimize.boxedprimitives.BoxedCharacterReturnPropagationTest.Main;
 import com.android.tools.r8.utils.codeinspector.InstructionSubject;
 import com.android.tools.r8.utils.codeinspector.MethodSubject;
 import org.junit.Test;
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/boxedprimitives/BoxedShortReturnPropagationTest.java b/src/test/java/com/android/tools/r8/ir/optimize/boxedprimitives/BoxedShortReturnPropagationTest.java
index 3c8b0b8..fecac90 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/boxedprimitives/BoxedShortReturnPropagationTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/boxedprimitives/BoxedShortReturnPropagationTest.java
@@ -11,7 +11,6 @@
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.TestParametersCollection;
-import com.android.tools.r8.ir.optimize.boxedprimitives.BoxedCharacterReturnPropagationTest.Main;
 import com.android.tools.r8.utils.codeinspector.InstructionSubject;
 import com.android.tools.r8.utils.codeinspector.MethodSubject;
 import org.junit.Test;
diff --git a/src/test/java/com/android/tools/r8/rewrite/arrays/ArrayOfConstClassArraysTest.java b/src/test/java/com/android/tools/r8/rewrite/arrays/ArrayOfConstClassArraysTest.java
index b37c8a2..d2afb69 100644
--- a/src/test/java/com/android/tools/r8/rewrite/arrays/ArrayOfConstClassArraysTest.java
+++ b/src/test/java/com/android/tools/r8/rewrite/arrays/ArrayOfConstClassArraysTest.java
@@ -10,7 +10,6 @@
 import com.android.tools.r8.NeverInline;
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.rewrite.arrays.ConstClassArrayWithUniqueValuesTest.TestClass;
 import com.android.tools.r8.utils.StringUtils;
 import com.android.tools.r8.utils.codeinspector.CodeInspector;
 import com.android.tools.r8.utils.codeinspector.InstructionSubject;
diff --git a/src/test/java/com/android/tools/r8/rewrite/arrays/ArrayOfStringArraysTest.java b/src/test/java/com/android/tools/r8/rewrite/arrays/ArrayOfStringArraysTest.java
index d238b1a..5aaed9c 100644
--- a/src/test/java/com/android/tools/r8/rewrite/arrays/ArrayOfStringArraysTest.java
+++ b/src/test/java/com/android/tools/r8/rewrite/arrays/ArrayOfStringArraysTest.java
@@ -10,7 +10,6 @@
 import com.android.tools.r8.NeverInline;
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.rewrite.arrays.ArrayOfConstClassArraysTest.TestClass;
 import com.android.tools.r8.utils.StringUtils;
 import com.android.tools.r8.utils.codeinspector.CodeInspector;
 import com.android.tools.r8.utils.codeinspector.InstructionSubject;
diff --git a/src/test/java/com/android/tools/r8/AlwaysClassInline.java b/src/test/testbase/java/com/android/tools/r8/AlwaysClassInline.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/AlwaysClassInline.java
rename to src/test/testbase/java/com/android/tools/r8/AlwaysClassInline.java
diff --git a/src/test/java/com/android/tools/r8/AlwaysInline.java b/src/test/testbase/java/com/android/tools/r8/AlwaysInline.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/AlwaysInline.java
rename to src/test/testbase/java/com/android/tools/r8/AlwaysInline.java
diff --git a/src/test/java/com/android/tools/r8/AsmTestBase.java b/src/test/testbase/java/com/android/tools/r8/AsmTestBase.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/AsmTestBase.java
rename to src/test/testbase/java/com/android/tools/r8/AsmTestBase.java
diff --git a/src/test/java/com/android/tools/r8/AssumeMayHaveSideEffects.java b/src/test/testbase/java/com/android/tools/r8/AssumeMayHaveSideEffects.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/AssumeMayHaveSideEffects.java
rename to src/test/testbase/java/com/android/tools/r8/AssumeMayHaveSideEffects.java
diff --git a/src/test/java/com/android/tools/r8/AssumeNoClassInitializationSideEffects.java b/src/test/testbase/java/com/android/tools/r8/AssumeNoClassInitializationSideEffects.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/AssumeNoClassInitializationSideEffects.java
rename to src/test/testbase/java/com/android/tools/r8/AssumeNoClassInitializationSideEffects.java
diff --git a/src/test/java/com/android/tools/r8/AssumeNoSideEffects.java b/src/test/testbase/java/com/android/tools/r8/AssumeNoSideEffects.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/AssumeNoSideEffects.java
rename to src/test/testbase/java/com/android/tools/r8/AssumeNoSideEffects.java
diff --git a/src/test/java/com/android/tools/r8/AssumeNotNull.java b/src/test/testbase/java/com/android/tools/r8/AssumeNotNull.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/AssumeNotNull.java
rename to src/test/testbase/java/com/android/tools/r8/AssumeNotNull.java
diff --git a/src/test/java/com/android/tools/r8/CheckEnumUnboxed.java b/src/test/testbase/java/com/android/tools/r8/CheckEnumUnboxed.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/CheckEnumUnboxed.java
rename to src/test/testbase/java/com/android/tools/r8/CheckEnumUnboxed.java
diff --git a/src/test/java/com/android/tools/r8/CollectorsUtils.java b/src/test/testbase/java/com/android/tools/r8/CollectorsUtils.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/CollectorsUtils.java
rename to src/test/testbase/java/com/android/tools/r8/CollectorsUtils.java
diff --git a/src/test/java/com/android/tools/r8/D8TestBuilder.java b/src/test/testbase/java/com/android/tools/r8/D8TestBuilder.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/D8TestBuilder.java
rename to src/test/testbase/java/com/android/tools/r8/D8TestBuilder.java
diff --git a/src/test/java/com/android/tools/r8/D8TestCompileResult.java b/src/test/testbase/java/com/android/tools/r8/D8TestCompileResult.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/D8TestCompileResult.java
rename to src/test/testbase/java/com/android/tools/r8/D8TestCompileResult.java
diff --git a/src/test/java/com/android/tools/r8/D8TestRunResult.java b/src/test/testbase/java/com/android/tools/r8/D8TestRunResult.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/D8TestRunResult.java
rename to src/test/testbase/java/com/android/tools/r8/D8TestRunResult.java
diff --git a/src/test/java/com/android/tools/r8/DXTestCompileResult.java b/src/test/testbase/java/com/android/tools/r8/DXTestCompileResult.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/DXTestCompileResult.java
rename to src/test/testbase/java/com/android/tools/r8/DXTestCompileResult.java
diff --git a/src/test/java/com/android/tools/r8/DXTestRunResult.java b/src/test/testbase/java/com/android/tools/r8/DXTestRunResult.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/DXTestRunResult.java
rename to src/test/testbase/java/com/android/tools/r8/DXTestRunResult.java
diff --git a/src/test/java/com/android/tools/r8/DesugarTestBuilder.java b/src/test/testbase/java/com/android/tools/r8/DesugarTestBuilder.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/DesugarTestBuilder.java
rename to src/test/testbase/java/com/android/tools/r8/DesugarTestBuilder.java
diff --git a/src/test/java/com/android/tools/r8/DesugarTestConfiguration.java b/src/test/testbase/java/com/android/tools/r8/DesugarTestConfiguration.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/DesugarTestConfiguration.java
rename to src/test/testbase/java/com/android/tools/r8/DesugarTestConfiguration.java
diff --git a/src/test/java/com/android/tools/r8/DesugarTestRunResult.java b/src/test/testbase/java/com/android/tools/r8/DesugarTestRunResult.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/DesugarTestRunResult.java
rename to src/test/testbase/java/com/android/tools/r8/DesugarTestRunResult.java
diff --git a/src/test/java/com/android/tools/r8/DeviceRunner.java b/src/test/testbase/java/com/android/tools/r8/DeviceRunner.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/DeviceRunner.java
rename to src/test/testbase/java/com/android/tools/r8/DeviceRunner.java
diff --git a/src/test/java/com/android/tools/r8/Dex2OatTestRunResult.java b/src/test/testbase/java/com/android/tools/r8/Dex2OatTestRunResult.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/Dex2OatTestRunResult.java
rename to src/test/testbase/java/com/android/tools/r8/Dex2OatTestRunResult.java
diff --git a/src/test/java/com/android/tools/r8/DiagnosticsChecker.java b/src/test/testbase/java/com/android/tools/r8/DiagnosticsChecker.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/DiagnosticsChecker.java
rename to src/test/testbase/java/com/android/tools/r8/DiagnosticsChecker.java
diff --git a/src/test/java/com/android/tools/r8/DiagnosticsMatcher.java b/src/test/testbase/java/com/android/tools/r8/DiagnosticsMatcher.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/DiagnosticsMatcher.java
rename to src/test/testbase/java/com/android/tools/r8/DiagnosticsMatcher.java
diff --git a/src/test/java/com/android/tools/r8/ExternalR8TestBuilder.java b/src/test/testbase/java/com/android/tools/r8/ExternalR8TestBuilder.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/ExternalR8TestBuilder.java
rename to src/test/testbase/java/com/android/tools/r8/ExternalR8TestBuilder.java
diff --git a/src/test/java/com/android/tools/r8/ExternalR8TestCompileResult.java b/src/test/testbase/java/com/android/tools/r8/ExternalR8TestCompileResult.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/ExternalR8TestCompileResult.java
rename to src/test/testbase/java/com/android/tools/r8/ExternalR8TestCompileResult.java
diff --git a/src/test/java/com/android/tools/r8/ExternalR8TestRunResult.java b/src/test/testbase/java/com/android/tools/r8/ExternalR8TestRunResult.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/ExternalR8TestRunResult.java
rename to src/test/testbase/java/com/android/tools/r8/ExternalR8TestRunResult.java
diff --git a/src/test/java/com/android/tools/r8/GenerateMainDexListResult.java b/src/test/testbase/java/com/android/tools/r8/GenerateMainDexListResult.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/GenerateMainDexListResult.java
rename to src/test/testbase/java/com/android/tools/r8/GenerateMainDexListResult.java
diff --git a/src/test/java/com/android/tools/r8/GenerateMainDexListRunResult.java b/src/test/testbase/java/com/android/tools/r8/GenerateMainDexListRunResult.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/GenerateMainDexListRunResult.java
rename to src/test/testbase/java/com/android/tools/r8/GenerateMainDexListRunResult.java
diff --git a/src/test/java/com/android/tools/r8/GenerateMainDexListTestBuilder.java b/src/test/testbase/java/com/android/tools/r8/GenerateMainDexListTestBuilder.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/GenerateMainDexListTestBuilder.java
rename to src/test/testbase/java/com/android/tools/r8/GenerateMainDexListTestBuilder.java
diff --git a/src/test/java/com/android/tools/r8/IntermediateCfD8TestBuilder.java b/src/test/testbase/java/com/android/tools/r8/IntermediateCfD8TestBuilder.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/IntermediateCfD8TestBuilder.java
rename to src/test/testbase/java/com/android/tools/r8/IntermediateCfD8TestBuilder.java
diff --git a/src/test/java/com/android/tools/r8/JavaCompilerTool.java b/src/test/testbase/java/com/android/tools/r8/JavaCompilerTool.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/JavaCompilerTool.java
rename to src/test/testbase/java/com/android/tools/r8/JavaCompilerTool.java
diff --git a/src/test/java/com/android/tools/r8/Jdk9TestUtils.java b/src/test/testbase/java/com/android/tools/r8/Jdk9TestUtils.java
similarity index 76%
rename from src/test/java/com/android/tools/r8/Jdk9TestUtils.java
rename to src/test/testbase/java/com/android/tools/r8/Jdk9TestUtils.java
index 8b6bfbb..302927b 100644
--- a/src/test/java/com/android/tools/r8/Jdk9TestUtils.java
+++ b/src/test/testbase/java/com/android/tools/r8/Jdk9TestUtils.java
@@ -6,13 +6,14 @@
 
 import static com.android.tools.r8.desugar.LibraryFilesHelper.getJdk9LibraryFiles;
 
+import com.android.tools.r8.desugar.LibraryFilesHelper;
 import org.junit.rules.TemporaryFolder;
 
 public class Jdk9TestUtils {
 
   public static ThrowableConsumer<R8FullTestBuilder> addJdk9LibraryFiles(
       TemporaryFolder temporaryFolder) {
-    return builder -> builder.addLibraryFiles(getJdk9LibraryFiles(temporaryFolder));
+    return builder -> builder.addLibraryFiles(LibraryFilesHelper.getJdk9LibraryFiles(temporaryFolder));
   }
 
 }
diff --git a/src/test/java/com/android/tools/r8/JvmTestBuilder.java b/src/test/testbase/java/com/android/tools/r8/JvmTestBuilder.java
similarity index 97%
rename from src/test/java/com/android/tools/r8/JvmTestBuilder.java
rename to src/test/testbase/java/com/android/tools/r8/JvmTestBuilder.java
index f919181..0423904 100644
--- a/src/test/java/com/android/tools/r8/JvmTestBuilder.java
+++ b/src/test/testbase/java/com/android/tools/r8/JvmTestBuilder.java
@@ -5,6 +5,7 @@
 
 import com.android.tools.r8.ToolHelper.ProcessResult;
 import com.android.tools.r8.debug.CfDebugTestConfig;
+import com.android.tools.r8.dex.Marker.Tool;
 import com.android.tools.r8.errors.Unimplemented;
 import com.android.tools.r8.testing.AndroidBuildVersion;
 import com.android.tools.r8.utils.AndroidApiLevel;
@@ -152,7 +153,8 @@
   }
 
   public JvmTestBuilder addTestClasspath() {
-    return addClasspath(ToolHelper.getClassPathForTests());
+    return addClasspath(ToolHelper.getClassPathForTests())
+        .addClasspath(ToolHelper.getTestBaseclassPath());
   }
 
   public JvmTestBuilder enablePreview() {
diff --git a/src/test/java/com/android/tools/r8/JvmTestRunResult.java b/src/test/testbase/java/com/android/tools/r8/JvmTestRunResult.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/JvmTestRunResult.java
rename to src/test/testbase/java/com/android/tools/r8/JvmTestRunResult.java
diff --git a/src/test/java/com/android/tools/r8/Keep.java b/src/test/testbase/java/com/android/tools/r8/Keep.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/Keep.java
rename to src/test/testbase/java/com/android/tools/r8/Keep.java
diff --git a/src/test/java/com/android/tools/r8/KeepConstantArguments.java b/src/test/testbase/java/com/android/tools/r8/KeepConstantArguments.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/KeepConstantArguments.java
rename to src/test/testbase/java/com/android/tools/r8/KeepConstantArguments.java
diff --git a/src/test/java/com/android/tools/r8/KeepUnusedArguments.java b/src/test/testbase/java/com/android/tools/r8/KeepUnusedArguments.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/KeepUnusedArguments.java
rename to src/test/testbase/java/com/android/tools/r8/KeepUnusedArguments.java
diff --git a/src/test/java/com/android/tools/r8/KeepUnusedReturnValue.java b/src/test/testbase/java/com/android/tools/r8/KeepUnusedReturnValue.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/KeepUnusedReturnValue.java
rename to src/test/testbase/java/com/android/tools/r8/KeepUnusedReturnValue.java
diff --git a/src/test/java/com/android/tools/r8/KotlinCompilerTool.java b/src/test/testbase/java/com/android/tools/r8/KotlinCompilerTool.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/KotlinCompilerTool.java
rename to src/test/testbase/java/com/android/tools/r8/KotlinCompilerTool.java
diff --git a/src/test/java/com/android/tools/r8/KotlinTestBase.java b/src/test/testbase/java/com/android/tools/r8/KotlinTestBase.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/KotlinTestBase.java
rename to src/test/testbase/java/com/android/tools/r8/KotlinTestBase.java
diff --git a/src/test/java/com/android/tools/r8/KotlinTestParameters.java b/src/test/testbase/java/com/android/tools/r8/KotlinTestParameters.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/KotlinTestParameters.java
rename to src/test/testbase/java/com/android/tools/r8/KotlinTestParameters.java
diff --git a/src/test/java/com/android/tools/r8/KotlinTestParametersCollection.java b/src/test/testbase/java/com/android/tools/r8/KotlinTestParametersCollection.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/KotlinTestParametersCollection.java
rename to src/test/testbase/java/com/android/tools/r8/KotlinTestParametersCollection.java
diff --git a/src/test/java/com/android/tools/r8/L8TestBuilder.java b/src/test/testbase/java/com/android/tools/r8/L8TestBuilder.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/L8TestBuilder.java
rename to src/test/testbase/java/com/android/tools/r8/L8TestBuilder.java
diff --git a/src/test/java/com/android/tools/r8/L8TestCompileResult.java b/src/test/testbase/java/com/android/tools/r8/L8TestCompileResult.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/L8TestCompileResult.java
rename to src/test/testbase/java/com/android/tools/r8/L8TestCompileResult.java
diff --git a/src/test/java/com/android/tools/r8/L8TestRunResult.java b/src/test/testbase/java/com/android/tools/r8/L8TestRunResult.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/L8TestRunResult.java
rename to src/test/testbase/java/com/android/tools/r8/L8TestRunResult.java
diff --git a/src/test/java/com/android/tools/r8/LibraryDesugaringTestConfiguration.java b/src/test/testbase/java/com/android/tools/r8/LibraryDesugaringTestConfiguration.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/LibraryDesugaringTestConfiguration.java
rename to src/test/testbase/java/com/android/tools/r8/LibraryDesugaringTestConfiguration.java
diff --git a/src/test/java/com/android/tools/r8/MarkerMatcher.java b/src/test/testbase/java/com/android/tools/r8/MarkerMatcher.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/MarkerMatcher.java
rename to src/test/testbase/java/com/android/tools/r8/MarkerMatcher.java
diff --git a/src/test/java/com/android/tools/r8/NeverClassInline.java b/src/test/testbase/java/com/android/tools/r8/NeverClassInline.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/NeverClassInline.java
rename to src/test/testbase/java/com/android/tools/r8/NeverClassInline.java
diff --git a/src/test/java/com/android/tools/r8/NeverInline.java b/src/test/testbase/java/com/android/tools/r8/NeverInline.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/NeverInline.java
rename to src/test/testbase/java/com/android/tools/r8/NeverInline.java
diff --git a/src/test/java/com/android/tools/r8/NeverPropagateValue.java b/src/test/testbase/java/com/android/tools/r8/NeverPropagateValue.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/NeverPropagateValue.java
rename to src/test/testbase/java/com/android/tools/r8/NeverPropagateValue.java
diff --git a/src/test/java/com/android/tools/r8/NeverReprocessClassInitializer.java b/src/test/testbase/java/com/android/tools/r8/NeverReprocessClassInitializer.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/NeverReprocessClassInitializer.java
rename to src/test/testbase/java/com/android/tools/r8/NeverReprocessClassInitializer.java
diff --git a/src/test/java/com/android/tools/r8/NeverReprocessMethod.java b/src/test/testbase/java/com/android/tools/r8/NeverReprocessMethod.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/NeverReprocessMethod.java
rename to src/test/testbase/java/com/android/tools/r8/NeverReprocessMethod.java
diff --git a/src/test/java/com/android/tools/r8/NeverSingleCallerInline.java b/src/test/testbase/java/com/android/tools/r8/NeverSingleCallerInline.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/NeverSingleCallerInline.java
rename to src/test/testbase/java/com/android/tools/r8/NeverSingleCallerInline.java
diff --git a/src/test/java/com/android/tools/r8/NoAccessModification.java b/src/test/testbase/java/com/android/tools/r8/NoAccessModification.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/NoAccessModification.java
rename to src/test/testbase/java/com/android/tools/r8/NoAccessModification.java
diff --git a/src/test/java/com/android/tools/r8/NoFieldTypeStrengthening.java b/src/test/testbase/java/com/android/tools/r8/NoFieldTypeStrengthening.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/NoFieldTypeStrengthening.java
rename to src/test/testbase/java/com/android/tools/r8/NoFieldTypeStrengthening.java
diff --git a/src/test/java/com/android/tools/r8/NoHorizontalClassMerging.java b/src/test/testbase/java/com/android/tools/r8/NoHorizontalClassMerging.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/NoHorizontalClassMerging.java
rename to src/test/testbase/java/com/android/tools/r8/NoHorizontalClassMerging.java
diff --git a/src/test/java/com/android/tools/r8/NoInliningOfDefaultInitializer.java b/src/test/testbase/java/com/android/tools/r8/NoInliningOfDefaultInitializer.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/NoInliningOfDefaultInitializer.java
rename to src/test/testbase/java/com/android/tools/r8/NoInliningOfDefaultInitializer.java
diff --git a/src/test/java/com/android/tools/r8/NoMethodStaticizing.java b/src/test/testbase/java/com/android/tools/r8/NoMethodStaticizing.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/NoMethodStaticizing.java
rename to src/test/testbase/java/com/android/tools/r8/NoMethodStaticizing.java
diff --git a/src/test/java/com/android/tools/r8/NoParameterReordering.java b/src/test/testbase/java/com/android/tools/r8/NoParameterReordering.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/NoParameterReordering.java
rename to src/test/testbase/java/com/android/tools/r8/NoParameterReordering.java
diff --git a/src/test/java/com/android/tools/r8/NoParameterTypeStrengthening.java b/src/test/testbase/java/com/android/tools/r8/NoParameterTypeStrengthening.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/NoParameterTypeStrengthening.java
rename to src/test/testbase/java/com/android/tools/r8/NoParameterTypeStrengthening.java
diff --git a/src/test/java/com/android/tools/r8/NoRedundantFieldLoadElimination.java b/src/test/testbase/java/com/android/tools/r8/NoRedundantFieldLoadElimination.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/NoRedundantFieldLoadElimination.java
rename to src/test/testbase/java/com/android/tools/r8/NoRedundantFieldLoadElimination.java
diff --git a/src/test/java/com/android/tools/r8/NoReturnTypeStrengthening.java b/src/test/testbase/java/com/android/tools/r8/NoReturnTypeStrengthening.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/NoReturnTypeStrengthening.java
rename to src/test/testbase/java/com/android/tools/r8/NoReturnTypeStrengthening.java
diff --git a/src/test/java/com/android/tools/r8/NoUnusedInterfaceRemoval.java b/src/test/testbase/java/com/android/tools/r8/NoUnusedInterfaceRemoval.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/NoUnusedInterfaceRemoval.java
rename to src/test/testbase/java/com/android/tools/r8/NoUnusedInterfaceRemoval.java
diff --git a/src/test/java/com/android/tools/r8/NoVerticalClassMerging.java b/src/test/testbase/java/com/android/tools/r8/NoVerticalClassMerging.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/NoVerticalClassMerging.java
rename to src/test/testbase/java/com/android/tools/r8/NoVerticalClassMerging.java
diff --git a/src/test/java/com/android/tools/r8/OriginMatcher.java b/src/test/testbase/java/com/android/tools/r8/OriginMatcher.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/OriginMatcher.java
rename to src/test/testbase/java/com/android/tools/r8/OriginMatcher.java
diff --git a/src/test/java/com/android/tools/r8/PositionMatcher.java b/src/test/testbase/java/com/android/tools/r8/PositionMatcher.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/PositionMatcher.java
rename to src/test/testbase/java/com/android/tools/r8/PositionMatcher.java
diff --git a/src/test/java/com/android/tools/r8/ProguardTestBuilder.java b/src/test/testbase/java/com/android/tools/r8/ProguardTestBuilder.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/ProguardTestBuilder.java
rename to src/test/testbase/java/com/android/tools/r8/ProguardTestBuilder.java
diff --git a/src/test/java/com/android/tools/r8/ProguardTestCompileResult.java b/src/test/testbase/java/com/android/tools/r8/ProguardTestCompileResult.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/ProguardTestCompileResult.java
rename to src/test/testbase/java/com/android/tools/r8/ProguardTestCompileResult.java
diff --git a/src/test/java/com/android/tools/r8/ProguardTestRunResult.java b/src/test/testbase/java/com/android/tools/r8/ProguardTestRunResult.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/ProguardTestRunResult.java
rename to src/test/testbase/java/com/android/tools/r8/ProguardTestRunResult.java
diff --git a/src/test/java/com/android/tools/r8/ProguardVersion.java b/src/test/testbase/java/com/android/tools/r8/ProguardVersion.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/ProguardVersion.java
rename to src/test/testbase/java/com/android/tools/r8/ProguardVersion.java
diff --git a/src/test/java/com/android/tools/r8/R8CompatTestBuilder.java b/src/test/testbase/java/com/android/tools/r8/R8CompatTestBuilder.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/R8CompatTestBuilder.java
rename to src/test/testbase/java/com/android/tools/r8/R8CompatTestBuilder.java
diff --git a/src/test/java/com/android/tools/r8/R8FullTestBuilder.java b/src/test/testbase/java/com/android/tools/r8/R8FullTestBuilder.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/R8FullTestBuilder.java
rename to src/test/testbase/java/com/android/tools/r8/R8FullTestBuilder.java
diff --git a/src/test/java/com/android/tools/r8/R8RunArtTestsTest.java b/src/test/testbase/java/com/android/tools/r8/R8RunArtTestsTest.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/R8RunArtTestsTest.java
rename to src/test/testbase/java/com/android/tools/r8/R8RunArtTestsTest.java
diff --git a/src/test/java/com/android/tools/r8/R8TestBuilder.java b/src/test/testbase/java/com/android/tools/r8/R8TestBuilder.java
similarity index 97%
rename from src/test/java/com/android/tools/r8/R8TestBuilder.java
rename to src/test/testbase/java/com/android/tools/r8/R8TestBuilder.java
index 5184c82..a9c431a 100644
--- a/src/test/java/com/android/tools/r8/R8TestBuilder.java
+++ b/src/test/testbase/java/com/android/tools/r8/R8TestBuilder.java
@@ -11,6 +11,7 @@
 import com.android.tools.r8.TestBase.Backend;
 import com.android.tools.r8.androidresources.AndroidResourceTestingUtils.AndroidTestResource;
 import com.android.tools.r8.benchmarks.BenchmarkResults;
+import com.android.tools.r8.dexsplitter.SplitterTestBase;
 import com.android.tools.r8.dexsplitter.SplitterTestBase.RunInterface;
 import com.android.tools.r8.dexsplitter.SplitterTestBase.SplitRunner;
 import com.android.tools.r8.errors.Unreachable;
@@ -44,6 +45,7 @@
 import com.android.tools.r8.utils.Pair;
 import com.android.tools.r8.utils.SemanticVersion;
 import com.android.tools.r8.utils.SourceFileTemplateProvider;
+import com.android.tools.r8.utils.codeinspector.Matchers;
 import java.io.IOException;
 import java.lang.annotation.Annotation;
 import java.nio.file.Path;
@@ -172,7 +174,7 @@
       case NONE:
         if (allowUnusedProguardConfigurationRules) {
           compileResult
-              .assertAllInfosMatch(proguardConfigurationRuleDoesNotMatch())
+              .assertAllInfosMatch(Matchers.proguardConfigurationRuleDoesNotMatch())
               .assertNoErrorMessages()
               .assertNoWarningMessages();
         } else {
@@ -186,9 +188,9 @@
         throw new Unreachable();
     }
     if (allowUnusedProguardConfigurationRules) {
-      compileResult.assertInfoThatMatches(proguardConfigurationRuleDoesNotMatch());
+      compileResult.assertInfoThatMatches(Matchers.proguardConfigurationRuleDoesNotMatch());
     } else {
-      compileResult.assertNoInfoThatMatches(proguardConfigurationRuleDoesNotMatch());
+      compileResult.assertNoInfoThatMatches(Matchers.proguardConfigurationRuleDoesNotMatch());
     }
     return compileResult;
   }
@@ -855,7 +857,7 @@
   public T addFeatureSplit(Class<?>... classes) throws IOException {
     Path path = getState().getNewTempFile("feature.zip");
     builder.addFeatureSplit(
-        builder -> simpleSplitProvider(builder, path, getState().getTempFolder(), classes));
+        builder -> SplitterTestBase.simpleSplitProvider(builder, path, getState().getTempFolder(), classes));
     features.add(path);
     return self();
   }
@@ -865,7 +867,7 @@
     Path path = getState().getNewTempFolder().resolve("feature.zip");
     builder.addFeatureSplit(
         builder ->
-            splitWithNonJavaFile(builder, path, getState().getTempFolder(), nonJavaFiles, classes));
+            SplitterTestBase.splitWithNonJavaFile(builder, path, getState().getTempFolder(), nonJavaFiles, classes));
     features.add(path);
     return self();
   }
diff --git a/src/test/java/com/android/tools/r8/R8TestCompileResult.java b/src/test/testbase/java/com/android/tools/r8/R8TestCompileResult.java
similarity index 97%
rename from src/test/java/com/android/tools/r8/R8TestCompileResult.java
rename to src/test/testbase/java/com/android/tools/r8/R8TestCompileResult.java
index 336eb75..9b51098 100644
--- a/src/test/java/com/android/tools/r8/R8TestCompileResult.java
+++ b/src/test/testbase/java/com/android/tools/r8/R8TestCompileResult.java
@@ -25,6 +25,7 @@
 import com.android.tools.r8.utils.ZipUtils;
 import com.android.tools.r8.utils.codeinspector.ClassSubject;
 import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.Matchers;
 import com.android.tools.r8.utils.graphinspector.GraphInspector;
 import java.io.IOException;
 import java.io.UncheckedIOException;
@@ -238,18 +239,18 @@
       throws IOException {
     assert getBackend() == runtime.getBackend();
     ClassSubject mainClassSubject = inspector().clazz(SplitRunner.class);
-    assertThat("Did you forget a keep rule for the main method?", mainClassSubject, isPresent());
+    assertThat("Did you forget a keep rule for the main method?", mainClassSubject, Matchers.isPresent());
     assertThat(
         "Did you forget a keep rule for the main method?",
         mainClassSubject.mainMethod(),
-        isPresent());
+        Matchers.isPresent());
     ClassSubject mainFeatureClassSubject = featureInspector(feature).clazz(mainFeatureClass);
     assertThat(
-        "Did you forget a keep rule for the run method?", mainFeatureClassSubject, isPresent());
+        "Did you forget a keep rule for the run method?", mainFeatureClassSubject, Matchers.isPresent());
     assertThat(
         "Did you forget a keep rule for the run method?",
         mainFeatureClassSubject.uniqueMethodWithOriginalName("run"),
-        isPresent());
+        Matchers.isPresent());
     String[] args = new String[2 + featureDependencies.length];
     args[0] = mainFeatureClassSubject.getFinalName();
     args[1] = feature.toString();
diff --git a/src/test/java/com/android/tools/r8/R8TestRunResult.java b/src/test/testbase/java/com/android/tools/r8/R8TestRunResult.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/R8TestRunResult.java
rename to src/test/testbase/java/com/android/tools/r8/R8TestRunResult.java
diff --git a/src/test/java/com/android/tools/r8/RelocatorTestBuilder.java b/src/test/testbase/java/com/android/tools/r8/RelocatorTestBuilder.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/RelocatorTestBuilder.java
rename to src/test/testbase/java/com/android/tools/r8/RelocatorTestBuilder.java
diff --git a/src/test/java/com/android/tools/r8/RelocatorTestCompileResult.java b/src/test/testbase/java/com/android/tools/r8/RelocatorTestCompileResult.java
similarity index 89%
rename from src/test/java/com/android/tools/r8/RelocatorTestCompileResult.java
rename to src/test/testbase/java/com/android/tools/r8/RelocatorTestCompileResult.java
index 1f58f84..f3c624c 100644
--- a/src/test/java/com/android/tools/r8/RelocatorTestCompileResult.java
+++ b/src/test/testbase/java/com/android/tools/r8/RelocatorTestCompileResult.java
@@ -16,10 +16,12 @@
 import com.android.tools.r8.utils.codeinspector.FoundClassSubject;
 import com.android.tools.r8.utils.codeinspector.FoundFieldSubject;
 import com.android.tools.r8.utils.codeinspector.FoundMethodSubject;
+import com.android.tools.r8.utils.codeinspector.Matchers;
 import java.io.IOException;
 import java.nio.file.Path;
 import java.util.concurrent.ExecutionException;
 import org.hamcrest.Matcher;
+import org.hamcrest.MatcherAssert;
 
 public class RelocatorTestCompileResult extends TestRunResult<RelocatorTestCompileResult> {
 
@@ -86,7 +88,7 @@
               String relocatedName =
                   newPrefix + clazz.getFinalName().substring(originalPrefix.length());
               ClassSubject relocatedClass = relocatedInspector.clazz(relocatedName);
-              assertThat(relocatedClass, isPresent());
+              MatcherAssert.assertThat(relocatedClass, Matchers.isPresent());
             }
           }
         });
@@ -97,13 +99,13 @@
     inspect(
         inspector -> {
           for (FoundClassSubject clazz : inspector.allClasses()) {
-            assertThat(clazz.getFinalSignatureAttribute(), not(containsString(originalPrefix)));
+            MatcherAssert.assertThat(clazz.getFinalSignatureAttribute(), not(containsString(originalPrefix)));
             for (FoundMethodSubject method : clazz.allMethods()) {
-              assertThat(
+              MatcherAssert.assertThat(
                   method.getJvmMethodSignatureAsString(), not(containsString(originalPrefix)));
             }
             for (FoundFieldSubject field : clazz.allFields()) {
-              assertThat(field.getJvmFieldSignatureAsString(), not(containsString(originalPrefix)));
+              MatcherAssert.assertThat(field.getJvmFieldSignatureAsString(), not(containsString(originalPrefix)));
             }
           }
         });
diff --git a/src/test/java/com/android/tools/r8/ReprocessClassInitializer.java b/src/test/testbase/java/com/android/tools/r8/ReprocessClassInitializer.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/ReprocessClassInitializer.java
rename to src/test/testbase/java/com/android/tools/r8/ReprocessClassInitializer.java
diff --git a/src/test/java/com/android/tools/r8/ReprocessMethod.java b/src/test/testbase/java/com/android/tools/r8/ReprocessMethod.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/ReprocessMethod.java
rename to src/test/testbase/java/com/android/tools/r8/ReprocessMethod.java
diff --git a/src/test/java/com/android/tools/r8/SingleTestRunResult.java b/src/test/testbase/java/com/android/tools/r8/SingleTestRunResult.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/SingleTestRunResult.java
rename to src/test/testbase/java/com/android/tools/r8/SingleTestRunResult.java
diff --git a/src/test/java/com/android/tools/r8/SoftVerificationErrorJarGenerator.java b/src/test/testbase/java/com/android/tools/r8/SoftVerificationErrorJarGenerator.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/SoftVerificationErrorJarGenerator.java
rename to src/test/testbase/java/com/android/tools/r8/SoftVerificationErrorJarGenerator.java
diff --git a/src/test/java/com/android/tools/r8/SoftVerificationErrorJarRunner.java b/src/test/testbase/java/com/android/tools/r8/SoftVerificationErrorJarRunner.java
similarity index 95%
rename from src/test/java/com/android/tools/r8/SoftVerificationErrorJarRunner.java
rename to src/test/testbase/java/com/android/tools/r8/SoftVerificationErrorJarRunner.java
index b345c16..df94fbc 100644
--- a/src/test/java/com/android/tools/r8/SoftVerificationErrorJarRunner.java
+++ b/src/test/testbase/java/com/android/tools/r8/SoftVerificationErrorJarRunner.java
@@ -20,9 +20,11 @@
 import com.android.tools.r8.utils.ZipUtils;
 import com.android.tools.r8.utils.codeinspector.ClassSubject;
 import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.Matchers;
 import java.io.File;
 import java.nio.file.Path;
 import java.nio.file.Paths;
+import org.hamcrest.MatcherAssert;
 
 public class SoftVerificationErrorJarRunner extends TestBase {
 
@@ -108,11 +110,11 @@
             + (isOutlined ? "ApiCallerOutlined" : "ApiCallerInlined")
             + (numberOfClasses - 1);
     ClassSubject clazz = inspector.clazz(name);
-    assertThat(clazz, isPresent());
+    MatcherAssert.assertThat(clazz, Matchers.isPresent());
     if (isOutlined) {
       ClassSubject apiCallerInlined =
           inspector.clazz("com.example.softverificationsample.ApiCallerInlined");
-      assertThat(apiCallerInlined, isPresent());
+      MatcherAssert.assertThat(apiCallerInlined, Matchers.isPresent());
     }
   }
 }
diff --git a/src/test/java/com/android/tools/r8/TestAppViewBuilder.java b/src/test/testbase/java/com/android/tools/r8/TestAppViewBuilder.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/TestAppViewBuilder.java
rename to src/test/testbase/java/com/android/tools/r8/TestAppViewBuilder.java
diff --git a/src/test/java/com/android/tools/r8/TestBase.java b/src/test/testbase/java/com/android/tools/r8/TestBase.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/TestBase.java
rename to src/test/testbase/java/com/android/tools/r8/TestBase.java
diff --git a/src/test/java/com/android/tools/r8/TestBaseBuilder.java b/src/test/testbase/java/com/android/tools/r8/TestBaseBuilder.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/TestBaseBuilder.java
rename to src/test/testbase/java/com/android/tools/r8/TestBaseBuilder.java
diff --git a/src/test/java/com/android/tools/r8/TestBaseResult.java b/src/test/testbase/java/com/android/tools/r8/TestBaseResult.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/TestBaseResult.java
rename to src/test/testbase/java/com/android/tools/r8/TestBaseResult.java
diff --git a/src/test/java/com/android/tools/r8/TestBuilder.java b/src/test/testbase/java/com/android/tools/r8/TestBuilder.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/TestBuilder.java
rename to src/test/testbase/java/com/android/tools/r8/TestBuilder.java
diff --git a/src/test/java/com/android/tools/r8/TestBuilderCollection.java b/src/test/testbase/java/com/android/tools/r8/TestBuilderCollection.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/TestBuilderCollection.java
rename to src/test/testbase/java/com/android/tools/r8/TestBuilderCollection.java
diff --git a/src/test/java/com/android/tools/r8/TestCompileResult.java b/src/test/testbase/java/com/android/tools/r8/TestCompileResult.java
similarity index 98%
rename from src/test/java/com/android/tools/r8/TestCompileResult.java
rename to src/test/testbase/java/com/android/tools/r8/TestCompileResult.java
index 9c29aa2..545a36e 100644
--- a/src/test/java/com/android/tools/r8/TestCompileResult.java
+++ b/src/test/testbase/java/com/android/tools/r8/TestCompileResult.java
@@ -31,6 +31,7 @@
 import com.android.tools.r8.utils.TriFunction;
 import com.android.tools.r8.utils.codeinspector.ClassSubject;
 import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.Matchers;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.ObjectArrays;
@@ -51,6 +52,7 @@
 import java.util.function.Function;
 import java.util.stream.Collectors;
 import org.hamcrest.Matcher;
+import org.hamcrest.MatcherAssert;
 
 public abstract class TestCompileResult<
         CR extends TestCompileResult<CR, RR>, RR extends TestRunResult<RR>>
@@ -177,7 +179,7 @@
   public RR run(String mainClass) throws IOException {
     assert !libraryDesugaringTestConfiguration.isEnabled();
     ClassSubject mainClassSubject = inspector().clazz(mainClass);
-    assertThat(mainClassSubject, isPresent());
+    MatcherAssert.assertThat(mainClassSubject, Matchers.isPresent());
     switch (getBackend()) {
       case DEX:
         return runArt(
@@ -216,7 +218,7 @@
         }
       }
     }
-    assertThat("Did you forget a keep rule for the main method?", mainClassSubject, isPresent());
+    assertThat("Did you forget a keep rule for the main method?", mainClassSubject, Matchers.isPresent());
     if (runtime.isDex()) {
       return runArt(runtime, mainClassSubject.getFinalName(), args);
     }
diff --git a/src/test/java/com/android/tools/r8/TestCompilerBuilder.java b/src/test/testbase/java/com/android/tools/r8/TestCompilerBuilder.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/TestCompilerBuilder.java
rename to src/test/testbase/java/com/android/tools/r8/TestCompilerBuilder.java
diff --git a/src/test/java/com/android/tools/r8/TestCondition.java b/src/test/testbase/java/com/android/tools/r8/TestCondition.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/TestCondition.java
rename to src/test/testbase/java/com/android/tools/r8/TestCondition.java
diff --git a/src/test/java/com/android/tools/r8/TestDiagnostic.java b/src/test/testbase/java/com/android/tools/r8/TestDiagnostic.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/TestDiagnostic.java
rename to src/test/testbase/java/com/android/tools/r8/TestDiagnostic.java
diff --git a/src/test/java/com/android/tools/r8/TestDiagnosticMessages.java b/src/test/testbase/java/com/android/tools/r8/TestDiagnosticMessages.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/TestDiagnosticMessages.java
rename to src/test/testbase/java/com/android/tools/r8/TestDiagnosticMessages.java
diff --git a/src/test/java/com/android/tools/r8/TestDiagnosticMessagesImpl.java b/src/test/testbase/java/com/android/tools/r8/TestDiagnosticMessagesImpl.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/TestDiagnosticMessagesImpl.java
rename to src/test/testbase/java/com/android/tools/r8/TestDiagnosticMessagesImpl.java
diff --git a/src/test/java/com/android/tools/r8/TestParameters.java b/src/test/testbase/java/com/android/tools/r8/TestParameters.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/TestParameters.java
rename to src/test/testbase/java/com/android/tools/r8/TestParameters.java
diff --git a/src/test/java/com/android/tools/r8/TestParametersBuilder.java b/src/test/testbase/java/com/android/tools/r8/TestParametersBuilder.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/TestParametersBuilder.java
rename to src/test/testbase/java/com/android/tools/r8/TestParametersBuilder.java
diff --git a/src/test/java/com/android/tools/r8/TestParametersCollection.java b/src/test/testbase/java/com/android/tools/r8/TestParametersCollection.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/TestParametersCollection.java
rename to src/test/testbase/java/com/android/tools/r8/TestParametersCollection.java
diff --git a/src/test/java/com/android/tools/r8/TestRunResult.java b/src/test/testbase/java/com/android/tools/r8/TestRunResult.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/TestRunResult.java
rename to src/test/testbase/java/com/android/tools/r8/TestRunResult.java
diff --git a/src/test/java/com/android/tools/r8/TestRunResultCollection.java b/src/test/testbase/java/com/android/tools/r8/TestRunResultCollection.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/TestRunResultCollection.java
rename to src/test/testbase/java/com/android/tools/r8/TestRunResultCollection.java
diff --git a/src/test/java/com/android/tools/r8/TestRuntime.java b/src/test/testbase/java/com/android/tools/r8/TestRuntime.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/TestRuntime.java
rename to src/test/testbase/java/com/android/tools/r8/TestRuntime.java
diff --git a/src/test/java/com/android/tools/r8/TestShrinkerBuilder.java b/src/test/testbase/java/com/android/tools/r8/TestShrinkerBuilder.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/TestShrinkerBuilder.java
rename to src/test/testbase/java/com/android/tools/r8/TestShrinkerBuilder.java
diff --git a/src/test/java/com/android/tools/r8/TestState.java b/src/test/testbase/java/com/android/tools/r8/TestState.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/TestState.java
rename to src/test/testbase/java/com/android/tools/r8/TestState.java
diff --git a/src/test/java/com/android/tools/r8/ThrowingBiFunction.java b/src/test/testbase/java/com/android/tools/r8/ThrowingBiFunction.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/ThrowingBiFunction.java
rename to src/test/testbase/java/com/android/tools/r8/ThrowingBiFunction.java
diff --git a/src/test/java/com/android/tools/r8/ThrowingFunction.java b/src/test/testbase/java/com/android/tools/r8/ThrowingFunction.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/ThrowingFunction.java
rename to src/test/testbase/java/com/android/tools/r8/ThrowingFunction.java
diff --git a/src/test/java/com/android/tools/r8/ToolHelper.java b/src/test/testbase/java/com/android/tools/r8/ToolHelper.java
similarity index 98%
rename from src/test/java/com/android/tools/r8/ToolHelper.java
rename to src/test/testbase/java/com/android/tools/r8/ToolHelper.java
index b92a8dc..d3481a6 100644
--- a/src/test/java/com/android/tools/r8/ToolHelper.java
+++ b/src/test/testbase/java/com/android/tools/r8/ToolHelper.java
@@ -165,6 +165,14 @@
       }
     }
 
+    public Path getTestBaseClassLocation() {
+      String testbaseDataLocation = System.getProperty("TESTBASE_DATA_LOCATION");
+      if (testbaseDataLocation != null) {
+        return Paths.get(testbaseDataLocation);
+      }
+      throw new Unreachable("TESTBASE_DATA_LOCATION not set from gradle");
+    }
+
     public static TestDataSourceSet computeLegacyOrGradleSpecifiedLocation() {
       return TestDataSourceSet.SPECIFIED_BY_GRADLE_PROPERTY;
     }
@@ -1512,6 +1520,10 @@
     return getClassPathForTestDataSourceSet(computeLegacyOrGradleSpecifiedLocation());
   }
 
+  public static Path getTestBaseclassPath() {
+    return computeLegacyOrGradleSpecifiedLocation().getTestBaseClassLocation();
+  }
+
   public static Path getClassPathForTestDataSourceSet(TestDataSourceSet sourceSet) {
     return sourceSet.getBuildDir();
   }
@@ -1563,11 +1575,15 @@
 
   public static Path getClassFileForTestClass(Class<?> clazz, TestDataSourceSet sourceSet) {
     List<String> parts = getNamePartsForTestClass(clazz);
+    Path filePath = Paths.get("", parts.toArray(StringUtils.EMPTY_ARRAY));
     Path resolve =
         getClassPathForTestDataSourceSet(sourceSet)
-            .resolve(Paths.get("", parts.toArray(StringUtils.EMPTY_ARRAY)));
+            .resolve(filePath);
     if (!Files.exists(resolve)) {
-      throw new RuntimeException("Could not find: " + resolve.toString());
+      resolve = sourceSet.getTestBaseClassLocation().resolve(filePath);
+      if (!Files.exists(resolve)) {
+        throw new RuntimeException("Could not find: " + resolve.toString());
+      }
     }
     return resolve;
   }
diff --git a/src/test/java/com/android/tools/r8/VmTestRunner.java b/src/test/testbase/java/com/android/tools/r8/VmTestRunner.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/VmTestRunner.java
rename to src/test/testbase/java/com/android/tools/r8/VmTestRunner.java
diff --git a/src/test/java/com/android/tools/r8/androidresources/AndroidResourceTestingUtils.java b/src/test/testbase/java/com/android/tools/r8/androidresources/AndroidResourceTestingUtils.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/androidresources/AndroidResourceTestingUtils.java
rename to src/test/testbase/java/com/android/tools/r8/androidresources/AndroidResourceTestingUtils.java
diff --git a/src/test/java/com/android/tools/r8/androidresources/Resources.java b/src/test/testbase/java/com/android/tools/r8/androidresources/Resources.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/androidresources/Resources.java
rename to src/test/testbase/java/com/android/tools/r8/androidresources/Resources.java
diff --git a/src/test/java/com/android/tools/r8/benchmarks/BenchmarkMetric.java b/src/test/testbase/java/com/android/tools/r8/benchmarks/BenchmarkMetric.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/benchmarks/BenchmarkMetric.java
rename to src/test/testbase/java/com/android/tools/r8/benchmarks/BenchmarkMetric.java
diff --git a/src/test/java/com/android/tools/r8/benchmarks/BenchmarkResults.java b/src/test/testbase/java/com/android/tools/r8/benchmarks/BenchmarkResults.java
similarity index 86%
rename from src/test/java/com/android/tools/r8/benchmarks/BenchmarkResults.java
rename to src/test/testbase/java/com/android/tools/r8/benchmarks/BenchmarkResults.java
index 25e2958..3e52ba7 100644
--- a/src/test/java/com/android/tools/r8/benchmarks/BenchmarkResults.java
+++ b/src/test/testbase/java/com/android/tools/r8/benchmarks/BenchmarkResults.java
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.benchmarks;
 
-import com.android.tools.r8.benchmarks.BenchmarkRunner.ResultMode;
+import com.android.tools.r8.utils.StringUtils;
 
 public interface BenchmarkResults {
   // Append a runtime result. This may be summed or averaged depending on the benchmark set up.
@@ -28,4 +28,14 @@
   static String prettyMetric(String name, BenchmarkMetric metric, String value) {
     return name + "(" + metric.name() + "): " + value;
   }
+
+  enum ResultMode {
+    AVERAGE,
+    SUM;
+
+    @Override
+    public String toString() {
+      return StringUtils.toLowerCase(name());
+    }
+  }
 }
diff --git a/src/test/java/com/android/tools/r8/debug/CfDebugTestConfig.java b/src/test/testbase/java/com/android/tools/r8/debug/CfDebugTestConfig.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/debug/CfDebugTestConfig.java
rename to src/test/testbase/java/com/android/tools/r8/debug/CfDebugTestConfig.java
diff --git a/src/test/java/com/android/tools/r8/debug/DebugTestConfig.java b/src/test/testbase/java/com/android/tools/r8/debug/DebugTestConfig.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/debug/DebugTestConfig.java
rename to src/test/testbase/java/com/android/tools/r8/debug/DebugTestConfig.java
diff --git a/src/test/java/com/android/tools/r8/debug/DexDebugTestConfig.java b/src/test/testbase/java/com/android/tools/r8/debug/DexDebugTestConfig.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/debug/DexDebugTestConfig.java
rename to src/test/testbase/java/com/android/tools/r8/debug/DexDebugTestConfig.java
diff --git a/src/test/java/com/android/tools/r8/desugar/LibraryFilesHelper.java b/src/test/testbase/java/com/android/tools/r8/desugar/LibraryFilesHelper.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/desugar/LibraryFilesHelper.java
rename to src/test/testbase/java/com/android/tools/r8/desugar/LibraryFilesHelper.java
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryTestBase.java b/src/test/testbase/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryTestBase.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryTestBase.java
rename to src/test/testbase/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryTestBase.java
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/jdk11/DesugaredLibraryJDK11Undesugarer.java b/src/test/testbase/java/com/android/tools/r8/desugar/desugaredlibrary/jdk11/DesugaredLibraryJDK11Undesugarer.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/desugar/desugaredlibrary/jdk11/DesugaredLibraryJDK11Undesugarer.java
rename to src/test/testbase/java/com/android/tools/r8/desugar/desugaredlibrary/jdk11/DesugaredLibraryJDK11Undesugarer.java
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/test/CompilationSpecification.java b/src/test/testbase/java/com/android/tools/r8/desugar/desugaredlibrary/test/CompilationSpecification.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/desugar/desugaredlibrary/test/CompilationSpecification.java
rename to src/test/testbase/java/com/android/tools/r8/desugar/desugaredlibrary/test/CompilationSpecification.java
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/test/CustomLibrarySpecification.java b/src/test/testbase/java/com/android/tools/r8/desugar/desugaredlibrary/test/CustomLibrarySpecification.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/desugar/desugaredlibrary/test/CustomLibrarySpecification.java
rename to src/test/testbase/java/com/android/tools/r8/desugar/desugaredlibrary/test/CustomLibrarySpecification.java
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/test/DesugaredLibraryTestBuilder.java b/src/test/testbase/java/com/android/tools/r8/desugar/desugaredlibrary/test/DesugaredLibraryTestBuilder.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/desugar/desugaredlibrary/test/DesugaredLibraryTestBuilder.java
rename to src/test/testbase/java/com/android/tools/r8/desugar/desugaredlibrary/test/DesugaredLibraryTestBuilder.java
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/test/DesugaredLibraryTestCompileResult.java b/src/test/testbase/java/com/android/tools/r8/desugar/desugaredlibrary/test/DesugaredLibraryTestCompileResult.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/desugar/desugaredlibrary/test/DesugaredLibraryTestCompileResult.java
rename to src/test/testbase/java/com/android/tools/r8/desugar/desugaredlibrary/test/DesugaredLibraryTestCompileResult.java
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/test/LibraryDesugaringSpecification.java b/src/test/testbase/java/com/android/tools/r8/desugar/desugaredlibrary/test/LibraryDesugaringSpecification.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/desugar/desugaredlibrary/test/LibraryDesugaringSpecification.java
rename to src/test/testbase/java/com/android/tools/r8/desugar/desugaredlibrary/test/LibraryDesugaringSpecification.java
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/test/TestingKeepRuleConsumer.java b/src/test/testbase/java/com/android/tools/r8/desugar/desugaredlibrary/test/TestingKeepRuleConsumer.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/desugar/desugaredlibrary/test/TestingKeepRuleConsumer.java
rename to src/test/testbase/java/com/android/tools/r8/desugar/desugaredlibrary/test/TestingKeepRuleConsumer.java
diff --git a/src/test/java/com/android/tools/r8/dexsplitter/SplitterTestBase.java b/src/test/testbase/java/com/android/tools/r8/dexsplitter/SplitterTestBase.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/dexsplitter/SplitterTestBase.java
rename to src/test/testbase/java/com/android/tools/r8/dexsplitter/SplitterTestBase.java
diff --git a/src/test/java/com/android/tools/r8/diagnosticinspector/DiagnosticSubject.java b/src/test/testbase/java/com/android/tools/r8/diagnosticinspector/DiagnosticSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/diagnosticinspector/DiagnosticSubject.java
rename to src/test/testbase/java/com/android/tools/r8/diagnosticinspector/DiagnosticSubject.java
diff --git a/src/test/java/com/android/tools/r8/diagnosticinspector/FoundDiagnosticSubject.java b/src/test/testbase/java/com/android/tools/r8/diagnosticinspector/FoundDiagnosticSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/diagnosticinspector/FoundDiagnosticSubject.java
rename to src/test/testbase/java/com/android/tools/r8/diagnosticinspector/FoundDiagnosticSubject.java
diff --git a/src/test/java/com/android/tools/r8/diagnosticinspector/FoundMissingDefinitionContextSubject.java b/src/test/testbase/java/com/android/tools/r8/diagnosticinspector/FoundMissingDefinitionContextSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/diagnosticinspector/FoundMissingDefinitionContextSubject.java
rename to src/test/testbase/java/com/android/tools/r8/diagnosticinspector/FoundMissingDefinitionContextSubject.java
diff --git a/src/test/java/com/android/tools/r8/diagnosticinspector/FoundMissingDefinitionInfoSubject.java b/src/test/testbase/java/com/android/tools/r8/diagnosticinspector/FoundMissingDefinitionInfoSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/diagnosticinspector/FoundMissingDefinitionInfoSubject.java
rename to src/test/testbase/java/com/android/tools/r8/diagnosticinspector/FoundMissingDefinitionInfoSubject.java
diff --git a/src/test/java/com/android/tools/r8/diagnosticinspector/FoundMissingDefinitionsDiagnosticSubject.java b/src/test/testbase/java/com/android/tools/r8/diagnosticinspector/FoundMissingDefinitionsDiagnosticSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/diagnosticinspector/FoundMissingDefinitionsDiagnosticSubject.java
rename to src/test/testbase/java/com/android/tools/r8/diagnosticinspector/FoundMissingDefinitionsDiagnosticSubject.java
diff --git a/src/test/java/com/android/tools/r8/diagnosticinspector/FoundStringDiagnosticSubject.java b/src/test/testbase/java/com/android/tools/r8/diagnosticinspector/FoundStringDiagnosticSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/diagnosticinspector/FoundStringDiagnosticSubject.java
rename to src/test/testbase/java/com/android/tools/r8/diagnosticinspector/FoundStringDiagnosticSubject.java
diff --git a/src/test/java/com/android/tools/r8/dump/CompilerDump.java b/src/test/testbase/java/com/android/tools/r8/dump/CompilerDump.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/dump/CompilerDump.java
rename to src/test/testbase/java/com/android/tools/r8/dump/CompilerDump.java
diff --git a/src/test/java/com/android/tools/r8/jasmin/JasminBuilder.java b/src/test/testbase/java/com/android/tools/r8/jasmin/JasminBuilder.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/jasmin/JasminBuilder.java
rename to src/test/testbase/java/com/android/tools/r8/jasmin/JasminBuilder.java
diff --git a/src/test/java/com/android/tools/r8/jasmin/JasminTestBase.java b/src/test/testbase/java/com/android/tools/r8/jasmin/JasminTestBase.java
similarity index 98%
rename from src/test/java/com/android/tools/r8/jasmin/JasminTestBase.java
rename to src/test/testbase/java/com/android/tools/r8/jasmin/JasminTestBase.java
index 20de747..899696d 100644
--- a/src/test/java/com/android/tools/r8/jasmin/JasminTestBase.java
+++ b/src/test/testbase/java/com/android/tools/r8/jasmin/JasminTestBase.java
@@ -15,14 +15,11 @@
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.utils.AndroidApp;
 import com.android.tools.r8.utils.InternalOptions;
-import com.android.tools.r8.utils.StringUtils;
 import com.android.tools.r8.utils.codeinspector.CodeInspector;
 import com.android.tools.r8.utils.codeinspector.MethodSubject;
 import com.google.common.collect.ImmutableList;
-import java.io.File;
 import java.io.IOException;
 import java.nio.file.Path;
-import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 import java.util.function.Consumer;
diff --git a/src/test/java/com/android/tools/r8/keepanno/KeepAnnoTestUtils.java b/src/test/testbase/java/com/android/tools/r8/keepanno/KeepAnnoTestUtils.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/keepanno/KeepAnnoTestUtils.java
rename to src/test/testbase/java/com/android/tools/r8/keepanno/KeepAnnoTestUtils.java
diff --git a/src/test/java/com/android/tools/r8/naming/retrace/StackTrace.java b/src/test/testbase/java/com/android/tools/r8/naming/retrace/StackTrace.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/naming/retrace/StackTrace.java
rename to src/test/testbase/java/com/android/tools/r8/naming/retrace/StackTrace.java
diff --git a/src/test/java/com/android/tools/r8/profile/art/model/ExternalArtProfile.java b/src/test/testbase/java/com/android/tools/r8/profile/art/model/ExternalArtProfile.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/profile/art/model/ExternalArtProfile.java
rename to src/test/testbase/java/com/android/tools/r8/profile/art/model/ExternalArtProfile.java
diff --git a/src/test/java/com/android/tools/r8/profile/art/model/ExternalArtProfileClassRule.java b/src/test/testbase/java/com/android/tools/r8/profile/art/model/ExternalArtProfileClassRule.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/profile/art/model/ExternalArtProfileClassRule.java
rename to src/test/testbase/java/com/android/tools/r8/profile/art/model/ExternalArtProfileClassRule.java
diff --git a/src/test/java/com/android/tools/r8/profile/art/model/ExternalArtProfileMethodRule.java b/src/test/testbase/java/com/android/tools/r8/profile/art/model/ExternalArtProfileMethodRule.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/profile/art/model/ExternalArtProfileMethodRule.java
rename to src/test/testbase/java/com/android/tools/r8/profile/art/model/ExternalArtProfileMethodRule.java
diff --git a/src/test/java/com/android/tools/r8/profile/art/model/ExternalArtProfileRule.java b/src/test/testbase/java/com/android/tools/r8/profile/art/model/ExternalArtProfileRule.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/profile/art/model/ExternalArtProfileRule.java
rename to src/test/testbase/java/com/android/tools/r8/profile/art/model/ExternalArtProfileRule.java
diff --git a/src/test/java/com/android/tools/r8/profile/art/utils/ArtProfileClassRuleInspector.java b/src/test/testbase/java/com/android/tools/r8/profile/art/utils/ArtProfileClassRuleInspector.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/profile/art/utils/ArtProfileClassRuleInspector.java
rename to src/test/testbase/java/com/android/tools/r8/profile/art/utils/ArtProfileClassRuleInspector.java
diff --git a/src/test/java/com/android/tools/r8/profile/art/utils/ArtProfileInspector.java b/src/test/testbase/java/com/android/tools/r8/profile/art/utils/ArtProfileInspector.java
similarity index 94%
rename from src/test/java/com/android/tools/r8/profile/art/utils/ArtProfileInspector.java
rename to src/test/testbase/java/com/android/tools/r8/profile/art/utils/ArtProfileInspector.java
index e6f9092..fb96468 100644
--- a/src/test/java/com/android/tools/r8/profile/art/utils/ArtProfileInspector.java
+++ b/src/test/testbase/java/com/android/tools/r8/profile/art/utils/ArtProfileInspector.java
@@ -18,6 +18,7 @@
 import java.util.HashSet;
 import java.util.Set;
 import java.util.function.Consumer;
+import org.hamcrest.MatcherAssert;
 
 public class ArtProfileInspector {
 
@@ -61,7 +62,7 @@
   }
 
   public ArtProfileInspector assertContainsClassRule(ClassReference classReference) {
-    assertThat(artProfile, ArtProfileMatchers.containsClassRule(classReference));
+    MatcherAssert.assertThat(artProfile, ArtProfileMatchers.containsClassRule(classReference));
     checkedClassReferences.add(classReference);
     return this;
   }
@@ -85,7 +86,7 @@
   }
 
   public ArtProfileInspector assertContainsMethodRule(MethodReference methodReference) {
-    assertThat(artProfile, ArtProfileMatchers.containsMethodRule(methodReference));
+    MatcherAssert.assertThat(artProfile, ArtProfileMatchers.containsMethodRule(methodReference));
     checkedMethodReferences.add(methodReference);
     return this;
   }
diff --git a/src/test/java/com/android/tools/r8/profile/art/utils/ArtProfileMatchers.java b/src/test/testbase/java/com/android/tools/r8/profile/art/utils/ArtProfileMatchers.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/profile/art/utils/ArtProfileMatchers.java
rename to src/test/testbase/java/com/android/tools/r8/profile/art/utils/ArtProfileMatchers.java
diff --git a/src/test/java/com/android/tools/r8/profile/art/utils/ArtProfileMethodRuleInspector.java b/src/test/testbase/java/com/android/tools/r8/profile/art/utils/ArtProfileMethodRuleInspector.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/profile/art/utils/ArtProfileMethodRuleInspector.java
rename to src/test/testbase/java/com/android/tools/r8/profile/art/utils/ArtProfileMethodRuleInspector.java
diff --git a/src/test/java/com/android/tools/r8/profile/art/utils/ArtProfileTestingUtils.java b/src/test/testbase/java/com/android/tools/r8/profile/art/utils/ArtProfileTestingUtils.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/profile/art/utils/ArtProfileTestingUtils.java
rename to src/test/testbase/java/com/android/tools/r8/profile/art/utils/ArtProfileTestingUtils.java
diff --git a/src/test/java/com/android/tools/r8/smali/SmaliBuilder.java b/src/test/testbase/java/com/android/tools/r8/smali/SmaliBuilder.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/smali/SmaliBuilder.java
rename to src/test/testbase/java/com/android/tools/r8/smali/SmaliBuilder.java
diff --git a/src/test/java/com/android/tools/r8/synthesis/SyntheticItemsTestUtils.java b/src/test/testbase/java/com/android/tools/r8/synthesis/SyntheticItemsTestUtils.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/synthesis/SyntheticItemsTestUtils.java
rename to src/test/testbase/java/com/android/tools/r8/synthesis/SyntheticItemsTestUtils.java
diff --git a/src/test/java/com/android/tools/r8/testing/AndroidBuildVersion.java b/src/test/testbase/java/com/android/tools/r8/testing/AndroidBuildVersion.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/testing/AndroidBuildVersion.java
rename to src/test/testbase/java/com/android/tools/r8/testing/AndroidBuildVersion.java
diff --git a/src/test/java/com/android/tools/r8/transformers/ClassFileTransformer.java b/src/test/testbase/java/com/android/tools/r8/transformers/ClassFileTransformer.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/transformers/ClassFileTransformer.java
rename to src/test/testbase/java/com/android/tools/r8/transformers/ClassFileTransformer.java
diff --git a/src/test/java/com/android/tools/r8/transformers/ClassTransformer.java b/src/test/testbase/java/com/android/tools/r8/transformers/ClassTransformer.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/transformers/ClassTransformer.java
rename to src/test/testbase/java/com/android/tools/r8/transformers/ClassTransformer.java
diff --git a/src/test/java/com/android/tools/r8/transformers/MethodTransformer.java b/src/test/testbase/java/com/android/tools/r8/transformers/MethodTransformer.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/transformers/MethodTransformer.java
rename to src/test/testbase/java/com/android/tools/r8/transformers/MethodTransformer.java
diff --git a/src/test/java/com/android/tools/r8/utils/ApkUtils.java b/src/test/testbase/java/com/android/tools/r8/utils/ApkUtils.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/ApkUtils.java
rename to src/test/testbase/java/com/android/tools/r8/utils/ApkUtils.java
diff --git a/src/test/java/com/android/tools/r8/utils/ArtErrorParser.java b/src/test/testbase/java/com/android/tools/r8/utils/ArtErrorParser.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/ArtErrorParser.java
rename to src/test/testbase/java/com/android/tools/r8/utils/ArtErrorParser.java
diff --git a/src/test/java/com/android/tools/r8/utils/ForwardingOutputStream.java b/src/test/testbase/java/com/android/tools/r8/utils/ForwardingOutputStream.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/ForwardingOutputStream.java
rename to src/test/testbase/java/com/android/tools/r8/utils/ForwardingOutputStream.java
diff --git a/src/test/java/com/android/tools/r8/utils/Smali.java b/src/test/testbase/java/com/android/tools/r8/utils/Smali.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/Smali.java
rename to src/test/testbase/java/com/android/tools/r8/utils/Smali.java
diff --git a/src/test/java/com/android/tools/r8/utils/TestDescriptionWatcher.java b/src/test/testbase/java/com/android/tools/r8/utils/TestDescriptionWatcher.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/TestDescriptionWatcher.java
rename to src/test/testbase/java/com/android/tools/r8/utils/TestDescriptionWatcher.java
diff --git a/src/test/java/com/android/tools/r8/utils/ThrowingOutputStream.java b/src/test/testbase/java/com/android/tools/r8/utils/ThrowingOutputStream.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/ThrowingOutputStream.java
rename to src/test/testbase/java/com/android/tools/r8/utils/ThrowingOutputStream.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/AbsentAnnotationSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/AbsentAnnotationSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/AbsentAnnotationSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/AbsentAnnotationSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/AbsentClassSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/AbsentClassSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/AbsentClassSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/AbsentClassSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/AbsentFieldSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/AbsentFieldSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/AbsentFieldSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/AbsentFieldSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/AbsentKmClassSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/AbsentKmClassSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/AbsentKmClassSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/AbsentKmClassSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/AbsentKmFunctionSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/AbsentKmFunctionSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/AbsentKmFunctionSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/AbsentKmFunctionSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/AbsentKmPackageSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/AbsentKmPackageSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/AbsentKmPackageSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/AbsentKmPackageSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/AbsentKmPropertySubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/AbsentKmPropertySubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/AbsentKmPropertySubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/AbsentKmPropertySubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/AbsentKmTypeAliasSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/AbsentKmTypeAliasSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/AbsentKmTypeAliasSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/AbsentKmTypeAliasSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/AbsentKmTypeParameterSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/AbsentKmTypeParameterSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/AbsentKmTypeParameterSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/AbsentKmTypeParameterSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/AbsentMethodSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/AbsentMethodSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/AbsentMethodSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/AbsentMethodSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/AnnotationMatchers.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/AnnotationMatchers.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/AnnotationMatchers.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/AnnotationMatchers.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/AnnotationSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/AnnotationSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/AnnotationSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/AnnotationSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/ArgumentPropagatorCodeScannerResultInspector.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/ArgumentPropagatorCodeScannerResultInspector.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/ArgumentPropagatorCodeScannerResultInspector.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/ArgumentPropagatorCodeScannerResultInspector.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/AssertUtils.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/AssertUtils.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/AssertUtils.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/AssertUtils.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/CfInstructionIterator.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/CfInstructionIterator.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/CfInstructionIterator.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/CfInstructionIterator.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/CfInstructionSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/CfInstructionSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/CfInstructionSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/CfInstructionSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/CfTryCatchIterator.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/CfTryCatchIterator.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/CfTryCatchIterator.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/CfTryCatchIterator.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/CfTryCatchSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/CfTryCatchSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/CfTryCatchSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/CfTryCatchSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/CheckCastCfInstructionSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/CheckCastCfInstructionSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/CheckCastCfInstructionSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/CheckCastCfInstructionSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/CheckCastDexInstructionSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/CheckCastDexInstructionSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/CheckCastDexInstructionSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/CheckCastDexInstructionSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/CheckCastInstructionSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/CheckCastInstructionSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/CheckCastInstructionSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/CheckCastInstructionSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/ClassOrMemberSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/ClassOrMemberSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/ClassOrMemberSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/ClassOrMemberSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/ClassSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/ClassSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/ClassSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/ClassSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/CodeInspector.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/CodeInspector.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/CodeInspector.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/CodeInspector.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/CodeMatchers.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/CodeMatchers.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/CodeMatchers.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/CodeMatchers.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/ConstStringCfInstructionSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/ConstStringCfInstructionSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/ConstStringCfInstructionSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/ConstStringCfInstructionSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/ConstStringDexInstructionSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/ConstStringDexInstructionSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/ConstStringDexInstructionSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/ConstStringDexInstructionSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/ConstStringInstructionSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/ConstStringInstructionSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/ConstStringInstructionSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/ConstStringInstructionSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/DexInstructionIterator.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/DexInstructionIterator.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/DexInstructionIterator.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/DexInstructionIterator.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/DexInstructionSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/DexInstructionSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/DexInstructionSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/DexInstructionSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/DexTryCatchIterator.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/DexTryCatchIterator.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/DexTryCatchIterator.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/DexTryCatchIterator.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/DexTryCatchSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/DexTryCatchSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/DexTryCatchSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/DexTryCatchSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/EnumUnboxingInspector.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/EnumUnboxingInspector.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/EnumUnboxingInspector.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/EnumUnboxingInspector.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/FieldAccessCfInstructionSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/FieldAccessCfInstructionSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/FieldAccessCfInstructionSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/FieldAccessCfInstructionSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/FieldAccessDexInstructionSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/FieldAccessDexInstructionSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/FieldAccessDexInstructionSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/FieldAccessDexInstructionSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/FieldAccessInstructionSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/FieldAccessInstructionSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/FieldAccessInstructionSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/FieldAccessInstructionSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/FieldSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/FieldSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/FieldSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/FieldSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/FilteredInstructionIterator.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/FilteredInstructionIterator.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/FilteredInstructionIterator.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/FilteredInstructionIterator.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/FilteredTryCatchIterator.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/FilteredTryCatchIterator.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/FilteredTryCatchIterator.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/FilteredTryCatchIterator.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/FoundAnnotationSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/FoundAnnotationSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/FoundAnnotationSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/FoundAnnotationSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/FoundClassSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/FoundClassSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/FoundClassSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/FoundClassSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/FoundFieldSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/FoundFieldSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/FoundFieldSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/FoundFieldSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/FoundKmClassSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/FoundKmClassSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/FoundKmClassSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/FoundKmClassSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/FoundKmConstructorSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/FoundKmConstructorSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/FoundKmConstructorSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/FoundKmConstructorSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/FoundKmDeclarationContainerSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/FoundKmDeclarationContainerSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/FoundKmDeclarationContainerSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/FoundKmDeclarationContainerSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/FoundKmFunctionSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/FoundKmFunctionSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/FoundKmFunctionSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/FoundKmFunctionSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/FoundKmPackageSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/FoundKmPackageSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/FoundKmPackageSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/FoundKmPackageSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/FoundKmPropertySubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/FoundKmPropertySubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/FoundKmPropertySubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/FoundKmPropertySubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/FoundKmTypeAliasSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/FoundKmTypeAliasSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/FoundKmTypeAliasSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/FoundKmTypeAliasSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/FoundKmTypeParameterSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/FoundKmTypeParameterSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/FoundKmTypeParameterSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/FoundKmTypeParameterSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/FoundMethodSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/FoundMethodSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/FoundMethodSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/FoundMethodSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/HorizontallyMergedClassesInspector.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/HorizontallyMergedClassesInspector.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/HorizontallyMergedClassesInspector.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/HorizontallyMergedClassesInspector.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/InstructionIterator.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/InstructionIterator.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/InstructionIterator.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/InstructionIterator.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/InstructionOffsetSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/InstructionOffsetSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/InstructionOffsetSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/InstructionOffsetSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/InstructionSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/InstructionSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/InstructionSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/InstructionSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/InvokeCfInstructionSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/InvokeCfInstructionSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/InvokeCfInstructionSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/InvokeCfInstructionSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/InvokeDexInstructionSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/InvokeDexInstructionSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/InvokeDexInstructionSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/InvokeDexInstructionSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/InvokeInstructionSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/InvokeInstructionSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/InvokeInstructionSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/InvokeInstructionSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/KmClassSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/KmClassSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/KmClassSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/KmClassSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/KmClassifierSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/KmClassifierSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/KmClassifierSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/KmClassifierSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/KmConstructorSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/KmConstructorSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/KmConstructorSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/KmConstructorSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/KmDeclarationContainerSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/KmDeclarationContainerSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/KmDeclarationContainerSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/KmDeclarationContainerSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/KmFunctionSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/KmFunctionSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/KmFunctionSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/KmFunctionSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/KmPackageSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/KmPackageSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/KmPackageSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/KmPackageSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/KmPropertySubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/KmPropertySubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/KmPropertySubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/KmPropertySubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/KmTypeAliasSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/KmTypeAliasSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/KmTypeAliasSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/KmTypeAliasSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/KmTypeParameterSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/KmTypeParameterSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/KmTypeParameterSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/KmTypeParameterSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/KmTypeParameterSubjectMixin.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/KmTypeParameterSubjectMixin.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/KmTypeParameterSubjectMixin.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/KmTypeParameterSubjectMixin.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/KmTypeProjectionSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/KmTypeProjectionSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/KmTypeProjectionSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/KmTypeProjectionSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/KmTypeSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/KmTypeSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/KmTypeSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/KmTypeSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/KmValueParameterSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/KmValueParameterSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/KmValueParameterSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/KmValueParameterSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/LineNumberTable.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/LineNumberTable.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/LineNumberTable.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/LineNumberTable.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/LocalVariableTable.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/LocalVariableTable.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/LocalVariableTable.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/LocalVariableTable.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/Main.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/Main.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/Main.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/Main.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/Matchers.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/Matchers.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/Matchers.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/Matchers.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/MemberSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/MemberSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/MemberSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/MemberSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/MethodMatchers.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/MethodMatchers.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/MethodMatchers.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/MethodMatchers.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/MethodSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/MethodSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/MethodSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/MethodSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/MinificationInspector.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/MinificationInspector.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/MinificationInspector.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/MinificationInspector.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/NewInstanceCfInstructionSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/NewInstanceCfInstructionSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/NewInstanceCfInstructionSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/NewInstanceCfInstructionSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/NewInstanceDexInstructionSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/NewInstanceDexInstructionSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/NewInstanceDexInstructionSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/NewInstanceDexInstructionSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/NewInstanceInstructionSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/NewInstanceInstructionSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/NewInstanceInstructionSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/NewInstanceInstructionSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/RangeSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/RangeSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/RangeSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/RangeSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/RecordComponentSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/RecordComponentSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/RecordComponentSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/RecordComponentSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/RepackagingInspector.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/RepackagingInspector.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/RepackagingInspector.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/RepackagingInspector.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/Subject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/Subject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/Subject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/Subject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/SwitchCfInstructionSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/SwitchCfInstructionSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/SwitchCfInstructionSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/SwitchCfInstructionSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/SwitchDexInstructionSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/SwitchDexInstructionSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/SwitchDexInstructionSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/SwitchDexInstructionSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/SwitchInstructionSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/SwitchInstructionSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/SwitchInstructionSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/SwitchInstructionSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/TryCatchIterator.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/TryCatchIterator.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/TryCatchIterator.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/TryCatchIterator.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/TryCatchSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/TryCatchSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/TryCatchSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/TryCatchSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/TypeSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/TypeSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/TypeSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/TypeSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/VerticallyMergedClassesInspector.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/VerticallyMergedClassesInspector.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/VerticallyMergedClassesInspector.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/VerticallyMergedClassesInspector.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/analysis/ProtoApplicationStats.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/analysis/ProtoApplicationStats.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/analysis/ProtoApplicationStats.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/analysis/ProtoApplicationStats.java
diff --git a/src/test/java/com/android/tools/r8/utils/graphinspector/GraphInspector.java b/src/test/testbase/java/com/android/tools/r8/utils/graphinspector/GraphInspector.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/graphinspector/GraphInspector.java
rename to src/test/testbase/java/com/android/tools/r8/utils/graphinspector/GraphInspector.java
diff --git a/src/test/java/dalvik/annotation/optimization/ReachabilitySensitive.java b/src/test/testbase/java/dalvik/annotation/optimization/ReachabilitySensitive.java
similarity index 100%
rename from src/test/java/dalvik/annotation/optimization/ReachabilitySensitive.java
rename to src/test/testbase/java/dalvik/annotation/optimization/ReachabilitySensitive.java
diff --git a/src/test/java/dalvik/system/PathClassLoader.java b/src/test/testbase/java/dalvik/system/PathClassLoader.java
similarity index 100%
rename from src/test/java/dalvik/system/PathClassLoader.java
rename to src/test/testbase/java/dalvik/system/PathClassLoader.java