Add mock class and additional pending classes to API tests.

Change-Id: If0898c0b4039814b0e2a9cc7d78b42de02cd34b9
diff --git a/src/test/java/com/android/tools/r8/compilerapi/BinaryCompatibilityTestCollection.java b/src/test/java/com/android/tools/r8/compilerapi/BinaryCompatibilityTestCollection.java
index 51a307b..db9f09e 100644
--- a/src/test/java/com/android/tools/r8/compilerapi/BinaryCompatibilityTestCollection.java
+++ b/src/test/java/com/android/tools/r8/compilerapi/BinaryCompatibilityTestCollection.java
@@ -64,6 +64,9 @@
   /** Additional classes that should always be included together to run tests. */
   public abstract List<Class<?>> getAdditionalClassesForTests();
 
+  /** Additional classes that should always be included together to run the pending tests. */
+  public abstract List<Class<?>> getPendingAdditionalClassesForTests();
+
   /** Additional JVM args supplied to any external execution. */
   public abstract List<String> getVmArgs();
 
@@ -92,7 +95,8 @@
 
   public void runJunitOnTestClass(Class<? extends T> test) throws Exception {
     List<Class<? extends T>> testClasses = Collections.singletonList(test);
-    runJunitOnTestClasses(generateJarForTestClasses(testClasses), testClasses);
+    runJunitOnTestClasses(
+        generateJarForTestClasses(testClasses, getPendingAdditionalClassesForTests()), testClasses);
   }
 
   private void runJunitOnTestClasses(Path testJar, Collection<Class<? extends T>> tests)
@@ -140,10 +144,12 @@
   }
 
   public Path generateJarForCheckedInTestClasses() throws Exception {
-    return generateJarForTestClasses(getCheckedInTestClasses());
+    return generateJarForTestClasses(getCheckedInTestClasses(), Collections.emptyList());
   }
 
-  private Path generateJarForTestClasses(Collection<Class<? extends T>> classes) throws Exception {
+  private Path generateJarForTestClasses(
+      Collection<Class<? extends T>> classes, List<Class<?>> additionalPendingClassesForTest)
+      throws Exception {
     Path jar = getTemp().newFolder().toPath().resolve("test.jar");
     ZipBuilder zipBuilder = ZipBuilder.builder(jar);
     for (Class<? extends T> test : classes) {
@@ -162,6 +168,11 @@
         getAdditionalClassesForTests().stream()
             .map(ToolHelper::getClassFileForTestClass)
             .collect(Collectors.toList()));
+    zipBuilder.addFilesRelative(
+        ToolHelper.getClassPathForTests(),
+        additionalPendingClassesForTest.stream()
+            .map(ToolHelper::getClassFileForTestClass)
+            .collect(Collectors.toList()));
     return zipBuilder.build();
   }
 
diff --git a/src/test/java/com/android/tools/r8/compilerapi/CompilerApiTest.java b/src/test/java/com/android/tools/r8/compilerapi/CompilerApiTest.java
index 654eafd..100567d 100644
--- a/src/test/java/com/android/tools/r8/compilerapi/CompilerApiTest.java
+++ b/src/test/java/com/android/tools/r8/compilerapi/CompilerApiTest.java
@@ -5,8 +5,15 @@
 
 import static org.junit.Assert.assertEquals;
 
+import com.android.tools.r8.compilerapi.mockdata.MockClass;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
 import java.util.Collections;
 import java.util.List;
+import org.junit.Rule;
+import org.junit.rules.TemporaryFolder;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
 import org.junit.runners.Parameterized.Parameters;
@@ -20,6 +27,8 @@
 @RunWith(Parameterized.class)
 public abstract class CompilerApiTest {
 
+  public static final Object PARAMETERS = "none";
+
   public static final String API_TEST_MODE_KEY = "API_TEST_MODE";
   public static final String API_TEST_MODE_EXTERNAL = "external";
 
@@ -34,11 +43,13 @@
     if (runtimes != null && !runtimes.contains("none")) {
       return Collections.emptyList();
     }
-    return Collections.singletonList("none");
+    return Collections.singletonList(PARAMETERS);
   }
 
+  @Rule public final TemporaryFolder temp = new TemporaryFolder();
+
   public CompilerApiTest(Object none) {
-    assertEquals("none", none);
+    assertEquals(PARAMETERS, none);
   }
 
   /** Predicate to determine if the test is being run externally. */
@@ -50,4 +61,30 @@
   public boolean isRunningR8Lib() {
     return API_TEST_LIB_YES.equals(System.getProperty(API_TEST_LIB_KEY));
   }
+
+  public Path getNewTempFolder() throws IOException {
+    return temp.newFolder().toPath();
+  }
+
+  public Class<?> getMockClass() {
+    return MockClass.class;
+  }
+
+  public Path getJava8RuntimeJar() {
+    return Paths.get("third_party", "openjdk", "openjdk-rt-1.8", "rt.jar");
+  }
+
+  public List<String> getKeepMainRules(Class<?> clazz) {
+    return Collections.singletonList(
+        "-keep class " + clazz.getName() + " { public static void main(java.lang.String[]); }");
+  }
+
+  public Path getPathForClass(Class<?> clazz) {
+    String file = clazz.getName().replace('.', '/') + ".class";
+    return Paths.get("build", "classes", "java", "test", file);
+  }
+
+  public byte[] getBytesForClass(Class<?> clazz) throws IOException {
+    return Files.readAllBytes(getPathForClass(clazz));
+  }
 }
