[Retrace] Add test for ambiguous inline reporting
Bug: b/281468612
Change-Id: I6338302a97e1e774ead0814848d9adafb94c8caa
diff --git a/src/test/java/com/android/tools/r8/retrace/RetraceTests.java b/src/test/java/com/android/tools/r8/retrace/RetraceTests.java
index d06cbe6..9f82884 100644
--- a/src/test/java/com/android/tools/r8/retrace/RetraceTests.java
+++ b/src/test/java/com/android/tools/r8/retrace/RetraceTests.java
@@ -23,6 +23,7 @@
import com.android.tools.r8.retrace.stacktraces.ActualBotStackTraceBase;
import com.android.tools.r8.retrace.stacktraces.ActualIdentityStackTrace;
import com.android.tools.r8.retrace.stacktraces.ActualRetraceBotStackTrace;
+import com.android.tools.r8.retrace.stacktraces.AmbiguousInlineFramesStackTrace;
import com.android.tools.r8.retrace.stacktraces.AmbiguousMethodVerboseStackTrace;
import com.android.tools.r8.retrace.stacktraces.AmbiguousMissingLineStackTrace;
import com.android.tools.r8.retrace.stacktraces.AmbiguousStackTrace;
@@ -215,6 +216,11 @@
}
@Test
+ public void testAmbiguousInlineFramesStackTrace() throws Exception {
+ runRetraceTest(new AmbiguousInlineFramesStackTrace());
+ }
+
+ @Test
public void testAmbiguousMissingLineStackTrace() throws Exception {
runRetraceTest(new AmbiguousMissingLineStackTrace());
}
diff --git a/src/test/java/com/android/tools/r8/retrace/stacktraces/AmbiguousInlineFramesStackTrace.java b/src/test/java/com/android/tools/r8/retrace/stacktraces/AmbiguousInlineFramesStackTrace.java
new file mode 100644
index 0000000..52b0063
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/retrace/stacktraces/AmbiguousInlineFramesStackTrace.java
@@ -0,0 +1,64 @@
+// Copyright (c) 2023, 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.retrace.stacktraces;
+
+import com.android.tools.r8.utils.StringUtils;
+import java.util.Arrays;
+import java.util.List;
+
+public class AmbiguousInlineFramesStackTrace implements StackTraceForTest {
+
+ @Override
+ public List<String> obfuscatedStackTrace() {
+ return Arrays.asList(
+ "com.android.tools.r8.CompilationException:", " at a.a.a(Unknown Source:1)");
+ }
+
+ @Override
+ public List<String> retracedStackTrace() {
+ // TODO(b/281468612): Change ambiguous reporting to only report <OR> on the inner most frame.
+ return Arrays.asList(
+ "com.android.tools.r8.CompilationException:",
+ " at com.android.tools.r8.R8.foo(R8.java:42)",
+ " at com.android.tools.r8.R8.bar(R8.java:32)",
+ " at com.android.tools.r8.R8.baz(R8.java:10)",
+ " <OR> at com.android.tools.r8.R8.foo(R8.java:43)",
+ " at com.android.tools.r8.R8.bar(R8.java:32)",
+ " at com.android.tools.r8.R8.baz(R8.java:10)",
+ " <OR> at com.android.tools.r8.R8.foo(R8.java:44)",
+ " at com.android.tools.r8.R8.bar(R8.java:32)",
+ " at com.android.tools.r8.R8.baz(R8.java:10)");
+ }
+
+ @Override
+ public List<String> retraceVerboseStackTrace() {
+ // TODO(b/281468612): Change ambiguous reporting to only report <OR> on the inner most frame.
+ return Arrays.asList(
+ "com.android.tools.r8.CompilationException:",
+ " at com.android.tools.r8.R8.void foo(int)(R8.java:42)",
+ " at com.android.tools.r8.R8.void bar(int,int)(R8.java:32)",
+ " at com.android.tools.r8.R8.void baz(int,int)(R8.java:10)",
+ " <OR> at com.android.tools.r8.R8.void foo(int)(R8.java:43)",
+ " at com.android.tools.r8.R8.void bar(int,int)(R8.java:32)",
+ " at com.android.tools.r8.R8.void baz(int,int)(R8.java:10)",
+ " <OR> at com.android.tools.r8.R8.void foo(int)(R8.java:44)",
+ " at com.android.tools.r8.R8.void bar(int,int)(R8.java:32)",
+ " at com.android.tools.r8.R8.void baz(int,int)(R8.java:10)");
+ }
+
+ @Override
+ public String mapping() {
+ return StringUtils.lines(
+ "com.android.tools.r8.R8 -> a.a:",
+ " 1:1:void foo(int):42:44 -> a",
+ " 1:1:void bar(int, int):32 -> a",
+ " 1:1:void baz(int, int):10 -> a");
+ }
+
+ @Override
+ public int expectedWarnings() {
+ return 0;
+ }
+}