Merge "Flush data in StringConsumer"
diff --git a/src/main/java/com/android/tools/r8/StringConsumer.java b/src/main/java/com/android/tools/r8/StringConsumer.java
index 9232e08..23883e9 100644
--- a/src/main/java/com/android/tools/r8/StringConsumer.java
+++ b/src/main/java/com/android/tools/r8/StringConsumer.java
@@ -147,6 +147,7 @@
           new BufferedWriter(new OutputStreamWriter(outputStream, encoding.newEncoder()));
       try {
         writer.write(string);
+        writer.flush();
       } catch (IOException e) {
         handler.error(new IOExceptionDiagnostic(e, origin));
       }
diff --git a/src/test/java/com/android/tools/r8/R8CommandTest.java b/src/test/java/com/android/tools/r8/R8CommandTest.java
index c6ab4e2..2a613b4 100644
--- a/src/test/java/com/android/tools/r8/R8CommandTest.java
+++ b/src/test/java/com/android/tools/r8/R8CommandTest.java
@@ -361,6 +361,47 @@
         .build());
   }
 
+  private ProcessResult runR8OnShaking1(Path additionalProguardConfiguration) throws Throwable {
+    Path input = Paths.get(EXAMPLES_BUILD_DIR, "shaking1.jar").toAbsolutePath();
+    Path proguardConfiguration =
+        Paths.get(ToolHelper.EXAMPLES_DIR, "shaking1", "keep-rules.txt").toAbsolutePath();
+    return ToolHelper.forkR8(temp.getRoot().toPath(),
+        "--pg-conf", proguardConfiguration.toString(),
+        "--pg-conf", additionalProguardConfiguration.toString(),
+        "--lib", ToolHelper.getDefaultAndroidJar().toAbsolutePath().toString(),
+        input.toString());
+  }
+
+  @Test
+  public void printsPrintSeedsOnStdout() throws Throwable {
+    Path proguardPrintSeedsConfiguration = temp.newFile("printseeds.txt").toPath().toAbsolutePath();
+    FileUtils.writeTextFile(proguardPrintSeedsConfiguration, ImmutableList.of("-printseeds"));
+    ProcessResult result = runR8OnShaking1(proguardPrintSeedsConfiguration);
+    assertTrue(result.exitCode == 0);
+    assertTrue(result.stdout.contains("void main(java.lang.String[])"));
+  }
+
+  @Test
+  public void printsPrintUsageOnStdout() throws Throwable {
+    Path proguardPrintUsageConfiguration = temp.newFile("printusage.txt").toPath().toAbsolutePath();
+    FileUtils.writeTextFile(proguardPrintUsageConfiguration, ImmutableList.of("-printusage"));
+    ProcessResult result = runR8OnShaking1(proguardPrintUsageConfiguration);
+    assertTrue(result.exitCode == 0);
+    assertTrue(result.stdout.contains("shaking1.Unused"));
+  }
+
+  @Test
+  public void printsPrintSeedsAndPrintUsageOnStdout() throws Throwable {
+    Path proguardPrintSeedsConfiguration =
+        temp.newFile("printseedsandprintusage.txt").toPath().toAbsolutePath();
+    FileUtils.writeTextFile(
+        proguardPrintSeedsConfiguration, ImmutableList.of("-printseeds", "-printusage"));
+    ProcessResult result = runR8OnShaking1(proguardPrintSeedsConfiguration);
+    assertTrue(result.exitCode == 0);
+    assertTrue(result.stdout.contains("void main(java.lang.String[])"));
+    assertTrue(result.stdout.contains("shaking1.Unused"));
+  }
+
   private R8Command parse(String... args) throws CompilationFailedException {
     return R8Command.parse(args, EmbeddedOrigin.INSTANCE).build();
   }