Add the possibility of passing VM arguments to JVM tests
Change-Id: I243198707099ed7d90ff45cbfd38b1c2c0531d42
diff --git a/src/test/java/com/android/tools/r8/JvmTestBuilder.java b/src/test/java/com/android/tools/r8/JvmTestBuilder.java
index bef8a14..0e510a9 100644
--- a/src/test/java/com/android/tools/r8/JvmTestBuilder.java
+++ b/src/test/java/com/android/tools/r8/JvmTestBuilder.java
@@ -22,6 +22,7 @@
// Ordered list of classpath entries.
private List<Path> classpath = new ArrayList<>();
+ private List<String> vmArguments = new ArrayList<>();
private AndroidApp.Builder builder = AndroidApp.builder();
@@ -49,7 +50,8 @@
throws IOException {
assert runtime.isCf();
ProcessResult result =
- ToolHelper.runJava(runtime.asCf(), classpath, ObjectArrays.concat(mainClass, args));
+ ToolHelper.runJava(
+ runtime.asCf(), vmArguments, classpath, ObjectArrays.concat(mainClass, args));
return new JvmTestRunResult(builder.build(), runtime, result);
}
@@ -136,4 +138,13 @@
public JvmTestBuilder addTestClasspath() {
return addClasspath(ToolHelper.getClassPathForTests());
}
+
+ public JvmTestBuilder addVmArguments(Collection<String> arguments) {
+ vmArguments.addAll(arguments);
+ return self();
+ }
+
+ public JvmTestBuilder addVmArguments(String... arguments) {
+ return addVmArguments(Arrays.asList(arguments));
+ }
}
diff --git a/src/test/java/com/android/tools/r8/testing/JvmVmArgumentsTest.java b/src/test/java/com/android/tools/r8/testing/JvmVmArgumentsTest.java
new file mode 100644
index 0000000..8fdc339
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/testing/JvmVmArgumentsTest.java
@@ -0,0 +1,76 @@
+// Copyright (c) 2019, 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.testing;
+
+import com.android.tools.r8.TestBase;
+import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersCollection;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+
+@RunWith(Parameterized.class)
+public class JvmVmArgumentsTest extends TestBase {
+
+ private final TestParameters parameters;
+
+ @Parameterized.Parameters(name = "{0}")
+ public static TestParametersCollection data() {
+ return getTestParameters().withCfRuntimes().build();
+ }
+
+ public JvmVmArgumentsTest(TestParameters parameters) {
+ this.parameters = parameters;
+ }
+
+ @Test
+ public void testArguments() throws Exception {
+ testForJvm()
+ .addTestClasspath()
+ .addVmArguments("-ea")
+ .run(parameters.getRuntime(), TestClass.class)
+ .assertSuccessWithOutputLines("AssertionError!", "DONE");
+ }
+
+ @Test
+ public void testMultipleArguments() throws Exception {
+ testForJvm()
+ .addTestClasspath()
+ .addVmArguments("-ea", "-da")
+ .run(parameters.getRuntime(), TestClass.class)
+ .assertSuccessWithOutputLines("DONE");
+
+ testForJvm()
+ .addTestClasspath()
+ .addVmArguments("-ea")
+ .addVmArguments("-da")
+ .run(parameters.getRuntime(), TestClass.class)
+ .assertSuccessWithOutputLines("DONE");
+ }
+
+ @Test
+ public void testNoArguments() throws Exception {
+ testForJvm()
+ .addTestClasspath()
+ .addVmArguments()
+ .run(parameters.getRuntime(), TestClass.class)
+ .assertSuccessWithOutputLines("DONE");
+ }
+
+ static class TestClass {
+ public static void m() {
+ assert false;
+ }
+
+ public static void main(String[] args) {
+ try {
+ m();
+ } catch (AssertionError e) {
+ System.out.println("AssertionError!");
+ }
+ System.out.println("DONE");
+ }
+ }
+}