// Copyright (C) 2003-2009 by Object Mentor, Inc. All rights reserved.
// Released under the terms of the CPL Common Public License version 1.0.
package fitnesse.runner;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import fit.Counts;
import fit.FitProtocol;
import fitnesse.components.ContentBuffer;
import fitnesse.responders.run.TestSummary;
public class CachingResultFormatter implements ResultFormatter {
private ContentBuffer buffer;
public List<ResultHandler> subHandlers = new LinkedList<ResultHandler>();
public CachingResultFormatter() throws IOException {
buffer = new ContentBuffer(".results");
}
public void acceptResult(PageResult result) throws IOException {
ByteArrayOutputStream output = new ByteArrayOutputStream();
FitProtocol.writeData(result.toString() + "\n", output);
buffer.append(output.toByteArray());
for (Iterator<ResultHandler> iterator = subHandlers.iterator(); iterator.hasNext();)
iterator.next().acceptResult(result);
}
public void acceptFinalCount(TestSummary testSummary) throws IOException {
ByteArrayOutputStream output = new ByteArrayOutputStream();
Counts counts = new Counts(testSummary.getRight(), testSummary.getWrong(), testSummary.getIgnores(), testSummary.getExceptions());
FitProtocol.writeCounts(counts, output);
buffer.append(output.toByteArray());
for (Iterator<ResultHandler> iterator = subHandlers.iterator(); iterator.hasNext();)
iterator.next().acceptFinalCount(testSummary);
}
public int getByteCount() {
return buffer.getSize();
}
public InputStream getResultStream() throws IOException {
return buffer.getNonDeleteingInputStream();
}
public void cleanUp() {
buffer.delete();
}
public void addHandler(ResultHandler handler) {
subHandlers.add(handler);
}
}