Only run kotlin metadata tests for supported versions

Bug: 203169995
Change-Id: I63463055a65796828aa702c8fecc7f9ad74745bc
diff --git a/src/test/java/com/android/tools/r8/KotlinCompilerTool.java b/src/test/java/com/android/tools/r8/KotlinCompilerTool.java
index 33c5355..3cd4941 100644
--- a/src/test/java/com/android/tools/r8/KotlinCompilerTool.java
+++ b/src/test/java/com/android/tools/r8/KotlinCompilerTool.java
@@ -80,6 +80,15 @@
     public KotlinCompiler getCompiler() {
       return new KotlinCompiler(this);
     }
+
+    public static List<KotlinCompilerVersion> getSupported() {
+      return Arrays.stream(KotlinCompilerVersion.values())
+          .filter(
+              compiler ->
+                  compiler.isGreaterThanOrEqualTo(MIN_SUPPORTED_VERSION)
+                      && compiler.isLessThanOrEqualTo(MAX_SUPPORTED_VERSION))
+          .collect(Collectors.toList());
+    }
   }
 
   public static final class KotlinCompiler {
diff --git a/src/test/java/com/android/tools/r8/KotlinTestParameters.java b/src/test/java/com/android/tools/r8/KotlinTestParameters.java
index 7996dc4..2ac3f87 100644
--- a/src/test/java/com/android/tools/r8/KotlinTestParameters.java
+++ b/src/test/java/com/android/tools/r8/KotlinTestParameters.java
@@ -3,6 +3,8 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8;
 
+import static org.junit.Assume.assumeTrue;
+
 import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
 import com.android.tools.r8.KotlinCompilerTool.KotlinCompilerVersion;
 import com.android.tools.r8.KotlinCompilerTool.KotlinTargetVersion;
@@ -69,6 +71,8 @@
     private Predicate<KotlinTargetVersion> targetVersionFilter = t -> false;
     private boolean withDevCompiler =
         System.getProperty("com.android.tools.r8.kotlincompilerdev") != null;
+    private boolean withOldCompilers =
+        System.getProperty("com.android.tools.r8.kotlincompilerold") != null;
 
     private Builder() {}
 
@@ -101,6 +105,11 @@
       return this;
     }
 
