Reuse temp rules from TestBase in tests

Change-Id: If05dfa9a5fd9acac34bc16673bb1dd20e03876b3
diff --git a/src/test/java/com/android/tools/r8/BackportedMethodListTest.java b/src/test/java/com/android/tools/r8/BackportedMethodListTest.java
index 3bb27c2..22d1e0a 100644
--- a/src/test/java/com/android/tools/r8/BackportedMethodListTest.java
+++ b/src/test/java/com/android/tools/r8/BackportedMethodListTest.java
@@ -14,16 +14,12 @@
 import java.util.ArrayList;
 import java.util.List;
 import org.junit.Assume;
-import org.junit.Rule;
 import org.junit.Test;
-import org.junit.rules.TemporaryFolder;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
 
 @RunWith(Parameterized.class)
-public class BackportedMethodListTest {
-
-  @Rule public TemporaryFolder temp = ToolHelper.getTemporaryFolderForTest();
+public class BackportedMethodListTest extends TestBase {
 
   enum Mode {
     NO_LIBRARY,
diff --git a/src/test/java/com/android/tools/r8/R8CodeCanonicalizationTest.java b/src/test/java/com/android/tools/r8/R8CodeCanonicalizationTest.java
index 65aea6e..90343b7 100644
--- a/src/test/java/com/android/tools/r8/R8CodeCanonicalizationTest.java
+++ b/src/test/java/com/android/tools/r8/R8CodeCanonicalizationTest.java
@@ -10,11 +10,9 @@
 import java.nio.file.Path;
 import java.nio.file.Paths;
 import org.junit.Assert;
-import org.junit.Rule;
 import org.junit.Test;
-import org.junit.rules.TemporaryFolder;
 
-public class R8CodeCanonicalizationTest {
+public class R8CodeCanonicalizationTest extends TestBase {
 
   private static final Path SOURCE_DEX = Paths.get(
       ToolHelper.EXAMPLES_BUILD_DIR, "invokeempty", "classes.dex");
@@ -29,9 +27,6 @@
     return 0;
   }
 
-  @Rule
-  public TemporaryFolder temp = ToolHelper.getTemporaryFolderForTest();
-
   @Test
   public void testNumberOfCodeItemsUnchanged() throws Exception {
     int numberOfCodes = readNumberOfCodes(SOURCE_DEX);
diff --git a/src/test/java/com/android/tools/r8/R8RunArtTestsTest.java b/src/test/java/com/android/tools/r8/R8RunArtTestsTest.java
index f3c3dc5..367a7c8 100644
--- a/src/test/java/com/android/tools/r8/R8RunArtTestsTest.java
+++ b/src/test/java/com/android/tools/r8/R8RunArtTestsTest.java
@@ -56,13 +56,12 @@
 import org.junit.ComparisonFailure;
 import org.junit.Rule;
 import org.junit.rules.ExpectedException;
-import org.junit.rules.TemporaryFolder;
 
 /**
  * This test class is not invoked directly. Instead, the gradle script generates one subclass per
  * actual art test. This allows us to run these in parallel.
  */
-public abstract class R8RunArtTestsTest {
+public abstract class R8RunArtTestsTest extends TestBase {
 
   private static final boolean DEX_COMPARE_WITH_DEX_REFERENCE_ON_FAILURE = true;
 
@@ -1504,9 +1503,6 @@
   }
 
   @Rule
-  public TemporaryFolder temp = ToolHelper.getTemporaryFolderForTest();
-
-  @Rule
   public TestDescriptionWatcher watcher = new TestDescriptionWatcher();
 
   public R8RunArtTestsTest(String name, DexTool toolchain) {
diff --git a/src/test/java/com/android/tools/r8/R8RunExamplesTest.java b/src/test/java/com/android/tools/r8/R8RunExamplesTest.java
index 6065b96..2c1b299 100644
--- a/src/test/java/com/android/tools/r8/R8RunExamplesTest.java
+++ b/src/test/java/com/android/tools/r8/R8RunExamplesTest.java
@@ -20,7 +20,7 @@
 import org.junit.runners.Parameterized.Parameters;
 
 @RunWith(Parameterized.class)
-public class R8RunExamplesTest extends R8RunExamplesCommon {
+public class R8RunExamplesTest extends R8RunExamplesTestBase {
 
   @Parameters(name = "{0}_{1}_{2}_{3}_{5}_{6}")
   public static Collection<String[]> data() {
diff --git a/src/test/java/com/android/tools/r8/R8RunExamplesCommon.java b/src/test/java/com/android/tools/r8/R8RunExamplesTestBase.java
similarity index 95%
rename from src/test/java/com/android/tools/r8/R8RunExamplesCommon.java
rename to src/test/java/com/android/tools/r8/R8RunExamplesTestBase.java
index 8866236..62b9ca4 100644
--- a/src/test/java/com/android/tools/r8/R8RunExamplesCommon.java
+++ b/src/test/java/com/android/tools/r8/R8RunExamplesTestBase.java
@@ -28,9 +28,8 @@
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
-import org.junit.rules.TemporaryFolder;
 
-public abstract class R8RunExamplesCommon {
+public abstract class R8RunExamplesTestBase extends TestBase {
 
   protected enum Input {
     JAVAC,
@@ -59,9 +58,6 @@
   }
 
   @Rule
-  public TemporaryFolder temp = ToolHelper.getTemporaryFolderForTest();
-
-  @Rule
   public TestDescriptionWatcher watcher = new TestDescriptionWatcher();
 
   private final Input input;
@@ -71,13 +67,8 @@
   private final String mainClass;
   protected final Output output;
 
-  public R8RunExamplesCommon(
-      String pkg,
-      String input,
-      String compiler,
-      String mode,
-      String mainClass,
-      String output) {
+  public R8RunExamplesTestBase(
+      String pkg, String input, String compiler, String mode, String mainClass, String output) {
     this.pkg = pkg;
     this.input = Input.valueOf(input);
     this.compiler = CompilerUnderTest.valueOf(compiler);
diff --git a/src/test/java/com/android/tools/r8/R8RunSmaliTestsTest.java b/src/test/java/com/android/tools/r8/R8RunSmaliTestsTest.java
index a5d61e9..0ef9446 100644
--- a/src/test/java/com/android/tools/r8/R8RunSmaliTestsTest.java
+++ b/src/test/java/com/android/tools/r8/R8RunSmaliTestsTest.java
@@ -178,9 +178,6 @@
   );
 
   @Rule
-  public TemporaryFolder temp = ToolHelper.getTemporaryFolderForTest();
-
-  @Rule
   public TestDescriptionWatcher watcher = new TestDescriptionWatcher();
 
   private final TestParameters parameters;
diff --git a/src/test/java/com/android/tools/r8/RunExamplesAndroidNTest.java b/src/test/java/com/android/tools/r8/RunExamplesAndroidNTest.java
index f062988..4154c30 100644
--- a/src/test/java/com/android/tools/r8/RunExamplesAndroidNTest.java
+++ b/src/test/java/com/android/tools/r8/RunExamplesAndroidNTest.java
@@ -27,9 +27,8 @@
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
-import org.junit.rules.TemporaryFolder;
 
-public abstract class RunExamplesAndroidNTest<B> {
+public abstract class RunExamplesAndroidNTest<B> extends TestBase {
 
   private static final String EXAMPLE_DIR = ToolHelper.EXAMPLES_ANDROID_N_BUILD_DIR;
 
@@ -119,8 +118,6 @@
           DexVm.Version.DEFAULT,
           ImmutableList.of());
 
-  @Rule public TemporaryFolder temp = ToolHelper.getTemporaryFolderForTest();
-
   @Rule public ExpectedException thrown = ExpectedException.none();
 
   @Rule public TestDescriptionWatcher watcher = new TestDescriptionWatcher();
diff --git a/src/test/java/com/android/tools/r8/RunExamplesAndroidOTest.java b/src/test/java/com/android/tools/r8/RunExamplesAndroidOTest.java
index c2c74a4..9e22135 100644
--- a/src/test/java/com/android/tools/r8/RunExamplesAndroidOTest.java
+++ b/src/test/java/com/android/tools/r8/RunExamplesAndroidOTest.java
@@ -312,9 +312,6 @@
   }
 
   @Rule
-  public TemporaryFolder temp = ToolHelper.getTemporaryFolderForTest();
-
-  @Rule
   public ExpectedException thrown = ExpectedException.none();
 
   @Rule
diff --git a/src/test/java/com/android/tools/r8/RunExamplesAndroidPTest.java b/src/test/java/com/android/tools/r8/RunExamplesAndroidPTest.java
index c8b6cc4..30ad72e 100644
--- a/src/test/java/com/android/tools/r8/RunExamplesAndroidPTest.java
+++ b/src/test/java/com/android/tools/r8/RunExamplesAndroidPTest.java
@@ -197,9 +197,6 @@
           .build();
 
   @Rule
-  public TemporaryFolder temp = ToolHelper.getTemporaryFolderForTest();
-
-  @Rule
   public ExpectedException thrown = ExpectedException.none();
 
   @Rule
diff --git a/src/test/java/com/android/tools/r8/RunExamplesJava9Test.java b/src/test/java/com/android/tools/r8/RunExamplesJava9Test.java
index 485ac54..811c18f 100644
--- a/src/test/java/com/android/tools/r8/RunExamplesJava9Test.java
+++ b/src/test/java/com/android/tools/r8/RunExamplesJava9Test.java
@@ -36,10 +36,9 @@
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
-import org.junit.rules.TemporaryFolder;
 
-public abstract class RunExamplesJava9Test
-    <B extends BaseCommand.Builder<? extends BaseCommand, B>> {
+public abstract class RunExamplesJava9Test<B extends BaseCommand.Builder<? extends BaseCommand, B>>
+    extends TestBase {
 
   private static final String EXAMPLE_DIR = ToolHelper.EXAMPLES_JAVA9_BUILD_DIR;
 
@@ -148,9 +147,6 @@
           "0: s>i>a\n" + "1: d>i>s>i>a\n" + "2: l>i>s>i>a\n" + "3: x>s\n" + "4: c>d>i>s>i>a\n");
 
   @Rule
-  public TemporaryFolder temp = ToolHelper.getTemporaryFolderForTest();
-
-  @Rule
   public ExpectedException thrown = ExpectedException.none();
 
   @Rule
diff --git a/src/test/java/com/android/tools/r8/TestBase.java b/src/test/java/com/android/tools/r8/TestBase.java
index 4f99c46..89d5749 100644
--- a/src/test/java/com/android/tools/r8/TestBase.java
+++ b/src/test/java/com/android/tools/r8/TestBase.java
@@ -241,7 +241,7 @@
   public TestBuilder<? extends SingleTestRunResult<?>, ?> testForRuntime(
       TestRuntime runtime, Consumer<D8TestBuilder> d8TestBuilderConsumer) {
     if (runtime.isCf()) {
-      return testForJvm();
+      return testForJvm(temp);
     } else {
       assert runtime.isDex();
       D8TestBuilder d8TestBuilder = testForD8();
diff --git a/src/test/java/com/android/tools/r8/cf/AnnotationTestRunner.java b/src/test/java/com/android/tools/r8/cf/AnnotationTestRunner.java
index e9b4755..481ee2a 100644
--- a/src/test/java/com/android/tools/r8/cf/AnnotationTestRunner.java
+++ b/src/test/java/com/android/tools/r8/cf/AnnotationTestRunner.java
@@ -9,21 +9,17 @@
 import com.android.tools.r8.CompilationMode;
 import com.android.tools.r8.R8;
 import com.android.tools.r8.R8Command;
+import com.android.tools.r8.TestBase;
 import com.android.tools.r8.ToolHelper;
 import com.android.tools.r8.ToolHelper.ProcessResult;
 import com.android.tools.r8.origin.Origin;
 import com.google.common.collect.ImmutableList;
 import java.nio.file.Path;
-import org.junit.Rule;
 import org.junit.Test;
-import org.junit.rules.TemporaryFolder;
 
-public class AnnotationTestRunner {
+public class AnnotationTestRunner extends TestBase {
   static final Class CLASS = AnnotationTest.class;
 
-  @Rule
-  public TemporaryFolder temp = ToolHelper.getTemporaryFolderForTest();
-
   @Test
   public void test() throws Exception {
     ProcessResult runInput =
diff --git a/src/test/java/com/android/tools/r8/cf/BaseDefaultMethodTestRunner.java b/src/test/java/com/android/tools/r8/cf/BaseDefaultMethodTestRunner.java
index 91216e4..b1b77fe 100644
--- a/src/test/java/com/android/tools/r8/cf/BaseDefaultMethodTestRunner.java
+++ b/src/test/java/com/android/tools/r8/cf/BaseDefaultMethodTestRunner.java
@@ -9,23 +9,19 @@
 import com.android.tools.r8.CompilationMode;
 import com.android.tools.r8.R8Command;
 import com.android.tools.r8.R8Command.Builder;
+import com.android.tools.r8.TestBase;
 import com.android.tools.r8.ToolHelper;
 import com.android.tools.r8.ToolHelper.ProcessResult;
 import com.android.tools.r8.origin.Origin;
 import java.nio.file.Path;
 import java.util.Arrays;
 import java.util.List;
-import org.junit.Rule;
 import org.junit.Test;
-import org.junit.rules.TemporaryFolder;
 
-public class BaseDefaultMethodTestRunner {
+public class BaseDefaultMethodTestRunner extends TestBase {
   static final Class CLASS = BaseDefaultMethodTest.class;
   static final Class[] CLASSES = BaseDefaultMethodTest.CLASSES;
 
-  @Rule
-  public TemporaryFolder temp = ToolHelper.getTemporaryFolderForTest();
-
   @Test
   public void test() throws Exception {
     ProcessResult runInput =
diff --git a/src/test/java/com/android/tools/r8/cf/CallLoopTestRunner.java b/src/test/java/com/android/tools/r8/cf/CallLoopTestRunner.java
index 1ed7481..76df19f 100644
--- a/src/test/java/com/android/tools/r8/cf/CallLoopTestRunner.java
+++ b/src/test/java/com/android/tools/r8/cf/CallLoopTestRunner.java
@@ -7,16 +7,14 @@
 import com.android.tools.r8.CompilationMode;
 import com.android.tools.r8.R8;
 import com.android.tools.r8.R8Command;
+import com.android.tools.r8.TestBase;
 import com.android.tools.r8.ToolHelper;
 import com.android.tools.r8.origin.Origin;
 import java.nio.file.Path;
-import org.junit.Rule;
 import org.junit.Test;
-import org.junit.rules.TemporaryFolder;
 
-public class CallLoopTestRunner {
-  static final Class CLASS = CallLoopTest.class;
-  @Rule public TemporaryFolder temp = ToolHelper.getTemporaryFolderForTest();
+public class CallLoopTestRunner extends TestBase {
+  static final Class<?> CLASS = CallLoopTest.class;
 
   @Test
   public void test() throws Exception {
diff --git a/src/test/java/com/android/tools/r8/cf/LambdaTestRunner.java b/src/test/java/com/android/tools/r8/cf/LambdaTestRunner.java
index 077c7a7..81621a7 100644
--- a/src/test/java/com/android/tools/r8/cf/LambdaTestRunner.java
+++ b/src/test/java/com/android/tools/r8/cf/LambdaTestRunner.java
@@ -9,6 +9,7 @@
 import com.android.tools.r8.CompilationMode;
 import com.android.tools.r8.R8;
 import com.android.tools.r8.R8Command;
+import com.android.tools.r8.TestBase;
 import com.android.tools.r8.ToolHelper;
 import com.android.tools.r8.ToolHelper.ProcessResult;
 import com.android.tools.r8.cf.code.CfInstruction;
@@ -23,18 +24,13 @@
 import java.util.Collections;
 import java.util.List;
 import org.junit.Assert;
-import org.junit.Rule;
 import org.junit.Test;
-import org.junit.rules.TemporaryFolder;
 
-public class LambdaTestRunner {
+public class LambdaTestRunner extends TestBase {
 
   private static final Class<?> CLASS = LambdaTest.class;
   private static final String METHOD = "main";
 
-  @Rule
-  public TemporaryFolder temp = ToolHelper.getTemporaryFolderForTest();
-
   @Test
   public void test() throws Exception {
     // Test that the InvokeDynamic instruction in LambdaTest.main()
diff --git a/src/test/java/com/android/tools/r8/cf/NegativeZeroTestRunner.java b/src/test/java/com/android/tools/r8/cf/NegativeZeroTestRunner.java
index a38bf60..87f1294 100644
--- a/src/test/java/com/android/tools/r8/cf/NegativeZeroTestRunner.java
+++ b/src/test/java/com/android/tools/r8/cf/NegativeZeroTestRunner.java
@@ -7,16 +7,15 @@
 import com.android.tools.r8.CompilationMode;
 import com.android.tools.r8.R8;
 import com.android.tools.r8.R8Command;
+import com.android.tools.r8.TestBase;
 import com.android.tools.r8.ToolHelper;
 import com.android.tools.r8.origin.Origin;
 import java.nio.file.Path;
-import org.junit.Rule;
 import org.junit.Test;
-import org.junit.rules.TemporaryFolder;
 
-public class NegativeZeroTestRunner {
+public class NegativeZeroTestRunner extends TestBase {
+
   static final Class CLASS = NegativeZeroTest.class;
-  @Rule public TemporaryFolder temp = ToolHelper.getTemporaryFolderForTest();
 
   @Test
   public void test() throws Exception {
diff --git a/src/test/java/com/android/tools/r8/cf/NestedExceptionTestRunner.java b/src/test/java/com/android/tools/r8/cf/NestedExceptionTestRunner.java
index 2cc8a66..cc8a5cc 100644
--- a/src/test/java/com/android/tools/r8/cf/NestedExceptionTestRunner.java
+++ b/src/test/java/com/android/tools/r8/cf/NestedExceptionTestRunner.java
@@ -9,18 +9,16 @@
 import com.android.tools.r8.OutputMode;
 import com.android.tools.r8.R8;
 import com.android.tools.r8.R8Command;
+import com.android.tools.r8.TestBase;
 import com.android.tools.r8.ToolHelper;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.utils.AndroidApp;
 import com.android.tools.r8.utils.AndroidAppConsumers;
 import java.nio.file.Path;
-import org.junit.Rule;
 import org.junit.Test;
-import org.junit.rules.TemporaryFolder;
 
-public class NestedExceptionTestRunner {
+public class NestedExceptionTestRunner extends TestBase {
   static final Class CLASS = NestedExceptionTest.class;
-  @Rule public TemporaryFolder temp = ToolHelper.getTemporaryFolderForTest();
 
   @Test
   public void testNestedException() throws Exception {
diff --git a/src/test/java/com/android/tools/r8/cf/UninitializedInFrameTestRunner.java b/src/test/java/com/android/tools/r8/cf/UninitializedInFrameTestRunner.java
index 466ac41..9f80fe5 100644
--- a/src/test/java/com/android/tools/r8/cf/UninitializedInFrameTestRunner.java
+++ b/src/test/java/com/android/tools/r8/cf/UninitializedInFrameTestRunner.java
@@ -9,6 +9,7 @@
 import com.android.tools.r8.CompilationMode;
 import com.android.tools.r8.R8;
 import com.android.tools.r8.R8Command;
+import com.android.tools.r8.TestBase;
 import com.android.tools.r8.ToolHelper;
 import com.android.tools.r8.ToolHelper.ProcessResult;
 import com.android.tools.r8.origin.Origin;
@@ -16,16 +17,11 @@
 import java.io.IOException;
 import java.nio.file.Path;
 import org.junit.Assert;
-import org.junit.Rule;
 import org.junit.Test;
-import org.junit.rules.TemporaryFolder;
 
-public class UninitializedInFrameTestRunner {
+public class UninitializedInFrameTestRunner extends TestBase {
   static final Class CLASS = UninitializedInFrameTest.class;
 
-  @Rule
-  public TemporaryFolder temp = ToolHelper.getTemporaryFolderForTest();
-
   @Test
   public void test() throws Exception {
     test(ToolHelper.getClassAsBytes(CLASS));
diff --git a/src/test/java/com/android/tools/r8/debug/ArrayDimensionGreaterThanSevenTestRunner.java b/src/test/java/com/android/tools/r8/debug/ArrayDimensionGreaterThanSevenTestRunner.java
index 06dce87..522c18e 100644
--- a/src/test/java/com/android/tools/r8/debug/ArrayDimensionGreaterThanSevenTestRunner.java
+++ b/src/test/java/com/android/tools/r8/debug/ArrayDimensionGreaterThanSevenTestRunner.java
@@ -25,7 +25,7 @@
 
 public class ArrayDimensionGreaterThanSevenTestRunner extends DebugTestBase {
 
-  private static final Class CLASS = ArrayDimensionGreaterThanSevenTest.class;
+  private static final Class<?> CLASS = ArrayDimensionGreaterThanSevenTest.class;
   private static final String NAME = CLASS.getCanonicalName();
 
   private DebugTestConfig getR8CfConfig(String s)
diff --git a/src/test/java/com/android/tools/r8/debug/ArraySimplificationLineNumberTestRunner.java b/src/test/java/com/android/tools/r8/debug/ArraySimplificationLineNumberTestRunner.java
index 6de8589..0646cb1 100644
--- a/src/test/java/com/android/tools/r8/debug/ArraySimplificationLineNumberTestRunner.java
+++ b/src/test/java/com/android/tools/r8/debug/ArraySimplificationLineNumberTestRunner.java
@@ -29,12 +29,16 @@
         "Skipping test " + testName.getMethodName() + " because debugging not enabled in 12.0.0",
         !ToolHelper.getDexVm().isNewerThanOrEqual(DexVm.ART_12_0_0_HOST));
     DebugTestConfig cf = new CfDebugTestConfig().addPaths(ToolHelper.getClassPathForTests());
-    DebugTestConfig d8 = new D8DebugTestConfig().compileAndAdd(
-        temp, Collections.singletonList(ToolHelper.getClassFileForTestClass(CLASS)));
-    DebugTestConfig d8NoLocals = new D8DebugTestConfig().compileAndAdd(
-        temp,
-        Collections.singletonList(ToolHelper.getClassFileForTestClass(CLASS)),
-        options -> options.testing.noLocalsTableOnInput = true);
+    DebugTestConfig d8 =
+        new D8DebugTestConfig()
+            .compileAndAdd(
+                temp, Collections.singletonList(ToolHelper.getClassFileForTestClass(CLASS)));
+    DebugTestConfig d8NoLocals =
+        new D8DebugTestConfig()
+            .compileAndAdd(
+                temp,
+                Collections.singletonList(ToolHelper.getClassFileForTestClass(CLASS)),
+                options -> options.testing.noLocalsTableOnInput = true);
 
     new DebugStreamComparator()
         .add("CF", streamDebugTest(cf, NAME, NO_FILTER))
diff --git a/src/test/java/com/android/tools/r8/debug/BlockReorderingTest.java b/src/test/java/com/android/tools/r8/debug/BlockReorderingTest.java
index 4d4844f..f8dfef5 100644
--- a/src/test/java/com/android/tools/r8/debug/BlockReorderingTest.java
+++ b/src/test/java/com/android/tools/r8/debug/BlockReorderingTest.java
@@ -8,9 +8,7 @@
 import java.util.Collections;
 import org.junit.Assume;
 import org.junit.BeforeClass;
-import org.junit.ClassRule;
 import org.junit.Test;
-import org.junit.rules.TemporaryFolder;
 
 /**
  * Test single stepping behaviour across reordered blocks.
@@ -22,9 +20,6 @@
 
   private static D8DebugTestConfig d8Config;
 
-  @ClassRule
-  public static TemporaryFolder temp = ToolHelper.getTemporaryFolderForTest();
-
   @BeforeClass
   public static void setup() throws Exception {
     // Force inversion of all conditionals to reliably construct a regression test for incorrect
@@ -32,7 +27,7 @@
     d8Config =
         new D8DebugTestConfig()
             .compileAndAdd(
-                temp,
+                getStaticTemp(),
                 Collections.singletonList(DEBUGGEE_JAR),
                 options -> options.testing.invertConditionals = true);
   }
diff --git a/src/test/java/com/android/tools/r8/debug/BreakAtTryAndCatchTestRunner.java b/src/test/java/com/android/tools/r8/debug/BreakAtTryAndCatchTestRunner.java
index ca2f53f..62ffe57 100644
--- a/src/test/java/com/android/tools/r8/debug/BreakAtTryAndCatchTestRunner.java
+++ b/src/test/java/com/android/tools/r8/debug/BreakAtTryAndCatchTestRunner.java
@@ -16,7 +16,7 @@
 @RunWith(Parameterized.class)
 public class BreakAtTryAndCatchTestRunner extends DebugTestBase {
 
-  private static final Class CLASS = BreakAtTryAndCatchTest.class;
+  private static final Class<?> CLASS = BreakAtTryAndCatchTest.class;
   private static final String FILE = CLASS.getSimpleName() + ".java";
   private static final String NAME = CLASS.getCanonicalName();
 
@@ -43,7 +43,7 @@
 
   public BreakAtTryAndCatchTestRunner(String name, DelayedDebugTestConfig config) {
     this.name = name;
-    this.config = config.getConfig(temp);
+    this.config = config.getConfig(getStaticTemp());
   }
 
   @Test
diff --git a/src/test/java/com/android/tools/r8/debug/BreakInOneLineFinallyTestRunner.java b/src/test/java/com/android/tools/r8/debug/BreakInOneLineFinallyTestRunner.java
index 6d7d1a9..6059e43 100644
--- a/src/test/java/com/android/tools/r8/debug/BreakInOneLineFinallyTestRunner.java
+++ b/src/test/java/com/android/tools/r8/debug/BreakInOneLineFinallyTestRunner.java
@@ -14,7 +14,7 @@
 @RunWith(Parameterized.class)
 public class BreakInOneLineFinallyTestRunner extends DebugTestBase {
 
-  private static final Class CLASS = BreakInOneLineFinallyTest.class;
+  private static final Class<?> CLASS = BreakInOneLineFinallyTest.class;
   private static final String FILE = CLASS.getSimpleName() + ".java";
   private static final String NAME = CLASS.getCanonicalName();
 
@@ -30,7 +30,7 @@
   }
 
   public BreakInOneLineFinallyTestRunner(String name, DelayedDebugTestConfig config) {
-    this.config = config.getConfig(temp);
+    this.config = config.getConfig(getStaticTemp());
   }
 
   @Test
diff --git a/src/test/java/com/android/tools/r8/debug/BreakInTwoLinesFinallyTestRunner.java b/src/test/java/com/android/tools/r8/debug/BreakInTwoLinesFinallyTestRunner.java
index 7691a2f..888ea87 100644
--- a/src/test/java/com/android/tools/r8/debug/BreakInTwoLinesFinallyTestRunner.java
+++ b/src/test/java/com/android/tools/r8/debug/BreakInTwoLinesFinallyTestRunner.java
@@ -31,7 +31,7 @@
   }
 
   public BreakInTwoLinesFinallyTestRunner(String name, DelayedDebugTestConfig config) {
-    this.config = config.getConfig(temp);
+    this.config = config.getConfig(getStaticTemp());
   }
 
   @Test
diff --git a/src/test/java/com/android/tools/r8/debug/BreakOnIfTestRunner.java b/src/test/java/com/android/tools/r8/debug/BreakOnIfTestRunner.java
index e61d6f8..6e7bec1 100644
--- a/src/test/java/com/android/tools/r8/debug/BreakOnIfTestRunner.java
+++ b/src/test/java/com/android/tools/r8/debug/BreakOnIfTestRunner.java
@@ -29,7 +29,7 @@
   }
 
   public BreakOnIfTestRunner(String name, DelayedDebugTestConfig config) {
-    this.config = config.getConfig(temp);
+    this.config = config.getConfig(getStaticTemp());
   }
 
   @Test
diff --git a/src/test/java/com/android/tools/r8/debug/BreakPointEventsTestRunner.java b/src/test/java/com/android/tools/r8/debug/BreakPointEventsTestRunner.java
index 7d90a93..cee1fec 100644
--- a/src/test/java/com/android/tools/r8/debug/BreakPointEventsTestRunner.java
+++ b/src/test/java/com/android/tools/r8/debug/BreakPointEventsTestRunner.java
@@ -37,11 +37,11 @@
   }
 
   public static DebugTestConfig d8Config() throws Exception {
-    return new D8DebugTestConfig().compileAndAdd(temp, getClassFilePath());
+    return new D8DebugTestConfig().compileAndAdd(getStaticTemp(), getClassFilePath());
   }
 
   public static DebugTestConfig r8CfConfig() throws Exception {
-    Path outCf = temp.getRoot().toPath().resolve("cf.jar");
+    Path outCf = getStaticTemp().getRoot().toPath().resolve("cf.jar");
     R8.run(
         R8Command.builder()
             .setMode(CompilationMode.DEBUG)
@@ -55,7 +55,7 @@
   public static DebugTestConfig dxConfig() throws Exception {
     Path cwd = ToolHelper.getClassPathForTests().toAbsolutePath();
     Path test = cwd.relativize(getClassFilePath().toAbsolutePath());
-    Path out = temp.newFolder().toPath().resolve("classes.dex").toAbsolutePath();
+    Path out = getStaticTemp().newFolder().toPath().resolve("classes.dex").toAbsolutePath();
     ProcessResult result = ToolHelper.runDX(cwd, "--output=" + out, test.toString());
     assertTrue(result.stderr, 0 == result.exitCode);
     DebugTestConfig config = new DexDebugTestConfig();
@@ -76,7 +76,7 @@
   // The main method will single-step each configuration of the test. It cannot be made a test as
   // the event streams are unequal due to ART vs JVM line change on return and DX incorrect locals.
   public static void main(String[] args) throws Exception {
-    temp.create();
+    getStaticTemp().create();
     try {
       BreakPointEventsTestRunner runner = new BreakPointEventsTestRunner("unused name");
       System.out.println("\n============== CF single stepping: ");
@@ -86,7 +86,7 @@
       System.out.println("\n============== DX single stepping: ");
       runner.printConfig("DX", dxConfig());
     } finally {
-      temp.delete();
+      getStaticTemp().delete();
     }
   }
 
diff --git a/src/test/java/com/android/tools/r8/debug/DebugTestBase.java b/src/test/java/com/android/tools/r8/debug/DebugTestBase.java
index 50a8842..5f69b7c 100644
--- a/src/test/java/com/android/tools/r8/debug/DebugTestBase.java
+++ b/src/test/java/com/android/tools/r8/debug/DebugTestBase.java
@@ -142,9 +142,6 @@
     return new DebugTestParameters();
   }
 
-  @ClassRule
-  public static TemporaryFolder temp = ToolHelper.getTemporaryFolderForTest();
-
   @Rule
   public TestName testName = new TestName();
 
diff --git a/src/test/java/com/android/tools/r8/debug/DebugTestExamples.java b/src/test/java/com/android/tools/r8/debug/DebugTestExamples.java
index a27c1d9..92a8408 100644
--- a/src/test/java/com/android/tools/r8/debug/DebugTestExamples.java
+++ b/src/test/java/com/android/tools/r8/debug/DebugTestExamples.java
@@ -19,7 +19,7 @@
 
   @BeforeClass
   public static void setup() {
-    config = new D8DebugTestResourcesConfig(temp);
+    config = new D8DebugTestResourcesConfig(getStaticTemp());
   }
 
   /**
diff --git a/src/test/java/com/android/tools/r8/debug/DoNotCrashOnAccessToThisRunner.java b/src/test/java/com/android/tools/r8/debug/DoNotCrashOnAccessToThisRunner.java
index 53d4d26..6b7109c 100644
--- a/src/test/java/com/android/tools/r8/debug/DoNotCrashOnAccessToThisRunner.java
+++ b/src/test/java/com/android/tools/r8/debug/DoNotCrashOnAccessToThisRunner.java
@@ -44,7 +44,7 @@
   }
 
   public DoNotCrashOnAccessToThisRunner(String name, DelayedDebugTestConfig config) {
-    this.config = config.getConfig(temp);
+    this.config = config.getConfig(getStaticTemp());
   }
 
   @Test
diff --git a/src/test/java/com/android/tools/r8/debug/EmptyLineAfterJoinTestRunner.java b/src/test/java/com/android/tools/r8/debug/EmptyLineAfterJoinTestRunner.java
index 37782dd..3d4c3fc 100644
--- a/src/test/java/com/android/tools/r8/debug/EmptyLineAfterJoinTestRunner.java
+++ b/src/test/java/com/android/tools/r8/debug/EmptyLineAfterJoinTestRunner.java
@@ -19,14 +19,13 @@
 @RunWith(Parameterized.class)
 public class EmptyLineAfterJoinTestRunner extends DebugTestBase {
 
-  static final Class CLASS = EmptyLineAfterJoinTest.class;
+  static final Class<?> CLASS = EmptyLineAfterJoinTest.class;
   static final String NAME = CLASS.getCanonicalName();
   static final String DESC = DescriptorUtils.javaTypeToDescriptor(NAME);
   static final String FILE = CLASS.getSimpleName() + ".java";
 
   private static Path inputJarCache = null;
 
-  private final String name;
   private final DebugTestConfig config;
 
   @Parameters(name = "{0}")
@@ -52,8 +51,7 @@
   }
 
   public EmptyLineAfterJoinTestRunner(String name, DelayedDebugTestConfig config) {
-    this.name = name;
-    this.config = config.getConfig(temp);
+    this.config = config.getConfig(getStaticTemp());
   }
 
   @Test
diff --git a/src/test/java/com/android/tools/r8/debug/JasminDebugTest.java b/src/test/java/com/android/tools/r8/debug/JasminDebugTest.java
index 1c811da..99ec6c9 100644
--- a/src/test/java/com/android/tools/r8/debug/JasminDebugTest.java
+++ b/src/test/java/com/android/tools/r8/debug/JasminDebugTest.java
@@ -18,9 +18,6 @@
   final String sourcefile = className + ".j";
   final String methodName = "test";
 
-  @Rule
-  public TemporaryFolder temp = ToolHelper.getTemporaryFolderForTest();
-
   @Test
   public void testUselessCheckcastCF() throws Throwable {
     JasminBuilder builder = getBuilderForUselessCheckcast(className, methodName);
diff --git a/src/test/java/com/android/tools/r8/debug/LambdaTest.java b/src/test/java/com/android/tools/r8/debug/LambdaTest.java
index 749c4b4..719e651 100644
--- a/src/test/java/com/android/tools/r8/debug/LambdaTest.java
+++ b/src/test/java/com/android/tools/r8/debug/LambdaTest.java
@@ -32,7 +32,7 @@
   private final DebugTestConfig config;
 
   public LambdaTest(String name, DelayedDebugTestConfig delayedConfig) {
-    this.config = delayedConfig.getConfig(temp);
+    this.config = delayedConfig.getConfig(getStaticTemp());
   }
 
   @Test
diff --git a/src/test/java/com/android/tools/r8/debug/LoadInvokeLoadOptimizationTestRunner.java b/src/test/java/com/android/tools/r8/debug/LoadInvokeLoadOptimizationTestRunner.java
index 9cd5079..e33be2e 100644
--- a/src/test/java/com/android/tools/r8/debug/LoadInvokeLoadOptimizationTestRunner.java
+++ b/src/test/java/com/android/tools/r8/debug/LoadInvokeLoadOptimizationTestRunner.java
@@ -38,7 +38,7 @@
   @Test
   public void testReference() throws Throwable {
     assumeTrue(parameters.isCfRuntime());
-    testForJvm(temp)
+    testForJvm(parameters)
         .addProgramClasses(CLASS)
         .run(parameters.getRuntime(), CLASS)
         .assertSuccessWithOutput(EXPECTED)
diff --git a/src/test/java/com/android/tools/r8/debug/LocalChangeOnSameLineTestRunner.java b/src/test/java/com/android/tools/r8/debug/LocalChangeOnSameLineTestRunner.java
index 9fe7e23..2ef0b4b 100644
--- a/src/test/java/com/android/tools/r8/debug/LocalChangeOnSameLineTestRunner.java
+++ b/src/test/java/com/android/tools/r8/debug/LocalChangeOnSameLineTestRunner.java
@@ -15,7 +15,7 @@
 @RunWith(Parameterized.class)
 public class LocalChangeOnSameLineTestRunner extends DebugTestBase {
 
-  private static final Class CLASS = LocalChangeOnSameLineTest.class;
+  private static final Class<?> CLASS = LocalChangeOnSameLineTest.class;
   private static final String FILE = CLASS.getSimpleName() + ".java";
   private static final String NAME = CLASS.getCanonicalName();
 
@@ -33,7 +33,7 @@
 
   public LocalChangeOnSameLineTestRunner(String name, DelayedDebugTestConfig config) {
     this.name = name;
-    this.config = config.getConfig(temp);
+    this.config = config.getConfig(getStaticTemp());
   }
 
   /** Test that only hit the break point at line 15 once. */
diff --git a/src/test/java/com/android/tools/r8/debug/LocalEndTestRunner.java b/src/test/java/com/android/tools/r8/debug/LocalEndTestRunner.java
index af89b16..e406922 100644
--- a/src/test/java/com/android/tools/r8/debug/LocalEndTestRunner.java
+++ b/src/test/java/com/android/tools/r8/debug/LocalEndTestRunner.java
@@ -20,14 +20,13 @@
 @RunWith(Parameterized.class)
 public class LocalEndTestRunner extends DebugTestBase {
 
-  static final Class CLASS = LocalEndTest.class;
+  static final Class<?> CLASS = LocalEndTest.class;
   static final String NAME = CLASS.getCanonicalName();
   static final String DESC = DescriptorUtils.javaTypeToDescriptor(NAME);
   static final String FILE = CLASS.getSimpleName() + ".java";
 
   private static Path inputJarCache = null;
 
-  private final String name;
   private final DebugTestConfig config;
 
   @Parameters(name = "{0}")
@@ -49,8 +48,7 @@
   }
 
   public LocalEndTestRunner(String name, DelayedDebugTestConfig config) {
-    this.name = name;
-    this.config = config.getConfig(temp);
+    this.config = config.getConfig(getStaticTemp());
   }
 
   @Test
diff --git a/src/test/java/com/android/tools/r8/debug/LocalsLiveAtBlockEntryDebugTest.java b/src/test/java/com/android/tools/r8/debug/LocalsLiveAtBlockEntryDebugTest.java
index 85749ab..84bb292 100644
--- a/src/test/java/com/android/tools/r8/debug/LocalsLiveAtBlockEntryDebugTest.java
+++ b/src/test/java/com/android/tools/r8/debug/LocalsLiveAtBlockEntryDebugTest.java
@@ -35,9 +35,6 @@
   final String sourcefile = className + ".j";
   final String methodName = "test";
 
-  @Rule
-  public TemporaryFolder temp = ToolHelper.getTemporaryFolderForTest();
-
   @Test
   public void testCF() throws Throwable {
     JasminBuilder builder = getBuilderForTest(className, methodName);
diff --git a/src/test/java/com/android/tools/r8/debug/LocalsTest.java b/src/test/java/com/android/tools/r8/debug/LocalsTest.java
index 68b67a9..35178f8 100644
--- a/src/test/java/com/android/tools/r8/debug/LocalsTest.java
+++ b/src/test/java/com/android/tools/r8/debug/LocalsTest.java
@@ -35,7 +35,7 @@
   private final DebugTestConfig config;
 
   public LocalsTest(String name, DelayedDebugTestConfig config) {
-    this.config = config.getConfig(temp);
+    this.config = config.getConfig(getStaticTemp());
   }
 
   @Test
diff --git a/src/test/java/com/android/tools/r8/debug/NonExitingMethodTestRunner.java b/src/test/java/com/android/tools/r8/debug/NonExitingMethodTestRunner.java
index 65d5504..fc81883 100644
--- a/src/test/java/com/android/tools/r8/debug/NonExitingMethodTestRunner.java
+++ b/src/test/java/com/android/tools/r8/debug/NonExitingMethodTestRunner.java
@@ -14,7 +14,6 @@
 import com.android.tools.r8.VmTestRunner.IgnoreIfVmOlderThan;
 import com.android.tools.r8.origin.Origin;
 import com.google.common.collect.ImmutableList;
-import java.io.IOException;
 import java.nio.file.Path;
 import org.junit.Assume;
 import org.junit.Test;
@@ -38,7 +37,7 @@
     return new D8DebugTestConfig().compileAndAdd(temp, getClassFilePath());
   }
 
-  public DebugTestConfig r8CfConfig() throws CompilationFailedException, IOException {
+  public DebugTestConfig r8CfConfig() throws CompilationFailedException {
     Path path = temp.getRoot().toPath().resolve("out.jar");
     ToolHelper.runR8(
         R8Command.builder()
diff --git a/src/test/java/com/android/tools/r8/debug/SmaliDebugTest.java b/src/test/java/com/android/tools/r8/debug/SmaliDebugTest.java
index 1d4a205..71dd6fc 100644
--- a/src/test/java/com/android/tools/r8/debug/SmaliDebugTest.java
+++ b/src/test/java/com/android/tools/r8/debug/SmaliDebugTest.java
@@ -28,9 +28,6 @@
   static final String FILE = "SmaliDebugTestDebuggee.smali";
   static final String CLASS = "SmaliDebugTestDebuggee";
 
-  @Rule
-  public TemporaryFolder temp = ToolHelper.getTemporaryFolderForTest();
-
   /**
    * Simple test to check setup works for the Java source, ala:
    *
diff --git a/src/test/java/com/android/tools/r8/debug/SynchronizedBlockTest.java b/src/test/java/com/android/tools/r8/debug/SynchronizedBlockTest.java
index 208c2cb..0c3f81d 100644
--- a/src/test/java/com/android/tools/r8/debug/SynchronizedBlockTest.java
+++ b/src/test/java/com/android/tools/r8/debug/SynchronizedBlockTest.java
@@ -38,7 +38,7 @@
 
   public SynchronizedBlockTest(String name, DelayedDebugTestConfig config) {
     this.name = name;
-    this.config = config.getConfig(temp);
+    this.config = config.getConfig(getStaticTemp());
   }
 
   @Test
diff --git a/src/test/java/com/android/tools/r8/debug/SyntheticMethodTest.java b/src/test/java/com/android/tools/r8/debug/SyntheticMethodTest.java
index ef09ce2..0872225 100644
--- a/src/test/java/com/android/tools/r8/debug/SyntheticMethodTest.java
+++ b/src/test/java/com/android/tools/r8/debug/SyntheticMethodTest.java
@@ -16,7 +16,7 @@
 
   @BeforeClass
   public static void setup() {
-    config = new D8DebugTestResourcesConfig(temp);
+    config = new D8DebugTestResourcesConfig(getStaticTemp());
   }
 
   @Test
diff --git a/src/test/java/com/android/tools/r8/debuginfo/DebugInfoTestBase.java b/src/test/java/com/android/tools/r8/debuginfo/DebugInfoTestBase.java
index 10d301d..5019708 100644
--- a/src/test/java/com/android/tools/r8/debuginfo/DebugInfoTestBase.java
+++ b/src/test/java/com/android/tools/r8/debuginfo/DebugInfoTestBase.java
@@ -10,6 +10,7 @@
 import com.android.tools.r8.D8;
 import com.android.tools.r8.D8Command;
 import com.android.tools.r8.OutputMode;
+import com.android.tools.r8.TestBase;
 import com.android.tools.r8.ToolHelper;
 import com.android.tools.r8.ToolHelper.ProcessResult;
 import com.android.tools.r8.naming.MemberNaming.MethodSignature;
@@ -21,12 +22,8 @@
 import java.nio.file.Path;
 import java.util.concurrent.ExecutionException;
 import org.junit.Rule;
-import org.junit.rules.TemporaryFolder;
 
-public class DebugInfoTestBase {
-
-  @Rule
-  public TemporaryFolder temp = ToolHelper.getTemporaryFolderForTest();
+public class DebugInfoTestBase extends TestBase {
 
   @Rule
   public TestDescriptionWatcher watcher = new TestDescriptionWatcher();
diff --git a/src/test/java/com/android/tools/r8/debuginfo/PreamblePositionTestRunner.java b/src/test/java/com/android/tools/r8/debuginfo/PreamblePositionTestRunner.java
index 90239e7..5dafac1 100644
--- a/src/test/java/com/android/tools/r8/debuginfo/PreamblePositionTestRunner.java
+++ b/src/test/java/com/android/tools/r8/debuginfo/PreamblePositionTestRunner.java
@@ -10,22 +10,19 @@
 import com.android.tools.r8.CompilationMode;
 import com.android.tools.r8.D8Command;
 import com.android.tools.r8.OutputMode;
+import com.android.tools.r8.TestBase;
 import com.android.tools.r8.ToolHelper;
 import com.android.tools.r8.ToolHelper.ArtCommandBuilder;
 import com.android.tools.r8.ToolHelper.ProcessResult;
 import java.nio.file.Files;
 import java.nio.file.Path;
-import org.junit.ClassRule;
 import org.junit.Test;
-import org.junit.rules.TemporaryFolder;
 
-public class PreamblePositionTestRunner {
+public class PreamblePositionTestRunner extends TestBase {
 
   private static final String TEST_CLASS = "PreamblePositionTestSource";
   private static final String TEST_PACKAGE = "com.android.tools.r8.debuginfo";
 
-  @ClassRule public static TemporaryFolder temp = ToolHelper.getTemporaryFolderForTest();
-
   @Test
   public void testBothBranchesDefaultConditionals() throws Exception {
     testBothBranches(false);
diff --git a/src/test/java/com/android/tools/r8/desugar/DefaultLambdaWithSelfReferenceTestRunner.java b/src/test/java/com/android/tools/r8/desugar/DefaultLambdaWithSelfReferenceTestRunner.java
index ef56abd..130b7fe 100644
--- a/src/test/java/com/android/tools/r8/desugar/DefaultLambdaWithSelfReferenceTestRunner.java
+++ b/src/test/java/com/android/tools/r8/desugar/DefaultLambdaWithSelfReferenceTestRunner.java
@@ -30,6 +30,7 @@
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameter;
 import org.junit.runners.Parameterized.Parameters;
 
 @RunWith(Parameterized.class)
@@ -38,17 +39,14 @@
   private static final Class<?> CLASS = DefaultLambdaWithSelfReferenceTest.class;
   private static final String EXPECTED = StringUtils.lines("stateful(stateless)");
 
-  private final TestParameters parameters;
+  @Parameter(0)
+  public TestParameters parameters;
 
   @Parameters(name = "{0}")
   public static TestParametersCollection data() {
     return getTestParameters().withAllRuntimesAndApiLevels().build();
   }
 
-  public DefaultLambdaWithSelfReferenceTestRunner(TestParameters parameters) {
-    this.parameters = parameters;
-  }
-
   private void runDebugger(DebugTestConfig config, boolean isR8) throws Throwable {
     MethodReference main = Reference.methodFromMethod(CLASS.getMethod("main", String[].class));
     Command checkThisLambda =
diff --git a/src/test/java/com/android/tools/r8/examples/newarray/NewArrayTestRunner.java b/src/test/java/com/android/tools/r8/examples/newarray/NewArrayTestRunner.java
index b36fa2c..be1d789 100644
--- a/src/test/java/com/android/tools/r8/examples/newarray/NewArrayTestRunner.java
+++ b/src/test/java/com/android/tools/r8/examples/newarray/NewArrayTestRunner.java
@@ -76,10 +76,10 @@
 
   @Test
   public void runReference() throws Exception {
+    parameters.assumeJvmTestParameters();
     assumeFalse(enableMultiANewArrayDesugaringForClassFiles);
-    assumeTrue(parameters.isCfRuntime());
     assumeTrue(mode == CompilationMode.DEBUG);
-    testForJvm(getStaticTemp())
+    testForJvm(parameters)
         .addProgramClassesAndInnerClasses(CLASS)
         .run(parameters.getRuntime(), CLASS)
         .assertSuccessWithOutputLines(EXPECTED);
@@ -87,8 +87,8 @@
 
   @Test
   public void testD8() throws Exception {
+    parameters.assumeDexRuntime();
     assumeFalse(enableMultiANewArrayDesugaringForClassFiles);
-    assumeTrue(parameters.isDexRuntime());
     testForD8()
         .addProgramClassesAndInnerClasses(CLASS)
         .setMinApi(parameters)
diff --git a/src/test/java/com/android/tools/r8/internal/CompilationTestBase.java b/src/test/java/com/android/tools/r8/internal/CompilationTestBase.java
index 41ef5ee..8d11903 100644
--- a/src/test/java/com/android/tools/r8/internal/CompilationTestBase.java
+++ b/src/test/java/com/android/tools/r8/internal/CompilationTestBase.java
@@ -61,9 +61,6 @@
   protected KeepingDiagnosticHandler handler;
   protected Reporter reporter;
 
-  @Rule
-  public TemporaryFolder temp = ToolHelper.getTemporaryFolderForTest();
-
   @Before
   public void reset() {
     handler = new KeepingDiagnosticHandler();
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/string/StringLengthDebugTestRunner.java b/src/test/java/com/android/tools/r8/ir/optimize/string/StringLengthDebugTestRunner.java
index 21033e5..4eaf16f 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/string/StringLengthDebugTestRunner.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/string/StringLengthDebugTestRunner.java
@@ -23,8 +23,8 @@
   @IgnoreIfVmOlderThan(Version.V5_1_1)
   public void test() throws Throwable {
     Class<?> main = StringLengthDebugTest.class;
-    DebugTestConfig config = new D8DebugTestConfig()
-        .compileAndAdd(temp, ToolHelper.getClassFileForTestClass(main));
+    DebugTestConfig config =
+        new D8DebugTestConfig().compileAndAdd(temp, ToolHelper.getClassFileForTestClass(main));
     runDebugTest(config, main.getCanonicalName(),
         breakpoint(main.getCanonicalName(), "main"),
         run(),
diff --git a/src/test/java/com/android/tools/r8/jar/UnicodeSetRegression/UnicodeSetRegressionTest.java b/src/test/java/com/android/tools/r8/jar/UnicodeSetRegression/UnicodeSetRegressionTest.java
index f29b349..9b41eec 100644
--- a/src/test/java/com/android/tools/r8/jar/UnicodeSetRegression/UnicodeSetRegressionTest.java
+++ b/src/test/java/com/android/tools/r8/jar/UnicodeSetRegression/UnicodeSetRegressionTest.java
@@ -5,6 +5,7 @@
 
 import com.android.tools.r8.OutputMode;
 import com.android.tools.r8.R8Command;
+import com.android.tools.r8.TestBase;
 import com.android.tools.r8.ToolHelper;
 import com.android.tools.r8.utils.AndroidApp;
 import com.android.tools.r8.utils.AndroidAppConsumers;
@@ -16,18 +17,13 @@
 import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.util.List;
-import org.junit.Rule;
 import org.junit.Test;
-import org.junit.rules.TemporaryFolder;
 
-public class UnicodeSetRegressionTest {
+public class UnicodeSetRegressionTest extends TestBase {
 
   private static final String JAR_FILE =
       "src/test/java/com/android/tools/r8/jar/UnicodeSetRegression/UnicodeSet.jar";
 
-  @Rule
-  public TemporaryFolder temp = ToolHelper.getTemporaryFolderForTest();
-
   private AndroidApp dexFromDX() throws IOException {
     return ToolHelper.runDexer(JAR_FILE, temp.newFolder("dx-dex").getPath());
   }
diff --git a/src/test/java/com/android/tools/r8/jdwp/RunJdwpTests.java b/src/test/java/com/android/tools/r8/jdwp/RunJdwpTests.java
index a831fb0..a7c2581 100644
--- a/src/test/java/com/android/tools/r8/jdwp/RunJdwpTests.java
+++ b/src/test/java/com/android/tools/r8/jdwp/RunJdwpTests.java
@@ -11,6 +11,7 @@
 import com.android.tools.r8.D8;
 import com.android.tools.r8.D8Command;
 import com.android.tools.r8.OutputMode;
+import com.android.tools.r8.TestBase;
 import com.android.tools.r8.ToolHelper;
 import com.android.tools.r8.ToolHelper.DexVm;
 import com.android.tools.r8.ToolHelper.DexVm.Version;
@@ -30,13 +31,11 @@
 import java.util.Set;
 import org.junit.Assume;
 import org.junit.BeforeClass;
-import org.junit.ClassRule;
 import org.junit.Rule;
 import org.junit.Test;
-import org.junit.rules.TemporaryFolder;
 
 /** Wrapper for the art JDWP tests. */
-public class RunJdwpTests {
+public class RunJdwpTests extends TestBase {
 
   enum Tool {
     JAVAC,
@@ -266,9 +265,6 @@
 
   private static File d8Out = null;
 
-  @ClassRule
-  public static TemporaryFolder temp = ToolHelper.getTemporaryFolderForTest();
-
   @Rule
   public TestDescriptionWatcher watcher = new TestDescriptionWatcher();
 
@@ -284,7 +280,7 @@
       extraTestResources.add(testPath.resolve(test + ".class"));
       extraTestResources.add(testPath.resolve(test.replace("Test", "Debuggee") + ".class"));
     }
-    d8Out = temp.newFolder("d8-out");
+    d8Out = getStaticTemp().newFolder("d8-out");
     D8.run(
         D8Command.builder()
             .addProgramFiles(jdwpTestsJar)
diff --git a/src/test/java/com/android/tools/r8/memberrebinding/MemberRebindingTest.java b/src/test/java/com/android/tools/r8/memberrebinding/MemberRebindingTest.java
index 605ddf7..1abcddd 100644
--- a/src/test/java/com/android/tools/r8/memberrebinding/MemberRebindingTest.java
+++ b/src/test/java/com/android/tools/r8/memberrebinding/MemberRebindingTest.java
@@ -35,13 +35,12 @@
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
-import org.junit.rules.TemporaryFolder;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
 import org.junit.runners.Parameterized.Parameters;
 
 @RunWith(Parameterized.class)
-public class MemberRebindingTest {
+public class MemberRebindingTest extends TestBase {
 
   private static final Path JAR_LIBRARY =
       Paths.get(ToolHelper.EXAMPLES_BUILD_DIR + "memberrebindinglib.jar");
@@ -65,9 +64,6 @@
   private final int minApiLevel;
 
   @Rule
-  public TemporaryFolder temp = ToolHelper.getTemporaryFolderForTest();
-
-  @Rule
   public TestDescriptionWatcher watcher = new TestDescriptionWatcher();
 
   public MemberRebindingTest(TestConfiguration configuration) {
diff --git a/src/test/java/com/android/tools/r8/naming/InterfaceConstructorRenamingTest.java b/src/test/java/com/android/tools/r8/naming/InterfaceConstructorRenamingTest.java
index 7ec2589..0b6f53f 100644
--- a/src/test/java/com/android/tools/r8/naming/InterfaceConstructorRenamingTest.java
+++ b/src/test/java/com/android/tools/r8/naming/InterfaceConstructorRenamingTest.java
@@ -10,7 +10,6 @@
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.TestParametersCollection;
-import com.android.tools.r8.ToolHelper;
 import com.android.tools.r8.references.Reference;
 import com.android.tools.r8.utils.AndroidApiLevel;
 import com.android.tools.r8.utils.StringUtils;
@@ -18,9 +17,7 @@
 import java.io.IOException;
 import java.util.Collections;
 import java.util.function.Function;
-import org.junit.ClassRule;
 import org.junit.Test;
-import org.junit.rules.TemporaryFolder;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
 import org.junit.runners.Parameterized.Parameters;
@@ -38,12 +35,10 @@
   private static Function<Backend, R8TestCompileResult> compilation =
       memoizeFunction(InterfaceConstructorRenamingTest::compile);
 
-  @ClassRule public static TemporaryFolder staticTemp = ToolHelper.getTemporaryFolderForTest();
-
   private static R8TestCompileResult compile(Backend backend)
       throws com.android.tools.r8.CompilationFailedException, IOException {
     R8TestCompileResult compileResult =
-        testForR8(staticTemp, backend)
+        testForR8(getStaticTemp(), backend)
             .addProgramClasses(TestInterface.class, TestClass.class)
             .addKeepMainRule(TestClass.class)
             .setMinApi(AndroidApiLevel.B)
diff --git a/src/test/java/com/android/tools/r8/naming/RenameSourceFileDebugTest.java b/src/test/java/com/android/tools/r8/naming/RenameSourceFileDebugTest.java
index 6d8982a..7723243 100644
--- a/src/test/java/com/android/tools/r8/naming/RenameSourceFileDebugTest.java
+++ b/src/test/java/com/android/tools/r8/naming/RenameSourceFileDebugTest.java
@@ -39,7 +39,7 @@
   @BeforeClass
   public static void initDebuggeePath() throws Exception {
     for (Backend backend : ToolHelper.getBackends()) {
-      Path outdir = temp.newFolder().toPath();
+      Path outdir = getStaticTemp().newFolder().toPath();
       Path outjar = outdir.resolve("r8_compiled.jar");
       Path proguardMapPath = outdir.resolve("proguard.map");
       R8Command.Builder builder =
diff --git a/src/test/java/com/android/tools/r8/naming/applymapping/ApplyMappingAfterVerticalMergingMethodTest.java b/src/test/java/com/android/tools/r8/naming/applymapping/ApplyMappingAfterVerticalMergingMethodTest.java
index 8c0274e..6e84651 100644
--- a/src/test/java/com/android/tools/r8/naming/applymapping/ApplyMappingAfterVerticalMergingMethodTest.java
+++ b/src/test/java/com/android/tools/r8/naming/applymapping/ApplyMappingAfterVerticalMergingMethodTest.java
@@ -15,18 +15,14 @@
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.TestParametersCollection;
-import com.android.tools.r8.ToolHelper;
 import com.android.tools.r8.utils.AndroidApiLevel;
 import com.android.tools.r8.utils.StringUtils;
 import com.android.tools.r8.utils.codeinspector.FoundMethodSubject;
 import java.io.IOException;
 import java.nio.file.Path;
 import java.util.List;
-import java.util.concurrent.ExecutionException;
 import java.util.function.Function;
-import org.junit.ClassRule;
 import org.junit.Test;
-import org.junit.rules.TemporaryFolder;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
 
@@ -92,11 +88,8 @@
   private static Function<Backend, CompilationResult> compilationResults =
       memoizeFunction(ApplyMappingAfterVerticalMergingMethodTest::compile);
 
-  @ClassRule
-  public static TemporaryFolder staticTemp = ToolHelper.getTemporaryFolderForTest();
-
   public static CompilationResult compile(Backend backend)
-      throws ExecutionException, CompilationFailedException, IOException {
+      throws CompilationFailedException, IOException {
     R8TestCompileResult library = compileLibrary(backend);
     R8TestCompileResult program = compileProgram(backend, library.getProguardMap());
     return new CompilationResult(library, program, library.writeToZip());
@@ -104,7 +97,7 @@
 
   private static R8TestCompileResult compileLibrary(Backend backend)
       throws CompilationFailedException, IOException {
-    return testForR8(staticTemp, backend)
+    return testForR8(getStaticTemp(), backend)
         .enableInliningAnnotations()
         .enableMemberValuePropagationAnnotations()
         .addProgramClasses(LIBRARY_CLASSES)
@@ -132,7 +125,7 @@
 
   private static R8TestCompileResult compileProgram(Backend backend, String proguardMap)
       throws CompilationFailedException {
-    return testForR8(staticTemp, backend)
+    return testForR8(getStaticTemp(), backend)
         .noTreeShaking()
         .addDontObfuscate()
         .addProgramClasses(PROGRAM_CLASSES)
diff --git a/src/test/java/com/android/tools/r8/naming/applymapping/shared/NameClashTest.java b/src/test/java/com/android/tools/r8/naming/applymapping/shared/NameClashTest.java
index 5d1c231..4a2c79e 100644
--- a/src/test/java/com/android/tools/r8/naming/applymapping/shared/NameClashTest.java
+++ b/src/test/java/com/android/tools/r8/naming/applymapping/shared/NameClashTest.java
@@ -19,16 +19,11 @@
 import java.nio.file.Path;
 import org.junit.Before;
 import org.junit.BeforeClass;
-import org.junit.ClassRule;
 import org.junit.Ignore;
 import org.junit.Test;
-import org.junit.rules.TemporaryFolder;
 
 public class NameClashTest extends TestBase {
 
-  @ClassRule
-  public static TemporaryFolder temporaryFolder = ToolHelper.getTemporaryFolderForTest();
-
   private static Class<?> MAIN = ProgramClass.class;
   private static String EXPECTED_OUTPUT =
       StringUtils.lines(
@@ -42,13 +37,13 @@
   @BeforeClass
   public static void setUpJars() throws Exception {
     prgJarThatUsesOriginalLib =
-        temporaryFolder.newFile("prgOrginalLib.jar").toPath().toAbsolutePath();
+        getStaticTemp().newFile("prgOrginalLib.jar").toPath().toAbsolutePath();
     writeClassFileDataToJar(
         prgJarThatUsesOriginalLib, ImmutableList.of(ToolHelper.getClassAsBytes(MAIN)));
     prgJarThatUsesMinifiedLib =
-        temporaryFolder.newFile("prgMinifiedLib.jar").toPath().toAbsolutePath();
+        getStaticTemp().newFile("prgMinifiedLib.jar").toPath().toAbsolutePath();
     writeClassFileDataToJar(prgJarThatUsesMinifiedLib, ImmutableList.of(ProgramClassDump.dump()));
-    libJar = temporaryFolder.newFile("lib.jar").toPath().toAbsolutePath();
+    libJar = getStaticTemp().newFile("lib.jar").toPath().toAbsolutePath();
     writeClassesToJar(
         libJar,
         ImmutableList.of(
diff --git a/src/test/java/com/android/tools/r8/regress/b79498926/B79498926.java b/src/test/java/com/android/tools/r8/regress/b79498926/B79498926.java
index d10454d..481cb2c 100644
--- a/src/test/java/com/android/tools/r8/regress/b79498926/B79498926.java
+++ b/src/test/java/com/android/tools/r8/regress/b79498926/B79498926.java
@@ -33,9 +33,6 @@
     return getTestParameters().withDexRuntimes().build();
   }
 
-  @Rule
-  public TemporaryFolder temp = ToolHelper.getTemporaryFolderForTest();
-
   @Test
   public void test() throws CompilationFailedException, IOException {
     Path outDex = temp.getRoot().toPath().resolve("out.zip");
diff --git a/src/test/java/com/android/tools/r8/rewrite/assertions/RemoveAssertionsTest.java b/src/test/java/com/android/tools/r8/rewrite/assertions/RemoveAssertionsTest.java
index fc880c9..235ef00 100644
--- a/src/test/java/com/android/tools/r8/rewrite/assertions/RemoveAssertionsTest.java
+++ b/src/test/java/com/android/tools/r8/rewrite/assertions/RemoveAssertionsTest.java
@@ -28,9 +28,7 @@
 import java.nio.file.Path;
 import java.util.Collection;
 import java.util.function.Function;
-import org.junit.ClassRule;
 import org.junit.Test;
-import org.junit.rules.TemporaryFolder;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
 import org.objectweb.asm.ClassReader;
@@ -178,14 +176,12 @@
     this.parameters = parameters;
   }
 
-  @ClassRule public static TemporaryFolder staticTemp = ToolHelper.getTemporaryFolderForTest();
-
   private static Function<Backend, CompilationResults> compilationResults =
       memoizeFunction(RemoveAssertionsTest::compileAll);
 
   private static R8TestCompileResult compileWithAccessModification(Backend backend)
       throws CompilationFailedException {
-    return testForR8(staticTemp, backend)
+    return testForR8(getStaticTemp(), backend)
         .addProgramClasses(ClassWithAssertions.class)
         .addKeepMainRule(ClassWithAssertions.class)
         .addOptionsModification(o -> o.inlinerOptions().enableInlining = false)
@@ -198,7 +194,7 @@
   private static R8TestCompileResult compileCf(
       Function<AssertionsConfiguration.Builder, AssertionsConfiguration> transformation)
       throws CompilationFailedException {
-    return testForR8(staticTemp, Backend.CF)
+    return testForR8(getStaticTemp(), Backend.CF)
         .addProgramClasses(ClassWithAssertions.class)
         .debug()
         .noTreeShaking()
@@ -219,7 +215,7 @@
 
   private static R8TestCompileResult compileRegress110887293(Function<byte[], byte[]> rewriter)
       throws CompilationFailedException, IOException {
-    return testForR8(staticTemp, Backend.DEX)
+    return testForR8(getStaticTemp(), Backend.DEX)
         .addProgramClassFileData(
             rewriter.apply(ToolHelper.getClassAsBytes(ClassWithAssertions.class)))
         .addProgramClasses(ChromuimAssertionHookMock.class)
diff --git a/src/test/java/com/android/tools/r8/shaking/NonVirtualOverrideTest.java b/src/test/java/com/android/tools/r8/shaking/NonVirtualOverrideTest.java
index 163a63f..8ce1d80 100644
--- a/src/test/java/com/android/tools/r8/shaking/NonVirtualOverrideTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/NonVirtualOverrideTest.java
@@ -15,7 +15,6 @@
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.TestRuntime.CfRuntime;
-import com.android.tools.r8.ToolHelper;
 import com.android.tools.r8.ToolHelper.DexVm.Version;
 import com.android.tools.r8.ir.optimize.Inliner.Reason;
 import com.android.tools.r8.utils.AndroidApiLevel;
@@ -29,9 +28,7 @@
 import java.util.Collection;
 import java.util.Objects;
 import java.util.function.Function;
-import org.junit.ClassRule;
 import org.junit.Test;
-import org.junit.rules.TemporaryFolder;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
 import org.objectweb.asm.ClassWriter;
@@ -83,8 +80,6 @@
     this.enableVerticalClassMerging = enableVerticalClassMerging;
   }
 
-  @ClassRule public static TemporaryFolder staticTemp = ToolHelper.getTemporaryFolderForTest();
-
   private static Function<Boolean, String> expectedResults =
       memoizeFunction(NonVirtualOverrideTest::getExpectedResult);
 
@@ -92,7 +87,7 @@
       memoizeFunction(NonVirtualOverrideTest::compile);
 
   public static String getExpectedResult(boolean isOldVm) throws Exception {
-    Path referenceJar = staticTemp.getRoot().toPath().resolve("input.jar");
+    Path referenceJar = getStaticTemp().getRoot().toPath().resolve("input.jar");
     ArchiveConsumer inputConsumer = new ArchiveConsumer(referenceJar);
     inputConsumer.accept(
         ByteDataView.of(NonVirtualOverrideTestClassDump.dump()),
@@ -128,7 +123,7 @@
   }
 
   public static R8TestCompileResult compile(Dimensions dimensions) throws Exception {
-    return testForR8(staticTemp, dimensions.backend)
+    return testForR8(getStaticTemp(), dimensions.backend)
         .addProgramClassFileData(
             NonVirtualOverrideTestClassDump.dump(), ADump.dump(), BDump.dump(), CDump.dump())
         .addKeepMainRule(NonVirtualOverrideTestClass.class)
diff --git a/src/test/java/com/android/tools/r8/shaking/TreeShakingSpecificTest.java b/src/test/java/com/android/tools/r8/shaking/TreeShakingSpecificTest.java
index eacb522..a5a7c88 100644
--- a/src/test/java/com/android/tools/r8/shaking/TreeShakingSpecificTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/TreeShakingSpecificTest.java
@@ -50,9 +50,6 @@
     parameters.assertNoneRuntime();
   }
 
-  @Rule
-  public TemporaryFolder temp = ToolHelper.getTemporaryFolderForTest();
-
   private Path getProgramFiles(String test) {
     return Paths.get(EXAMPLES_BUILD_DIR, test + ".jar");
   }
diff --git a/src/test/java/com/android/tools/r8/shaking/assumenosideeffects/AssumenosideeffectsVisibleMethodsTest.java b/src/test/java/com/android/tools/r8/shaking/assumenosideeffects/AssumenosideeffectsVisibleMethodsTest.java
index 05fa461..bb3c520 100644
--- a/src/test/java/com/android/tools/r8/shaking/assumenosideeffects/AssumenosideeffectsVisibleMethodsTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/assumenosideeffects/AssumenosideeffectsVisibleMethodsTest.java
@@ -17,9 +17,7 @@
 import java.nio.file.Path;
 import java.util.Collection;
 import org.junit.BeforeClass;
-import org.junit.ClassRule;
 import org.junit.Test;
-import org.junit.rules.TemporaryFolder;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
 
@@ -130,18 +128,15 @@
     this.config = config;
   }
 
-  @ClassRule
-  public static TemporaryFolder staticTemp = ToolHelper.getTemporaryFolderForTest();
-
   private static Path libJarPath;
   private static Path libDexPath;
 
   @BeforeClass
   public static void prepareLib() throws Exception {
-    libJarPath = staticTemp.newFile("lib.jar").toPath().toAbsolutePath();
+    libJarPath = getStaticTemp().newFile("lib.jar").toPath().toAbsolutePath();
     writeClassesToJar(libJarPath, ImmutableList.of(LibraryBase.class));
-    libDexPath = staticTemp.newFile("lib.dex").toPath().toAbsolutePath();
-    testForD8(staticTemp)
+    libDexPath = getStaticTemp().newFile("lib.dex").toPath().toAbsolutePath();
+    testForD8(getStaticTemp())
         .addProgramFiles(libJarPath)
         .setMinApi(AndroidApiLevel.B)
         .setProgramConsumer(new ArchiveConsumer(libDexPath))
diff --git a/src/test/java/com/android/tools/r8/shaking/assumenosideeffects/AssumenosideeffectsWithoutMatchingDefinitionTest.java b/src/test/java/com/android/tools/r8/shaking/assumenosideeffects/AssumenosideeffectsWithoutMatchingDefinitionTest.java
index a7f1914..65687cc4 100644
--- a/src/test/java/com/android/tools/r8/shaking/assumenosideeffects/AssumenosideeffectsWithoutMatchingDefinitionTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/assumenosideeffects/AssumenosideeffectsWithoutMatchingDefinitionTest.java
@@ -10,7 +10,6 @@
 import com.android.tools.r8.DexIndexedConsumer.ArchiveConsumer;
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.ToolHelper;
 import com.android.tools.r8.errors.Unreachable;
 import com.android.tools.r8.utils.AndroidApiLevel;
 import com.android.tools.r8.utils.StringUtils;
@@ -21,9 +20,7 @@
 import java.nio.file.Path;
 import java.util.Collection;
 import org.junit.BeforeClass;
-import org.junit.ClassRule;
 import org.junit.Test;
-import org.junit.rules.TemporaryFolder;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
 import org.junit.runners.Parameterized.Parameter;
@@ -88,18 +85,15 @@
   @Parameter(1)
   public TestConfig config;
 
-  @ClassRule
-  public static TemporaryFolder staticTemp = ToolHelper.getTemporaryFolderForTest();
-
   private static Path libJarPath;
   private static Path libDexPath;
 
   @BeforeClass
   public static void prepareLibJar() throws Exception {
-    libJarPath = staticTemp.newFile("lib.jar").toPath().toAbsolutePath();
+    libJarPath = getStaticTemp().newFile("lib.jar").toPath().toAbsolutePath();
     writeClassesToJar(libJarPath, ImmutableList.of(LibraryBase.class, LibrarySub.class));
-    libDexPath = staticTemp.newFile("lib.dex").toPath().toAbsolutePath();
-    testForD8(staticTemp)
+    libDexPath = getStaticTemp().newFile("lib.dex").toPath().toAbsolutePath();
+    testForD8(getStaticTemp())
         .addProgramFiles(libJarPath)
         .setMinApi(AndroidApiLevel.B)
         .setProgramConsumer(new ArchiveConsumer(libDexPath))
diff --git a/src/test/java/com/android/tools/r8/utils/GenerateMainDexListCommandTest.java b/src/test/java/com/android/tools/r8/utils/GenerateMainDexListCommandTest.java
index f681673..becf21f 100644
--- a/src/test/java/com/android/tools/r8/utils/GenerateMainDexListCommandTest.java
+++ b/src/test/java/com/android/tools/r8/utils/GenerateMainDexListCommandTest.java
@@ -14,6 +14,7 @@
 import com.android.tools.r8.GenerateMainDexList;
 import com.android.tools.r8.GenerateMainDexListCommand;
 import com.android.tools.r8.StringConsumer;
+import com.android.tools.r8.TestBase;
 import com.android.tools.r8.ToolHelper;
 import com.android.tools.r8.ToolHelper.ProcessResult;
 import com.android.tools.r8.origin.Origin;
@@ -30,16 +31,12 @@
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
-import org.junit.rules.TemporaryFolder;
 
-public class GenerateMainDexListCommandTest {
+public class GenerateMainDexListCommandTest extends TestBase {
 
   @Rule
   public ExpectedException thrown = ExpectedException.none();
 
-  @Rule
-  public TemporaryFolder temp = ToolHelper.getTemporaryFolderForTest();
-
   private Path getOutputPath(GenerateMainDexListCommand command) {
     StringConsumer consumer = command.getMainDexListConsumer();
     if (consumer instanceof JoiningStringConsumer) {