[Retrace] Account for non-ascii std-in input
Bug: 159753531
Bug: 159425023
Change-Id: Ide9090c77eb7376b7dd4a0295e18dd3635abed05
diff --git a/src/main/java/com/android/tools/r8/retrace/Retrace.java b/src/main/java/com/android/tools/r8/retrace/Retrace.java
index af2b520..b612ac0 100644
--- a/src/main/java/com/android/tools/r8/retrace/Retrace.java
+++ b/src/main/java/com/android/tools/r8/retrace/Retrace.java
@@ -17,7 +17,9 @@
import com.android.tools.r8.utils.StringDiagnostic;
import com.android.tools.r8.utils.StringUtils;
import com.android.tools.r8.utils.Timing;
+import com.google.common.base.Charsets;
import java.io.IOException;
+import java.io.InputStreamReader;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
@@ -210,7 +212,7 @@
}
private static List<String> getStackTraceFromStandardInput() {
- Scanner sc = new Scanner(System.in);
+ Scanner sc = new Scanner(new InputStreamReader(System.in, Charsets.UTF_8));
List<String> readLines = new ArrayList<>();
while (sc.hasNext()) {
readLines.add(sc.nextLine());
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
index 6fea76f..7dfc522 100644
--- a/src/test/java/com/android/tools/r8/internal/retrace/RetraceTests.java
+++ b/src/test/java/com/android/tools/r8/internal/retrace/RetraceTests.java
@@ -16,6 +16,7 @@
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.ArrayList;
import java.util.List;
import java.util.function.BiConsumer;
import junit.framework.TestCase;
@@ -32,6 +33,8 @@
return getTestParameters().withNoneRuntime().build();
}
+ private static String SMILEY_EMOJI = "\uD83D\uDE00";
+
public RetraceTests(TestParameters parameters) {}
@Test
@@ -49,6 +52,39 @@
runRetraceTest(new VelvetStackTrace());
}
+ @Test
+ public void testNonAscii() {
+ CronetStackTrace cronetStackTrace = new CronetStackTrace();
+ runRetraceTest(
+ new StackTraceForTest() {
+ @Override
+ public List<String> obfuscatedStackTrace() {
+ ArrayList<String> smileyObf = new ArrayList<>();
+ smileyObf.add(SMILEY_EMOJI);
+ smileyObf.addAll(cronetStackTrace.obfuscatedStackTrace());
+ return smileyObf;
+ }
+
+ @Override
+ public String mapping() {
+ return cronetStackTrace.mapping();
+ }
+
+ @Override
+ public List<String> retracedStackTrace() {
+ ArrayList<String> smileyObf = new ArrayList<>();
+ smileyObf.add(SMILEY_EMOJI);
+ smileyObf.addAll(cronetStackTrace.retracedStackTrace());
+ return smileyObf;
+ }
+
+ @Override
+ public int expectedWarnings() {
+ return 0;
+ }
+ });
+ }
+
private TestDiagnosticMessagesImpl runRetraceTest(StackTraceForTest stackTraceForTest) {
return runRetraceTest(stackTraceForTest, DEFAULT_REGULAR_EXPRESSION);
}
diff --git a/src/test/java/com/android/tools/r8/retrace/RetraceCommandLineTests.java b/src/test/java/com/android/tools/r8/retrace/RetraceCommandLineTests.java
index e8494d6..22e7820 100644
--- a/src/test/java/com/android/tools/r8/retrace/RetraceCommandLineTests.java
+++ b/src/test/java/com/android/tools/r8/retrace/RetraceCommandLineTests.java
@@ -125,6 +125,16 @@
assertEquals(Retrace.USAGE_MESSAGE, processResult.stdout);
}
+ @Test
+ public void testNonAscii() throws IOException {
+ runTest("", "\uD83D\uDE00", false, "\uD83D\uDE00" + StringUtils.LINE_SEPARATOR);
+ }
+
+ @Test
+ public void testNonAsciiStdIn() throws IOException {
+ runTest("", "\uD83D\uDE00", true, "\uD83D\uDE00" + StringUtils.LINE_SEPARATOR);
+ }
+
private final String nonMappableStackTrace =
StringUtils.lines(
"com.android.r8.R8Exception: Problem when compiling program",