package hudson.plugins.fitnesse;
import hudson.Launcher.ProcStarter;
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
/**
* Class needed to confirm that
* @author tim
*
*/
final class StdConsole {
private final ByteArrayOutputStream stdout;
private final ByteArrayOutputStream stderr;
private int stdOutMark;
private int stdErrMark;
public StdConsole() {
this(new ByteArrayOutputStream(), new ByteArrayOutputStream());
}
public void provideStdOutAndStdErrFor(ProcStarter procStarter) {
procStarter.stdout(stdout).stderr(stderr);
}
public StdConsole(ByteArrayOutputStream stdout, ByteArrayOutputStream stderr) {
this.stdout = stdout;
this.stderr = stderr;
this.stdOutMark = 0;
this.stdErrMark = 0;
}
public void logIncrementalOutput(PrintStream logger) {
if (incrementalOutputOnStdOut())
stdOutMark = logAndMark(logger, stdout, stdOutMark);
if (incrementalOutputOnStdErr())
stdErrMark = logAndMark(logger, stderr, stdErrMark);
}
private int logAndMark(PrintStream logger, ByteArrayOutputStream bytes, int mark) {
int size = bytes.size();
logger.println(new String(bytes.toByteArray(), mark, size - mark));
return size;
}
public boolean noOutputOnStdOut() {
return stdout.size()==0 ;
}
public boolean outputOnStdErr() {
return stderr.size() > 0;
}
public boolean noIncrementalOutput() {
return !incrementalOutputOnStdOut() && !incrementalOutputOnStdErr();
}
public boolean incrementalOutputOnStdErr() {
return stderr.size() != stdErrMark;
}
public boolean incrementalOutputOnStdOut() {
return stdout.size() != stdOutMark;
}
}