[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",