// 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.responders.run.slimResponder;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
import fitnesse.html.HtmlUtil;
import fitnesse.wikitext.parser.Collapsible;
public class ExceptionList {
private boolean stopTestCalled = false;
private Map<String, String> exceptions;
private boolean firstHtmlRequest = true;
private int testNumber = 0;
private StringBuffer buffer;
public ExceptionList() {
exceptions = new HashMap<String, String>();
}
public void addException(String key, String exceptionStack) {
exceptions.put(key, exceptionStack);
}
public String toHtml() {
buffer = new StringBuffer();
if (exceptions.size() == 0) {
return "";
}
else if (firstHtmlRequest) {
firstHtmlRequest = false;
return writeExceptionDiv();
}
else {
return writeUpdateExceptionDivHtml();
}
}
public boolean stopTestCalled() {
return stopTestCalled;
}
public void setStopTestCalled() {
stopTestCalled = true;
}
public void resetForNewTest() {
stopTestCalled = false;
firstHtmlRequest = true;
testNumber++;
}
private String writeExceptionDiv() {
header();
writeExceptions();
footer();
return buffer.toString();
}
private String writeUpdateExceptionDivHtml() {
writeExceptions();
return HtmlUtil.makeAppendElementScript(getDivName(), buffer.toString()).html();
}
private void footer() {
buffer.append("</div><hr/>");
}
private void writeExceptions() {
for (String key : exceptions.keySet()) {
buffer.append(String.format("<a name=\"%s\"/><b></b>", key));
buffer.append(Collapsible.generateHtml(Collapsible.CLOSED, key, exceptions.get(key)));
}
exceptions.clear();
}
private void header() {
buffer.append("<div id=\"" + getDivName() + "\"><H3> <span class=\"fail\">Exceptions</span></H3><br/>");
}
private String getDivName() {
return "test_exceptions" + testNumber;
}
}