[Retrace] Add test for not infered source file using proxy

Change-Id: Ia8608a42eb8eb301ca49fd2c7424235699e9f3db
diff --git a/src/test/java/com/android/tools/r8/retrace/api/RetraceApiProxyFrameWithSourceFileTest.java b/src/test/java/com/android/tools/r8/retrace/api/RetraceApiProxyFrameWithSourceFileTest.java
new file mode 100644
index 0000000..7744c14
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/retrace/api/RetraceApiProxyFrameWithSourceFileTest.java
@@ -0,0 +1,141 @@
+// 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.api;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+
+import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.references.ClassReference;
+import com.android.tools.r8.references.Reference;
+import com.android.tools.r8.retrace.ProguardMapProducer;
+import com.android.tools.r8.retrace.ProguardMappingSupplier;
+import com.android.tools.r8.retrace.Retrace;
+import com.android.tools.r8.retrace.RetraceStackFrameResult;
+import com.android.tools.r8.retrace.RetraceStackTraceContext;
+import com.android.tools.r8.retrace.RetraceStackTraceElementProxy;
+import com.android.tools.r8.retrace.StackTraceElementProxy;
+import java.util.Collections;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+
+@RunWith(Parameterized.class)
+public class RetraceApiProxyFrameWithSourceFileTest extends RetraceApiTestBase {
+
+  public RetraceApiProxyFrameWithSourceFileTest(TestParameters parameters) {
+    super(parameters);
+  }
+
+  @Override
+  protected Class<? extends RetraceApiBinaryTest> binaryTestClass() {
+    return ApiTest.class;
+  }
+
+  public static class ApiTest implements RetraceApiBinaryTest {
+
+    @Test
+    public void test() {
+      RetraceStackFrameResult<String> stringRetraceStackFrameResult =
+          Retrace.<String, TestProxy>builder()
+              .setMappingSupplier(
+                  ProguardMappingSupplier.builder()
+                      .setProguardMapProducer(ProguardMapProducer.fromString(""))
+                      .build())
+              .build()
+              .retraceStackTraceParsed(
+                  Collections.singletonList(new TestProxy()), RetraceStackTraceContext.empty())
+              .getResult()
+              .get(0)
+              .get(0);
+      assertEquals("com.android.tools.R8.a(Unknown Source)", stringRetraceStackFrameResult.get(0));
+    }
+
+    public static class TestProxy extends StackTraceElementProxy<String, TestProxy> {
+
+      @Override
+      public boolean hasClassName() {
+        return true;
+      }
+
+      @Override
+      public boolean hasMethodName() {
+        return true;
+      }
+
+      @Override
+      public boolean hasSourceFile() {
+        return true;
+      }
+
+      @Override
+      public boolean hasLineNumber() {
+        return true;
+      }
+
+      @Override
+      public boolean hasFieldName() {
+        return false;
+      }
+
+      @Override
+      public boolean hasFieldOrReturnType() {
+        return false;
+      }
+
+      @Override
+      public boolean hasMethodArguments() {
+        return false;
+      }
+
+      @Override
+      public ClassReference getClassReference() {
+        return Reference.classFromTypeName("com.android.tools.R8");
+      }
+
+      @Override
+      public String getMethodName() {
+        return "a";
+      }
+
+      @Override
+      public String getSourceFile() {
+        return "Unknown Source";
+      }
+
+      @Override
+      public int getLineNumber() {
+        return 1;
+      }
+
+      @Override
+      public String getFieldName() {
+        return null;
+      }
+
+      @Override
+      public String getFieldOrReturnType() {
+        return null;
+      }
+
+      @Override
+      public String getMethodArguments() {
+        return null;
+      }
+
+      @Override
+      public String toRetracedItem(
+          RetraceStackTraceElementProxy<String, TestProxy> retracedProxy, boolean verbose) {
+        assertFalse(retracedProxy.hasRetracedMethod());
+        return retracedProxy.getRetracedClass().getTypeName()
+            + "."
+            + getMethodName()
+            + "("
+            + retracedProxy.getSourceFile()
+            + ")";
+      }
+    }
+  }
+}
diff --git a/src/test/java/com/android/tools/r8/retrace/api/RetraceApiTestCollection.java b/src/test/java/com/android/tools/r8/retrace/api/RetraceApiTestCollection.java
index a16e5d3..b9bf576 100644
--- a/src/test/java/com/android/tools/r8/retrace/api/RetraceApiTestCollection.java
+++ b/src/test/java/com/android/tools/r8/retrace/api/RetraceApiTestCollection.java
@@ -47,7 +47,8 @@
   public static List<Class<? extends RetraceApiBinaryTest>> CLASSES_PENDING_BINARY_COMPATIBILITY =
       ImmutableList.of(
           RetraceApiResidualSignatureTest.ApiTest.class,
-          RetracePartitionEmptyMappingTest.ApiTest.class);
+          RetracePartitionEmptyMappingTest.ApiTest.class,
+          RetraceApiProxyFrameWithSourceFileTest.ApiTest.class);
 
   private final TemporaryFolder temp;