diff --git a/src/test/java/com/android/tools/r8/compilerapi/CompilerApiTestCollection.java b/src/test/java/com/android/tools/r8/compilerapi/CompilerApiTestCollection.java
index 8c1e8a5..e6acb2b 100644
--- a/src/test/java/com/android/tools/r8/compilerapi/CompilerApiTestCollection.java
+++ b/src/test/java/com/android/tools/r8/compilerapi/CompilerApiTestCollection.java
@@ -8,6 +8,7 @@
 import static com.android.tools.r8.ToolHelper.isTestingR8Lib;
 
 import com.android.tools.r8.ToolHelper;
+import com.android.tools.r8.compilerapi.mockdata.MockClass;
 import com.android.tools.r8.compilerapi.testsetup.ApiTestingSetUpTest;
 import com.google.common.collect.ImmutableList;
 import java.nio.file.Path;
@@ -53,7 +54,12 @@
 
   @Override
   public List<Class<?>> getAdditionalClassesForTests() {
-    return ImmutableList.of(CompilerApiTest.class);
+    return ImmutableList.of(CompilerApiTest.class, MockClass.class);
+  }
+
+  @Override
+  public List<Class<?>> getPendingAdditionalClassesForTests() {
+    return ImmutableList.of();
   }
 
   @Override
diff --git a/src/test/java/com/android/tools/r8/compilerapi/mockdata/MockClass.java b/src/test/java/com/android/tools/r8/compilerapi/mockdata/MockClass.java
new file mode 100644
index 0000000..340e532
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/compilerapi/mockdata/MockClass.java
@@ -0,0 +1,12 @@
+// Copyright (c) 2021, 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.compilerapi.mockdata;
+
+// Class to use as data for the compilation.
+public class MockClass {
+
+  public static void main(String[] args) {
+    System.out.println("Hello world!");
+  }
+}
diff --git a/src/test/java/com/android/tools/r8/retrace/api/RetraceApiTestCollection.java b/src/test/java/com/android/tools/r8/retrace/api/RetraceApiTestCollection.java
index 77b8aea..4deb785 100644
--- a/src/test/java/com/android/tools/r8/retrace/api/RetraceApiTestCollection.java
+++ b/src/test/java/com/android/tools/r8/retrace/api/RetraceApiTestCollection.java
@@ -80,6 +80,11 @@
   }
 
   @Override
+  public List<Class<?>> getPendingAdditionalClassesForTests() {
+    return ImmutableList.of();
+  }
+
+  @Override
   public List<String> getVmArgs() {
     return ImmutableList.of();
   }
diff --git a/third_party/binary_compatibility_tests/compiler_api_tests.tar.gz.sha1 b/third_party/binary_compatibility_tests/compiler_api_tests.tar.gz.sha1
index 759844b..ffee6ee 100644
--- a/third_party/binary_compatibility_tests/compiler_api_tests.tar.gz.sha1
+++ b/third_party/binary_compatibility_tests/compiler_api_tests.tar.gz.sha1
@@ -1 +1 @@
-8ddcb2b3cd52273413a538b22438e996e5c0dfcb
\ No newline at end of file
+36741d08e769bd2c5c201698161b3407507c7535
\ No newline at end of file