restore ansi coloring after dumping (IDEA-150444)

This commit is contained in:
Anna Kozlova
2016-06-03 12:47:45 +03:00
parent b2a378db4a
commit 2aa7c87073
6 changed files with 36 additions and 25 deletions
@@ -18,7 +18,6 @@ package com.intellij.execution.testframework.sm.runner.states;
import com.intellij.execution.process.ProcessOutputTypes;
import com.intellij.execution.testframework.CompositePrintable;
import com.intellij.execution.testframework.Printer;
import com.intellij.execution.testframework.sm.runner.ui.TestsPresentationUtil;
import com.intellij.execution.testframework.stacktrace.DiffHyperlink;
import com.intellij.execution.ui.ConsoleViewContentType;
import com.intellij.openapi.util.text.StringUtil;
@@ -68,14 +67,14 @@ public class TestComparisionFailedState extends TestFailedState {
printer.mark();
// Error msg
TestsPresentationUtil.printWithAnsiColoring(printer, myErrorMsgPresentation, ProcessOutputTypes.STDERR);
printer.printWithAnsiColoring(myErrorMsgPresentation, ProcessOutputTypes.STDERR);
// Diff link
myHyperlink.printOn(printer);
// Stacktrace
printer.print(CompositePrintable.NEW_LINE, ConsoleViewContentType.ERROR_OUTPUT);
TestsPresentationUtil.printWithAnsiColoring(printer, myStacktracePresentation, ProcessOutputTypes.STDERR);
printer.printWithAnsiColoring(myStacktracePresentation, ProcessOutputTypes.STDERR);
printer.print(CompositePrintable.NEW_LINE, ConsoleViewContentType.ERROR_OUTPUT);
}
@@ -18,7 +18,6 @@ package com.intellij.execution.testframework.sm.runner.states;
import com.intellij.execution.process.ProcessOutputTypes;
import com.intellij.execution.testframework.CompositePrintable;
import com.intellij.execution.testframework.Printer;
import com.intellij.execution.testframework.sm.runner.ui.TestsPresentationUtil;
import com.intellij.execution.ui.ConsoleViewContentType;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.util.containers.ContainerUtil;
@@ -79,7 +78,7 @@ public class TestFailedState extends AbstractState {
printer.mark();
addMark = false;
}
TestsPresentationUtil.printWithAnsiColoring(printer, errorText, ProcessOutputTypes.STDERR);
printer.printWithAnsiColoring(errorText, ProcessOutputTypes.STDERR);
}
}
}
@@ -472,18 +472,4 @@ public class TestsPresentationUtil {
break;
}
}
public static void printWithAnsiColoring(@NotNull final Printer printer, @NotNull String text, @NotNull final Key processOutputType) {
AnsiEscapeDecoder decoder = new AnsiEscapeDecoder();
decoder.escapeText(text, ProcessOutputTypes.STDOUT, new AnsiEscapeDecoder.ColoredTextAcceptor() {
@Override
public void coloredTextAvailable(String text, Key attributes) {
ConsoleViewContentType contentType = ConsoleViewContentType.getConsoleViewType(attributes);
if (contentType == null || contentType == ConsoleViewContentType.NORMAL_OUTPUT) {
contentType = ConsoleViewContentType.getConsoleViewType(processOutputType);
}
printer.print(text, contentType);
}
});
}
}
@@ -356,7 +356,7 @@ public class CompositePrintable implements Printable, Disposable {
for (ConsoleViewContentType contentType : ConsoleViewContentType.OUTPUT_TYPES) {
final String prefix = contentType.toString();
if (line.startsWith(prefix)) {
printer.print(line.substring(prefix.length()), contentType);
printer.printWithAnsiColoring(line.substring(prefix.length()), contentType);
myLastSelected = contentType;
printed = true;
break;
@@ -368,7 +368,7 @@ public class CompositePrintable implements Printable, Disposable {
.printOn(printer);
}
else {
printer.print(line, myLastSelected != null ? myLastSelected : ConsoleViewContentType.NORMAL_OUTPUT);
printer.printWithAnsiColoring(line, myLastSelected != null ? myLastSelected : ConsoleViewContentType.NORMAL_OUTPUT);
}
}
lineNum++;
@@ -16,7 +16,10 @@
package com.intellij.execution.testframework;
import com.intellij.execution.filters.HyperlinkInfo;
import com.intellij.execution.process.AnsiEscapeDecoder;
import com.intellij.execution.process.ProcessOutputTypes;
import com.intellij.execution.ui.ConsoleViewContentType;
import com.intellij.openapi.util.Key;
import org.jetbrains.annotations.NotNull;
public interface Printer {
@@ -24,4 +27,32 @@ public interface Printer {
void onNewAvailable(@NotNull Printable printable);
void printHyperlink(String text, HyperlinkInfo info);
void mark();
default void printWithAnsiColoring(@NotNull String text, @NotNull Key processOutputType) {
AnsiEscapeDecoder decoder = new AnsiEscapeDecoder();
decoder.escapeText(text, ProcessOutputTypes.STDOUT, new AnsiEscapeDecoder.ColoredTextAcceptor() {
@Override
public void coloredTextAvailable(String text, Key attributes) {
ConsoleViewContentType contentType = ConsoleViewContentType.getConsoleViewType(attributes);
if (contentType == null || contentType == ConsoleViewContentType.NORMAL_OUTPUT) {
contentType = ConsoleViewContentType.getConsoleViewType(processOutputType);
}
print(text, contentType);
}
});
}
default void printWithAnsiColoring(@NotNull String text, @NotNull ConsoleViewContentType contentType) {
AnsiEscapeDecoder decoder = new AnsiEscapeDecoder();
decoder.escapeText(text, ProcessOutputTypes.STDOUT, new AnsiEscapeDecoder.ColoredTextAcceptor() {
@Override
public void coloredTextAvailable(String text, Key attributes) {
ConsoleViewContentType viewContentType = ConsoleViewContentType.getConsoleViewType(attributes);
if (viewContentType == null) {
viewContentType = contentType;
}
print(text, viewContentType);
}
});
}
}
@@ -22,17 +22,13 @@ import com.intellij.execution.configurations.RunConfiguration;
import com.intellij.execution.filters.*;
import com.intellij.execution.filters.Filter;
import com.intellij.execution.impl.ConsoleBuffer;
import com.intellij.execution.impl.RunManagerImpl;
import com.intellij.execution.impl.RunnerAndConfigurationSettingsImpl;
import com.intellij.execution.testframework.*;
import com.intellij.execution.ui.ConsoleViewContentType;
import com.intellij.openapi.application.ApplicationNamesInfo;
import com.intellij.openapi.extensions.Extensions;
import com.intellij.openapi.fileEditor.OpenFileDescriptor;
import com.intellij.openapi.progress.ProgressManager;
import com.intellij.openapi.util.Key;
import com.intellij.openapi.util.Ref;
import com.intellij.openapi.util.UserDataHolder;
import com.intellij.openapi.util.WriteExternalException;
import com.intellij.openapi.util.text.StringUtil;
import org.jdom.Attribute;