[Retrace] Add test for no message after NPE

Bug: b/300416467
Change-Id: Ib45eb16dab5549aa07510639b9824d1e05baea91
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 c1e939d..984d8e2 100644
--- a/src/test/java/com/android/tools/r8/retrace/RetraceTests.java
+++ b/src/test/java/com/android/tools/r8/retrace/RetraceTests.java
@@ -47,6 +47,7 @@
 import com.android.tools.r8.retrace.stacktraces.InlineNoLineNumberStackTrace;
 import com.android.tools.r8.retrace.stacktraces.InlineNoLineWithBaseEntryNumberAssumeNoInlineStackTrace;
 import com.android.tools.r8.retrace.stacktraces.InlinePreambleNoOriginalStackTrace;
+import com.android.tools.r8.retrace.stacktraces.InlineRemoveFrameJava17StackTrace;
 import com.android.tools.r8.retrace.stacktraces.InlineSourceFileContextStackTrace;
 import com.android.tools.r8.retrace.stacktraces.InlineSourceFileStackTrace;
 import com.android.tools.r8.retrace.stacktraces.InlineWithLineNumbersStackTrace;
@@ -317,6 +318,11 @@
   }
 
   @Test
+  public void testInlineRemoveFrameJava17StackTrace() throws Exception {
+    runRetraceTest(new InlineRemoveFrameJava17StackTrace());
+  }
+
+  @Test
   public void testColonInSourceFileNameStackTrace() throws Exception {
     runRetraceTest(new ColonInFileNameStackTrace());
   }
diff --git a/src/test/java/com/android/tools/r8/retrace/stacktraces/InlineRemoveFrameJava17StackTrace.java b/src/test/java/com/android/tools/r8/retrace/stacktraces/InlineRemoveFrameJava17StackTrace.java
new file mode 100644
index 0000000..7d30160
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/retrace/stacktraces/InlineRemoveFrameJava17StackTrace.java
@@ -0,0 +1,63 @@
+// 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;
+
+/**
+ * Manually throwing an NPE has a different syntax than it happening where there is no message
+ * afterwards.
+ */
+public class InlineRemoveFrameJava17StackTrace implements StackTraceForTest {
+
+  @Override
+  public List<String> obfuscatedStackTrace() {
+    return Arrays.asList(
+        "java.lang.NullPointerException", "\tat A.a(SourceFile:1)", "\tat A.main(SourceFile:1)");
+  }
+
+  @Override
+  public String mapping() {
+    return StringUtils.joinLines(
+        "# {'id':'com.android.tools.r8.mapping','version':'2.2'}",
+        "foo.Class -> A:",
+        "    1:5:void inlinable():90:90 -> a",
+        "    1:5:void caller():97 -> a",
+        "      # {'id':'com.android.tools.r8.rewriteFrame',"
+            + "'conditions':['throws(Ljava/lang/NullPointerException;)'],"
+            + "'actions':['removeInnerFrames(1)']}",
+        "    1:5:void outerCaller():107 -> a",
+        "    1:1:void main():111:111 -> main");
+  }
+
+  @Override
+  public List<String> retracedStackTrace() {
+    return Arrays.asList(
+        "java.lang.NullPointerException",
+        // TODO(b/300416467): The topmost inner frame should be removed.
+        "\tat foo.Class.inlinable(Class.java:90)",
+        "\tat foo.Class.caller(Class.java:97)",
+        "\tat foo.Class.outerCaller(Class.java:107)",
+        "\tat foo.Class.main(Class.java:111)");
+  }
+
+  @Override
+  public List<String> retraceVerboseStackTrace() {
+    return Arrays.asList(
+        "java.lang.NullPointerException",
+        // TODO(b/300416467): The topmost inner frame should be removed.
+        "\tat foo.Class.void inlinable()(Class.java:90)",
+        "\tat foo.Class.void caller()(Class.java:97)",
+        "\tat foo.Class.void outerCaller()(Class.java:107)",
+        "\tat foo.Class.void main()(Class.java:111)");
+  }
+
+  @Override
+  public int expectedWarnings() {
+    return 0;
+  }
+}