diff --git a/java/execution/impl/src/com/intellij/execution/JavaTestFrameworkRunnableState.java b/java/execution/impl/src/com/intellij/execution/JavaTestFrameworkRunnableState.java index f46e857e71b4..3bfc53a282bc 100644 --- a/java/execution/impl/src/com/intellij/execution/JavaTestFrameworkRunnableState.java +++ b/java/execution/impl/src/com/intellij/execution/JavaTestFrameworkRunnableState.java @@ -161,6 +161,7 @@ public abstract class JavaTestFrameworkRunnableState { + root.flushOutputFile(); deleteTempFiles(); clear(); }; diff --git a/platform/testRunner/src/com/intellij/execution/testframework/AbstractTestProxy.java b/platform/testRunner/src/com/intellij/execution/testframework/AbstractTestProxy.java index 274b52376ce0..5f7e846d60b6 100644 --- a/platform/testRunner/src/com/intellij/execution/testframework/AbstractTestProxy.java +++ b/platform/testRunner/src/com/intellij/execution/testframework/AbstractTestProxy.java @@ -119,6 +119,10 @@ public abstract class AbstractTestProxy extends CompositePrintable { } } + /** + * to be deleted in 2017.1 + */ + @Deprecated public static void flushOutput(AbstractTestProxy testProxy) { testProxy.flush(); diff --git a/platform/testRunner/src/com/intellij/execution/testframework/CompositePrintable.java b/platform/testRunner/src/com/intellij/execution/testframework/CompositePrintable.java index 58d5a013c7d0..46e5fa6c2800 100644 --- a/platform/testRunner/src/com/intellij/execution/testframework/CompositePrintable.java +++ b/platform/testRunner/src/com/intellij/execution/testframework/CompositePrintable.java @@ -49,6 +49,13 @@ public class CompositePrintable implements Printable, Disposable { } } + public void flushOutputFile() { + synchronized (myNestedPrintables) { + ArrayList printables = new ArrayList<>(myNestedPrintables); + invokeInAlarm(() -> printOutputFile(printables)); + } + } + public static void invokeInAlarm(Runnable runnable) { invokeInAlarm(runnable, !ApplicationManager.getApplication().isDispatchThread() || ApplicationManager.getApplication().isUnitTestMode()); @@ -205,39 +212,7 @@ public class CompositePrintable implements Printable, Disposable { } myPrinter.close(); } - if (myOutputFile != null && new File(myOutputFile).exists()) { - try { - final PrintStream printStream = new PrintStream(new FileOutputStream(new File(myOutputFile), true)); - try { - for (Printable currentPrintable : currentPrintables) { - currentPrintable.printOn(new Printer() { - @Override - public void print(String text, ConsoleViewContentType contentType) { - if (contentType != ConsoleViewContentType.SYSTEM_OUTPUT) { - printStream.print(text); - } - } - - @Override - public void printHyperlink(String text, HyperlinkInfo info) { - printStream.print(text); - } - - @Override - public void onNewAvailable(@NotNull Printable printable) {} - @Override - public void mark() {} - }); - } - } - finally { - printStream.close(); - } - } - catch (IOException e) { - LOG.error(e); - } - } + printOutputFile(currentPrintables); }; invokeInAlarm(request, ApplicationManager.getApplication().isUnitTestMode()); } @@ -404,5 +379,41 @@ public class CompositePrintable implements Printable, Disposable { return printer instanceof TestsOutputConsolePrinter && !((TestsOutputConsolePrinter)printer).isCurrent(CompositePrintable.this); } } + + private void printOutputFile(List currentPrintables) { + if (myOutputFile != null && new File(myOutputFile).exists()) { + try { + final PrintStream printStream = new PrintStream(new FileOutputStream(new File(myOutputFile), true)); + try { + for (Printable currentPrintable : currentPrintables) { + currentPrintable.printOn(new Printer() { + @Override + public void print(String text, ConsoleViewContentType contentType) { + if (contentType != ConsoleViewContentType.SYSTEM_OUTPUT) { + printStream.print(text); + } + } + + @Override + public void printHyperlink(String text, HyperlinkInfo info) { + printStream.print(text); + } + + @Override + public void onNewAvailable(@NotNull Printable printable) {} + @Override + public void mark() {} + }); + } + } + finally { + printStream.close(); + } + } + catch (IOException e) { + LOG.error(e); + } + } + } }