[Retrace] Add internal tests
Bug: 159425023
Bug: 159420576
Change-Id: I344f412b9ec4817c29a967e52d035a748ff42ebf
diff --git a/.gitignore b/.gitignore
index 0629bac..e184eb8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -141,6 +141,8 @@
third_party/remapper.tar.gz
third_party/retrace_benchmark
third_party/retrace_benchmark.tar.gz
+third_party/retrace_internal
+third_party/retrace_internal.tar.gz
third_party/rhino-1.7.10
third_party/rhino-1.7.10.tar.gz
third_party/rhino-android-1.1.1
diff --git a/build.gradle b/build.gradle
index d4a1c75..909d605 100644
--- a/build.gradle
+++ b/build.gradle
@@ -427,6 +427,7 @@
"proguardsettings",
"proto",
"protobuf-lite",
+ "retrace_internal",
"youtube/youtube.android_12.10",
"youtube/youtube.android_12.17",
"youtube/youtube.android_12.22",
diff --git a/src/test/java/com/android/tools/r8/internal/retrace/RetraceTests.java b/src/test/java/com/android/tools/r8/internal/retrace/RetraceTests.java
new file mode 100644
index 0000000..d1dbb1d
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/internal/retrace/RetraceTests.java
@@ -0,0 +1,85 @@
+// Copyright (c) 2020, 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.internal.retrace;
+
+import static com.android.tools.r8.retrace.Retrace.DEFAULT_REGULAR_EXPRESSION;
+
+import com.android.tools.r8.TestBase;
+import com.android.tools.r8.TestDiagnosticMessagesImpl;
+import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersCollection;
+import com.android.tools.r8.internal.retrace.stacktraces.CoreStackTrace;
+import com.android.tools.r8.internal.retrace.stacktraces.CronetStackTrace;
+import com.android.tools.r8.internal.retrace.stacktraces.FinskyStackTrace;
+import com.android.tools.r8.internal.retrace.stacktraces.VelvetStackTrace;
+import com.android.tools.r8.retrace.Retrace;
+import com.android.tools.r8.retrace.RetraceCommand;
+import com.android.tools.r8.retrace.stacktraces.StackTraceForTest;
+import java.util.List;
+import java.util.function.BiConsumer;
+import junit.framework.TestCase;
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public class RetraceTests extends TestBase {
+
+ @Parameters(name = "{0}")
+ public static TestParametersCollection data() {
+ return getTestParameters().withNoneRuntime().build();
+ }
+
+ public RetraceTests(TestParameters parameters) {}
+
+ @Test
+ public void testCronetStackTrace() {
+ runRetraceTest(new CronetStackTrace());
+ }
+
+ @Test
+ public void testFinskyStackTrace() {
+ runRetraceTest(new FinskyStackTrace(), "(?:.*Finsky\\s+:\\s+\\[\\d+\\]\\s+%c\\.%m\\(%l\\):.*)");
+ }
+
+ @Test
+ public void testVelvetStackTrace() {
+ runRetraceTest(new VelvetStackTrace());
+ }
+
+ @Test
+ public void testCoreStackTrace() {
+ // TODO(b/159420576): Figure out why we cannot retrace this.
+ runRetraceTest(new CoreStackTrace(), DEFAULT_REGULAR_EXPRESSION, Assert::assertNotEquals);
+ }
+
+ private TestDiagnosticMessagesImpl runRetraceTest(StackTraceForTest stackTraceForTest) {
+ return runRetraceTest(stackTraceForTest, DEFAULT_REGULAR_EXPRESSION);
+ }
+
+ private TestDiagnosticMessagesImpl runRetraceTest(
+ StackTraceForTest stackTraceForTest, String regularExpression) {
+ return runRetraceTest(stackTraceForTest, regularExpression, TestCase::assertEquals);
+ }
+
+ private TestDiagnosticMessagesImpl runRetraceTest(
+ StackTraceForTest stackTraceForTest,
+ String regularExpression,
+ BiConsumer<List<String>, List<String>> matcher) {
+ TestDiagnosticMessagesImpl diagnosticsHandler = new TestDiagnosticMessagesImpl();
+ RetraceCommand retraceCommand =
+ RetraceCommand.builder(diagnosticsHandler)
+ .setProguardMapProducer(stackTraceForTest::mapping)
+ .setStackTrace(stackTraceForTest.obfuscatedStackTrace())
+ .setRegularExpression(regularExpression)
+ .setRetracedStackTraceConsumer(
+ retraced -> matcher.accept(stackTraceForTest.retracedStackTrace(), retraced))
+ .build();
+ Retrace.run(retraceCommand);
+ return diagnosticsHandler;
+ }
+}
diff --git a/src/test/java/com/android/tools/r8/internal/retrace/stacktraces/CoreStackTrace.java b/src/test/java/com/android/tools/r8/internal/retrace/stacktraces/CoreStackTrace.java
new file mode 100644
index 0000000..480c00d
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/internal/retrace/stacktraces/CoreStackTrace.java
@@ -0,0 +1,12 @@
+// Copyright (c) 2020, 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.internal.retrace.stacktraces;
+
+public class CoreStackTrace extends RetraceInternalStackTraceForTest {
+
+ public CoreStackTrace() {
+ super("core_obfuscated.txt", "core_deobfuscated.txt");
+ }
+}
diff --git a/src/test/java/com/android/tools/r8/internal/retrace/stacktraces/CronetStackTrace.java b/src/test/java/com/android/tools/r8/internal/retrace/stacktraces/CronetStackTrace.java
new file mode 100644
index 0000000..aa24fbc
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/internal/retrace/stacktraces/CronetStackTrace.java
@@ -0,0 +1,12 @@
+// Copyright (c) 2020, 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.internal.retrace.stacktraces;
+
+public class CronetStackTrace extends RetraceInternalStackTraceForTest {
+
+ public CronetStackTrace() {
+ super("cronet_obfuscated.txt", "cronet_deobfuscated.txt");
+ }
+}
diff --git a/src/test/java/com/android/tools/r8/internal/retrace/stacktraces/FinskyStackTrace.java b/src/test/java/com/android/tools/r8/internal/retrace/stacktraces/FinskyStackTrace.java
new file mode 100644
index 0000000..6fde480
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/internal/retrace/stacktraces/FinskyStackTrace.java
@@ -0,0 +1,12 @@
+// Copyright (c) 2020, 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.internal.retrace.stacktraces;
+
+public class FinskyStackTrace extends RetraceInternalStackTraceForTest {
+
+ public FinskyStackTrace() {
+ super("finsky_obfuscated.txt", "finsky_deobfuscated.txt");
+ }
+}
diff --git a/src/test/java/com/android/tools/r8/internal/retrace/stacktraces/RetraceInternalStackTraceForTest.java b/src/test/java/com/android/tools/r8/internal/retrace/stacktraces/RetraceInternalStackTraceForTest.java
new file mode 100644
index 0000000..e4005de
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/internal/retrace/stacktraces/RetraceInternalStackTraceForTest.java
@@ -0,0 +1,63 @@
+// Copyright (c) 2020, 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.internal.retrace.stacktraces;
+
+import com.android.tools.r8.ToolHelper;
+import com.android.tools.r8.retrace.stacktraces.StackTraceForTest;
+import com.android.tools.r8.utils.FileUtils;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.List;
+
+public class RetraceInternalStackTraceForTest implements StackTraceForTest {
+
+ private static final Path retraceInternal =
+ Paths.get(ToolHelper.THIRD_PARTY_DIR).resolve("retrace_internal");
+ private final Path obfuscatedPath;
+ private final Path deobfuscatedPath;
+
+ public RetraceInternalStackTraceForTest(String obfuscatedFile, String deobfuscatedFile) {
+ this.obfuscatedPath = retraceInternal.resolve(obfuscatedFile);
+ this.deobfuscatedPath = retraceInternal.resolve(deobfuscatedFile);
+ }
+
+ @Override
+ public List<String> obfuscatedStackTrace() {
+ try {
+ return FileUtils.readAllLines(obfuscatedPath);
+ } catch (IOException e) {
+ e.printStackTrace();
+ throw new RuntimeException("Could not read file " + obfuscatedPath.toString());
+ }
+ }
+
+ @Override
+ public String mapping() {
+ Path mappingPath = retraceInternal.resolve("mapping.txt");
+ try {
+ return new String(Files.readAllBytes(mappingPath));
+ } catch (IOException e) {
+ e.printStackTrace();
+ throw new RuntimeException("Could not read mapping file " + mappingPath.toString());
+ }
+ }
+
+ @Override
+ public List<String> retracedStackTrace() {
+ try {
+ return FileUtils.readAllLines(deobfuscatedPath);
+ } catch (IOException e) {
+ e.printStackTrace();
+ throw new RuntimeException("Could not read file " + deobfuscatedPath.toString());
+ }
+ }
+
+ @Override
+ public int expectedWarnings() {
+ return 0;
+ }
+}
diff --git a/src/test/java/com/android/tools/r8/internal/retrace/stacktraces/VelvetStackTrace.java b/src/test/java/com/android/tools/r8/internal/retrace/stacktraces/VelvetStackTrace.java
new file mode 100644
index 0000000..a2f468e
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/internal/retrace/stacktraces/VelvetStackTrace.java
@@ -0,0 +1,12 @@
+// Copyright (c) 2020, 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.internal.retrace.stacktraces;
+
+public class VelvetStackTrace extends RetraceInternalStackTraceForTest {
+
+ public VelvetStackTrace() {
+ super("velvet_obfuscated.txt", "velvet_deobfuscated.txt");
+ }
+}
diff --git a/third_party/retrace_internal.tar.gz.sha1 b/third_party/retrace_internal.tar.gz.sha1
new file mode 100644
index 0000000..b840e19
--- /dev/null
+++ b/third_party/retrace_internal.tar.gz.sha1
@@ -0,0 +1 @@
+f00aa79849d9eb8a16accaca566ac275f4711d8e
\ No newline at end of file