ensure test output appears in the console: ensure order: first clear the old output, then print current output

This commit is contained in:
Anna.Kozlova
2016-09-28 15:25:12 +02:00
parent eb273d6a65
commit 6e4f6bbaac
2 changed files with 23 additions and 2 deletions
@@ -17,6 +17,7 @@ package com.intellij.execution.testframework.sm.runner;
import com.intellij.execution.process.ProcessOutputTypes;
import com.intellij.execution.runners.ExecutionEnvironment;
import com.intellij.execution.testframework.CompositePrintable;
import com.intellij.execution.testframework.Printable;
import com.intellij.execution.testframework.Printer;
import com.intellij.execution.testframework.TestConsoleProperties;
@@ -27,6 +28,8 @@ import com.intellij.execution.testframework.sm.runner.ui.SMTestRunnerResultsForm
import com.intellij.execution.testframework.ui.TestsOutputConsolePrinter;
import com.intellij.execution.ui.ConsoleViewContentType;
import com.intellij.openapi.util.Disposer;
import com.intellij.psi.impl.DebugUtil;
import com.intellij.util.concurrency.Semaphore;
import org.jetbrains.annotations.NotNull;
/**
@@ -536,6 +539,22 @@ public class SMTRunnerConsoleTest extends BaseSMTRunnerTestCase {
assertAllOutputs(myMockResettablePrinter, "preved", "","Empty test suite.\n");
}
public void testEnsureOrderedClearFlush() throws Exception {
StringBuffer buf = new StringBuffer();
String expected = "";
for(int i = 0; i < 100; i++) {
expected += "1" ;
expected += "2" ;
CompositePrintable.invokeInAlarm(() -> buf.append("1"), false);
CompositePrintable.invokeInAlarm(() -> buf.append("2"), false);
}
Semaphore s = new Semaphore();
s.down();
CompositePrintable.invokeInAlarm(s::up, false);
assertTrue(s.waitFor(1000));
assertEquals(expected, buf.toString());
}
@NotNull
private SMTestProxy startTestWithPrinter(final String testName) {
myEventsProcessor.onTestStarted(new TestStartedEvent(testName, null));
@@ -31,6 +31,7 @@ import org.jetbrains.annotations.Nullable;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
public class CompositePrintable implements Printable, Disposable {
public static final String NEW_LINE = "\n";
@@ -41,6 +42,7 @@ public class CompositePrintable implements Printable, Disposable {
private int myCurrentSize = 0;
private String myOutputFile = null;
private String myFrameworkOutputFile;
private static final ExecutorService ourTestExecutorService = AppExecutorUtil.createBoundedApplicationPoolExecutor("tests", 1);
public void flush() {
synchronized (myNestedPrintables) {
@@ -65,7 +67,7 @@ public class CompositePrintable implements Printable, Disposable {
if (sync) {
runnable.run();
} else {
AppExecutorUtil.getAppExecutorService().execute(runnable);
ourTestExecutorService.execute(runnable);
}
}
@@ -140,7 +142,7 @@ public class CompositePrintable implements Printable, Disposable {
public void setOutputFilePath(String outputFile) {
myOutputFile = outputFile;
}
public void setFrameworkOutputFile(String frameworkOutputFile) {
myFrameworkOutputFile = frameworkOutputFile;
}