// 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 fitnesse.responders.run.TestSystemListener;
import fitnesse.slimTables.HtmlTableScanner;
import fitnesse.slimTables.SlimTable;
import fitnesse.slimTables.Table;
import fitnesse.slimTables.TableScanner;
import fitnesse.wiki.ReadOnlyPageData;
import fitnesse.wiki.WikiPage;
import fitnesse.wikitext.parser.Collapsible;
import fitnesse.wikitext.parser.Symbol;
public class HtmlSlimTestSystem extends SlimTestSystem {
public HtmlSlimTestSystem(WikiPage page, TestSystemListener listener) {
super(page, listener);
}
protected TableScanner scanTheTables(ReadOnlyPageData pageData) {
Symbol syntaxTree = pageData.getSyntaxTree();
Symbol preparsedScenarioLibrary = getPreparsedScenarioLibrary();
syntaxTree.addToFront(findCollapsibleSymbol(preparsedScenarioLibrary));
String html = pageData.translateToHtml(syntaxTree);
return new HtmlTableScanner(html);
}
private Symbol findCollapsibleSymbol(Symbol syntaxTree) {
for (Symbol symbol : syntaxTree.getChildren()) {
if (symbol.getType() instanceof Collapsible)
return symbol;
}
throw new RuntimeException("There must be a collapsible widget in here.");
}
@Override
protected String createHtmlResults(SlimTable startWithTable, SlimTable stopBeforeTable) {
replaceExceptionsWithLinks();
evaluateTables();
String exceptionsString = exceptions.toHtml();
Table start = (startWithTable != null) ? startWithTable.getTable() : null;
Table end = (stopBeforeTable != null) ? stopBeforeTable.getTable() : null;
String testResultHtml = tableScanner.toHtml(start, end);
return exceptionsString + testResultHtml;
}
}