[Retrace] Add test for invalid residual signature

Bug: b/267413327
Change-Id: Ia2c95c7d0bf998730bda337ff1a1f74cee1274d6
diff --git a/src/test/java/com/android/tools/r8/retrace/RetraceInvalidResidualSignatureTest.java b/src/test/java/com/android/tools/r8/retrace/RetraceInvalidResidualSignatureTest.java
new file mode 100644
index 0000000..5be9fc2
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/retrace/RetraceInvalidResidualSignatureTest.java
@@ -0,0 +1,65 @@
+// 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;
+
+import static org.junit.Assert.assertThrows;
+
+import com.android.tools.r8.DiagnosticsHandler;
+import com.android.tools.r8.TestBase;
+import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersCollection;
+import com.android.tools.r8.references.ClassReference;
+import com.android.tools.r8.references.Reference;
+import java.util.Collections;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+/** This is a regression test for b/267413327 */
+@RunWith(Parameterized.class)
+public class RetraceInvalidResidualSignatureTest extends TestBase {
+
+  @Parameters(name = "{0}")
+  public static TestParametersCollection data() {
+    return getTestParameters().withNoneRuntime().build();
+  }
+
+  public RetraceInvalidResidualSignatureTest(TestParameters parameters) {
+    parameters.assertNoneRuntime();
+  }
+
+  private final ClassReference someClassOriginal = Reference.classFromTypeName("some.Class");
+  private final ClassReference someClassRenamed = Reference.classFromTypeName("b");
+
+  private final String mapping =
+      "# { id: 'com.android.tools.r8.mapping', version: '2.2' }\n"
+          + someClassOriginal.getTypeName()
+          + " -> "
+          + someClassRenamed.getTypeName()
+          + ":\n"
+          + "  int f -> a\n"
+          + "  # { id:'com.android.tools.r8.residualsignature',signature:'()Ljava/lang/Object;' }\n"
+          + "  int method1() -> a\n"
+          + "  # { id:'com.android.tools.r8.residualsignature',signature:'I' }\n"
+          + "  int method2() -> b\n"
+          + "  # { id:'com.android.tools.r8.residualsignature',signature:'VOLAPYK' }\n";
+
+  @Test
+  public void testInvalidResidualMapping() {
+    // TODO(b/267413327): Fail more gracefully than just throwing.
+    assertThrows(
+        AssertionError.class,
+        () ->
+            Retracer.createDefault(
+                    ProguardMapProducer.fromString(mapping), new DiagnosticsHandler() {})
+                .retraceMethod(
+                    Reference.method(
+                        someClassRenamed,
+                        "method1",
+                        Collections.emptyList(),
+                        Reference.primitiveFromDescriptor("I"))));
+  }
+}