+    public Builder withOldCompilersIfSet() {
+      assumeTrue(withOldCompilers);
+      return this;
+    }
+
     public Builder withAllTargetVersions() {
       withTargetVersionFilter(t -> t != KotlinTargetVersion.NONE);
       return this;
@@ -126,10 +135,16 @@
       List<KotlinCompilerVersion> compilerVersions;
       if (withDevCompiler) {
         compilerVersions = ImmutableList.of(KotlinCompilerVersion.KOTLIN_DEV);
-      } else {
+      } else if (withOldCompilers) {
         compilerVersions =
             Arrays.stream(KotlinCompilerVersion.values())
-                .filter(c -> c != KotlinCompilerVersion.KOTLIN_DEV && compilerFilter.test(c))
+                .filter(c -> c.isLessThan(KotlinCompilerVersion.MIN_SUPPORTED_VERSION))
+                .collect(Collectors.toList());
+
+      } else {
+        compilerVersions =
+            KotlinCompilerVersion.getSupported().stream()
+                .filter(c -> compilerFilter.test(c))
                 .collect(Collectors.toList());
       }
       for (KotlinCompilerVersion kotlinVersion : compilerVersions) {
diff --git a/src/test/java/com/android/tools/r8/kotlin/KotlinDuplicateAnnotationTest.java b/src/test/java/com/android/tools/r8/kotlin/KotlinDuplicateAnnotationTest.java
index 6169da8..5f6030f 100644
--- a/src/test/java/com/android/tools/r8/kotlin/KotlinDuplicateAnnotationTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/KotlinDuplicateAnnotationTest.java
@@ -9,7 +9,6 @@
 import static org.junit.Assume.assumeTrue;
 
 import com.android.tools.r8.CompilationFailedException;
-import com.android.tools.r8.KotlinCompilerTool.KotlinCompilerVersion;
 import com.android.tools.r8.KotlinTestParameters;
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.utils.BooleanUtils;
@@ -43,10 +42,7 @@
   public static Collection<Object[]> data() {
     return buildParameters(
         getTestParameters().withAllRuntimesAndApiLevels().build(),
-        getKotlinTestParameters()
-            .withCompiler(KotlinCompilerVersion.KOTLINC_1_3_72)
-            .withAllTargetVersions()
-            .build(),
+        getKotlinTestParameters().withOldCompilersIfSet().withAllTargetVersions().build(),
         BooleanUtils.values());
   }
 
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataFirstToLatestTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataFirstToLatestTest.java
index de3e23d..f9381cb 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataFirstToLatestTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataFirstToLatestTest.java
@@ -44,10 +44,7 @@
   public static Collection<Object[]> data() {
     return buildParameters(
         getTestParameters().withCfRuntimes().build(),
-        getKotlinTestParameters()
-            .withCompiler(KotlinCompilerVersion.KOTLINC_1_3_72)
-            .withAllTargetVersions()
-            .build());
+        getKotlinTestParameters().withOldCompilersIfSet().withAllTargetVersions().build());
   }
 
   public MetadataFirstToLatestTest(
@@ -59,7 +56,7 @@
   @Test
   public void smokeTest() throws Exception {
     runTest(
-        KotlinCompilerVersion.KOTLINC_1_5_0,
+        KotlinCompilerVersion.MAX_SUPPORTED_VERSION,
         libJars.getForConfiguration(kotlinc, targetVersion),
         kotlinc.getKotlinStdlibJar());
   }
@@ -93,7 +90,7 @@
         assertThrows(
             AssertionError.class,
             () -> {
-              runTest(KotlinCompilerVersion.KOTLINC_1_3_72, libJar, stdLibJar);
+              runTest(kotlinParameters.getCompiler().getCompilerVersion(), libJar, stdLibJar);
             });
     assertThat(
         assertionError.getMessage(),
@@ -120,7 +117,7 @@
             .assertAllWarningMessagesMatch(
                 equalTo("Resource 'META-INF/MANIFEST.MF' already exists."))
             .writeToZip();
-    runTest(KotlinCompilerVersion.KOTLINC_1_5_0, libJar, stdLibJar);
+    runTest(KotlinCompilerVersion.MAX_SUPPORTED_VERSION, libJar, stdLibJar);
   }
 
   private void runTest(KotlinCompilerVersion kotlinCompilerVersion, Path libJar, Path stdLibJar)
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataVersionNumberBumpTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataVersionNumberBumpTest.java
index 84139d9..1cd5dea 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataVersionNumberBumpTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataVersionNumberBumpTest.java
@@ -8,7 +8,6 @@
 import static org.junit.Assert.fail;
 import static org.objectweb.asm.Opcodes.ASM7;
 
-import com.android.tools.r8.KotlinCompilerTool.KotlinCompilerVersion;
 import com.android.tools.r8.KotlinCompilerTool.KotlinTargetVersion;
 import com.android.tools.r8.KotlinTestParameters;
 import com.android.tools.r8.R8FullTestBuilder;
@@ -43,7 +42,7 @@
     return buildParameters(
         getTestParameters().withAllRuntimesAndApiLevels().build(),
         getKotlinTestParameters()
-            .withCompiler(KotlinCompilerVersion.KOTLINC_1_3_72)
+            .withOldCompilersIfSet()
             .withTargetVersion(KotlinTargetVersion.JAVA_8)
             .build());
   }
diff --git a/tools/test.py b/tools/test.py
index 7235b6e..f5ce159 100755
--- a/tools/test.py
+++ b/tools/test.py
@@ -196,6 +196,9 @@
                     help='Specify to download a kotlin dev compiler and run '
                          'tests with that',
                     default=False, action='store_true')
+  result.add_option('--kotlin-compiler-old',
+                    help='Specify to run tests on older kotlin compilers',
+                    default=False, action='store_true')
   return result.parse_args()
 
 def archive_failures(options):
@@ -283,6 +286,8 @@
     gradle_args.append('-Pprint_full_stacktraces')
   if options.print_obfuscated_stacktraces:
     gradle_args.append('-Pprint_obfuscated_stacktraces')
+  if options.kotlin_compiler_old:
+    gradle_args.append('-Dcom.android.tools.r8.kotlincompilerold=1')
   if options.kotlin_compiler_dev:
     gradle_args.append('-Dcom.android.tools.r8.kotlincompilerdev=1')
     download_kotlin_dev.download_newest()