blob: 095eb99fa002e7c3aaaef2df967f5ccbfe382156 [file] [log] [blame]
// Copyright (c) 2022, 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.fail;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.naming.MapVersion;
import com.android.tools.r8.retrace.PartitionMappingSupplier;
import com.android.tools.r8.retrace.Retrace;
import com.android.tools.r8.retrace.RetraceCommand;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@RunWith(Parameterized.class)
public class RetracePartitionJoinNoMetadataTest extends RetraceApiTestBase {
public RetracePartitionJoinNoMetadataTest(TestParameters parameters) {
super(parameters);
}
@Override
protected Class<? extends RetraceApiBinaryTest> binaryTestClass() {
return ApiTest.class;
}
public static class ApiTest implements RetraceApiBinaryTest {
private final String aMapping =
"com.foo.bar.baz -> a:\n"
+ " # {'id':'sourceFile','fileName':'BarBaz.kt'}\n"
+ " int field -> c\n"
+ " 1:1:void method():42:42 -> d";
private final String bMapping =
"foo -> foo:\n"
+ " # {'id':'sourceFile','fileName':'Foo-inlinee.kt'}\n"
+ "com.android.google.R8 -> b:\n"
+ " # {'id':'sourceFile','fileName':'R8Car.kt'}\n"
+ " 2:2:int foo.inlinee():43:43 -> f\n"
+ " 2:2:int otherMethod():44 -> f\n"
+ "# otherCommentHere";
private final String exceptionMapping = "com.android.google.exception -> exception:\n";
private final List<String> stackTrace =
Arrays.asList("exception: Hello World!", " at a.d(Unknown:1)", " at b.f(Unknown:2)");
private final List<String> expectedRetracedStackTrace =
Arrays.asList(
"com.android.google.exception: Hello World!",
" at com.foo.bar.baz.method(BarBaz.kt:42)",
" at foo.inlinee(Foo-inlinee.kt:43)",
" at com.android.google.R8.otherMethod(R8Car.kt:44)");
@Test
public void test() throws IOException {
List<String> preFetch = new ArrayList<>();
PartitionMappingSupplier mappingSupplier =
PartitionMappingSupplier.noMetadataBuilder(MapVersion.MAP_VERSION_1_0)
.setMappingPartitionFromKeySupplier(
key -> {
switch (key) {
case "a":
return aMapping.getBytes();
case "b":
return bMapping.getBytes();
case "exception":
return exceptionMapping.getBytes();
default:
fail();
return null;
}
})
.setRegisterMappingPartitionCallback(preFetch::add)
.build();
Retrace.run(
RetraceCommand.builder()
.setStackTrace(stackTrace)
.setMappingSupplier(mappingSupplier)
.setRetracedStackTraceConsumer(
retraced -> assertEquals(expectedRetracedStackTrace, retraced))
.build());
assertEquals(3, preFetch.size());
Set<String> expected = new HashSet<>(Arrays.asList("a", "b", "exception"));
assertEquals(expected, new HashSet<>(preFetch));
}
}
}