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