blob: 996e6f0f2f9300b8c79d741b13d47cf7f8d9ef33 [file] [log] [blame]
// 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.getRetracedSourceFile().getOrInferSourceFile(getSourceFile())
+ ")";
}
}
}
}