Update retraceproguard tests to use test parameters
Change-Id: I4de14fad1f4fa114ae3ae923de6b8dba23dfa0c5
diff --git a/src/test/java/com/android/tools/r8/naming/retraceproguard/DesugarLambdaRetraceTest.java b/src/test/java/com/android/tools/r8/naming/retraceproguard/DesugarLambdaRetraceTest.java
index 458cb07..4ba3cbf 100644
--- a/src/test/java/com/android/tools/r8/naming/retraceproguard/DesugarLambdaRetraceTest.java
+++ b/src/test/java/com/android/tools/r8/naming/retraceproguard/DesugarLambdaRetraceTest.java
@@ -10,7 +10,7 @@
import static org.junit.Assert.assertEquals;
import com.android.tools.r8.CompilationMode;
-import com.android.tools.r8.ToolHelper;
+import com.android.tools.r8.TestParameters;
import com.android.tools.r8.naming.retraceproguard.StackTrace.StackTraceLine;
import com.android.tools.r8.utils.BooleanUtils;
import com.google.common.collect.ImmutableList;
@@ -24,14 +24,16 @@
@RunWith(Parameterized.class)
public class DesugarLambdaRetraceTest extends RetraceTestBase {
- @Parameters(name = "Backend: {0}, mode: {1}, compat: {2}")
+ @Parameters(name = "{0}, mode: {1}, compat: {2}")
public static Collection<Object[]> data() {
return buildParameters(
- ToolHelper.getBackends(), CompilationMode.values(), BooleanUtils.values());
+ getTestParameters().withAllRuntimesAndApiLevels().build(),
+ CompilationMode.values(),
+ BooleanUtils.values());
}
- public DesugarLambdaRetraceTest(Backend backend, CompilationMode mode, boolean compat) {
- super(backend, mode, compat);
+ public DesugarLambdaRetraceTest(TestParameters parameters, CompilationMode mode, boolean compat) {
+ super(parameters, mode, compat);
}
@Override
@@ -47,7 +49,7 @@
private int expectedActualStackTraceHeight() {
// In debug mode the expected stack trace height differs since there is no lambda desugaring
// for CF.
- return mode == CompilationMode.RELEASE ? 2 : (backend == Backend.CF ? 4 : 5);
+ return mode == CompilationMode.RELEASE ? 2 : (parameters.isCfRuntime() ? 4 : 5);
}
private boolean isSynthesizedLambdaFrame(StackTraceLine line) {
@@ -68,7 +70,7 @@
private void checkIsSameExceptForFileName(
StackTrace actualStackTrace, StackTrace retracedStackTrace) {
// Even when SourceFile is present retrace replaces the file name in the stack trace.
- if (backend == Backend.CF) {
+ if (parameters.isCfRuntime()) {
// TODO(122440196): Additional code to locate issue.
if (!isSameExceptForFileName(expectedStackTrace).matches(retracedStackTrace)) {
System.out.println("Expected original:");
@@ -107,7 +109,7 @@
private void checkIsSameExceptForFileNameAndLineNumber(
StackTrace actualStackTrace, StackTrace retracedStackTrace) {
// Even when SourceFile is present retrace replaces the file name in the stack trace.
- if (backend == Backend.CF) {
+ if (parameters.isCfRuntime()) {
// TODO(122440196): Additional code to locate issue.
if (!isSameExceptForFileNameAndLineNumber(expectedStackTrace).matches(retracedStackTrace)) {
System.out.println("Expected original:");
diff --git a/src/test/java/com/android/tools/r8/naming/retraceproguard/DesugarStaticInterfaceMethodsRetraceTest.java b/src/test/java/com/android/tools/r8/naming/retraceproguard/DesugarStaticInterfaceMethodsRetraceTest.java
index 599fa3b..69d3fe6 100644
--- a/src/test/java/com/android/tools/r8/naming/retraceproguard/DesugarStaticInterfaceMethodsRetraceTest.java
+++ b/src/test/java/com/android/tools/r8/naming/retraceproguard/DesugarStaticInterfaceMethodsRetraceTest.java
@@ -11,7 +11,7 @@
import com.android.tools.r8.CompilationMode;
import com.android.tools.r8.NeverInline;
import com.android.tools.r8.R8TestBuilder;
-import com.android.tools.r8.ToolHelper;
+import com.android.tools.r8.TestParameters;
import com.android.tools.r8.utils.BooleanUtils;
import com.google.common.collect.ImmutableList;
import java.util.Collection;
@@ -23,15 +23,17 @@
@RunWith(Parameterized.class)
public class DesugarStaticInterfaceMethodsRetraceTest extends RetraceTestBase {
- @Parameters(name = "Backend: {0}, mode: {1}, compat: {2}")
+ @Parameters(name = "{0}, mode: {1}, compat: {2}")
public static Collection<Object[]> data() {
return buildParameters(
- ToolHelper.getBackends(), CompilationMode.values(), BooleanUtils.values());
+ getTestParameters().withAllRuntimesAndApiLevels().build(),
+ CompilationMode.values(),
+ BooleanUtils.values());
}
public DesugarStaticInterfaceMethodsRetraceTest(
- Backend backend, CompilationMode mode, boolean compat) {
- super(backend, mode, compat);
+ TestParameters parameters, CompilationMode mode, boolean compat) {
+ super(parameters, mode, compat);
}
@Override
@@ -54,11 +56,13 @@
public void testSourceFileAndLineNumberTable() throws Exception {
// TODO(b/186015503): This test fails when mapping via PCs.
// also the test should be updated to use TestParameters and api levels.
- assumeTrue("b/186015503", !backend.isDex() || mode != CompilationMode.RELEASE);
+ assumeTrue("b/186015503", !parameters.isDexRuntime() || mode != CompilationMode.RELEASE);
// This also fails when desugaring due to the change in companion method stacks.
assumeTrue(
- ToolHelper.getMinApiLevelForDexVm()
- .isGreaterThanOrEqualTo(apiLevelWithDefaultInterfaceMethodsSupport()));
+ parameters.isCfRuntime()
+ || parameters
+ .getApiLevel()
+ .isGreaterThanOrEqualTo(apiLevelWithDefaultInterfaceMethodsSupport()));
runTest(
ImmutableList.of("-keepattributes SourceFile,LineNumberTable"),
// For the desugaring to companion classes the retrace stacktrace is still the same
diff --git a/src/test/java/com/android/tools/r8/naming/retraceproguard/InliningRetraceTest.java b/src/test/java/com/android/tools/r8/naming/retraceproguard/InliningRetraceTest.java
index ae6a985..82e841f 100644
--- a/src/test/java/com/android/tools/r8/naming/retraceproguard/InliningRetraceTest.java
+++ b/src/test/java/com/android/tools/r8/naming/retraceproguard/InliningRetraceTest.java
@@ -11,12 +11,10 @@
import static org.junit.Assume.assumeTrue;
import com.android.tools.r8.CompilationMode;
-import com.android.tools.r8.ToolHelper;
-import com.android.tools.r8.ToolHelper.DexVm.Version;
+import com.android.tools.r8.TestParameters;
import com.android.tools.r8.utils.BooleanUtils;
import com.google.common.collect.ImmutableList;
import java.util.Collection;
-import java.util.Collections;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -25,16 +23,16 @@
@RunWith(Parameterized.class)
public class InliningRetraceTest extends RetraceTestBase {
- @Parameters(name = "Backend: {0}, mode: {1}")
+ @Parameters(name = "{0}, mode: {1}, compat: {2}")
public static Collection<Object[]> data() {
- return ToolHelper.getDexVm().getVersion() == Version.V5_1_1
- ? Collections.emptyList()
- : buildParameters(
- ToolHelper.getBackends(), CompilationMode.values(), BooleanUtils.values());
+ return buildParameters(
+ getTestParameters().withAllRuntimesAndApiLevels().build(),
+ CompilationMode.values(),
+ BooleanUtils.values());
}
- public InliningRetraceTest(Backend backend, CompilationMode mode, boolean value) {
- super(backend, mode, value);
+ public InliningRetraceTest(TestParameters parameters, CompilationMode mode, boolean value) {
+ super(parameters, mode, value);
}
@Override
@@ -43,7 +41,12 @@
}
private int expectedActualStackTraceHeight() {
- return mode == CompilationMode.RELEASE ? 1 : 4;
+ int height = mode == CompilationMode.RELEASE ? 1 : 4;
+ if (parameters.isDexRuntime() && parameters.getDexRuntimeVersion().isDalvik()) {
+ // Dalvik places a stack trace line in the bottom.
+ height += 1;
+ }
+ return height;
}
@Test
@@ -60,7 +63,7 @@
@Test
public void testLineNumberTableOnly() throws Exception {
assumeTrue(compat);
- assumeTrue(backend == Backend.DEX);
+ assumeTrue(parameters.isDexRuntime());
runTest(
ImmutableList.of("-keepattributes LineNumberTable"),
(StackTrace actualStackTrace, StackTrace retracedStackTrace) -> {
@@ -72,7 +75,7 @@
@Test
public void testNoLineNumberTable() throws Exception {
assumeTrue(compat);
- assumeTrue(backend == Backend.DEX);
+ assumeTrue(parameters.isDexRuntime());
runTest(
ImmutableList.of(),
(StackTrace actualStackTrace, StackTrace retracedStackTrace) -> {
diff --git a/src/test/java/com/android/tools/r8/naming/retraceproguard/RetraceTestBase.java b/src/test/java/com/android/tools/r8/naming/retraceproguard/RetraceTestBase.java
index c84c685..b172763 100644
--- a/src/test/java/com/android/tools/r8/naming/retraceproguard/RetraceTestBase.java
+++ b/src/test/java/com/android/tools/r8/naming/retraceproguard/RetraceTestBase.java
@@ -8,6 +8,8 @@
import com.android.tools.r8.R8TestBuilder;
import com.android.tools.r8.R8TestRunResult;
import com.android.tools.r8.TestBase;
+import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.naming.retraceproguard.StackTrace.StackTraceLine;
import com.google.common.collect.ImmutableList;
import java.util.Collection;
import java.util.List;
@@ -15,12 +17,13 @@
import org.junit.Before;
public abstract class RetraceTestBase extends TestBase {
- protected Backend backend;
+
+ protected TestParameters parameters;
protected CompilationMode mode;
protected boolean compat;
- public RetraceTestBase(Backend backend, CompilationMode mode, boolean compat) {
- this.backend = backend;
+ public RetraceTestBase(TestParameters parameters, CompilationMode mode, boolean compat) {
+ this.parameters = parameters;
this.mode = mode;
this.compat = compat;
}
@@ -39,24 +42,26 @@
public void setup() throws Exception {
// Get the expected stack trace by running on the JVM.
expectedStackTrace =
- testForJvm()
- .addTestClasspath()
- .run(getMainClass())
+ testForRuntime(parameters)
+ .addProgramClasses(getClasses())
+ .run(parameters.getRuntime(), getMainClass())
.assertFailure()
- .map(StackTrace::extractFromJvm);
+ .map(StackTrace::extract)
+ .filter(this::isNotDalvikNativeStartMethod);
}
public void runTest(List<String> keepRules, BiConsumer<StackTrace, StackTrace> checker)
throws Exception {
R8TestRunResult result =
- (compat ? testForR8Compat(backend) : testForR8(backend))
+ (compat ? testForR8Compat(parameters.getBackend()) : testForR8(parameters.getBackend()))
.setMode(mode)
.enableProguardTestOptions()
.addProgramClasses(getClasses())
.addKeepMainRule(getMainClass())
.addKeepRules(keepRules)
+ .setMinApi(parameters.getApiLevel())
.apply(this::configure)
- .run(getMainClass())
+ .run(parameters.getRuntime(), getMainClass())
.assertFailure();
// Extract actual stack trace and retraced stack trace from failed run result.
@@ -70,4 +75,9 @@
checker.accept(actualStackTrace, retracedStackTrace);
}
+
+ protected boolean isNotDalvikNativeStartMethod(StackTraceLine retracedStackTraceLine) {
+ return !(retracedStackTraceLine.className.equals("dalvik.system.NativeStart")
+ && retracedStackTraceLine.methodName.equals("main"));
+ }
}
diff --git a/src/test/java/com/android/tools/r8/naming/retraceproguard/StackTrace.java b/src/test/java/com/android/tools/r8/naming/retraceproguard/StackTrace.java
index be74127..92b78b6 100644
--- a/src/test/java/com/android/tools/r8/naming/retraceproguard/StackTrace.java
+++ b/src/test/java/com/android/tools/r8/naming/retraceproguard/StackTrace.java
@@ -11,6 +11,7 @@
import com.android.tools.r8.SingleTestRunResult;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.ToolHelper.DexVm;
+import com.android.tools.r8.utils.Box;
import com.android.tools.r8.utils.FileUtils;
import com.android.tools.r8.utils.StringUtils;
import com.google.common.base.Equivalence;
@@ -203,6 +204,20 @@
return extractFromJvm(result.getStdErr());
}
+ public static StackTrace extract(SingleTestRunResult<?> result) {
+ Box<StackTrace> stackTraceBox = new Box<>();
+ result.forCfRuntime(
+ ignored -> {
+ stackTraceBox.set(extractFromJvm(result.getStdErr()));
+ });
+ result.forDexRuntimeSatisfying(
+ version -> true,
+ ignored -> {
+ stackTraceBox.set(extractFromArt(result.getStdErr()));
+ });
+ return stackTraceBox.get();
+ }
+
public StackTrace retrace(String map, Path tempFolder) throws IOException {
Path mapFile = tempFolder.resolve("map");
Path stackTraceFile = tempFolder.resolve("stackTrace");
diff --git a/src/test/java/com/android/tools/r8/naming/retraceproguard/VerticalClassMergingRetraceTest.java b/src/test/java/com/android/tools/r8/naming/retraceproguard/VerticalClassMergingRetraceTest.java
index 41c6451..e354915 100644
--- a/src/test/java/com/android/tools/r8/naming/retraceproguard/VerticalClassMergingRetraceTest.java
+++ b/src/test/java/com/android/tools/r8/naming/retraceproguard/VerticalClassMergingRetraceTest.java
@@ -12,7 +12,7 @@
import com.android.tools.r8.CompilationMode;
import com.android.tools.r8.NeverInline;
import com.android.tools.r8.R8TestBuilder;
-import com.android.tools.r8.ToolHelper;
+import com.android.tools.r8.TestParameters;
import com.android.tools.r8.naming.retraceproguard.StackTrace.StackTraceLine;
import com.android.tools.r8.utils.BooleanUtils;
import com.google.common.collect.ImmutableList;
@@ -28,14 +28,17 @@
public class VerticalClassMergingRetraceTest extends RetraceTestBase {
private Set<StackTraceLine> haveSeenLines = new HashSet<>();
- @Parameters(name = "Backend: {0}, mode: {1}, compat: {2}")
+ @Parameters(name = "{0}, mode: {1}, compat: {2}")
public static Collection<Object[]> data() {
return buildParameters(
- ToolHelper.getBackends(), CompilationMode.values(), BooleanUtils.values());
+ getTestParameters().withAllRuntimesAndApiLevels().build(),
+ CompilationMode.values(),
+ BooleanUtils.values());
}
- public VerticalClassMergingRetraceTest(Backend backend, CompilationMode mode, boolean compat) {
- super(backend, mode, compat);
+ public VerticalClassMergingRetraceTest(
+ TestParameters parameters, CompilationMode mode, boolean compat) {
+ super(parameters, mode, compat);
}
@Override
@@ -55,7 +58,12 @@
private int expectedActualStackTraceHeight() {
// In RELEASE mode, a synthetic bridge will be added by vertical class merger.
- return mode == CompilationMode.RELEASE ? 3 : 2;
+ int height = mode == CompilationMode.RELEASE ? 3 : 2;
+ if (parameters.isDexRuntime() && parameters.getDexRuntimeVersion().isDalvik()) {
+ // Dalvik places a stack trace line in the bottom.
+ height += 1;
+ }
+ return height;
}
private boolean filterSynthesizedMethodWhenLineNumberAvailable(
@@ -79,7 +87,9 @@
mode == CompilationMode.DEBUG
? retracedStackTrace
: retracedStackTrace.filter(this::filterSynthesizedMethodWhenLineNumberAvailable);
- assertThat(reprocessedStackTrace, isSameExceptForFileName(expectedStackTrace));
+ assertThat(
+ reprocessedStackTrace.filter(this::isNotDalvikNativeStartMethod),
+ isSameExceptForFileName(expectedStackTrace));
assertEquals(expectedActualStackTraceHeight(), actualStackTrace.size());
});
}
@@ -87,7 +97,7 @@
@Test
public void testLineNumberTableOnly() throws Exception {
assumeTrue(compat);
- assumeTrue(backend == Backend.DEX);
+ assumeTrue(parameters.isDexRuntime());
runTest(
ImmutableList.of("-keepattributes LineNumberTable"),
(StackTrace actualStackTrace, StackTrace retracedStackTrace) -> {
@@ -95,7 +105,9 @@
mode == CompilationMode.DEBUG
? retracedStackTrace
: retracedStackTrace.filter(this::filterSynthesizedMethodWhenLineNumberAvailable);
- assertThat(reprocessedStackTrace, isSameExceptForFileName(expectedStackTrace));
+ assertThat(
+ reprocessedStackTrace.filter(this::isNotDalvikNativeStartMethod),
+ isSameExceptForFileName(expectedStackTrace));
assertEquals(expectedActualStackTraceHeight(), actualStackTrace.size());
});
}
@@ -103,7 +115,7 @@
@Test
public void testNoLineNumberTable() throws Exception {
assumeTrue(compat);
- assumeTrue(backend == Backend.DEX);
+ assumeTrue(parameters.isDexRuntime());
haveSeenLines.clear();
runTest(
ImmutableList.of(),
@@ -113,7 +125,8 @@
? retracedStackTrace
: retracedStackTrace.filter(this::filterSynthesizedMethod);
assertThat(
- reprocessedStackTrace, isSameExceptForFileNameAndLineNumber(expectedStackTrace));
+ reprocessedStackTrace.filter(this::isNotDalvikNativeStartMethod),
+ isSameExceptForFileNameAndLineNumber(expectedStackTrace));
assertEquals(expectedActualStackTraceHeight(), actualStackTrace.size());
});
}