Extend testForProguard with Proguard version

Change-Id: I3baeeaca4a3d82358df7c294e2a58c714ab8ca15
diff --git a/src/test/java/com/android/tools/r8/ProguardTestBuilder.java b/src/test/java/com/android/tools/r8/ProguardTestBuilder.java
index 27d4655..622d595 100644
--- a/src/test/java/com/android/tools/r8/ProguardTestBuilder.java
+++ b/src/test/java/com/android/tools/r8/ProguardTestBuilder.java
@@ -27,6 +27,9 @@
     extends TestShrinkerBuilder<
         R8Command, Builder, ProguardTestCompileResult, ProguardTestRunResult, ProguardTestBuilder> {
 
+  // Version of Proguard to use.
+  private final ProguardVersion version;
+
   // Ordered list of injar entries.
   private List<Path> injars = new ArrayList<>();
 
@@ -39,12 +42,14 @@
   // Additional Proguard configuration files.
   private List<Path> proguardConfigFiles = new ArrayList<>();
 
-  private ProguardTestBuilder(TestState state, Builder builder, Backend backend) {
+  private ProguardTestBuilder(
+      TestState state, ProguardVersion version, Builder builder, Backend backend) {
     super(state, builder, backend);
+    this.version = version;
   }
 
-  public static ProguardTestBuilder create(TestState state) {
-    return new ProguardTestBuilder(state, R8Command.builder(), Backend.CF);
+  public static ProguardTestBuilder create(TestState state, ProguardVersion version) {
+    return new ProguardTestBuilder(state, version, R8Command.builder(), Backend.CF);
   }
 
   @Override
@@ -63,7 +68,7 @@
       Path mapFile = proguardOutputFolder.resolve("mapping.txt");
       FileUtils.writeTextFile(configFile, config);
       List<String> command = new ArrayList<>();
-      command.add(ToolHelper.getProguard6Script());
+      command.add(version.getProguardScript().toString());
       // Without -forceprocessing Proguard just checks the creation time on the in/out jars.
       command.add("-forceprocessing");
       for (Path injar : injars) {
diff --git a/src/test/java/com/android/tools/r8/ProguardVersion.java b/src/test/java/com/android/tools/r8/ProguardVersion.java
new file mode 100644
index 0000000..8c9050a
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/ProguardVersion.java
@@ -0,0 +1,40 @@
+// Copyright (c) 2020, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+package com.android.tools.r8;
+
+import static com.android.tools.r8.ToolHelper.isWindows;
+
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
+public enum ProguardVersion {
+  V5_2_1("5.2.1"),
+  V6_0_1("6.0.1"),
+  V7_0_0("7.0.0");
+
+  private final String version;
+
+  ProguardVersion(String version) {
+    this.version = version;
+  }
+
+  public Path getProguardScript() {
+    Path scriptDirectory = Paths.get(ToolHelper.THIRD_PARTY_DIR).resolve("proguard");
+    if (this == V7_0_0) {
+      scriptDirectory = scriptDirectory.resolve("proguard-" + version);
+    } else {
+      scriptDirectory = scriptDirectory.resolve("proguard" + version);
+    }
+    if (isWindows()) {
+      return scriptDirectory.resolve("bin/proguard.bat");
+    }
+    return scriptDirectory.resolve("bin/proguard.sh");
+  }
+
+  @Override
+  public String toString() {
+    return "Proguard " + version.toString();
+  }
+}
diff --git a/src/test/java/com/android/tools/r8/TestBase.java b/src/test/java/com/android/tools/r8/TestBase.java
index a92fefd..27c1570 100644
--- a/src/test/java/com/android/tools/r8/TestBase.java
+++ b/src/test/java/com/android/tools/r8/TestBase.java
@@ -172,8 +172,8 @@
     return JvmTestBuilder.create(new TestState(temp));
   }
 
-  public static ProguardTestBuilder testForProguard(TemporaryFolder temp) {
-    return ProguardTestBuilder.create(new TestState(temp));
+  public static ProguardTestBuilder testForProguard(ProguardVersion version, TemporaryFolder temp) {
+    return ProguardTestBuilder.create(new TestState(temp), version);
   }
 
   public static GenerateMainDexListTestBuilder testForMainDexListGenerator(TemporaryFolder temp) {
@@ -308,8 +308,14 @@
     return DesugarTestBuilder.create(state, builders.build());
   }
 
+  /** @deprecated use {@link #testForProguard(ProguardVersion)} instead. */
+  @Deprecated
   public ProguardTestBuilder testForProguard() {
-    return testForProguard(temp);
+    return testForProguard(ProguardVersion.V6_0_1);
+  }
+
+  public ProguardTestBuilder testForProguard(ProguardVersion version) {
+    return testForProguard(version, temp);
   }
 
   public GenerateMainDexListTestBuilder testForMainDexListGenerator() {
diff --git a/src/test/java/com/android/tools/r8/ToolHelper.java b/src/test/java/com/android/tools/r8/ToolHelper.java
index 7e1a627..9676011 100644
--- a/src/test/java/com/android/tools/r8/ToolHelper.java
+++ b/src/test/java/com/android/tools/r8/ToolHelper.java
@@ -702,7 +702,7 @@
     }
   }
 
-  public static String getProguardScript() {
+  public static String getProguard5Script() {
     if (isWindows()) {
       return PROGUARD + ".bat";
     }
@@ -1922,17 +1922,17 @@
 
   public static ProcessResult runProguardRaw(
       Path inJar, Path outJar, Path lib, Path config, Path map) throws IOException {
-    return runProguardRaw(getProguardScript(), inJar, outJar, lib, ImmutableList.of(config), map);
+    return runProguardRaw(getProguard5Script(), inJar, outJar, lib, ImmutableList.of(config), map);
   }
 
   public static ProcessResult runProguardRaw(Path inJar, Path outJar, List<Path> config, Path map)
       throws IOException {
-    return runProguardRaw(getProguardScript(), inJar, outJar, config, map);
+    return runProguardRaw(getProguard5Script(), inJar, outJar, config, map);
   }
 
   public static ProcessResult runProguardRaw(Path inJar, Path outJar, Path config, Path map)
       throws IOException {
-    return runProguardRaw(getProguardScript(), inJar, outJar, ImmutableList.of(config), map);
+    return runProguardRaw(getProguard5Script(), inJar, outJar, ImmutableList.of(config), map);
   }
 
   public static String runProguard(Path inJar, Path outJar, Path config, Path map)
@@ -1942,7 +1942,7 @@
 
   public static String runProguard(Path inJar, Path outJar, List<Path> config, Path map)
       throws IOException {
-    return runProguard(getProguardScript(), inJar, outJar, config, map);
+    return runProguard(getProguard5Script(), inJar, outJar, config, map);
   }
 
   public static ProcessResult runProguard6Raw(Path inJar, Path outJar, Path config, Path map)