Merge "Add an annotation for tests that need runtime prebuilts" into ub-jack-carnac
diff --git a/build.xml b/build.xml
index 2c3b4d0..80facc6 100644
--- a/build.xml
+++ b/build.xml
@@ -2446,38 +2446,6 @@
 
   </target>
 
-  <target name="test-jack-java8-pre-n-dump" depends="tests-check-config">
-    <mkdir dir="${jack-tests.dir}/dump"/>
-
-    <java fork="true" failonerror="true"
-      output="${jack-tests.dir}/dump/Java8AllTestPreN.js"
-      classname="com.android.jack.test.junit.JackJUnitLauncher">
-      <jvmarg value="-Dtests.dump=true" />
-      <jvmarg value="-Dtests.config=${tests.config}"/>
-      <classpath>
-       <filelist refid="jack.junit.tests.classpath" />
-      </classpath>
-      <arg value="com.android.jack.java8.Java8AllTestPreN"/>
-    </java>
-
-  </target>
-
-  <target name="test-jack-java8-post-m-dump" depends="tests-check-config">
-    <mkdir dir="${jack-tests.dir}/dump"/>
-
-    <java fork="true" failonerror="true"
-      output="${jack-tests.dir}/dump/Java8AllTestPostM.js"
-      classname="com.android.jack.test.junit.JackJUnitLauncher">
-      <jvmarg value="-Dtests.dump=true" />
-      <jvmarg value="-Dtests.config=${tests.config}"/>
-      <classpath>
-       <filelist refid="jack.junit.tests.classpath" />
-      </classpath>
-      <arg value="com.android.jack.java8.Java8AllTestPostM"/>
-    </java>
-
-  </target>
-
   <target name="test-sched-dump" depends="tests-check-config">
     <mkdir dir="${jack-tests.dir}/dump"/>
 
diff --git a/jack-tests/src/com/android/jack/test/junit/JackTestRunner.java b/jack-tests/src/com/android/jack/test/junit/JackTestRunner.java
index 9fd9cc3..aa81cdc 100644
--- a/jack-tests/src/com/android/jack/test/junit/JackTestRunner.java
+++ b/jack-tests/src/com/android/jack/test/junit/JackTestRunner.java
@@ -72,24 +72,50 @@
       boolean shouldRun = false;
 
       KnownIssue knownIssueAnnot = description.getAnnotation(KnownIssue.class);
+      Runtime runtimeAnnot = description.getAnnotation(Runtime.class);
 
