package jetbrains.mps.testbench.junit;
/*Generated by MPS */
import jetbrains.mps.testbench.util.Output;
import java.io.FilterOutputStream;
import java.io.IOException;
import java.util.List;
import java.util.regex.Pattern;
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import java.util.regex.Matcher;
public class IgnoringPatternErrorStream implements Output {
private static class CompositeStream extends FilterOutputStream {
private final FilterOutputStream mySecond;
public CompositeStream(FilterOutputStream first, FilterOutputStream second) {
super(first);
mySecond = second;
}
@Override
public void write(int i) throws IOException {
super.write(i);
mySecond.write(i);
}
@Override
public void flush() throws IOException {
super.flush();
mySecond.flush();
}
@Override
public void write(byte[] array) throws IOException {
super.write(array);
}
@Override
public void write(byte[] array, int i, int i1) throws IOException {
super.write(array, i, i1);
}
}
private final List<Pattern> myIgnoredPatterns;
private ByteArrayOutputStream myByteArrayOutputStream;
private PrintStream myErrorCachingStream;
private PrintStream myOldStream;
public IgnoringPatternErrorStream(List<Pattern> ignoredPatterns) {
myIgnoredPatterns = ignoredPatterns;
}
public void reRoute() {
System.err.flush();
myOldStream = System.err;
myByteArrayOutputStream = new ByteArrayOutputStream();
myErrorCachingStream = new PrintStream(new IgnoringPatternErrorStream.CompositeStream(myOldStream, new PrintStream(myByteArrayOutputStream)));
System.setErr(myErrorCachingStream);
}
public void reset() {
myErrorCachingStream.flush();
System.setErr(myOldStream);
}
public void clear() {
myOldStream = null;
myByteArrayOutputStream.reset();
}
public String getDescription() {
return "Proxy MPS Error Stream";
}
public String getText() {
return myByteArrayOutputStream.toString();
}
public boolean isNotEmpty() {
String text = getText();
for (Pattern pattern : myIgnoredPatterns) {
Matcher m = pattern.matcher(text);
text = m.replaceAll("");
}
return Pattern.compile(".*\\S.*", Pattern.DOTALL).matcher(text).matches();
}
}