-      MinRuntimeVersion minRuntimeVersion = description.getAnnotation(MinRuntimeVersion.class);
-
-      if (minRuntimeVersion == null || minRuntimeVersion.value().compareTo(runtimeVersion) <= 0) {
-        if (knownIssueAnnot == null) {
-          shouldRun = true;
-        } else {
-          shouldRun = (knownIssueAnnot.candidate().length > 0
-                       || knownIssueAnnot.reference().length > 0)
-                     && (isValidToolchain(candidate, knownIssueAnnot.candidate())
-                         && isValidToolchain(reference, knownIssueAnnot.reference()));
+      // Special case of ecj tests that use JUnit3
+      boolean ecjTestEligibleToRun = false;
+      boolean isEcjTestPostM = false;
+      if (description.getClassName().contains("Ecj")) {
+        isEcjTestPostM =
+            (description.getClassName().contains("PostM"))
+                || description.getClassName().contains("EcjInterfaceMethodsTest");
+        shouldRun =
+            // Otherwise method of class aren't scanned and dump won't work
+            (dumpTests && description.getMethodName() == null)
+                || (isEcjTestPostM && runtimeVersion.compareTo(RuntimeVersion.N) >= 0);
+      } else {
+        // General case
+        if (runtimeAnnot == null
+            || runtimeAnnot.from().compareTo(runtimeVersion) <= 0) {
+          if (knownIssueAnnot == null) {
+            shouldRun = true;
+          } else {
+            shouldRun =
+                (knownIssueAnnot.candidate().length > 0 || knownIssueAnnot.reference().length > 0)
+                    && (isValidToolchain(candidate, knownIssueAnnot.candidate())
+                        && isValidToolchain(reference, knownIssueAnnot.reference()));
+          }
         }
       }
 
       if (dumpTests && description.getMethodName() != null) {
         System.out.println(
             "  \"" + description.getClassName() + '#' + description.getMethodName() + "\": {");
-        System.out.println("    \"ignored\":" + !shouldRun);
+        System.out.print("    \"ignored\":" + !shouldRun);
+        if (runtimeAnnot != null) {
+          System.out.println(",");
+          System.out.println(
+              "    \"runtimePostM\":"
+                  + (runtimeAnnot.from().ordinal() > RuntimeVersion.M.ordinal()));
+        } else if (description.getClassName().contains("Ecj")) {
+          // Special case for Ecj tests that use JUnit3
+          System.out.println(",");
+          System.out.println("    \"runtimePostM\":" + isEcjTestPostM);
+        } else {
+          System.out.println();
+        }
         System.out.println("  },");
         return false;
       }
diff --git a/jack-tests/src/com/android/jack/test/junit/MinRuntimeVersion.java b/jack-tests/src/com/android/jack/test/junit/Runtime.java
similarity index 70%
rename from jack-tests/src/com/android/jack/test/junit/MinRuntimeVersion.java
rename to jack-tests/src/com/android/jack/test/junit/Runtime.java
index 18b8f2d..9f79f04 100644
--- a/jack-tests/src/com/android/jack/test/junit/MinRuntimeVersion.java
+++ b/jack-tests/src/com/android/jack/test/junit/Runtime.java
@@ -16,17 +16,18 @@
 
 package com.android.jack.test.junit;
 
-import java.lang.annotation.ElementType;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
 import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
 
 /**
- * Tests that required a post M runtime.
+ * This annotation is used to tag methods as requiring a target runtime environment.
  */
-@Retention(RetentionPolicy.RUNTIME)
-@Target({ElementType.TYPE, ElementType.METHOD})
-public @interface MinRuntimeVersion {
-  RuntimeVersion value();
+@Retention(RUNTIME)
+@Target(METHOD)
+public @interface Runtime {
+  RuntimeVersion from() default RuntimeVersion.D;
 }
 
diff --git a/jack-tests/src/com/android/jack/test/toolchain/AbstractTestTools.java b/jack-tests/src/com/android/jack/test/toolchain/AbstractTestTools.java
index 1958531..ff6a629 100644
--- a/jack-tests/src/com/android/jack/test/toolchain/AbstractTestTools.java
+++ b/jack-tests/src/com/android/jack/test/toolchain/AbstractTestTools.java
@@ -692,9 +692,17 @@
       }
     }
 
-    if (!hasRuntimeWarningBeenEmitted && runtimes.size() == 0) {
-      System.err.println("WARNING: no runtime has been provided");
-      hasRuntimeWarningBeenEmitted = true;
+    if (runtimes.size() == 0) {
+      if (Boolean.parseBoolean(System.getProperty("jack.test.runtime.tolerant", "false"))) {
+        if (!hasRuntimeWarningBeenEmitted) {
+          System.err.println("WARNING: no runtime has been provided");
+          hasRuntimeWarningBeenEmitted = true;
+        }
+      } else {
+        throw new TestConfigurationException(
+            "No runtime has been provided. Set property 'jack.test.runtime.tolerant' to 'true'"
+            + " to allow it.");
+      }
     }
 
     return runtimes;
diff --git a/jack-tests/tests/com/android/jack/AllTests.java b/jack-tests/tests/com/android/jack/AllTests.java
index 5fb43f9..81ca7fb 100644
--- a/jack-tests/tests/com/android/jack/AllTests.java
+++ b/jack-tests/tests/com/android/jack/AllTests.java
@@ -40,6 +40,7 @@
 import com.android.jack.invoke.InvokeTests;
 import com.android.jack.jarjar.JarjarTests;
 import com.android.jack.java7.Java7AllTest;
+import com.android.jack.java8.Java8AllTest;
 import com.android.jack.label.LabelTest;
 import com.android.jack.library.LibraryTests;
 import com.android.jack.lookup.LookupTests;
@@ -47,7 +48,7 @@
 import com.android.jack.newarray.NewarrayTests;
 import com.android.jack.nopackage.NoPackageTests;
 import com.android.jack.opcodes.OpcodesTests;
-import com.android.jack.optimizations.defuse.test001.DefUseTests;
+import com.android.jack.optimizations.defuse.DefUseTests;
 import com.android.jack.optimizations.exprsimplifier.ExprsimplifierTests;
 import com.android.jack.optimizations.notsimplifier.NotsimplifierTests;
 import com.android.jack.optimizations.sideeffect.SideEffectTests;
@@ -119,6 +120,7 @@
     ImportTests.class,
     InvokeTests.class,
     Java7AllTest.class,
+    Java8AllTest.class,
     LabelTest.class,
     LibraryTests.class,
     LookupTests.class,
diff --git a/jack-tests/tests/com/android/jack/RegressionTests.java b/jack-tests/tests/com/android/jack/RegressionTests.java
index 8f4f6e1..ada1eba 100644
--- a/jack-tests/tests/com/android/jack/RegressionTests.java
+++ b/jack-tests/tests/com/android/jack/RegressionTests.java
@@ -48,6 +48,7 @@
 import com.android.jack.switchstatement.SwitchstatementTests;
 import com.android.jack.synchronize.SynchronizeTests;
 import com.android.jack.test.helper.RuntimeTestHelper;
+import com.android.jack.test.junit.Runtime;
 import com.android.jack.test.runtime.RuntimeTest;
 import com.android.jack.test.runtime.RuntimeTestInfo;
 import com.android.jack.threeaddress.ThreeaddressTests;
@@ -108,6 +109,7 @@
 
 
   @Test
+  @Runtime
   public void runRegressionTests() throws Exception {
     List<RuntimeTestInfo> rtTestInfos = new ArrayList<RuntimeTestInfo>();
 
diff --git a/jack-tests/tests/com/android/jack/annotation/AnnotationTests.java b/jack-tests/tests/com/android/jack/annotation/AnnotationTests.java
index 25250ea..d24bc95 100644
--- a/jack-tests/tests/com/android/jack/annotation/AnnotationTests.java
+++ b/jack-tests/tests/com/android/jack/annotation/AnnotationTests.java
@@ -28,6 +28,7 @@
 import com.android.jack.test.helper.CheckDexStructureTestHelper;
 import com.android.jack.test.helper.RuntimeTestHelper;
 import com.android.jack.test.junit.KnownIssue;
+import com.android.jack.test.junit.Runtime;
 import com.android.jack.test.runtime.RuntimeTest;
 import com.android.jack.test.runtime.RuntimeTestInfo;
 import com.android.jack.test.toolchain.AbstractTestTools;
@@ -93,6 +94,7 @@
       AbstractTestTools.getTestRootDir("com.android.jack.annotation.test001.jack");
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test001() throws Exception {
     new RuntimeTestHelper(TEST001).compileAndRunTest(/* checkStructure = */ true);
@@ -112,12 +114,14 @@
 
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test002() throws Exception {
     new RuntimeTestHelper(TEST002).compileAndRunTest(/* checkStructure = */ true);
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test003() throws Exception {
     new RuntimeTestHelper(TEST003).compileAndRunTest(/* checkStructure = */ true);
@@ -147,6 +151,7 @@
   }
 
   @Test
+  @Runtime
   // Annotation on package are not supported in dex format: http://code.google.com/p/android/issues/detail?id=16149
   @Category(RuntimeRegressionTest.class)
   @KnownIssue
@@ -162,24 +167,28 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test006() throws Exception {
     new RuntimeTestHelper(TEST006).compileAndRunTest(/* checkStructure = */ true);
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test007() throws Exception {
     new RuntimeTestHelper(TEST007).compileAndRunTest(/* checkStructure = */ true);
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test008() throws Exception {
     new RuntimeTestHelper(TEST008).compileAndRunTest(/* checkStructure = */ true);
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test009() throws Exception {
     new RuntimeTestHelper(TEST009).compileAndRunTest(/* checkStructure = */ true);
@@ -412,6 +421,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test018() throws Exception {
     new RuntimeTestHelper(TEST018).compileAndRunTest();
@@ -421,6 +431,7 @@
    * Test about type annotations and type parameter annotations.
    */
   @Test
+  @Runtime
   @KnownIssue
   @Category(RuntimeRegressionTest.class)
   public void test019() throws Exception {
diff --git a/jack-tests/tests/com/android/jack/arithmetic/ArithmeticTests.java b/jack-tests/tests/com/android/jack/arithmetic/ArithmeticTests.java
index 63ef196..2d94028 100644
--- a/jack-tests/tests/com/android/jack/arithmetic/ArithmeticTests.java
+++ b/jack-tests/tests/com/android/jack/arithmetic/ArithmeticTests.java
@@ -18,6 +18,7 @@
 
 import com.android.jack.test.category.RuntimeRegressionTest;
 import com.android.jack.test.helper.RuntimeTestHelper;
+import com.android.jack.test.junit.Runtime;
 import com.android.jack.test.runtime.RuntimeTest;
 import com.android.jack.test.runtime.RuntimeTestInfo;
 import com.android.jack.test.toolchain.AbstractTestTools;
@@ -44,24 +45,28 @@
     "com.android.jack.arithmetic.test004.dx.Tests");
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test001() throws Exception {
     new RuntimeTestHelper(TEST001).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test002() throws Exception {
     new RuntimeTestHelper(TEST002).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test003() throws Exception {
     new RuntimeTestHelper(TEST003).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test004() throws Exception {
     new RuntimeTestHelper(TEST004).compileAndRunTest();
diff --git a/jack-tests/tests/com/android/jack/array/ArrayTests.java b/jack-tests/tests/com/android/jack/array/ArrayTests.java
index 85398f9..653b099 100644
--- a/jack-tests/tests/com/android/jack/array/ArrayTests.java
+++ b/jack-tests/tests/com/android/jack/array/ArrayTests.java
@@ -18,6 +18,7 @@
 
 import com.android.jack.test.category.RuntimeRegressionTest;
 import com.android.jack.test.helper.RuntimeTestHelper;
+import com.android.jack.test.junit.Runtime;
 import com.android.jack.test.runtime.RuntimeTest;
 import com.android.jack.test.runtime.RuntimeTestInfo;
 import com.android.jack.test.toolchain.AbstractTestTools;
@@ -32,6 +33,7 @@
     "com.android.jack.array.test001.dx.Tests");
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test001() throws Exception {
     new RuntimeTestHelper(TEST001).compileAndRunTest();
diff --git a/jack-tests/tests/com/android/jack/assertion/AssertionTests.java b/jack-tests/tests/com/android/jack/assertion/AssertionTests.java
index 79870ab..88ddde4 100644
--- a/jack-tests/tests/com/android/jack/assertion/AssertionTests.java
+++ b/jack-tests/tests/com/android/jack/assertion/AssertionTests.java
@@ -21,6 +21,7 @@
 import com.android.jack.test.category.RuntimeRegressionTest;
 import com.android.jack.test.helper.RuntimeTestHelper;
 import com.android.jack.test.junit.KnownIssue;
+import com.android.jack.test.junit.Runtime;
 import com.android.jack.test.runtime.RuntimeTest;
 import com.android.jack.test.runtime.RuntimeTestInfo;
 import com.android.jack.test.toolchain.AbstractTestTools;
@@ -52,6 +53,7 @@
       "com.android.jack.assertion.test005.dx.Tests");
 
   @Test
+  @Runtime
   // this test must be run with assertions enabled (for now, use dalvik)
   @Category(RuntimeRegressionTest.class)
   @KnownIssue
@@ -60,18 +62,21 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test002() throws Exception {
     new RuntimeTestHelper(TEST002).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test003() throws Exception {
     new RuntimeTestHelper(TEST003).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   public void test004() throws Exception {
     new RuntimeTestHelper(TEST004)
         .addIgnoredCandidateToolchain(JillBasedToolchain.class)
@@ -80,6 +85,7 @@
   }
 
   @Test
+  @Runtime
   public void test005() throws Exception {
     new RuntimeTestHelper(TEST005)
         .addIgnoredCandidateToolchain(JillBasedToolchain.class)
diff --git a/jack-tests/tests/com/android/jack/assign/AssignTests.java b/jack-tests/tests/com/android/jack/assign/AssignTests.java
index bf4fadc..ecb481b 100644
--- a/jack-tests/tests/com/android/jack/assign/AssignTests.java
+++ b/jack-tests/tests/com/android/jack/assign/AssignTests.java
@@ -18,6 +18,7 @@
 
 import com.android.jack.test.category.RuntimeRegressionTest;
 import com.android.jack.test.helper.RuntimeTestHelper;
+import com.android.jack.test.junit.Runtime;
 import com.android.jack.test.runtime.RuntimeTest;
 import com.android.jack.test.runtime.RuntimeTestInfo;
 import com.android.jack.test.toolchain.AbstractTestTools;
@@ -36,6 +37,7 @@
           "com.android.jack.assign.test001.dx.Tests");
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test001() throws Exception {
     new RuntimeTestHelper(TEST001).compileAndRunTest();
diff --git a/jack-tests/tests/com/android/jack/box/BoxTests.java b/jack-tests/tests/com/android/jack/box/BoxTests.java
index 4109a3f..89cecf3 100644
--- a/jack-tests/tests/com/android/jack/box/BoxTests.java
+++ b/jack-tests/tests/com/android/jack/box/BoxTests.java
@@ -18,6 +18,7 @@
 
 import com.android.jack.test.category.RuntimeRegressionTest;
 import com.android.jack.test.helper.RuntimeTestHelper;
+import com.android.jack.test.junit.Runtime;
 import com.android.jack.test.runtime.RuntimeTest;
 import com.android.jack.test.runtime.RuntimeTestInfo;
 import com.android.jack.test.toolchain.AbstractTestTools;
@@ -32,6 +33,7 @@
     "com.android.jack.box.test001.dx.Tests");
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test001() throws Exception {
     new RuntimeTestHelper(TEST001).compileAndRunTest();
diff --git a/jack-tests/tests/com/android/jack/bridge/BridgeTests.java b/jack-tests/tests/com/android/jack/bridge/BridgeTests.java
index 223f3c7..8b60340 100644
--- a/jack-tests/tests/com/android/jack/bridge/BridgeTests.java
+++ b/jack-tests/tests/com/android/jack/bridge/BridgeTests.java
@@ -18,6 +18,7 @@
 
 import com.android.jack.test.category.RuntimeRegressionTest;
 import com.android.jack.test.helper.RuntimeTestHelper;
+import com.android.jack.test.junit.Runtime;
 import com.android.jack.test.runtime.RuntimeTest;
 import com.android.jack.test.runtime.RuntimeTestInfo;
 import com.android.jack.test.toolchain.AbstractTestTools;
@@ -59,42 +60,49 @@
     "com.android.jack.bridge.test007.dx.Tests");
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test001() throws Exception {
     new RuntimeTestHelper(TEST001).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test002() throws Exception {
     new RuntimeTestHelper(TEST002).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test003() throws Exception {
     new RuntimeTestHelper(TEST003).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test004() throws Exception {
     new RuntimeTestHelper(TEST004).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test005() throws Exception {
     new RuntimeTestHelper(TEST005).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test006() throws Exception {
     new RuntimeTestHelper(TEST006).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   // TODO(jmhenaff): reintroduce ExtraTests category for this one?
   public void test007() throws Exception {
@@ -148,6 +156,7 @@
    * If the cast does not exist, art will fail to verify the class B.
    */
   @Test
+  @Runtime
   public void test010() throws Exception {
     new RuntimeTestHelper(new RuntimeTestInfo(
         AbstractTestTools.getTestRootDir("com.android.jack.bridge.test010"),
diff --git a/jack-tests/tests/com/android/jack/cast/CastTests.java b/jack-tests/tests/com/android/jack/cast/CastTests.java
index 581e3de..a9e4945 100644
--- a/jack-tests/tests/com/android/jack/cast/CastTests.java
+++ b/jack-tests/tests/com/android/jack/cast/CastTests.java
@@ -18,6 +18,7 @@
 
 import com.android.jack.test.category.RuntimeRegressionTest;
 import com.android.jack.test.helper.RuntimeTestHelper;
+import com.android.jack.test.junit.Runtime;
 import com.android.jack.test.runtime.RuntimeTest;
 import com.android.jack.test.runtime.RuntimeTestInfo;
 import com.android.jack.test.toolchain.AbstractTestTools;
@@ -67,36 +68,42 @@
       "com.android.jack.cast.useless004.dx.Tests");
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void explicit001() throws Exception {
     new RuntimeTestHelper(EXPLICIT001).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void explicit002() throws Exception {
     new RuntimeTestHelper(EXPLICIT002).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void implicit001() throws Exception {
     new RuntimeTestHelper(IMPLICIT001).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void implicit002() throws Exception {
     new RuntimeTestHelper(IMPLICIT002).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void implicit003() throws Exception {
     new RuntimeTestHelper(IMPLICIT003).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void implicit004() throws Exception {
     new RuntimeTestHelper(IMPLICIT004).compileAndRunTest();
@@ -113,18 +120,21 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void useless001() throws Exception {
     new RuntimeTestHelper(USELESS001).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void useless002() throws Exception {
     new RuntimeTestHelper(USELESS002).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void useless004() throws Exception {
     new RuntimeTestHelper(USELESS004).compileAndRunTest();
diff --git a/jack-tests/tests/com/android/jack/comparison/ComparisonTests.java b/jack-tests/tests/com/android/jack/comparison/ComparisonTests.java
index 8eabeb5..9ebe496 100644
--- a/jack-tests/tests/com/android/jack/comparison/ComparisonTests.java
+++ b/jack-tests/tests/com/android/jack/comparison/ComparisonTests.java
@@ -18,6 +18,7 @@
 
 import com.android.jack.test.category.RuntimeRegressionTest;
 import com.android.jack.test.helper.RuntimeTestHelper;
+import com.android.jack.test.junit.Runtime;
 import com.android.jack.test.runtime.RuntimeTest;
 import com.android.jack.test.runtime.RuntimeTestInfo;
 import com.android.jack.test.toolchain.AbstractTestTools;
@@ -32,6 +33,7 @@
     "com.android.jack.comparison.test001.dx.Tests");
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test001() throws Exception {
     new RuntimeTestHelper(TEST001).compileAndRunTest();
diff --git a/jack-tests/tests/com/android/jack/conditional/ConditionalTests.java b/jack-tests/tests/com/android/jack/conditional/ConditionalTests.java
index 8f7eca6..3d7af14 100644
--- a/jack-tests/tests/com/android/jack/conditional/ConditionalTests.java
+++ b/jack-tests/tests/com/android/jack/conditional/ConditionalTests.java
@@ -18,6 +18,7 @@
 
 import com.android.jack.test.category.RuntimeRegressionTest;
 import com.android.jack.test.helper.RuntimeTestHelper;
+import com.android.jack.test.junit.Runtime;
 import com.android.jack.test.runtime.RuntimeTest;
 import com.android.jack.test.runtime.RuntimeTestInfo;
 import com.android.jack.test.toolchain.AbstractTestTools;
@@ -60,48 +61,56 @@
       "com.android.jack.conditional.test008.dx.Tests");
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test001() throws Exception {
     new RuntimeTestHelper(TEST001).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test002() throws Exception {
     new RuntimeTestHelper(TEST002).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test003() throws Exception {
     new RuntimeTestHelper(TEST003).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test004() throws Exception {
     new RuntimeTestHelper(TEST004).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test005() throws Exception {
     new RuntimeTestHelper(TEST005).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test006() throws Exception {
     new RuntimeTestHelper(TEST006).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test007() throws Exception {
     new RuntimeTestHelper(TEST007).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test008() throws Exception {
     new RuntimeTestHelper(TEST008).compileAndRunTest();
diff --git a/jack-tests/tests/com/android/jack/constant/ConstantTests.java b/jack-tests/tests/com/android/jack/constant/ConstantTests.java
index a86b353..c9006b9 100644
--- a/jack-tests/tests/com/android/jack/constant/ConstantTests.java
+++ b/jack-tests/tests/com/android/jack/constant/ConstantTests.java
@@ -20,6 +20,7 @@
 import com.android.jack.test.category.RuntimeRegressionTest;
 import com.android.jack.test.helper.FileChecker;
 import com.android.jack.test.helper.RuntimeTestHelper;
+import com.android.jack.test.junit.Runtime;
 import com.android.jack.test.runtime.RuntimeTest;
 import com.android.jack.test.runtime.RuntimeTestInfo;
 import com.android.jack.test.toolchain.AbstractTestTools;
@@ -87,36 +88,42 @@
     "com.android.jack.constant.test007.dx.Tests");
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void clazz() throws Exception {
     new RuntimeTestHelper(CLAZZ).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test001() throws Exception {
     new RuntimeTestHelper(TEST001).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test002() throws Exception {
     new RuntimeTestHelper(TEST002).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test003() throws Exception {
     new RuntimeTestHelper(TEST003).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test004() throws Exception {
     new RuntimeTestHelper(TEST004).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   public void test005() throws Exception {
     new RuntimeTestHelper(TEST005)
     .addIgnoredCandidateToolchain(JillBasedToolchain.class)
@@ -135,12 +142,14 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test006() throws Exception {
     new RuntimeTestHelper(TEST006).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test007() throws Exception {
     new RuntimeTestHelper(TEST007).compileAndRunTest();
diff --git a/jack-tests/tests/com/android/jack/debug/DebugTests.java b/jack-tests/tests/com/android/jack/debug/DebugTests.java
index 68c75bb..ae5df2b 100644
--- a/jack-tests/tests/com/android/jack/debug/DebugTests.java
+++ b/jack-tests/tests/com/android/jack/debug/DebugTests.java
@@ -18,6 +18,7 @@
 
 import com.android.jack.test.helper.CheckDexStructureTestHelper;
 import com.android.jack.test.helper.RuntimeTestHelper;
+import com.android.jack.test.junit.Runtime;
 import com.android.jack.test.runtime.RuntimeTestInfo;
 import com.android.jack.test.toolchain.AbstractTestTools;
 import com.android.jack.test.toolchain.JillBasedToolchain;
@@ -42,12 +43,14 @@
     "com.android.jack.debug.test004.dx.Tests");
 
   @Test
+  @Runtime
   public void test001() throws Exception {
     new RuntimeTestHelper(TEST001)
         .setWithDebugInfos(true).compileAndRunTest(/* checkStructure  = */ true);
   }
 
   @Test
+  @Runtime
   public void test002() throws Exception {
     new RuntimeTestHelper(TEST002).addIgnoredCandidateToolchain(JillBasedToolchain.class)
         .setWithDebugInfos(true).compileAndRunTest(/* checkStructure = */ true);
@@ -60,6 +63,7 @@
   }
 
   @Test
+  @Runtime
   public void test004() throws Exception {
     new RuntimeTestHelper(TEST004).addIgnoredCandidateToolchain(JillBasedToolchain.class)
         .setWithDebugInfos(true).compileAndRunTest(/* checkStructure  = */ true);
diff --git a/jack-tests/tests/com/android/jack/dx/DxTests.java b/jack-tests/tests/com/android/jack/dx/DxTests.java
index 75792d7..5ef72d4 100644
--- a/jack-tests/tests/com/android/jack/dx/DxTests.java
+++ b/jack-tests/tests/com/android/jack/dx/DxTests.java
@@ -22,6 +22,7 @@
 import com.android.jack.test.category.RuntimeRegressionTest;
 import com.android.jack.test.helper.FileChecker;
 import com.android.jack.test.helper.RuntimeTestHelper;
+import com.android.jack.test.junit.Runtime;
 import com.android.jack.test.runtime.RuntimeTest;
 import com.android.jack.test.runtime.RuntimeTestInfo;
 import com.android.jack.test.toolchain.AbstractTestTools;
@@ -95,18 +96,21 @@
     });
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void compiler() throws Exception {
     new RuntimeTestHelper(COMPILER).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void optimizer() throws Exception {
     new RuntimeTestHelper(OPTIMIZER).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void overlapping() throws Exception {
     new RuntimeTestHelper(OVERLAPPING)
diff --git a/jack-tests/tests/com/android/jack/enums/EnumsTests.java b/jack-tests/tests/com/android/jack/enums/EnumsTests.java
index 1274803..1b507da 100644
--- a/jack-tests/tests/com/android/jack/enums/EnumsTests.java
+++ b/jack-tests/tests/com/android/jack/enums/EnumsTests.java
@@ -18,6 +18,7 @@
 
 import com.android.jack.test.category.RuntimeRegressionTest;
 import com.android.jack.test.helper.RuntimeTestHelper;
+import com.android.jack.test.junit.Runtime;
 import com.android.jack.test.runtime.RuntimeTest;
 import com.android.jack.test.runtime.RuntimeTestInfo;
 import com.android.jack.test.toolchain.AbstractTestTools;
@@ -40,18 +41,21 @@
       "com.android.jack.enums.test003.dx.Tests");
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test001() throws Exception {
     new RuntimeTestHelper(TEST001).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test002() throws Exception {
     new RuntimeTestHelper(TEST002).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   public void test003() throws Exception {
     new RuntimeTestHelper(TEST003).compileAndRunTest();
   }
diff --git a/jack-tests/tests/com/android/jack/experimental/incremental/DependenciesTest005.java b/jack-tests/tests/com/android/jack/experimental/incremental/DependenciesTest005.java
index 2a00f82..90628f2 100644
--- a/jack-tests/tests/com/android/jack/experimental/incremental/DependenciesTest005.java
+++ b/jack-tests/tests/com/android/jack/experimental/incremental/DependenciesTest005.java
@@ -17,6 +17,7 @@
 package com.android.jack.experimental.incremental;
 
 import com.android.jack.test.helper.IncrementalTestHelper;
+import com.android.jack.test.junit.Runtime;
 import com.android.jack.test.toolchain.AbstractTestTools;
 
 import junit.framework.Assert;
@@ -36,6 +37,7 @@
    * Check that runtime is correct after incremental compilation due to a constant modification.
    */
   @Test
+  @Runtime
   public void testDependency001() throws Exception {
     IncrementalTestHelper ite =
         new IncrementalTestHelper(AbstractTestTools.createTempDir());
@@ -76,6 +78,7 @@
    * Check that runtime is correct after incremental compilation due to a constant modification.
    */
   @Test
+  @Runtime
   public void testDependency002() throws Exception {
     IncrementalTestHelper ite =
         new IncrementalTestHelper(AbstractTestTools.createTempDir());
@@ -116,6 +119,7 @@
    * Check that runtime is correct after incremental compilation due to a constant modification.
    */
   @Test
+  @Runtime
   public void testDependency003() throws Exception {
     IncrementalTestHelper ite =
         new IncrementalTestHelper(AbstractTestTools.createTempDir());
@@ -159,6 +163,7 @@
    * Check that runtime is correct after incremental compilation due to a constant modification.
    */
   @Test
+  @Runtime
   public void testDependency004() throws Exception {
     IncrementalTestHelper ite =
         new IncrementalTestHelper(AbstractTestTools.createTempDir());
diff --git a/jack-tests/tests/com/android/jack/experimental/incremental/DependenciesTest006.java b/jack-tests/tests/com/android/jack/experimental/incremental/DependenciesTest006.java
index beddf26..4f6bbd6 100644
--- a/jack-tests/tests/com/android/jack/experimental/incremental/DependenciesTest006.java
+++ b/jack-tests/tests/com/android/jack/experimental/incremental/DependenciesTest006.java
@@ -18,6 +18,7 @@
 
 import com.android.jack.frontend.FrontendCompilationException;
 import com.android.jack.test.helper.IncrementalTestHelper;
+import com.android.jack.test.junit.Runtime;
 import com.android.jack.test.toolchain.AbstractTestTools;
 
 import junit.framework.Assert;
@@ -38,6 +39,7 @@
    * Check that runtime is correct after class renaming.
    */
   @Test
+  @Runtime
   public void testDependency001() throws Exception {
     IncrementalTestHelper ite =
         new IncrementalTestHelper(AbstractTestTools.createTempDir());
diff --git a/jack-tests/tests/com/android/jack/experimental/incremental/DependenciesTest007.java b/jack-tests/tests/com/android/jack/experimental/incremental/DependenciesTest007.java
index 9bc724c..8ffbc30 100644
--- a/jack-tests/tests/com/android/jack/experimental/incremental/DependenciesTest007.java
+++ b/jack-tests/tests/com/android/jack/experimental/incremental/DependenciesTest007.java
@@ -17,6 +17,7 @@
 package com.android.jack.experimental.incremental;
 
 import com.android.jack.test.helper.IncrementalTestHelper;
+import com.android.jack.test.junit.Runtime;
 import com.android.jack.test.toolchain.AbstractTestTools;
 
 import junit.framework.Assert;
@@ -36,6 +37,7 @@
    * Check that runtime is correct after transformation of an interface call to a virtual call.
    */
   @Test
+  @Runtime
   public void testDependency001() throws Exception {
     IncrementalTestHelper ite =
         new IncrementalTestHelper(AbstractTestTools.createTempDir());
diff --git a/jack-tests/tests/com/android/jack/experimental/incremental/DependenciesTest010.java b/jack-tests/tests/com/android/jack/experimental/incremental/DependenciesTest010.java
index b46d892..259b9c8 100644
--- a/jack-tests/tests/com/android/jack/experimental/incremental/DependenciesTest010.java
+++ b/jack-tests/tests/com/android/jack/experimental/incremental/DependenciesTest010.java
@@ -17,6 +17,7 @@
 package com.android.jack.experimental.incremental;
 
 import com.android.jack.test.helper.IncrementalTestHelper;
+import com.android.jack.test.junit.Runtime;
 import com.android.jack.test.toolchain.AbstractTestTools;
 
 import junit.framework.Assert;
@@ -36,6 +37,7 @@
    * Check that incremental compilation support switch on constant value.
    */
   @Test
+  @Runtime
   public void testDependency001() throws Exception {
     IncrementalTestHelper ite =
         new IncrementalTestHelper(AbstractTestTools.createTempDir());
@@ -123,6 +125,7 @@
    * Check that incremental compilation support switch on enum.
    */
   @Test
+  @Runtime
   public void testDependency002() throws Exception {
     IncrementalTestHelper ite =
         new IncrementalTestHelper(AbstractTestTools.createTempDir());
diff --git a/jack-tests/tests/com/android/jack/external/ExternalTests.java b/jack-tests/tests/com/android/jack/external/ExternalTests.java
index ac48ca0..1c2939b 100644
--- a/jack-tests/tests/com/android/jack/external/ExternalTests.java
+++ b/jack-tests/tests/com/android/jack/external/ExternalTests.java
@@ -18,6 +18,7 @@
 
 import com.android.jack.test.category.RuntimeRegressionTest;
 import com.android.jack.test.helper.RuntimeTestHelper;
+import com.android.jack.test.junit.Runtime;
 import com.android.jack.test.runtime.RuntimeTest;
 import com.android.jack.test.runtime.RuntimeTestInfo;
 import com.android.jack.test.toolchain.AbstractTestTools;
@@ -33,6 +34,7 @@
 
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test001() throws Exception {
     new RuntimeTestHelper(TEST001).compileAndRunTest();
diff --git a/jack-tests/tests/com/android/jack/fibonacci/FibonacciTests.java b/jack-tests/tests/com/android/jack/fibonacci/FibonacciTests.java
index eef15fc..2448c62 100644
--- a/jack-tests/tests/com/android/jack/fibonacci/FibonacciTests.java
+++ b/jack-tests/tests/com/android/jack/fibonacci/FibonacciTests.java
@@ -21,6 +21,7 @@
 import com.android.jack.test.helper.CheckDexStructureTestHelper;
 import com.android.jack.test.helper.RuntimeTestHelper;
 import com.android.jack.test.helper.SourceToDexComparisonTestHelper;
+import com.android.jack.test.junit.Runtime;
 import com.android.jack.test.runtime.RuntimeTest;
 import com.android.jack.test.runtime.RuntimeTestInfo;
 import com.android.jack.test.toolchain.AbstractTestTools;
@@ -39,6 +40,7 @@
 
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test001() throws Exception {
     new RuntimeTestHelper(TEST001).compileAndRunTest();
diff --git a/jack-tests/tests/com/android/jack/field/FieldTests.java b/jack-tests/tests/com/android/jack/field/FieldTests.java
index fc003be..14408b3 100644
--- a/jack-tests/tests/com/android/jack/field/FieldTests.java
+++ b/jack-tests/tests/com/android/jack/field/FieldTests.java
@@ -21,6 +21,7 @@
 import com.android.jack.test.helper.CheckDexStructureTestHelper;
 import com.android.jack.test.helper.RuntimeTestHelper;
 import com.android.jack.test.helper.SourceToDexComparisonTestHelper;
+import com.android.jack.test.junit.Runtime;
 import com.android.jack.test.runtime.RuntimeTest;
 import com.android.jack.test.runtime.RuntimeTestInfo;
 import com.android.jack.test.toolchain.AbstractTestTools;
@@ -67,48 +68,56 @@
 
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void instance001() throws Exception {
     new RuntimeTestHelper(INSTANCE001).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void instance002() throws Exception {
     new RuntimeTestHelper(INSTANCE002).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void instance003() throws Exception {
     new RuntimeTestHelper(INSTANCE003).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void instance004() throws Exception {
     new RuntimeTestHelper(INSTANCE004).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void static001() throws Exception {
     new RuntimeTestHelper(STATIC001).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void static002() throws Exception {
     new RuntimeTestHelper(STATIC002).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void static004() throws Exception {
     new RuntimeTestHelper(STATIC004).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void static005() throws Exception {
     new RuntimeTestHelper(STATIC005).compileAndRunTest();
diff --git a/jack-tests/tests/com/android/jack/flow/FlowTests.java b/jack-tests/tests/com/android/jack/flow/FlowTests.java
index 5dd0a26..d52d2b8 100644
--- a/jack-tests/tests/com/android/jack/flow/FlowTests.java
+++ b/jack-tests/tests/com/android/jack/flow/FlowTests.java
@@ -18,6 +18,7 @@
 
 import com.android.jack.test.category.RuntimeRegressionTest;
 import com.android.jack.test.helper.RuntimeTestHelper;
+import com.android.jack.test.junit.Runtime;
 import com.android.jack.test.runtime.RuntimeTest;
 import com.android.jack.test.runtime.RuntimeTestInfo;
 import com.android.jack.test.toolchain.AbstractTestTools;
@@ -37,12 +38,14 @@
 
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void cfg001() throws Exception {
     new RuntimeTestHelper(CFG001).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void loop() throws Exception {
     new RuntimeTestHelper(LOOP).compileAndRunTest();
diff --git a/jack-tests/tests/com/android/jack/ifstatement/IfstatementTests.java b/jack-tests/tests/com/android/jack/ifstatement/IfstatementTests.java
index f1bbb12..316025e 100644
--- a/jack-tests/tests/com/android/jack/ifstatement/IfstatementTests.java
+++ b/jack-tests/tests/com/android/jack/ifstatement/IfstatementTests.java
@@ -18,6 +18,7 @@
 
 import com.android.jack.test.category.RuntimeRegressionTest;
 import com.android.jack.test.helper.RuntimeTestHelper;
+import com.android.jack.test.junit.Runtime;
 import com.android.jack.test.runtime.RuntimeTest;
 import com.android.jack.test.runtime.RuntimeTestInfo;
 import com.android.jack.test.toolchain.AbstractTestTools;
@@ -45,24 +46,28 @@
 
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void advancedTest() throws Exception {
     new RuntimeTestHelper(ADVANCEDTEST).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void cfgTest() throws Exception {
     new RuntimeTestHelper(CFGTEST).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void fastpath() throws Exception {
     new RuntimeTestHelper(FASTPATH).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void simpleTest() throws Exception {
     new RuntimeTestHelper(SIMPLETEST).compileAndRunTest();
diff --git a/jack-tests/tests/com/android/jack/init/InitTests.java b/jack-tests/tests/com/android/jack/init/InitTests.java
index af4ad78..5ebebe2 100644
--- a/jack-tests/tests/com/android/jack/init/InitTests.java
+++ b/jack-tests/tests/com/android/jack/init/InitTests.java
@@ -18,6 +18,7 @@
 
 import com.android.jack.test.category.RuntimeRegressionTest;
 import com.android.jack.test.helper.RuntimeTestHelper;
+import com.android.jack.test.junit.Runtime;
 import com.android.jack.test.runtime.RuntimeTest;
 import com.android.jack.test.runtime.RuntimeTestInfo;
 import com.android.jack.test.toolchain.AbstractTestTools;
@@ -45,6 +46,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test002() throws Exception {
     new RuntimeTestHelper(TEST002).compileAndRunTest();
diff --git a/jack-tests/tests/com/android/jack/inner/InnerTests.java b/jack-tests/tests/com/android/jack/inner/InnerTests.java
index 1129259..995fbf4 100644
--- a/jack-tests/tests/com/android/jack/inner/InnerTests.java
+++ b/jack-tests/tests/com/android/jack/inner/InnerTests.java
@@ -25,6 +25,7 @@
 import com.android.jack.test.helper.RuntimeTestHelper;
 import com.android.jack.test.helper.SourceToDexComparisonTestHelper;
 import com.android.jack.test.junit.KnownIssue;
+import com.android.jack.test.junit.Runtime;
 import com.android.jack.test.runtime.RuntimeTest;
 import com.android.jack.test.runtime.RuntimeTestInfo;
 import com.android.jack.test.toolchain.AbstractTestTools;
@@ -190,60 +191,70 @@
       "com.android.jack.inner.test032.dx.Tests");
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test001() throws Exception {
     new RuntimeTestHelper(TEST001).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test002() throws Exception {
     new RuntimeTestHelper(TEST002).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test003() throws Exception {
     new RuntimeTestHelper(TEST003).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test004() throws Exception {
     new RuntimeTestHelper(TEST004).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test005() throws Exception {
     new RuntimeTestHelper(TEST005).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test006() throws Exception {
     new RuntimeTestHelper(TEST006).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test007() throws Exception {
     new RuntimeTestHelper(TEST007).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test008() throws Exception {
     new RuntimeTestHelper(TEST008).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test009() throws Exception {
     new RuntimeTestHelper(TEST009).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test010() throws Exception {
     new RuntimeTestHelper(TEST010).compileAndRunTest();
@@ -256,78 +267,91 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test012() throws Exception {
     new RuntimeTestHelper(TEST012).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test013() throws Exception {
     new RuntimeTestHelper(TEST013).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test014() throws Exception {
     new RuntimeTestHelper(TEST014).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test015() throws Exception {
     new RuntimeTestHelper(TEST015).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test016() throws Exception {
     new RuntimeTestHelper(TEST016).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test017() throws Exception {
     new RuntimeTestHelper(TEST017).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test018() throws Exception {
     new RuntimeTestHelper(TEST018).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test019() throws Exception {
     new RuntimeTestHelper(TEST019).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test020() throws Exception {
     new RuntimeTestHelper(TEST020).compileAndRunTest(true);
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test021() throws Exception {
     new RuntimeTestHelper(TEST021).compileAndRunTest(true);
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test022() throws Exception {
     new RuntimeTestHelper(TEST022).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test023() throws Exception {
     new RuntimeTestHelper(TEST023).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test024() throws Exception {
     new RuntimeTestHelper(TEST024).compileAndRunTest();
@@ -344,24 +368,28 @@
   }
 
   @Test
+  @Runtime
   public void test026() throws Exception {
     new RuntimeTestHelper(TEST026).addIgnoredCandidateToolchain(JillBasedToolchain.class)
         .compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test027() throws Exception {
     new RuntimeTestHelper(TEST027).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test028() throws Exception {
     new RuntimeTestHelper(TEST028).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   @KnownIssue
   public void test029() throws Exception {
@@ -382,11 +410,13 @@
   }
 
   @Test
+  @Runtime
   public void test030() throws Exception {
     new RuntimeTestHelper(TEST030).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @KnownIssue
   public void test032() throws Exception {
     new RuntimeTestHelper(TEST032).compileAndRunTest();
@@ -399,6 +429,7 @@
   }
 
   @Test
+  @Runtime
   public void test031() throws Exception {
     new RuntimeTestHelper(TEST031).compileAndRunTest();
   }
diff --git a/jack-tests/tests/com/android/jack/invoke/InvokeTests.java b/jack-tests/tests/com/android/jack/invoke/InvokeTests.java
index 8f23dc9..15e7633 100644
--- a/jack-tests/tests/com/android/jack/invoke/InvokeTests.java
+++ b/jack-tests/tests/com/android/jack/invoke/InvokeTests.java
@@ -18,6 +18,7 @@
 
 import com.android.jack.test.category.RuntimeRegressionTest;
 import com.android.jack.test.helper.RuntimeTestHelper;
+import com.android.jack.test.junit.Runtime;
 import com.android.jack.test.runtime.RuntimeTest;
 import com.android.jack.test.runtime.RuntimeTestInfo;
 import com.android.jack.test.toolchain.AbstractTestTools;
@@ -57,42 +58,49 @@
 
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test001() throws Exception {
     new RuntimeTestHelper(TEST001).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test002() throws Exception {
     new RuntimeTestHelper(TEST002).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test003() throws Exception {
     new RuntimeTestHelper(TEST003).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test004() throws Exception {
     new RuntimeTestHelper(TEST004).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test005() throws Exception {
     new RuntimeTestHelper(TEST005).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test006() throws Exception {
     new RuntimeTestHelper(TEST006).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test007() throws Exception {
     new RuntimeTestHelper(TEST007).compileAndRunTest();
diff --git a/jack-tests/tests/com/android/jack/jarjar/JarjarTests.java b/jack-tests/tests/com/android/jack/jarjar/JarjarTests.java
index 2f01f96..596723d 100644
--- a/jack-tests/tests/com/android/jack/jarjar/JarjarTests.java
+++ b/jack-tests/tests/com/android/jack/jarjar/JarjarTests.java
@@ -22,7 +22,7 @@
 import com.android.jack.library.JackLibraryFactory;
 import com.android.jack.test.TestsProperties;
 import com.android.jack.test.helper.RuntimeTestHelper;
-import com.android.jack.test.junit.KnownIssue;
+import com.android.jack.test.junit.Runtime;
 import com.android.jack.test.runner.RuntimeRunner;
 import com.android.jack.test.runtime.RuntimeTestInfo;
 import com.android.jack.test.toolchain.AbstractTestTools;
@@ -74,12 +74,14 @@
       "com.android.jack.jarjar.test005.dx.Tests");
 
   @Test
+  @Runtime
   public void jarjar001() throws Exception {
     new RuntimeTestHelper(JARJAR001)
     .compileAndRunTest();
   }
 
   @Test
+  @Runtime
   public void jarjar003() throws Exception {
     new RuntimeTestHelper(JARJAR003)
     .compileAndRunTest();
@@ -106,6 +108,7 @@
   }
 
   @Test
+  @Runtime
   public void jarjar004() throws Exception {
 
     IToolchain toolchain = AbstractTestTools.getCandidateToolchain();
@@ -268,6 +271,7 @@
    * classpath
    */
   @Test
+  @Runtime
   public void jarjar006_1() throws Exception {
     File testRootDir = AbstractTestTools.getTestRootDir("com.android.jack.jarjar.test006");
 
@@ -353,6 +357,7 @@
    * Same as jarjar006_1 but jarjar operation is made with classpath
    */
   @Test
+  @Runtime
   public void jarjar006_2() throws Exception {
     File testRootDir = AbstractTestTools.getTestRootDir("com.android.jack.jarjar.test006");
 
diff --git a/jack-tests/tests/com/android/jack/java7/BoxingTest.java b/jack-tests/tests/com/android/jack/java7/BoxingTest.java
index 5cd8781..826fe16 100644
--- a/jack-tests/tests/com/android/jack/java7/BoxingTest.java
+++ b/jack-tests/tests/com/android/jack/java7/BoxingTest.java
@@ -17,6 +17,7 @@
 package com.android.jack.java7;
 
 import com.android.jack.test.helper.RuntimeTestHelper;
+import com.android.jack.test.junit.Runtime;
 import com.android.jack.test.runtime.RuntimeTestInfo;
 import com.android.jack.test.toolchain.AbstractTestTools;
 import com.android.jack.test.toolchain.Toolchain.SourceLevel;
@@ -36,6 +37,7 @@
       "com.android.jack.java7.boxing.test001.dx.Tests");
 
   @Test
+  @Runtime
   public void java7Boxing001() throws Exception {
     new RuntimeTestHelper(TEST001).setSourceLevel(SourceLevel.JAVA_7).compileAndRunTest();
   }
diff --git a/jack-tests/tests/com/android/jack/java7/ExceptionsTest.java b/jack-tests/tests/com/android/jack/java7/ExceptionsTest.java
index 1a7f4ca..bc717e3 100644
--- a/jack-tests/tests/com/android/jack/java7/ExceptionsTest.java
+++ b/jack-tests/tests/com/android/jack/java7/ExceptionsTest.java
@@ -17,6 +17,7 @@
 package com.android.jack.java7;
 
 import com.android.jack.test.helper.RuntimeTestHelper;
+import com.android.jack.test.junit.Runtime;
 import com.android.jack.test.runtime.RuntimeTestInfo;
 import com.android.jack.test.toolchain.AbstractTestTools;
 import com.android.jack.test.toolchain.Toolchain.SourceLevel;
@@ -56,26 +57,31 @@
       "com.android.jack.java7.exceptions.test005.dx.Tests");
 
   @Test
+  @Runtime
   public void java7Exception001() throws Exception {
     new RuntimeTestHelper(TEST001).setSourceLevel(SourceLevel.JAVA_7).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   public void java7Exception002() throws Exception {
     new RuntimeTestHelper(TEST002).setSourceLevel(SourceLevel.JAVA_7).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   public void java7Exception003() throws Exception {
     new RuntimeTestHelper(TEST003).setSourceLevel(SourceLevel.JAVA_7).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   public void java7Exception004() throws Exception {
     new RuntimeTestHelper(TEST004).setSourceLevel(SourceLevel.JAVA_7).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   public void java7Exception005() throws Exception {
     new RuntimeTestHelper(TEST005).setSourceLevel(SourceLevel.JAVA_7).compileAndRunTest();
   }
diff --git a/jack-tests/tests/com/android/jack/java7/SwitchesTest.java b/jack-tests/tests/com/android/jack/java7/SwitchesTest.java
index 7cad747..1cd061e 100644
--- a/jack-tests/tests/com/android/jack/java7/SwitchesTest.java
+++ b/jack-tests/tests/com/android/jack/java7/SwitchesTest.java
@@ -17,6 +17,7 @@
 package com.android.jack.java7;
 
 import com.android.jack.test.helper.RuntimeTestHelper;
+import com.android.jack.test.junit.Runtime;
 import com.android.jack.test.runtime.RuntimeTestInfo;
 import com.android.jack.test.toolchain.AbstractTestTools;
 import com.android.jack.test.toolchain.IToolchain;
@@ -49,21 +50,25 @@
       "com.android.jack.java7.switches.test003.dx.Tests");
 
   @Test
+  @Runtime
   public void java7Switches001() throws Exception {
     new RuntimeTestHelper(TEST001).setSourceLevel(SourceLevel.JAVA_7).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   public void java7Switches002() throws Exception {
     new RuntimeTestHelper(TEST002).setSourceLevel(SourceLevel.JAVA_7).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   public void java7Switches003() throws Exception {
     new RuntimeTestHelper(TEST003).setSourceLevel(SourceLevel.JAVA_7).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   public void java7Switches004() throws Exception {
 
     IToolchain toolchain =
diff --git a/jack-tests/tests/com/android/jack/java7/TryWithResourcesTests.java b/jack-tests/tests/com/android/jack/java7/TryWithResourcesTests.java
index ef12647..a9e8a53 100644
--- a/jack-tests/tests/com/android/jack/java7/TryWithResourcesTests.java
+++ b/jack-tests/tests/com/android/jack/java7/TryWithResourcesTests.java
@@ -17,6 +17,7 @@
 package com.android.jack.java7;
 
 import com.android.jack.test.helper.RuntimeTestHelper;
+import com.android.jack.test.junit.Runtime;
 import com.android.jack.test.runtime.RuntimeTestInfo;
 import com.android.jack.test.toolchain.AbstractTestTools;
 import com.android.jack.test.toolchain.Toolchain.SourceLevel;
@@ -44,6 +45,7 @@
    * Verifies that the test source can compiled from source to dex file.
    */
   @Test
+  @Runtime
   public void testCompile() throws Exception {
     new RuntimeTestHelper(TEST001).setSourceLevel(SourceLevel.JAVA_7).compileAndRunTest();
   }
@@ -52,6 +54,7 @@
    * Verifies that the test source can compiled from source to dex file.
    */
   @Test
+  @Runtime
   public void testCompile2() throws Exception {
     new RuntimeTestHelper(TEST002).setSourceLevel(SourceLevel.JAVA_7).compileAndRunTest();
   }
diff --git a/jack-tests/tests/com/android/jack/java8/AnnotationTest.java b/jack-tests/tests/com/android/jack/java8/AnnotationTest.java
index a08f839..ee84d6d 100644
--- a/jack-tests/tests/com/android/jack/java8/AnnotationTest.java
+++ b/jack-tests/tests/com/android/jack/java8/AnnotationTest.java
@@ -21,6 +21,7 @@
 import com.android.jack.test.TestsProperties;
 import com.android.jack.test.helper.RuntimeTestHelper;
 import com.android.jack.test.junit.KnownIssue;
+import com.android.jack.test.junit.Runtime;
 import com.android.jack.test.runner.RuntimeRunner;
 import com.android.jack.test.runtime.RuntimeTestInfo;
 import com.android.jack.test.toolchain.AbstractTestTools;
@@ -55,18 +56,21 @@
       "com.android.jack.java8.annotation.test003.jack.Tests");
 
   @Test
+  @Runtime
   @KnownIssue
   public void testAnnotation001() throws Exception {
     compileAndRun(ANNOTATION001);
   }
 
   @Test
+  @Runtime
   @KnownIssue
   public void testAnnotation002() throws Exception {
     compileAndRun(ANNOTATION002);
   }
 
   @Test
+  @Runtime
   @KnownIssue
   public void testAnnotation003() throws Exception {
     compileAndRun(ANNOTATION003);
@@ -78,6 +82,7 @@
    * through a jack library where the predex is used on the flow jack library -> dex file.
    */
   @Test
+  @Runtime
   @KnownIssue
   public void testAnnotation004() throws Exception {
     JackBasedToolchain toolchain =
@@ -125,6 +130,7 @@
    * through a jack library where the predex is not used on the flow jack library -> dex file.
    */
   @Test
+  @Runtime
   @KnownIssue
   public void testAnnotation005() throws Exception {
     JackBasedToolchain toolchain =
diff --git a/jack-tests/tests/com/android/jack/java8/BridgeTestPostM.java b/jack-tests/tests/com/android/jack/java8/BridgeTestPostM.java
index bbe7831..c39aedd 100644
--- a/jack-tests/tests/com/android/jack/java8/BridgeTestPostM.java
+++ b/jack-tests/tests/com/android/jack/java8/BridgeTestPostM.java
@@ -21,6 +21,8 @@
 import com.android.jack.backend.dex.compatibility.AndroidCompatibilityChecker;
 import com.android.jack.test.helper.RuntimeTestHelper;
 import com.android.jack.test.junit.KnownIssue;
+import com.android.jack.test.junit.Runtime;
+import com.android.jack.test.junit.RuntimeVersion;
 import com.android.jack.test.runtime.RuntimeTestInfo;
 import com.android.jack.test.toolchain.AbstractTestTools;
 import com.android.jack.test.toolchain.IToolchain;
@@ -48,6 +50,7 @@
       "com.android.jack.java8.bridges.test002.jack.Tests");
 
   @Test
+  @Runtime(from=RuntimeVersion.N)
   public void testBridge002() throws Exception {
     new RuntimeTestHelper(BRIDGE002)
         .setSourceLevel(SourceLevel.JAVA_8)
@@ -61,6 +64,7 @@
    * a dex with min api 24.
    */
   @Test
+  @Runtime(from=RuntimeVersion.N)
   @KnownIssue
   public void testBridge002_2() throws Exception {
     List<Class<? extends IToolchain>> excludeClazz = new ArrayList<Class<? extends IToolchain>>(2);
@@ -97,6 +101,7 @@
    * a dex with min api 24.
    */
   @Test
+  @Runtime(from=RuntimeVersion.N)
   @KnownIssue(candidate=IncrementalToolchain.class)
   public void testBridge002_3() throws Exception {
     List<Class<? extends IToolchain>> excludeClazz = new ArrayList<Class<? extends IToolchain>>(2);
diff --git a/jack-tests/tests/com/android/jack/java8/BridgeTestPreN.java b/jack-tests/tests/com/android/jack/java8/BridgeTestPreN.java
index a772eb8..855f10a 100644
--- a/jack-tests/tests/com/android/jack/java8/BridgeTestPreN.java
+++ b/jack-tests/tests/com/android/jack/java8/BridgeTestPreN.java
@@ -19,6 +19,7 @@
 import com.android.jack.JackAbortException;
 import com.android.jack.Options;
 import com.android.jack.test.helper.RuntimeTestHelper;
+import com.android.jack.test.junit.Runtime;
 import com.android.jack.test.runtime.RuntimeTestInfo;
 import com.android.jack.test.toolchain.AbstractTestTools;
 import com.android.jack.test.toolchain.IToolchain;
@@ -59,6 +60,7 @@
       "com.android.jack.java8.bridges.test006.jack.Tests");
 
   @Test
+  @Runtime
   public void testBridge001() throws Exception {
     new RuntimeTestHelper(BRIDGE001).setSourceLevel(SourceLevel.JAVA_8)
         .addIgnoredCandidateToolchain(JackApiV01.class)
@@ -103,6 +105,7 @@
   }
 
   @Test
+  @Runtime
   public void testBridge003() throws Exception {
     new RuntimeTestHelper(BRIDGE003).setSourceLevel(SourceLevel.JAVA_8)
         .addIgnoredCandidateToolchain(JackApiV01.class)
@@ -110,6 +113,7 @@
   }
 
   @Test
+  @Runtime
   public void testBridge004() throws Exception {
     new RuntimeTestHelper(BRIDGE004).setSourceLevel(SourceLevel.JAVA_8)
         .addIgnoredCandidateToolchain(JackApiV01.class)
@@ -117,6 +121,7 @@
   }
 
   @Test
+  @Runtime
   public void testBridge005() throws Exception {
     new RuntimeTestHelper(BRIDGE005).setSourceLevel(SourceLevel.JAVA_8)
         .addIgnoredCandidateToolchain(JackApiV01.class)
@@ -124,6 +129,7 @@
   }
 
   @Test
+  @Runtime
   public void testBridge006() throws Exception {
     new RuntimeTestHelper(BRIDGE006).setSourceLevel(SourceLevel.JAVA_8)
         .addIgnoredCandidateToolchain(JackApiV01.class)
diff --git a/jack-tests/tests/com/android/jack/java8/DefaultMethodTest.java b/jack-tests/tests/com/android/jack/java8/DefaultMethodTest.java
index eec61e2..04ede91 100644
--- a/jack-tests/tests/com/android/jack/java8/DefaultMethodTest.java
+++ b/jack-tests/tests/com/android/jack/java8/DefaultMethodTest.java
@@ -22,6 +22,8 @@
 import com.android.jack.test.helper.FileChecker;
 import com.android.jack.test.helper.RuntimeTestHelper;
 import com.android.jack.test.junit.KnownIssue;
+import com.android.jack.test.junit.Runtime;
+import com.android.jack.test.junit.RuntimeVersion;
 import com.android.jack.test.runtime.RuntimeTestInfo;
 import com.android.jack.test.toolchain.AbstractTestTools;
 import com.android.jack.test.toolchain.IToolchain;
@@ -176,6 +178,7 @@
           "com.android.jack.java8.defaultmethod.test018.jack.Tests");
 
   @Test
+  @Runtime(from=RuntimeVersion.N)
   public void testDefaultMethod001() throws Exception {
     run(DEFAULTMETHOD001);
   }
@@ -257,6 +260,7 @@
    * a dex with min api 24.
    */
   @Test
+  @Runtime(from=RuntimeVersion.N)
   @KnownIssue(candidate=IncrementalToolchain.class)
   public void testDefaultMethod001_3() throws Exception {
     List<Class<? extends IToolchain>> excludeClazz = new ArrayList<Class<? extends IToolchain>>(2);
@@ -292,6 +296,7 @@
    * a dex with min api 24.
    */
   @Test
+  @Runtime(from=RuntimeVersion.N)
   @KnownIssue(candidate=IncrementalToolchain.class)
   public void testDefaultMethod001_4() throws Exception {
     List<Class<? extends IToolchain>> excludeClazz = new ArrayList<Class<? extends IToolchain>>(2);
@@ -322,87 +327,104 @@
   }
 
   @Test
+  @Runtime(from=RuntimeVersion.N)
   public void testDefaultMethod002() throws Exception {
     run(DEFAULTMETHOD002);
   }
 
   @Test
+  @Runtime(from=RuntimeVersion.N)
   public void testDefaultMethod003() throws Exception {
     run(DEFAULTMETHOD003);
   }
 
   @Test
+  @Runtime(from=RuntimeVersion.N)
   public void testDefaultMethod004() throws Exception {
     run(DEFAULTMETHOD004);
   }
 
   @Test
+  @Runtime(from=RuntimeVersion.N)
   public void testDefaultMethod005() throws Exception {
     run(DEFAULTMETHOD005);
   }
 
   @Test
+  @Runtime(from=RuntimeVersion.N)
   @KnownIssue
   public void testDefaultMethod006() throws Exception {
     run(DEFAULTMETHOD006);
   }
 
   @Test
+  @Runtime(from=RuntimeVersion.N)
   public void testDefaultMethod007() throws Exception {
     run(DEFAULTMETHOD007);
   }
 
   @Test
+  @Runtime(from=RuntimeVersion.N)
   public void testDefaultMethod008() throws Exception {
     run(DEFAULTMETHOD008);
   }
 
   @Test
+  @Runtime(from=RuntimeVersion.N)
   public void testDefaultMethod009() throws Exception {
     run(DEFAULTMETHOD009);
   }
 
   @Test
+  @Runtime(from=RuntimeVersion.N)
   public void testDefaultMethod010() throws Exception {
     run(DEFAULTMETHOD010);
   }
 
   @Test
+  @Runtime(from=RuntimeVersion.N)
   public void testDefaultMethod011() throws Exception {
     run(DEFAULTMETHOD011);
   }
 
   @Test
+  @Runtime(from=RuntimeVersion.N)
   public void testDefaultMethod012() throws Exception {
     run(DEFAULTMETHOD012);
   }
 
   @Test
+  @Runtime(from=RuntimeVersion.N)
   public void testDefaultMethod013() throws Exception {
     run(DEFAULTMETHOD013);
   }
 
   @Test
+  @Runtime(from=RuntimeVersion.N)
   public void testDefaultMethod014() throws Exception {
     run(DEFAULTMETHOD014);
   }
 
   @Test
+  @Runtime(from=RuntimeVersion.N)
   public void testDefaultMethod015() throws Exception {
     run(DEFAULTMETHOD015);
   }
 
   @Test
+  @Runtime(from=RuntimeVersion.N)
   public void testDefaultMethod016() throws Exception {
     run(DEFAULTMETHOD016);
   }
 
   @Test
+  @Runtime(from=RuntimeVersion.N)
   public void testDefaultMethod017() throws Exception {
     run(DEFAULTMETHOD017);
   }
 
   @Test
+  @Runtime(from=RuntimeVersion.N)
   public void testDefaultMethod018() throws Exception {
     new RuntimeTestHelper(DEFAULTMETHOD018)
     .addProperty(
diff --git a/jack-tests/tests/com/android/jack/java8/GwtTest.java b/jack-tests/tests/com/android/jack/java8/GwtTest.java
index d414e09..1bc2b9c 100644
--- a/jack-tests/tests/com/android/jack/java8/GwtTest.java
+++ b/jack-tests/tests/com/android/jack/java8/GwtTest.java
@@ -21,6 +21,7 @@
 import javax.annotation.Nonnull;
 
 import com.android.jack.test.helper.RuntimeTestHelper;
+import com.android.jack.test.junit.Runtime;
 import com.android.jack.test.runtime.RuntimeTestInfo;
 import com.android.jack.test.toolchain.AbstractTestTools;
 import com.android.jack.test.toolchain.JackApiV01;
@@ -163,96 +164,115 @@
       "com.android.jack.java8.gwt.test046.jack.Java8Test");
 
   @Test
+  @Runtime
   public void testLambdaNoCapture() throws Exception {
     run(GWT_LAMBDA_TEST_1);
   }
 
   @Test
+  @Runtime
   public void testLambdaCaptureLocal() throws Exception {
     run(GWT_LAMBDA_TEST_2);
   }
 
   @Test
+  @Runtime
   public void testLambdaCaptureLocalWithInnerClass() throws Exception {
     run(GWT_LAMBDA_TEST_3);
   }
 
   @Test
+  @Runtime
   public void testLambdaCaptureLocalAndFieldWithInnerClass() throws Exception {
     run(GWT_LAMBDA_TEST_4);
   }
 
   @Test
+  @Runtime
   public void testLambdaCaptureLocalAndField() throws Exception {
     run(GWT_LAMBDA_TEST_5);
   }
 
   @Test
+  @Runtime
   public void testCompileLambdaCaptureOuterInnerField() throws Exception {
     run(GWT_LAMBDA_TEST_6);
   }
 
   @Test
+  @Runtime
   public void testStaticReferenceBinding() throws Exception {
     run(GWT_LAMBDA_TEST_7);
   }
 
   @Test
+  @Runtime
   public void testInstanceReferenceBinding() throws Exception {
     run(GWT_LAMBDA_TEST_8);
   }
 
   @Test
+  @Runtime
   public void testImplicitQualifierReferenceBinding() throws Exception {
     run(GWT_LAMBDA_TEST_9);
   }
 
   @Test
+  @Runtime
   public void testConstructorReferenceBinding() throws Exception {
     run(GWT_LAMBDA_TEST_10);
   }
 
   @Test
+  @Runtime
   public void testStaticInterfaceMethod() throws Exception {
     run(GWT_LAMBDA_TEST_11);
   }
 
   @Test
+  @Runtime
   public void testArrayConstructorReference() throws Exception {
     run(GWT_LAMBDA_TEST_12);
   }
 
   @Test
+  @Runtime
   public void testArrayConstructorReferenceBoxed() throws Exception {
     run(GWT_LAMBDA_TEST_13);
   }
 
   @Test
+  @Runtime
   public void testVarArgsReferenceBinding() throws Exception {
     run(GWT_LAMBDA_TEST_14);
   }
 
   @Test
+  @Runtime
   public void testVarArgsPassthroughReferenceBinding() throws Exception {
     run(GWT_LAMBDA_TEST_15);
   }
 
   @Test
+  @Runtime
   public void testVarArgsPassthroughReferenceBindingProvidedArray() throws Exception {
     run(GWT_LAMBDA_TEST_16);
   }
 
   @Test
+  @Runtime
   public void testSuperReferenceExpression() throws Exception {
     run(GWT_LAMBDA_TEST_17);
   }
 
   @Test
+  @Runtime
   public void testSuperReferenceExpressionWithVarArgs() throws Exception {
     run(GWT_LAMBDA_TEST_18);
   }
 
   @Test
+  @Runtime
   public void testPrivateConstructorReference() throws Exception {
     new RuntimeTestHelper(GWT_LAMBDA_TEST_19)
     .setSourceLevel(SourceLevel.JAVA_8)
@@ -263,66 +283,79 @@
   }
 
   @Test
+  @Runtime
   public void testLambdaCaptureParameter() throws Exception {
     run(GWT_LAMBDA_TEST_20);
   }
 
   @Test
+  @Runtime
   public void testLambdaNestingCaptureLocal() throws Exception {
     run(GWT_LAMBDA_TEST_21);
   }
 
   @Test
+  @Runtime
   public void testLambdaNestingCaptureField_InnerClassCapturingOuterClassVariable() throws Exception {
     run(GWT_LAMBDA_TEST_22);
   }
 
   @Test
+  @Runtime
   public void testInnerClassCaptureLocalFromOuterLambda() throws Exception {
     run(GWT_LAMBDA_TEST_23);
   }
 
   @Test
+  @Runtime
   public void testLambdaNestingCaptureField() throws Exception {
     run(GWT_LAMBDA_TEST_24);
   }
 
   @Test
+  @Runtime
   public void testLambdaMultipleNestingCaptureFieldAndLocal() throws Exception {
     run(GWT_LAMBDA_TEST_25);
   }
 
   @Test
+  @Runtime
   public void testLambdaMultipleNestingCaptureFieldAndLocalInnerClass() throws Exception {
     run(GWT_LAMBDA_TEST_26);
   }
 
   @Test
+  @Runtime
   public void testMethodRefWithSameName() throws Exception {
     run(GWT_LAMBDA_TEST_27);
   }
 
   @Test
+  @Runtime
   public void testLambdaNestingInAnonymousCaptureLocal() throws Exception {
     run(GWT_LAMBDA_TEST_42);
   }
 
   @Test
+  @Runtime
   public void testLambdaNestingInMultipleMixedAnonymousCaptureLocal() throws Exception {
     run(GWT_LAMBDA_TEST_43);
   }
 
   @Test
+  @Runtime
   public void testLambdaNestingInMultipleMixedAnonymousCaptureLocal_withInterference() throws Exception {
     run(GWT_LAMBDA_TEST_44);
   }
 
   @Test
+  @Runtime
   public void testLambdaNestingInMultipleMixedAnonymousCaptureLocalAndField() throws Exception {
     run(GWT_LAMBDA_TEST_45);
   }
 
   @Test
+  @Runtime
   public void testLambdaNestingInMultipleAnonymousCaptureLocal() throws Exception {
     run(GWT_LAMBDA_TEST_46);
   }
diff --git a/jack-tests/tests/com/android/jack/java8/GwtTestPostM.java b/jack-tests/tests/com/android/jack/java8/GwtTestPostM.java
index afd5c1d..a9dd492 100644
--- a/jack-tests/tests/com/android/jack/java8/GwtTestPostM.java
+++ b/jack-tests/tests/com/android/jack/java8/GwtTestPostM.java
@@ -20,6 +20,8 @@
 import com.android.jack.backend.dex.compatibility.AndroidCompatibilityChecker;
 import com.android.jack.test.helper.RuntimeTestHelper;
 import com.android.jack.test.junit.KnownIssue;
+import com.android.jack.test.junit.Runtime;
+import com.android.jack.test.junit.RuntimeVersion;
 import com.android.jack.test.runtime.RuntimeTestInfo;
 import com.android.jack.test.toolchain.AbstractTestTools;
 import com.android.jack.test.toolchain.Toolchain.SourceLevel;
@@ -112,97 +114,116 @@
       "com.android.jack.java8.gwt.test051.jack.Java8Test");
 
   @Test
+  @Runtime(from=RuntimeVersion.N)
   public void testDefaultInterfaceMethod() throws Exception {
     run(GWT_LAMBDA_TEST_28);
   }
 
   @Test
+  @Runtime(from=RuntimeVersion.N)
   @KnownIssue
   public void testDefaultInterfaceMethodVirtualUpRef() throws Exception {
     run(GWT_LAMBDA_TEST_29);
   }
 
   @Test
+  @Runtime(from=RuntimeVersion.N)
   public void DefaultInterfaceImplVirtualUpRefTwoInterfaces() throws Exception {
     run(GWT_LAMBDA_TEST_30);
   }
 
   @Test
+  @Runtime(from=RuntimeVersion.N)
   public void testDefenderMethodByInterfaceInstance() throws Exception {
     run(GWT_LAMBDA_TEST_31);
   }
 
   @Test
+  @Runtime(from=RuntimeVersion.N)
   public void testDefaultMethodReference() throws Exception {
     run(GWT_LAMBDA_TEST_32);
   }
 
   @Test
+  @Runtime(from=RuntimeVersion.N)
   public void testThisRefInDefenderMethod() throws Exception {
     run(GWT_LAMBDA_TEST_33);
   }
 
   @Test
+  @Runtime(from=RuntimeVersion.N)
   public void testClassImplementsTwoInterfacesWithSameDefenderMethod() throws Exception {
     run(GWT_LAMBDA_TEST_34);
   }
 
   @Test
+  @Runtime(from=RuntimeVersion.N)
   public void testAbstractClassImplementsInterface() throws Exception {
     run(GWT_LAMBDA_TEST_35);
   }
 
   @Test
+  @Runtime(from=RuntimeVersion.N)
   public void testSuperRefInDefenderMethod() throws Exception {
     run(GWT_LAMBDA_TEST_36);
   }
 
   @Test
+  @Runtime(from=RuntimeVersion.N)
   public void testSuperThisRefsInDefenderMethod() throws Exception {
     run(GWT_LAMBDA_TEST_37);
   }
 
   @Test
+  @Runtime(from=RuntimeVersion.N)
   public void testNestedInterfaceClass() throws Exception {
     run(GWT_LAMBDA_TEST_38);
   }
 
   @Test
+  @Runtime(from=RuntimeVersion.N)
   public void testBaseIntersectionCast() throws Exception {
     run(GWT_LAMBDA_TEST_39);
   }
 
   @Test
+  @Runtime(from=RuntimeVersion.N)
   public void testIntersectionCastWithLambdaExpr() throws Exception {
     run(GWT_LAMBDA_TEST_40);
   }
 
   @Test
+  @Runtime(from=RuntimeVersion.N)
   public void testIntersectionCastPolymorphism() throws Exception {
     run(GWT_LAMBDA_TEST_41);
   }
 
   @Test
+  @Runtime(from=RuntimeVersion.N)
   public void testMultipleDefaults_fromInterfaces_left() throws Exception {
     run(GWT_LAMBDA_TEST_47);
   }
 
   @Test
+  @Runtime(from=RuntimeVersion.N)
   public void testMultipleDefaults_fromInterfaces_right() throws Exception {
     run(GWT_LAMBDA_TEST_48);
   }
 
   @Test
+  @Runtime(from=RuntimeVersion.N)
   public void testMultipleDefaults_superclass_left() throws Exception {
     run(GWT_LAMBDA_TEST_49);
   }
 
   @Test
+  @Runtime(from=RuntimeVersion.N)
   public void testMultipleDefaults_superclass_right() throws Exception {
     run(GWT_LAMBDA_TEST_50);
   }
 
   @Test
+  @Runtime(from=RuntimeVersion.N)
   public void testInterfaceThis() throws Exception {
     run(GWT_LAMBDA_TEST_51);
   }
diff --git a/jack-tests/tests/com/android/jack/java8/IntersectionTypeTest.java b/jack-tests/tests/com/android/jack/java8/IntersectionTypeTest.java
index d942cf5..48c087d 100644
--- a/jack-tests/tests/com/android/jack/java8/IntersectionTypeTest.java
+++ b/jack-tests/tests/com/android/jack/java8/IntersectionTypeTest.java
@@ -21,6 +21,7 @@
 import com.android.jack.Options;
 import com.android.jack.frontend.FrontendCompilationException;
 import com.android.jack.test.helper.RuntimeTestHelper;
+import com.android.jack.test.junit.Runtime;
 import com.android.jack.test.runtime.RuntimeTestInfo;
 import com.android.jack.test.toolchain.AbstractTestTools;
 import com.android.jack.test.toolchain.JackApiV01;
@@ -62,6 +63,7 @@
       "com.android.jack.java8.intersectiontype.test006.jack.Tests");
 
   @Test
+  @Runtime
   public void testIntersectionType001() throws Exception {
     new RuntimeTestHelper(INTERSECTION_TYPE_001)
     .setSourceLevel(SourceLevel.JAVA_8)
@@ -71,6 +73,7 @@
   }
 
   @Test
+  @Runtime
   public void testIntersectionType002() throws Exception {
     new RuntimeTestHelper(INTERSECTION_TYPE_002)
     .setSourceLevel(SourceLevel.JAVA_8)
@@ -80,6 +83,7 @@
   }
 
   @Test
+  @Runtime
   public void testIntersectionType003() throws Exception {
     new RuntimeTestHelper(INTERSECTION_TYPE_003)
     .setSourceLevel(SourceLevel.JAVA_8)
@@ -89,6 +93,7 @@
   }
 
   @Test
+  @Runtime
   public void testIntersectionType004() throws Exception {
     try {
       new RuntimeTestHelper(INTERSECTION_TYPE_004).setSourceLevel(SourceLevel.JAVA_8)
@@ -103,6 +108,7 @@
   }
 
   @Test
+  @Runtime
   public void testIntersectionType005() throws Exception {
     try {
       new RuntimeTestHelper(INTERSECTION_TYPE_005).setSourceLevel(SourceLevel.JAVA_8)
@@ -117,6 +123,7 @@
   }
 
   @Test
+  @Runtime
   public void testIntersectionType006() throws Exception {
     new RuntimeTestHelper(INTERSECTION_TYPE_006)
     .setSourceLevel(SourceLevel.JAVA_8)
diff --git a/jack-tests/tests/com/android/jack/java8/Java8AllTest.java b/jack-tests/tests/com/android/jack/java8/Java8AllTest.java
index 70477f2..e9993fc 100644
--- a/jack-tests/tests/com/android/jack/java8/Java8AllTest.java
+++ b/jack-tests/tests/com/android/jack/java8/Java8AllTest.java
@@ -17,18 +17,35 @@
 package com.android.jack.java8;
 
 
-import com.android.jack.test.junit.JackTestRunner;
-
 import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
 import org.junit.runners.Suite.SuiteClasses;
 
 /**
  * JUnit test for compilation of Java 8 features
  */
-@RunWith(JackTestRunner.class)
-@SuiteClasses(value = {
-    Java8AllTestPreN.class,
-    Java8AllTestPostM.class
-    })
-public class Java8AllTest {
-}
+@RunWith(Suite.class)
+@SuiteClasses(
+  value = {
+    // PostM tests
+    BridgeTestPostM.class,
+    DefaultMethodTest.class,
+    EcjInterfaceMethodsTest.class,
+    EcjLambdaTestPostM.class,
+    GwtTestPostM.class,
+    RetroLambdaTests.class,
+    StaticMethodTest.class,
+
+    // PreN tests
+    AnnotationTest.class,
+    BridgeTestPreN.class,
+    EcjLambdaTest.class,
+    GwtTest.class,
+    IntersectionTypeTest.class,
+    LambdaTest.class,
+    MethodRefTest.class,
+    TypeInferenceTest.class,
+    VariableTest.class
+  }
+)
+public class Java8AllTest {}
diff --git a/jack-tests/tests/com/android/jack/java8/Java8AllTestPostM.java b/jack-tests/tests/com/android/jack/java8/Java8AllTestPostM.java
deleted file mode 100644
index 1858f37..0000000
--- a/jack-tests/tests/com/android/jack/java8/Java8AllTestPostM.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.jack.java8;
-
-
-import com.android.jack.test.junit.JackTestRunner;
-import com.android.jack.test.junit.MinRuntimeVersion;
-import com.android.jack.test.junit.RuntimeVersion;
-
-import org.junit.runner.RunWith;
-import org.junit.runners.Suite.SuiteClasses;
-
-/**
- * JUnit tests for compilation of Java 8 features which require a post M runtime.
- */
-@RunWith(JackTestRunner.class)
-@SuiteClasses(value = {
-    BridgeTestPostM.class,
-    DefaultMethodTest.class,
-    EcjInterfaceMethodsTest.class,
-    EcjLambdaTestPostM.class,
-    GwtTestPostM.class,
-    RetroLambdaTests.class,
-    StaticMethodTest.class,
-    })
-@MinRuntimeVersion(RuntimeVersion.N)
-public class Java8AllTestPostM {
-
-}
diff --git a/jack-tests/tests/com/android/jack/java8/Java8AllTestPreN.java b/jack-tests/tests/com/android/jack/java8/Java8AllTestPreN.java
deleted file mode 100644
index 5df5af2..0000000
--- a/jack-tests/tests/com/android/jack/java8/Java8AllTestPreN.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.jack.java8;
-
-
-import com.android.jack.test.junit.JackTestRunner;
-
-import org.junit.runner.RunWith;
-import org.junit.runners.Suite.SuiteClasses;
-
-/**
- * JUnit test for compilation of Java 8 features
- */
-@RunWith(JackTestRunner.class)
-@SuiteClasses(value = {
-    AnnotationTest.class,
-    BridgeTestPreN.class,
-    EcjLambdaTest.class,
-    GwtTest.class,
-    IntersectionTypeTest.class,
-    LambdaTest.class,
-    MethodRefTest.class,
-    TypeInferenceTest.class
-    })
-public class Java8AllTestPreN {
-}
diff --git a/jack-tests/tests/com/android/jack/java8/LambdaTest.java b/jack-tests/tests/com/android/jack/java8/LambdaTest.java
index 7552474..55e0e78 100644
--- a/jack-tests/tests/com/android/jack/java8/LambdaTest.java
+++ b/jack-tests/tests/com/android/jack/java8/LambdaTest.java
@@ -20,6 +20,7 @@
 import com.android.jack.test.helper.FileChecker;
 import com.android.jack.test.helper.RuntimeTestHelper;
 import com.android.jack.test.junit.KnownIssue;
+import com.android.jack.test.junit.Runtime;
 import com.android.jack.test.runtime.RuntimeTestInfo;
 import com.android.jack.test.toolchain.AbstractTestTools;
 import com.android.jack.test.toolchain.IToolchain;
@@ -207,96 +208,115 @@
       "com.android.jack.java8.lambda.test038.jack.Tests");
 
   @Test
+  @Runtime
   public void testLamba001() throws Exception {
     run(LAMBDA001);
   }
 
   @Test
+  @Runtime
   public void testLamba002() throws Exception {
     run(LAMBDA002);
   }
 
   @Test
+  @Runtime
   public void testLamba003() throws Exception {
     run(LAMBDA003);
   }
 
   @Test
+  @Runtime
   public void testLamba004() throws Exception {
     run(LAMBDA004);
   }
 
   @Test
+  @Runtime
   public void testLamba005() throws Exception {
     run(LAMBDA005);
   }
 
   @Test
+  @Runtime
   public void testLamba006() throws Exception {
     run(LAMBDA006);
   }
 
   @Test
+  @Runtime
   public void testLamba007() throws Exception {
     run(LAMBDA007);
   }
 
   @Test
+  @Runtime
   public void testLamba008() throws Exception {
     run(LAMBDA008);
   }
 
   @Test
+  @Runtime
   public void testLamba009() throws Exception {
     run(LAMBDA009);
   }
 
   @Test
+  @Runtime
   public void testLamba010() throws Exception {
     run(LAMBDA010);
   }
 
   @Test
+  @Runtime
   public void testLamba011() throws Exception {
     run(LAMBDA011);
   }
 
   @Test
+  @Runtime
   public void testLamba012() throws Exception {
     run(LAMBDA012);
   }
 
   @Test
+  @Runtime
   public void testLamba013() throws Exception {
     run(LAMBDA013);
   }
 
   @Test
+  @Runtime
   public void testLamba014() throws Exception {
     run(LAMBDA014);
   }
 
   @Test
+  @Runtime
   public void testLamba015() throws Exception {
     run(LAMBDA015);
   }
 
   @Test
+  @Runtime
   public void testLamba016() throws Exception {
     run(LAMBDA016);
   }
 
   @Test
+  @Runtime
   public void testLamba017() throws Exception {
     run(LAMBDA017);
   }
 
   @Test
+  @Runtime
   public void testLamba018() throws Exception {
     run(LAMBDA018);
   }
 
   @Test
+  @Runtime
   public void testLamba019() throws Exception {
     new RuntimeTestHelper(LAMBDA019)
     .setSourceLevel(SourceLevel.JAVA_8)
@@ -308,37 +328,44 @@
   }
 
   @Test
+  @Runtime
   public void testLamba020() throws Exception {
     run(LAMBDA020);
   }
 
   @Test
+  @Runtime
   public void testLamba021() throws Exception {
     run(LAMBDA021);
   }
 
   @Test
+  @Runtime
   public void testLamba022() throws Exception {
     run(LAMBDA022);
   }
 
 
   @Test
+  @Runtime
   public void testLamba023() throws Exception {
     run(LAMBDA023);
   }
 
   @Test
+  @Runtime
   public void testLamba024() throws Exception {
     run(LAMBDA024);
   }
 
   @Test
+  @Runtime
   public void testLamba025() throws Exception {
     run(LAMBDA025);
   }
 
   @Test
+  @Runtime
   public void testLamba026() throws Exception {
     run(LAMBDA026);
   }
@@ -381,51 +408,61 @@
   }
 
   @Test
+  @Runtime
   public void testLamba027() throws Exception {
     run(LAMBDA027);
   }
 
   @Test
+  @Runtime
   public void testLamba028() throws Exception {
     run(LAMBDA028);
   }
 
   @Test
+  @Runtime
   public void testLamba029() throws Exception {
     run(LAMBDA029);
   }
 
   @Test
+  @Runtime
   public void testLamba030() throws Exception {
     run(LAMBDA030);
   }
 
   @Test
+  @Runtime
   public void testLamba031() throws Exception {
     run(LAMBDA031);
   }
 
   @Test
+  @Runtime
   public void testLamba032() throws Exception {
     run(LAMBDA032);
   }
 
   @Test
+  @Runtime
   public void testLamba033() throws Exception {
     run(LAMBDA033);
   }
 
   @Test
+  @Runtime
   public void testLamba034() throws Exception {
     run(LAMBDA034);
   }
 
   @Test
+  @Runtime
   public void testLamba035() throws Exception {
     run(LAMBDA035);
   }
 
   @Test
+  @Runtime
   public void testLamba036() throws Exception {
     run(LAMBDA036);
   }
@@ -547,6 +584,7 @@
   }
 
   @Test
+  @Runtime
   public void testLamba038() throws Exception {
     run(LAMBDA038);
   }
diff --git a/jack-tests/tests/com/android/jack/java8/MethodRefTest.java b/jack-tests/tests/com/android/jack/java8/MethodRefTest.java
index 8e982d0..81cbddf 100644
--- a/jack-tests/tests/com/android/jack/java8/MethodRefTest.java
+++ b/jack-tests/tests/com/android/jack/java8/MethodRefTest.java
@@ -17,6 +17,7 @@
 package com.android.jack.java8;
 
 import com.android.jack.test.helper.RuntimeTestHelper;
+import com.android.jack.test.junit.Runtime;
 import com.android.jack.test.runtime.RuntimeTestInfo;
 import com.android.jack.test.toolchain.AbstractTestTools;
 import com.android.jack.test.toolchain.JackApiV01;
@@ -94,71 +95,85 @@
       "com.android.jack.java8.methodref.test015.jack.Tests");
 
   @Test
+  @Runtime
   public void testMethodRef001() throws Exception {
     run(METHODREF001);
   }
 
   @Test
+  @Runtime
   public void testMethodRef002() throws Exception {
     run(METHODREF002);
   }
 
   @Test
+  @Runtime
   public void testMethodRef003() throws Exception {
     run(METHODREF003);
   }
 
   @Test
+  @Runtime
   public void testMethodRef004() throws Exception {
     run(METHODREF004);
   }
 
   @Test
+  @Runtime
   public void testMethodRef005() throws Exception {
     run(METHODREF005);
   }
 
   @Test
+  @Runtime
   public void testMethodRef006() throws Exception {
     run(METHODREF006);
   }
 
   @Test
+  @Runtime
   public void testMethodRef007() throws Exception {
     run(METHODREF007);
   }
 
   @Test
+  @Runtime
   public void testMethodRef008() throws Exception {
     run(METHODREF008);
   }
 
   @Test
+  @Runtime
   public void testMethodRef009() throws Exception {
     run(METHODREF009);
   }
 
   @Test
+  @Runtime
   public void testMethodRef010() throws Exception {
     run(METHODREF010);
   }
 
   @Test
+  @Runtime
   public void testMethodRef011() throws Exception {
     run(METHODREF011);
   }
 
   @Test
+  @Runtime
   public void testMethodRef012() throws Exception {
     run(METHODREF012);
   }
 
   @Test
+  @Runtime
   public void testMethodRef013() throws Exception {
     run(METHODREF013);
   }
 
   @Test
+  @Runtime
   public void testMethodRef014() throws Exception {
     new RuntimeTestHelper(METHODREF014)
         .setSourceLevel(SourceLevel.JAVA_8)
@@ -169,6 +184,7 @@
   }
 
   @Test
+  @Runtime
   public void testMethodRef015() throws Exception {
     run(METHODREF015);
   }
diff --git a/jack-tests/tests/com/android/jack/java8/RetroLambdaTests.java b/jack-tests/tests/com/android/jack/java8/RetroLambdaTests.java
index 32dae36..57ae5af 100644
--- a/jack-tests/tests/com/android/jack/java8/RetroLambdaTests.java
+++ b/jack-tests/tests/com/android/jack/java8/RetroLambdaTests.java
@@ -19,6 +19,8 @@
 import com.android.jack.Options;
 import com.android.jack.backend.dex.compatibility.AndroidCompatibilityChecker;
 import com.android.jack.test.helper.RuntimeTestHelper;
+import com.android.jack.test.junit.Runtime;
+import com.android.jack.test.junit.RuntimeVersion;
 import com.android.jack.test.runtime.RuntimeTestInfo;
 import com.android.jack.test.toolchain.AbstractTestTools;
 import com.android.jack.test.toolchain.JackApiV01;
@@ -213,161 +215,193 @@
           "com.android.jack.java8.retrolambda.interfacestaticmethods.test004.jack.Tests");
 
   @Test
+  @Runtime(from=RuntimeVersion.N)
   public void retroLambdaDefaultMethodsTest001() throws Exception {
     run(RETROLAMBDA_DEFAULTMETHODS_001);
   }
 
   @Test
+  @Runtime(from=RuntimeVersion.N)
   public void retroLambdaDefaultMethodsTest002() throws Exception {
     run(RETROLAMBDA_DEFAULTMETHODS_002);
   }
 
   @Test
+  @Runtime(from=RuntimeVersion.N)
   public void retroLambdaDefaultMethodsTest003() throws Exception {
     run(RETROLAMBDA_DEFAULTMETHODS_003);
   }
 
   @Test
+  @Runtime(from=RuntimeVersion.N)
   public void retroLambdaDefaultMethodsTest004() throws Exception {
     run(RETROLAMBDA_DEFAULTMETHODS_004);
   }
 
   @Test
+  @Runtime(from=RuntimeVersion.N)
   public void retroLambdaDefaultMethodsTest005() throws Exception {
     run(RETROLAMBDA_DEFAULTMETHODS_005);
   }
 
   @Test
+  @Runtime(from=RuntimeVersion.N)
   public void retroLambdaDefaultMethodsTest006() throws Exception {
     run(RETROLAMBDA_DEFAULTMETHODS_006);
   }
 
   @Test
+  @Runtime(from=RuntimeVersion.N)
   public void retroLambdaDefaultMethodsTest007() throws Exception {
     run(RETROLAMBDA_DEFAULTMETHODS_007);
   }
 
   @Test
+  @Runtime(from=RuntimeVersion.N)
   public void retroLambdaDefaultMethodsTest008() throws Exception {
     run(RETROLAMBDA_DEFAULTMETHODS_008);
   }
 
   @Test
+  @Runtime(from=RuntimeVersion.N)
   public void retroLambdaDefaultMethodsTest009() throws Exception {
     run(RETROLAMBDA_DEFAULTMETHODS_009);
   }
 
   @Test
+  @Runtime(from=RuntimeVersion.N)
   public void retroLambdaDefaultMethodsTest010() throws Exception {
     run(RETROLAMBDA_DEFAULTMETHODS_010);
   }
 
   @Test
+  @Runtime(from=RuntimeVersion.N)
   public void retroLambdaDefaultMethodsTest011() throws Exception {
     run(RETROLAMBDA_DEFAULTMETHODS_011);
   }
 
   @Test
+  @Runtime(from=RuntimeVersion.N)
   public void retroLambdaDefaultMethodsTest012() throws Exception {
     run(RETROLAMBDA_DEFAULTMETHODS_012);
   }
 
   @Test
+  @Runtime(from=RuntimeVersion.N)
   public void retroLambdaDefaultMethodsTest013() throws Exception {
     run(RETROLAMBDA_DEFAULTMETHODS_013);
   }
 
   @Test
+  @Runtime(from=RuntimeVersion.N)
   public void retroLambdaDefaultMethodsTest014() throws Exception {
     run(RETROLAMBDA_DEFAULTMETHODS_014);
   }
 
   @Test
+  @Runtime(from=RuntimeVersion.N)
   public void retroLambdaDefaultMethodsTest015() throws Exception {
     run(RETROLAMBDA_DEFAULTMETHODS_015);
   }
 
   @Test
+  @Runtime(from=RuntimeVersion.N)
   public void retroLambdaDefaultMethodsTest016() throws Exception {
     run(RETROLAMBDA_DEFAULTMETHODS_016);
   }
 
   @Test
+  @Runtime(from=RuntimeVersion.N)
   public void retroLambdaDefaultMethodsTest017() throws Exception {
     run(RETROLAMBDA_DEFAULTMETHODS_017);
   }
 
   @Test
+  @Runtime(from=RuntimeVersion.N)
   public void retroLambdaDefaultMethodsTest018() throws Exception {
     run(RETROLAMBDA_DEFAULTMETHODS_018);
   }
 
   @Test
+  @Runtime(from=RuntimeVersion.N)
   public void retroLambdaDefaultMethodsTest019() throws Exception {
     run(RETROLAMBDA_DEFAULTMETHODS_019);
   }
 
   @Test
+  @Runtime(from=RuntimeVersion.N)
   public void retroLambdaDefaultMethodsTest020() throws Exception {
     run(RETROLAMBDA_DEFAULTMETHODS_020);
   }
 
   @Test
+  @Runtime(from=RuntimeVersion.N)
   public void retroLambdaDefaultMethodsTest021() throws Exception {
     run(RETROLAMBDA_DEFAULTMETHODS_021);
   }
 
   @Test
+  @Runtime(from=RuntimeVersion.N)
   public void retroLambdaDefaultMethodsTest022() throws Exception {
     run(RETROLAMBDA_DEFAULTMETHODS_022);
   }
 
   @Test
+  @Runtime(from=RuntimeVersion.N)
   public void retroLambdaDefaultMethodsTest023() throws Exception {
     run(RETROLAMBDA_DEFAULTMETHODS_023);
   }
 
   @Test
+  @Runtime(from=RuntimeVersion.N)
   public void retroLambdaDefaultMethodsTest024() throws Exception {
     run(RETROLAMBDA_DEFAULTMETHODS_024);
   }
 
   @Test
+  @Runtime(from=RuntimeVersion.N)
   public void retroLambdaDefaultMethodsTest025() throws Exception {
     run(RETROLAMBDA_DEFAULTMETHODS_025);
   }
 
   @Test
+  @Runtime(from=RuntimeVersion.N)
   public void retroLambdaDefaultMethodsTest026() throws Exception {
     run(RETROLAMBDA_DEFAULTMETHODS_026);
   }
 
   @Test
+  @Runtime(from=RuntimeVersion.N)
   public void retroLambdaDefaultMethodsTest027() throws Exception {
     run(RETROLAMBDA_DEFAULTMETHODS_027);
   }
 
   @Test
+  @Runtime(from=RuntimeVersion.N)
   public void retroLambdaInterfaceBridgeMethodsTest001() throws Exception {
     run(RETROLAMBDA_INTERFACE_BRIDGE_METHODS_001);
   }
 
   @Test
+  @Runtime(from=RuntimeVersion.N)
   public void retroLambdaInterfaceStaticMethodsTest001() throws Exception {
     run(RETROLAMBDA_INTERFACE_STATICMETHODS_001);
   }
 
   @Test
+  @Runtime(from=RuntimeVersion.N)
   public void retroLambdaInterfaceStaticMethodsTest002() throws Exception {
     run(RETROLAMBDA_INTERFACE_STATICMETHODS_002);
   }
 
   @Test
+  @Runtime(from=RuntimeVersion.N)
   public void retroLambdaInterfaceStaticMethodsTest003() throws Exception {
     run(RETROLAMBDA_INTERFACE_STATICMETHODS_003);
   }
 
   @Test
+  @Runtime(from=RuntimeVersion.N)
   public void retroLambdaInterfaceStaticMethodsTest004() throws Exception {
     run(RETROLAMBDA_INTERFACE_STATICMETHODS_004);
   }
diff --git a/jack-tests/tests/com/android/jack/java8/StaticMethodTest.java b/jack-tests/tests/com/android/jack/java8/StaticMethodTest.java
index 99350f2..d38a934 100644
--- a/jack-tests/tests/com/android/jack/java8/StaticMethodTest.java
+++ b/jack-tests/tests/com/android/jack/java8/StaticMethodTest.java
@@ -23,6 +23,8 @@
 import com.android.jack.Options;
 import com.android.jack.backend.dex.compatibility.AndroidCompatibilityChecker;
 import com.android.jack.test.helper.RuntimeTestHelper;
+import com.android.jack.test.junit.Runtime;
+import com.android.jack.test.junit.RuntimeVersion;
 import com.android.jack.test.runtime.RuntimeTestInfo;
 import com.android.jack.test.toolchain.AbstractTestTools;
 import com.android.jack.test.toolchain.JackApiV01;
@@ -48,16 +50,19 @@
       "com.android.jack.java8.staticmethod.test003.jack.Tests");
 
   @Test
+  @Runtime(from=RuntimeVersion.N)
   public void testStaticMethod001() throws Exception {
     run(STATICTMETHOD001);
   }
 
   @Test
+  @Runtime(from=RuntimeVersion.N)
   public void testStaticMethod002() throws Exception {
     run(STATICTMETHOD002);
   }
 
   @Test
+  @Runtime(from=RuntimeVersion.N)
   public void testStaticMethod003() throws Exception {
     run(STATICTMETHOD003);
   }
diff --git a/jack-tests/tests/com/android/jack/java8/TypeInferenceTest.java b/jack-tests/tests/com/android/jack/java8/TypeInferenceTest.java
index dcd262d..59f9a10 100644
--- a/jack-tests/tests/com/android/jack/java8/TypeInferenceTest.java
+++ b/jack-tests/tests/com/android/jack/java8/TypeInferenceTest.java
@@ -17,6 +17,7 @@
 package com.android.jack.java8;
 
 import com.android.jack.test.helper.RuntimeTestHelper;
+import com.android.jack.test.junit.Runtime;
 import com.android.jack.test.runtime.RuntimeTestInfo;
 import com.android.jack.test.toolchain.AbstractTestTools;
 import com.android.jack.test.toolchain.JackApiV01;
@@ -42,16 +43,19 @@
       "com.android.jack.java8.inference.test003.jack.Tests");
 
   @Test
+  @Runtime
   public void testTypeInference001() throws Exception {
     run(INFERENCE001);
   }
 
   @Test
+  @Runtime
   public void testTypeInference002() throws Exception {
     run(INFERENCE002);
   }
 
   @Test
+  @Runtime
   public void testTypeInference003() throws Exception {
     run(INFERENCE003);
   }
diff --git a/jack-tests/tests/com/android/jack/newarray/NewarrayTests.java b/jack-tests/tests/com/android/jack/newarray/NewarrayTests.java
index 6ee3958..e47103a 100644
--- a/jack-tests/tests/com/android/jack/newarray/NewarrayTests.java
+++ b/jack-tests/tests/com/android/jack/newarray/NewarrayTests.java
@@ -18,6 +18,7 @@
 
 import com.android.jack.test.category.RuntimeRegressionTest;
 import com.android.jack.test.helper.RuntimeTestHelper;
+import com.android.jack.test.junit.Runtime;
 import com.android.jack.test.runtime.RuntimeTest;
 import com.android.jack.test.runtime.RuntimeTestInfo;
 import com.android.jack.test.toolchain.AbstractTestTools;
@@ -49,30 +50,35 @@
 
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test001() throws Exception {
     new RuntimeTestHelper(TEST001).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test002() throws Exception {
     new RuntimeTestHelper(TEST002).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test003() throws Exception {
     new RuntimeTestHelper(TEST003).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test004() throws Exception {
     new RuntimeTestHelper(TEST004).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test005() throws Exception {
     new RuntimeTestHelper(TEST005).compileAndRunTest();
diff --git a/jack-tests/tests/com/android/jack/opcodes/OpcodesTests.java b/jack-tests/tests/com/android/jack/opcodes/OpcodesTests.java
index ed68d7f..bdae104 100644
--- a/jack-tests/tests/com/android/jack/opcodes/OpcodesTests.java
+++ b/jack-tests/tests/com/android/jack/opcodes/OpcodesTests.java
@@ -19,6 +19,7 @@
 import com.android.jack.test.TestsProperties;
 import com.android.jack.test.category.RuntimeRegressionTest;
 import com.android.jack.test.helper.RuntimeTestHelper;
+import com.android.jack.test.junit.Runtime;
 import com.android.jack.test.runtime.RuntimeTest;
 import com.android.jack.test.runtime.RuntimeTestInfo;
 import com.android.jack.test.toolchain.AbstractTestTools;
@@ -606,6 +607,7 @@
 
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void invoke_static() throws Exception {
     new RuntimeTestHelper(INVOKE_STATIC)
@@ -613,6 +615,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void array_length() throws Exception {
     new RuntimeTestHelper(ARRAY_LENGTH)
@@ -620,6 +623,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void neg_float() throws Exception {
     new RuntimeTestHelper(NEG_FLOAT)
@@ -627,6 +631,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void sub_double() throws Exception {
     new RuntimeTestHelper(SUB_DOUBLE)
@@ -634,6 +639,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void aget() throws Exception {
     new RuntimeTestHelper(AGET)
@@ -641,6 +647,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void aput_byte() throws Exception {
     new RuntimeTestHelper(APUT_BYTE)
@@ -648,6 +655,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void opc_new() throws Exception {
     new RuntimeTestHelper(OPC_NEW)
@@ -655,6 +663,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void cmpl_double() throws Exception {
     new RuntimeTestHelper(CMPL_DOUBLE)
@@ -662,6 +671,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void if_gtz() throws Exception {
     new RuntimeTestHelper(IF_GTZ)
@@ -669,6 +679,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void float_to_long() throws Exception {
     new RuntimeTestHelper(FLOAT_TO_LONG)
@@ -676,6 +687,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void add_long() throws Exception {
     new RuntimeTestHelper(ADD_LONG)
@@ -683,6 +695,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void add_float() throws Exception {
     new RuntimeTestHelper(ADD_FLOAT)
@@ -690,6 +703,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void iput() throws Exception {
     new RuntimeTestHelper(IPUT)
@@ -697,6 +711,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void div_float() throws Exception {
     new RuntimeTestHelper(DIV_FLOAT)
@@ -704,6 +719,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void ushr_long() throws Exception {
     new RuntimeTestHelper(USHR_LONG)
@@ -711,6 +727,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void const_wide() throws Exception {
     new RuntimeTestHelper(CONST_WIDE)
@@ -718,6 +735,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void xor_int() throws Exception {
     new RuntimeTestHelper(XOR_INT)
@@ -725,6 +743,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void aget_object() throws Exception {
     new RuntimeTestHelper(AGET_OBJECT)
@@ -732,6 +751,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void const4_16() throws Exception {
     new RuntimeTestHelper(CONST4_16)
@@ -739,6 +759,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void rem_long() throws Exception {
     new RuntimeTestHelper(REM_LONG)
@@ -746,6 +767,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void ushr_int() throws Exception {
     new RuntimeTestHelper(USHR_INT)
@@ -753,6 +775,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void if_ge() throws Exception {
     new RuntimeTestHelper(IF_GE)
@@ -760,6 +783,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void sub_long() throws Exception {
     new RuntimeTestHelper(SUB_LONG)
@@ -767,6 +791,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void float_to_int() throws Exception {
     new RuntimeTestHelper(FLOAT_TO_INT)
@@ -774,6 +799,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void int_to_long() throws Exception {
     new RuntimeTestHelper(INT_TO_LONG)
@@ -781,6 +807,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void or_long() throws Exception {
     new RuntimeTestHelper(OR_LONG)
@@ -788,6 +815,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void if_gez() throws Exception {
     new RuntimeTestHelper(IF_GEZ)
@@ -795,6 +823,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void shl_int() throws Exception {
     new RuntimeTestHelper(SHL_INT)
@@ -802,6 +831,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void long_to_float() throws Exception {
     new RuntimeTestHelper(LONG_TO_FLOAT)
@@ -809,6 +839,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void div_int() throws Exception {
     new RuntimeTestHelper(DIV_INT)
@@ -816,6 +847,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void and_long() throws Exception {
     new RuntimeTestHelper(AND_LONG)
@@ -823,6 +855,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void double_to_long() throws Exception {
     new RuntimeTestHelper(DOUBLE_TO_LONG)
@@ -830,6 +863,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void mul_long() throws Exception {
     new RuntimeTestHelper(MUL_LONG)
@@ -837,6 +871,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void double_to_int() throws Exception {
     new RuntimeTestHelper(DOUBLE_TO_INT)
@@ -844,6 +879,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void if_nez() throws Exception {
     new RuntimeTestHelper(IF_NEZ)
@@ -851,6 +887,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void aput_object() throws Exception {
     new RuntimeTestHelper(APUT_OBJECT)
@@ -858,6 +895,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void if_lt() throws Exception {
     new RuntimeTestHelper(IF_LT)
@@ -865,6 +903,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void int_to_double() throws Exception {
     new RuntimeTestHelper(INT_TO_DOUBLE)
@@ -872,6 +911,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void mul_int() throws Exception {
     new RuntimeTestHelper(MUL_INT)
@@ -879,6 +919,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void sput() throws Exception {
     new RuntimeTestHelper(SPUT)
@@ -886,6 +927,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void shl_long() throws Exception {
     new RuntimeTestHelper(SHL_LONG)
@@ -893,6 +935,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void neg_long() throws Exception {
     new RuntimeTestHelper(NEG_LONG)
@@ -900,6 +943,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void long_to_int() throws Exception {
     new RuntimeTestHelper(LONG_TO_INT)
@@ -907,6 +951,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void opc_goto() throws Exception {
     new RuntimeTestHelper(OPC_GOTO)
@@ -914,6 +959,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void int_to_float() throws Exception {
     new RuntimeTestHelper(INT_TO_FLOAT)
@@ -921,6 +967,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void xor_long() throws Exception {
     new RuntimeTestHelper(XOR_LONG)
@@ -928,6 +975,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void monitor_enter() throws Exception {
     new RuntimeTestHelper(MONITOR_ENTER)
@@ -935,6 +983,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void if_eqz() throws Exception {
     new RuntimeTestHelper(IF_EQZ)
@@ -942,6 +991,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void invoke_direct() throws Exception {
     new RuntimeTestHelper(INVOKE_DIRECT)
@@ -949,6 +999,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void cmpl_float() throws Exception {
     new RuntimeTestHelper(CMPL_FLOAT)
@@ -956,6 +1007,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void check_cast() throws Exception {
     new RuntimeTestHelper(CHECK_CAST)
@@ -963,6 +1015,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void opc_throw() throws Exception {
     new RuntimeTestHelper(OPC_THROW)
@@ -970,6 +1023,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void int_to_short() throws Exception {
     new RuntimeTestHelper(INT_TO_SHORT)
@@ -977,6 +1031,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void packed_switch() throws Exception {
     new RuntimeTestHelper(PACKED_SWITCH)
@@ -984,6 +1039,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void aget_char() throws Exception {
     new RuntimeTestHelper(AGET_CHAR)
@@ -991,6 +1047,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void return_object() throws Exception {
     new RuntimeTestHelper(RETURN_OBJECT)
@@ -998,6 +1055,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void opc_const() throws Exception {
     new RuntimeTestHelper(OPC_CONST)
@@ -1005,6 +1063,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void sub_int() throws Exception {
     new RuntimeTestHelper(SUB_INT)
@@ -1012,6 +1071,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void aput_char() throws Exception {
     new RuntimeTestHelper(APUT_CHAR)
@@ -1019,6 +1079,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void neg_int() throws Exception {
     new RuntimeTestHelper(NEG_INT)
@@ -1026,6 +1087,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void mul_double() throws Exception {
     new RuntimeTestHelper(MUL_DOUBLE)
@@ -1033,6 +1095,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void double_to_float() throws Exception {
     new RuntimeTestHelper(DOUBLE_TO_FLOAT)
@@ -1040,6 +1103,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void int_to_byte() throws Exception {
     new RuntimeTestHelper(INT_TO_BYTE)
@@ -1047,6 +1111,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void if_le() throws Exception {
     new RuntimeTestHelper(IF_LE)
@@ -1054,6 +1119,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void invoke_virtual() throws Exception {
     new RuntimeTestHelper(INVOKE_VIRTUAL)
@@ -1061,6 +1127,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void div_double() throws Exception {
     new RuntimeTestHelper(DIV_DOUBLE)
@@ -1068,6 +1135,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void if_gt() throws Exception {
     new RuntimeTestHelper(IF_GT)
@@ -1075,6 +1143,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void aget_short() throws Exception {
     new RuntimeTestHelper(AGET_SHORT)
@@ -1082,6 +1151,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void const_string() throws Exception {
     new RuntimeTestHelper(CONST_STRING)
@@ -1089,6 +1159,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void or_int() throws Exception {
     new RuntimeTestHelper(OR_INT)
@@ -1096,6 +1167,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void rem_int() throws Exception {
     new RuntimeTestHelper(REM_INT)
@@ -1103,6 +1175,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void rem_double() throws Exception {
     new RuntimeTestHelper(REM_DOUBLE)
@@ -1110,6 +1183,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void long_to_double() throws Exception {
     new RuntimeTestHelper(LONG_TO_DOUBLE)
@@ -1117,6 +1191,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void if_ne() throws Exception {
     new RuntimeTestHelper(IF_NE)
@@ -1124,6 +1199,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void cmp_long() throws Exception {
     new RuntimeTestHelper(CMP_LONG)
@@ -1131,6 +1207,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void sget() throws Exception {
     new RuntimeTestHelper(SGET)
@@ -1138,6 +1215,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void aget_wide() throws Exception {
     new RuntimeTestHelper(AGET_WIDE)
@@ -1145,6 +1223,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void if_ltz() throws Exception {
     new RuntimeTestHelper(IF_LTZ)
@@ -1152,6 +1231,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void opc_instanceof() throws Exception {
     new RuntimeTestHelper(OPC_INSTANCEOF)
@@ -1159,6 +1239,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void neg_double() throws Exception {
     new RuntimeTestHelper(NEG_DOUBLE)
@@ -1166,6 +1247,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void return_wide() throws Exception {
     new RuntimeTestHelper(RETURN_WIDE)
@@ -1173,6 +1255,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void float_to_double() throws Exception {
     new RuntimeTestHelper(FLOAT_TO_DOUBLE)
@@ -1180,6 +1263,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void aput_short() throws Exception {
     new RuntimeTestHelper(APUT_SHORT)
@@ -1187,6 +1271,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void cmpg_double() throws Exception {
     new RuntimeTestHelper(CMPG_DOUBLE)
@@ -1194,6 +1279,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void if_lez() throws Exception {
     new RuntimeTestHelper(IF_LEZ)
@@ -1201,6 +1287,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void if_eq() throws Exception {
     new RuntimeTestHelper(IF_EQ)
@@ -1208,6 +1295,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void new_array() throws Exception {
     new RuntimeTestHelper(NEW_ARRAY)
@@ -1215,6 +1303,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void shr_long() throws Exception {
     new RuntimeTestHelper(SHR_LONG)
@@ -1222,6 +1311,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void add_double() throws Exception {
     new RuntimeTestHelper(ADD_DOUBLE)
@@ -1229,6 +1319,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void div_long() throws Exception {
     new RuntimeTestHelper(DIV_LONG)
@@ -1236,6 +1327,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void sparse_switch() throws Exception {
     new RuntimeTestHelper(SPARSE_SWITCH)
@@ -1243,6 +1335,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void invoke_interface() throws Exception {
     new RuntimeTestHelper(INVOKE_INTERFACE)
@@ -1250,6 +1343,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void aput_wide() throws Exception {
     new RuntimeTestHelper(APUT_WIDE)
@@ -1257,6 +1351,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void aget_byte() throws Exception {
     new RuntimeTestHelper(AGET_BYTE)
@@ -1264,6 +1359,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void aput() throws Exception {
     new RuntimeTestHelper(APUT)
@@ -1271,6 +1367,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void shr_int() throws Exception {
     new RuntimeTestHelper(SHR_INT)
@@ -1278,6 +1375,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void shr_const_int() throws Exception {
     new RuntimeTestHelper(SHR_CONST_INT)
@@ -1285,6 +1383,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void shr_const_long() throws Exception {
     new RuntimeTestHelper(SHR_CONST_LONG)
@@ -1292,6 +1391,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void shl_const_int() throws Exception {
     new RuntimeTestHelper(SHL_CONST_INT)
@@ -1299,6 +1399,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void shl_const_long() throws Exception {
     new RuntimeTestHelper(SHL_CONST_LONG)
@@ -1306,6 +1407,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void ushr_const_int() throws Exception {
     new RuntimeTestHelper(USHR_CONST_INT)
@@ -1313,6 +1415,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void ushr_const_long() throws Exception {
     new RuntimeTestHelper(USHR_CONST_LONG)
@@ -1320,6 +1423,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void opc_return() throws Exception {
     new RuntimeTestHelper(OPC_RETURN)
@@ -1327,6 +1431,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void invoke_super() throws Exception {
     new RuntimeTestHelper(INVOKE_SUPER)
@@ -1334,6 +1439,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void mul_float() throws Exception {
     new RuntimeTestHelper(MUL_FLOAT)
@@ -1341,6 +1447,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void sub_float() throws Exception {
     new RuntimeTestHelper(SUB_FLOAT)
@@ -1348,6 +1455,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void add_int() throws Exception {
     new RuntimeTestHelper(ADD_INT)
@@ -1355,6 +1463,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void int_to_char() throws Exception {
     new RuntimeTestHelper(INT_TO_CHAR)
@@ -1362,6 +1471,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void and_int() throws Exception {
     new RuntimeTestHelper(AND_INT)
@@ -1369,6 +1479,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void cmpg_float() throws Exception {
     new RuntimeTestHelper(CMPG_FLOAT)
@@ -1376,6 +1487,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void iget() throws Exception {
     new RuntimeTestHelper(IGET)
@@ -1383,6 +1495,7 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void rem_float() throws Exception {
     new RuntimeTestHelper(REM_FLOAT)
diff --git a/jack-tests/tests/com/android/jack/optimizations/defuse/test001/DefUseTests.java b/jack-tests/tests/com/android/jack/optimizations/defuse/DefUseTests.java
similarity index 92%
rename from jack-tests/tests/com/android/jack/optimizations/defuse/test001/DefUseTests.java
rename to jack-tests/tests/com/android/jack/optimizations/defuse/DefUseTests.java
index 7048acd..690f623 100644
--- a/jack-tests/tests/com/android/jack/optimizations/defuse/test001/DefUseTests.java
+++ b/jack-tests/tests/com/android/jack/optimizations/defuse/DefUseTests.java
@@ -14,9 +14,10 @@
  * limitations under the License.
  */
 
-package com.android.jack.optimizations.defuse.test001;
+package com.android.jack.optimizations.defuse;
 
 import com.android.jack.test.helper.RuntimeTestHelper;
+import com.android.jack.test.junit.Runtime;
 import com.android.jack.test.runtime.RuntimeTestInfo;
 import com.android.jack.test.toolchain.AbstractTestTools;
 
@@ -25,6 +26,7 @@
 public class DefUseTests {
 
   @Test
+  @Runtime
   public void test001() throws Exception {
     // Debug informations must be disabled to increase the number of synthetic variables and to
     // increase the variable reuse in order to raise the problem.
diff --git a/jack-tests/tests/com/android/jack/optimizations/exprsimplifier/ExprsimplifierTests.java b/jack-tests/tests/com/android/jack/optimizations/exprsimplifier/ExprsimplifierTests.java
index 5503e92..2087321 100644
--- a/jack-tests/tests/com/android/jack/optimizations/exprsimplifier/ExprsimplifierTests.java
+++ b/jack-tests/tests/com/android/jack/optimizations/exprsimplifier/ExprsimplifierTests.java
@@ -18,6 +18,7 @@
 
 import com.android.jack.test.category.RuntimeRegressionTest;
 import com.android.jack.test.helper.RuntimeTestHelper;
+import com.android.jack.test.junit.Runtime;
 import com.android.jack.test.runtime.RuntimeTest;
 import com.android.jack.test.runtime.RuntimeTestInfo;
 import com.android.jack.test.toolchain.AbstractTestTools;
@@ -33,6 +34,7 @@
 
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test001() throws Exception {
     new RuntimeTestHelper(TEST001).compileAndRunTest();
diff --git a/jack-tests/tests/com/android/jack/optimizations/notsimplifier/NotsimplifierTests.java b/jack-tests/tests/com/android/jack/optimizations/notsimplifier/NotsimplifierTests.java
index 427d56f..201042f 100644
--- a/jack-tests/tests/com/android/jack/optimizations/notsimplifier/NotsimplifierTests.java
+++ b/jack-tests/tests/com/android/jack/optimizations/notsimplifier/NotsimplifierTests.java
@@ -18,6 +18,7 @@
 
 import com.android.jack.test.category.RuntimeRegressionTest;
 import com.android.jack.test.helper.RuntimeTestHelper;
+import com.android.jack.test.junit.Runtime;
 import com.android.jack.test.runtime.RuntimeTest;
 import com.android.jack.test.runtime.RuntimeTestInfo;
 import com.android.jack.test.toolchain.AbstractTestTools;
@@ -38,12 +39,14 @@
 
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test001() throws Exception {
     new RuntimeTestHelper(TEST001).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test002() throws Exception {
     new RuntimeTestHelper(TEST002).compileAndRunTest();
diff --git a/jack-tests/tests/com/android/jack/optimizations/sideeffect/SideEffectTests.java b/jack-tests/tests/com/android/jack/optimizations/sideeffect/SideEffectTests.java
index e114ef5..07ff955 100644
--- a/jack-tests/tests/com/android/jack/optimizations/sideeffect/SideEffectTests.java
+++ b/jack-tests/tests/com/android/jack/optimizations/sideeffect/SideEffectTests.java
@@ -18,6 +18,7 @@
 
 import com.android.jack.test.category.RuntimeRegressionTest;
 import com.android.jack.test.helper.RuntimeTestHelper;
+import com.android.jack.test.junit.Runtime;
 import com.android.jack.test.runtime.RuntimeTest;
 import com.android.jack.test.runtime.RuntimeTestInfo;
 import com.android.jack.test.toolchain.AbstractTestTools;
@@ -41,18 +42,21 @@
 
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test001() throws Exception {
     new RuntimeTestHelper(TEST001).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test002() throws Exception {
     new RuntimeTestHelper(TEST002).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test003() throws Exception {
     new RuntimeTestHelper(TEST003).compileAndRunTest();
diff --git a/jack-tests/tests/com/android/jack/optimizations/usedef/UseDefTests.java b/jack-tests/tests/com/android/jack/optimizations/usedef/UseDefTests.java
index 1b4d1f2..ac73bc9 100644
--- a/jack-tests/tests/com/android/jack/optimizations/usedef/UseDefTests.java
+++ b/jack-tests/tests/com/android/jack/optimizations/usedef/UseDefTests.java
@@ -21,6 +21,7 @@
 
 import com.android.jack.test.category.RuntimeRegressionTest;
 import com.android.jack.test.helper.RuntimeTestHelper;
+import com.android.jack.test.junit.Runtime;
 import com.android.jack.test.runtime.RuntimeTest;
 import com.android.jack.test.runtime.RuntimeTestInfo;
 import com.android.jack.test.toolchain.AbstractTestTools;
@@ -31,6 +32,7 @@
       "com.android.jack.optimizations.usedef.test001.dx.Tests");
 
     @Test
+    @Runtime
     @Category(RuntimeRegressionTest.class)
     public void test001() throws Exception {
       new RuntimeTestHelper(TEST001).compileAndRunTest();
diff --git a/jack-tests/tests/com/android/jack/order/OrderTests.java b/jack-tests/tests/com/android/jack/order/OrderTests.java
index 8704923..86ca26a 100644
--- a/jack-tests/tests/com/android/jack/order/OrderTests.java
+++ b/jack-tests/tests/com/android/jack/order/OrderTests.java
@@ -18,6 +18,7 @@
 
 import com.android.jack.test.category.RuntimeRegressionTest;
 import com.android.jack.test.helper.RuntimeTestHelper;
+import com.android.jack.test.junit.Runtime;
 import com.android.jack.test.runtime.RuntimeTest;
 import com.android.jack.test.runtime.RuntimeTestInfo;
 import com.android.jack.test.toolchain.AbstractTestTools;
@@ -33,6 +34,7 @@
 
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test001() throws Exception {
     new RuntimeTestHelper(TEST001).compileAndRunTest();
diff --git a/jack-tests/tests/com/android/jack/reflect/ReflectTests.java b/jack-tests/tests/com/android/jack/reflect/ReflectTests.java
index 1e36055..73b9cef 100644
--- a/jack-tests/tests/com/android/jack/reflect/ReflectTests.java
+++ b/jack-tests/tests/com/android/jack/reflect/ReflectTests.java
@@ -16,7 +16,9 @@
 
 package com.android.jack.reflect;
 
+import com.android.jack.test.category.RuntimeRegressionTest;
 import com.android.jack.test.helper.RuntimeTestHelper;
+import com.android.jack.test.junit.Runtime;
 import com.android.jack.test.runtime.RuntimeTest;
 import com.android.jack.test.runtime.RuntimeTestInfo;
 import com.android.jack.test.toolchain.AbstractTestTools;
@@ -24,6 +26,7 @@
 
 import org.junit.BeforeClass;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 public class ReflectTests extends RuntimeTest {
 
@@ -42,12 +45,14 @@
   }
 
   @Test
+  @Runtime
   public void simpleName001() throws Exception {
     new RuntimeTestHelper(TEST001_WITHOUT_SHRINK_SCHEDULABLE).compileAndRunTest();
   }
 
 
   @Test
+  @Runtime
   public void simpleName002() throws Exception {
     new RuntimeTestHelper(TEST001_WITH_SHRINK_SCHEDULABLE).compileAndRunTest();
   }
diff --git a/jack-tests/tests/com/android/jack/returnstatement/ReturnstatementTests.java b/jack-tests/tests/com/android/jack/returnstatement/ReturnstatementTests.java
index a5924f2..4ee37da 100644
--- a/jack-tests/tests/com/android/jack/returnstatement/ReturnstatementTests.java
+++ b/jack-tests/tests/com/android/jack/returnstatement/ReturnstatementTests.java
@@ -18,6 +18,7 @@
 
 import com.android.jack.test.category.RuntimeRegressionTest;
 import com.android.jack.test.helper.RuntimeTestHelper;
+import com.android.jack.test.junit.Runtime;
 import com.android.jack.test.runtime.RuntimeTest;
 import com.android.jack.test.runtime.RuntimeTestInfo;
 import com.android.jack.test.toolchain.AbstractTestTools;
@@ -40,12 +41,14 @@
 
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void returns() throws Exception {
     new RuntimeTestHelper(RETURNS).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void returnvoid() throws Exception {
     new RuntimeTestHelper(RETURNVOID).compileAndRunTest();
diff --git a/jack-tests/tests/com/android/jack/shrob/ObfuscationWithoutMappingTests.java b/jack-tests/tests/com/android/jack/shrob/ObfuscationWithoutMappingTests.java
index 4a4d658..f3fc659 100644
--- a/jack-tests/tests/com/android/jack/shrob/ObfuscationWithoutMappingTests.java
+++ b/jack-tests/tests/com/android/jack/shrob/ObfuscationWithoutMappingTests.java
@@ -22,6 +22,7 @@
 import com.android.jack.test.helper.RuntimeTestHelper;
 import com.android.jack.test.helper.SourceToDexComparisonTestHelper;
 import com.android.jack.test.junit.KnownIssue;
+import com.android.jack.test.junit.Runtime;
 import com.android.jack.test.toolchain.AbstractTestTools;
 import com.android.jack.test.toolchain.DummyToolchain;
 import com.android.jack.test.toolchain.IToolchain;
@@ -121,6 +122,7 @@
    * Test Obfuscation when a whole package is missing from the classpath.
    */
   @Test
+  @Runtime
   public void test54() throws Exception {
     File testRootDir = getShrobTestRootDir("054");
 
diff --git a/jack-tests/tests/com/android/jack/shrob/ShrobRuntimeTests.java b/jack-tests/tests/com/android/jack/shrob/ShrobRuntimeTests.java
index 8e7a4d7..874ca17 100644
--- a/jack-tests/tests/com/android/jack/shrob/ShrobRuntimeTests.java
+++ b/jack-tests/tests/com/android/jack/shrob/ShrobRuntimeTests.java
@@ -18,6 +18,7 @@
 
 import com.android.jack.test.helper.RuntimeTestHelper;
 import com.android.jack.test.junit.KnownIssue;
+import com.android.jack.test.junit.Runtime;
 import com.android.jack.test.runtime.RuntimeTest;
 import com.android.jack.test.runtime.RuntimeTestInfo;
 import com.android.jack.test.toolchain.AbstractTestTools;
@@ -69,42 +70,49 @@
           .setLibDirName("lib");
 
   @Test
+  @Runtime
   public void test011_1() throws Exception {
     new RuntimeTestHelper(TEST011_1)
     .compileAndRunTest();
   }
 
   @Test
+  @Runtime
   public void test011_2() throws Exception {
     new RuntimeTestHelper(TEST011_2).addIgnoredCandidateToolchain(JillBasedToolchain.class)
      .compileAndRunTest();
   }
 
   @Test
+  @Runtime
   public void test016() throws Exception {
     new RuntimeTestHelper(TEST016)
     .compileAndRunTest();
   }
 
   @Test
+  @Runtime
   public void test025() throws Exception {
     new RuntimeTestHelper(TEST025)
     .compileAndRunTest();
   }
 
   @Test
+  @Runtime
   public void test030() throws Exception {
     new RuntimeTestHelper(TEST030)
     .compileAndRunTest();
   }
 
   @Test
+  @Runtime
   public void test046() throws Exception {
     new RuntimeTestHelper(TEST046)
     .compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @KnownIssue
   public void testAnnotatedMethod1() throws Exception {
     new RuntimeTestHelper(ANNOTATEDMETHOD1)
@@ -116,6 +124,7 @@
   }
 
   @Test
+  @Runtime
   public void test048() throws Exception {
     new RuntimeTestHelper(TEST048)
     .compileAndRunTest();
diff --git a/jack-tests/tests/com/android/jack/string/StringTests.java b/jack-tests/tests/com/android/jack/string/StringTests.java
index 929b9ac..93ce8ed 100644
--- a/jack-tests/tests/com/android/jack/string/StringTests.java
+++ b/jack-tests/tests/com/android/jack/string/StringTests.java
@@ -18,6 +18,7 @@
 
 import com.android.jack.test.category.RuntimeRegressionTest;
 import com.android.jack.test.helper.RuntimeTestHelper;
+import com.android.jack.test.junit.Runtime;
 import com.android.jack.test.runtime.RuntimeTest;
 import com.android.jack.test.runtime.RuntimeTestInfo;
 import com.android.jack.test.toolchain.AbstractTestTools;
@@ -53,18 +54,21 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void concat001() throws Exception {
     new RuntimeTestHelper(CONCAT001).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void concat002() throws Exception {
     new RuntimeTestHelper(CONCAT002).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void concat003() throws Exception {
     new RuntimeTestHelper(CONCAT003).compileAndRunTest();
diff --git a/jack-tests/tests/com/android/jack/switchstatement/SwitchstatementTests.java b/jack-tests/tests/com/android/jack/switchstatement/SwitchstatementTests.java
index 3cf6c15..9c707e3 100644
--- a/jack-tests/tests/com/android/jack/switchstatement/SwitchstatementTests.java
+++ b/jack-tests/tests/com/android/jack/switchstatement/SwitchstatementTests.java
@@ -22,6 +22,7 @@
 import com.android.jack.backend.dex.DexFileWriter;
 import com.android.jack.test.category.RuntimeRegressionTest;
 import com.android.jack.test.helper.RuntimeTestHelper;
+import com.android.jack.test.junit.Runtime;
 import com.android.jack.test.runtime.RuntimeTest;
 import com.android.jack.test.runtime.RuntimeTestInfo;
 import com.android.jack.test.toolchain.AbstractTestTools;
@@ -169,12 +170,14 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test001() throws Exception {
     new RuntimeTestHelper(TEST001).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test002() throws Exception {
     new RuntimeTestHelper(TEST002).compileAndRunTest();
@@ -204,36 +207,42 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test003() throws Exception {
     new RuntimeTestHelper(TEST003).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test004() throws Exception {
     new RuntimeTestHelper(TEST004).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test005() throws Exception {
     new RuntimeTestHelper(TEST005).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test006() throws Exception {
     new RuntimeTestHelper(TEST006).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test007() throws Exception {
     new RuntimeTestHelper(TEST007).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test008() throws Exception {
     new RuntimeTestHelper(TEST008).compileAndRunTest();
@@ -274,12 +283,14 @@
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test010() throws Exception {
     new RuntimeTestHelper(TEST010).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test011() throws Exception {
     new RuntimeTestHelper(TEST011).compileAndRunTest();
@@ -327,6 +338,7 @@
   }
 
   @Test
+  @Runtime
   public void testRun012() throws Exception {
     runTestCase(TEST012);
   }
@@ -375,6 +387,7 @@
   }
 
   @Test
+  @Runtime
   public void testRun013() throws Exception {
     runTestCase(TEST013);
   }
@@ -432,6 +445,7 @@
   }
 
   @Test
+  @Runtime
   public void testRun014() throws Exception {
     runTestCase(TEST014);
   }
@@ -491,6 +505,7 @@
   }
 
   @Test
+  @Runtime
   public void testRun015() throws Exception {
     runTestCase(TEST015);
   }
@@ -536,6 +551,7 @@
   }
 
   @Test
+  @Runtime
   public void testRun016() throws Exception {
     runTestCase(TEST016);
   }
@@ -575,6 +591,7 @@
   }
 
   @Test
+  @Runtime
   public void testRun017() throws Exception {
     runTestCase(TEST017);
   }
@@ -624,6 +641,7 @@
   }
 
   @Test
+  @Runtime
   public void testRun018() throws Exception {
     runTestCase(TEST018);
   }
@@ -669,6 +687,7 @@
   }
 
   @Test
+  @Runtime
   public void testRun019() throws Exception {
     runTestCase(TEST019);
   }
@@ -700,6 +719,7 @@
   }
 
   @Test
+  @Runtime
   public void testRun020() throws Exception {
     runTestCase(TEST020);
   }
@@ -727,6 +747,7 @@
   }
 
   @Test
+  @Runtime
   public void testRun021() throws Exception {
     runTestCase(TEST021);
   }
@@ -750,6 +771,7 @@
   }
 
   @Test
+  @Runtime
   public void testRun022() throws Exception {
     runTestCase(TEST022);
   }
@@ -805,6 +827,7 @@
   }
 
   @Test
+  @Runtime
   public void testRun023() throws Exception {
     runTestCase(TEST023);
   }
@@ -858,6 +881,7 @@
   }
 
   @Test
+  @Runtime
   public void testRun024() throws Exception {
     runTestCase(TEST024);
   }
@@ -902,6 +926,7 @@
   }
 
   @Test
+  @Runtime
   public void testRun025() throws Exception {
     runTestCase(TEST025);
   }
@@ -940,6 +965,7 @@
   }
 
   @Test
+  @Runtime
   public void testRun026() throws Exception {
     runTestCase(TEST026);
   }
@@ -997,6 +1023,7 @@
   }
 
   @Test
+  @Runtime
   public void testRun027() throws Exception {
     runTestCase(TEST027);
   }
diff --git a/jack-tests/tests/com/android/jack/synchronize/SynchronizeTests.java b/jack-tests/tests/com/android/jack/synchronize/SynchronizeTests.java
index c48fcce..f67b05d 100644
--- a/jack-tests/tests/com/android/jack/synchronize/SynchronizeTests.java
+++ b/jack-tests/tests/com/android/jack/synchronize/SynchronizeTests.java
@@ -18,6 +18,7 @@
 
 import com.android.jack.test.category.RuntimeRegressionTest;
 import com.android.jack.test.helper.RuntimeTestHelper;
+import com.android.jack.test.junit.Runtime;
 import com.android.jack.test.runtime.RuntimeTest;
 import com.android.jack.test.runtime.RuntimeTestInfo;
 import com.android.jack.test.toolchain.AbstractTestTools;
@@ -33,6 +34,7 @@
 
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test001() throws Exception {
     new RuntimeTestHelper(TEST001).compileAndRunTest();
diff --git a/jack-tests/tests/com/android/jack/threeaddress/ThreeaddressTests.java b/jack-tests/tests/com/android/jack/threeaddress/ThreeaddressTests.java
index caabc35..f7d01c3 100644
--- a/jack-tests/tests/com/android/jack/threeaddress/ThreeaddressTests.java
+++ b/jack-tests/tests/com/android/jack/threeaddress/ThreeaddressTests.java
@@ -18,6 +18,7 @@
 
 import com.android.jack.test.category.RuntimeRegressionTest;
 import com.android.jack.test.helper.RuntimeTestHelper;
+import com.android.jack.test.junit.Runtime;
 import com.android.jack.test.runtime.RuntimeTest;
 import com.android.jack.test.runtime.RuntimeTestInfo;
 import com.android.jack.test.toolchain.AbstractTestTools;
@@ -41,18 +42,21 @@
 
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test001() throws Exception {
     new RuntimeTestHelper(TEST001).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test002() throws Exception {
     new RuntimeTestHelper(TEST002).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test003() throws Exception {
     new RuntimeTestHelper(TEST003).compileAndRunTest();
diff --git a/jack-tests/tests/com/android/jack/throwstatement/ThrowstatementTests.java b/jack-tests/tests/com/android/jack/throwstatement/ThrowstatementTests.java
index 33c029f..cc986c3 100644
--- a/jack-tests/tests/com/android/jack/throwstatement/ThrowstatementTests.java
+++ b/jack-tests/tests/com/android/jack/throwstatement/ThrowstatementTests.java
@@ -18,6 +18,7 @@
 
 import com.android.jack.test.category.RuntimeRegressionTest;
 import com.android.jack.test.helper.RuntimeTestHelper;
+import com.android.jack.test.junit.Runtime;
 import com.android.jack.test.runtime.RuntimeTest;
 import com.android.jack.test.runtime.RuntimeTestInfo;
 import com.android.jack.test.toolchain.AbstractTestTools;
@@ -38,12 +39,14 @@
 
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test001() throws Exception {
     new RuntimeTestHelper(TEST001).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test002() throws Exception {
     new RuntimeTestHelper(TEST002).compileAndRunTest();
diff --git a/jack-tests/tests/com/android/jack/transformations/boostlockregionpriority/BoostLockedRegionPriorityTests.java b/jack-tests/tests/com/android/jack/transformations/boostlockregionpriority/BoostLockedRegionPriorityTests.java
index 87c77ca..3d9aa64 100644
--- a/jack-tests/tests/com/android/jack/transformations/boostlockregionpriority/BoostLockedRegionPriorityTests.java
+++ b/jack-tests/tests/com/android/jack/transformations/boostlockregionpriority/BoostLockedRegionPriorityTests.java
@@ -17,6 +17,7 @@
 package com.android.jack.transformations.boostlockregionpriority;
 
 import com.android.jack.test.helper.RuntimeTestHelper;
+import com.android.jack.test.junit.Runtime;
 import com.android.jack.test.runtime.RuntimeTest;
 import com.android.jack.test.runtime.RuntimeTestInfo;
 import com.android.jack.test.toolchain.AbstractTestTools;
@@ -33,6 +34,7 @@
           "com.android.jack.transformations.boostlockregionpriority.test001.dx.Tests");
 
   @Test
+  @Runtime
   public void test001() throws Exception {
     new RuntimeTestHelper(TEST001)
         .addIgnoredCandidateToolchain(JillBasedToolchain.class)
diff --git a/jack-tests/tests/com/android/jack/trycatch/TrycatchTests.java b/jack-tests/tests/com/android/jack/trycatch/TrycatchTests.java
index 70c1430..a88204e 100644
--- a/jack-tests/tests/com/android/jack/trycatch/TrycatchTests.java
+++ b/jack-tests/tests/com/android/jack/trycatch/TrycatchTests.java
@@ -19,6 +19,7 @@
 import com.android.jack.TestTools;
 import com.android.jack.test.category.RuntimeRegressionTest;
 import com.android.jack.test.helper.RuntimeTestHelper;
+import com.android.jack.test.junit.Runtime;
 import com.android.jack.test.runtime.RuntimeTest;
 import com.android.jack.test.runtime.RuntimeTestInfo;
 import com.android.jack.test.toolchain.AbstractTestTools;
@@ -58,24 +59,28 @@
 
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test001() throws Exception {
     new RuntimeTestHelper(TEST001).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test002() throws Exception {
     new RuntimeTestHelper(TEST002).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test003() throws Exception {
     new RuntimeTestHelper(TEST003).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test005() throws Exception {
     new RuntimeTestHelper(TEST005).compileAndRunTest();
diff --git a/jack-tests/tests/com/android/jack/tryfinally/TryfinallyTests.java b/jack-tests/tests/com/android/jack/tryfinally/TryfinallyTests.java
index 138323d..1a2dbcc 100644
--- a/jack-tests/tests/com/android/jack/tryfinally/TryfinallyTests.java
+++ b/jack-tests/tests/com/android/jack/tryfinally/TryfinallyTests.java
@@ -18,6 +18,7 @@
 
 import com.android.jack.test.category.RuntimeRegressionTest;
 import com.android.jack.test.helper.RuntimeTestHelper;
+import com.android.jack.test.junit.Runtime;
 import com.android.jack.test.runtime.RuntimeTest;
 import com.android.jack.test.runtime.RuntimeTestInfo;
 import com.android.jack.test.toolchain.AbstractTestTools;
@@ -45,24 +46,28 @@
 
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void finally002() throws Exception {
     new RuntimeTestHelper(FINALLY002).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void finally003() throws Exception {
     new RuntimeTestHelper(FINALLY003).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void finally004() throws Exception {
     new RuntimeTestHelper(FINALLY004).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void finallyblock() throws Exception {
     new RuntimeTestHelper(FINALLYBLOCK).compileAndRunTest();
diff --git a/jack-tests/tests/com/android/jack/type/TypeTests.java b/jack-tests/tests/com/android/jack/type/TypeTests.java
index fff249d..b6b5e7f 100644
--- a/jack-tests/tests/com/android/jack/type/TypeTests.java
+++ b/jack-tests/tests/com/android/jack/type/TypeTests.java
@@ -20,6 +20,7 @@
 
 import com.android.jack.optimizations.Optimizations;
 import com.android.jack.test.helper.RuntimeTestHelper;
+import com.android.jack.test.junit.Runtime;
 import com.android.jack.test.runtime.RuntimeTestInfo;
 import com.android.jack.test.toolchain.AbstractTestTools;
 
@@ -35,6 +36,7 @@
 
 
   @Test
+  @Runtime
   public void test001() throws Exception {
     new RuntimeTestHelper(TEST001)
         .addProperty(Optimizations.UseDefSimplifier.ENABLE.getName(), "true")
@@ -43,6 +45,7 @@
   }
 
   @Test
+  @Runtime
   public void test002() throws Exception {
     new RuntimeTestHelper(TEST002)
         .addProperty(Optimizations.IfSimplifier.ENABLE.getName(), "true")
diff --git a/jack-tests/tests/com/android/jack/unary/UnaryTests.java b/jack-tests/tests/com/android/jack/unary/UnaryTests.java
index 81419c3..6fc873b 100644
--- a/jack-tests/tests/com/android/jack/unary/UnaryTests.java
+++ b/jack-tests/tests/com/android/jack/unary/UnaryTests.java
@@ -18,6 +18,7 @@
 
 import com.android.jack.test.category.RuntimeRegressionTest;
 import com.android.jack.test.helper.RuntimeTestHelper;
+import com.android.jack.test.junit.Runtime;
 import com.android.jack.test.runtime.RuntimeTest;
 import com.android.jack.test.runtime.RuntimeTestInfo;
 import com.android.jack.test.toolchain.AbstractTestTools;
@@ -52,36 +53,42 @@
       "com.android.jack.unary.test006.dx.Tests");
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test001() throws Exception {
     new RuntimeTestHelper(TEST001).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test002() throws Exception {
     new RuntimeTestHelper(TEST002).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test003() throws Exception {
     new RuntimeTestHelper(TEST003).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test004() throws Exception {
     new RuntimeTestHelper(TEST004).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test005() throws Exception {
     new RuntimeTestHelper(TEST005).compileAndRunTest();
   }
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test006() throws Exception {
     new RuntimeTestHelper(TEST006).compileAndRunTest();
diff --git a/jack-tests/tests/com/android/jack/verify/VerifyTests.java b/jack-tests/tests/com/android/jack/verify/VerifyTests.java
index c2c07ac..89c6453 100644
--- a/jack-tests/tests/com/android/jack/verify/VerifyTests.java
+++ b/jack-tests/tests/com/android/jack/verify/VerifyTests.java
@@ -18,6 +18,7 @@
 
 import com.android.jack.test.category.RuntimeRegressionTest;
 import com.android.jack.test.helper.RuntimeTestHelper;
+import com.android.jack.test.junit.Runtime;
 import com.android.jack.test.runtime.RuntimeTest;
 import com.android.jack.test.runtime.RuntimeTestInfo;
 import com.android.jack.test.toolchain.AbstractTestTools;
@@ -33,6 +34,7 @@
 
 
   @Test
+  @Runtime
   @Category(RuntimeRegressionTest.class)
   public void test001() throws Exception {
     new RuntimeTestHelper(TEST001).compileAndRunTest();