package fitnesse.responders.run.formatters;
import fitnesse.FitNesseContext;
import fitnesse.FitNesseVersion;
import fitnesse.responders.run.TestPage;
import fitnesse.responders.run.TestSummary;
import fitnesse.responders.run.SuiteExecutionReport.PageHistoryReference;
import fitnesse.testutil.FitNesseUtil;
import fitnesse.wiki.InMemoryPage;
import fitnesse.wiki.WikiPage;
import static org.junit.Assert.assertEquals;
import org.junit.Before;
import org.junit.Test;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import util.DateTimeUtil;
import util.TimeMeasurement;
import util.XmlUtil;
import java.io.StringWriter;
import java.util.Date;
import java.util.List;
public class SuiteHistoryFormatterTest {
private SuiteHistoryFormatter formatter;
private WikiPage root;
private FitNesseContext context;
private TestPage testPage;
private StringWriter writer;
private long testTime;
private WikiPage suitePage;
@Before
public void setup() throws Exception {
root = InMemoryPage.makeRoot("RooT");
context = FitNesseUtil.makeTestContext(root);
suitePage = root.addChildPage("SuitePage");
testPage = new TestPage(suitePage.addChildPage("TestPage"));
writer = new StringWriter();
formatter = new SuiteHistoryFormatter(context, suitePage, writer);
testTime = DateTimeUtil.getTimeFromString("12/5/1952 1:19:00");
}
@Test
public void shouldRememberTestSummariesInReferences() throws Exception {
TimeMeasurement totalTimeMeasurement = new TimeMeasurement().start();
performTest(totalTimeMeasurement);
List<PageHistoryReference> references = formatter.getPageHistoryReferences();
assertEquals(1, references.size());
PageHistoryReference pageHistoryReference = references.get(0);
assertEquals(new TestSummary(1, 2, 3, 4), pageHistoryReference.getTestSummary());
assertEquals(13, pageHistoryReference.getRunTimeInMillis());
}
private void performTest(TimeMeasurement totalTimeMeasurement) throws Exception {
formatter.announceNumberTestsToRun(1);
while (totalTimeMeasurement.elapsed() == 0) {
Thread.sleep(50);
}
TimeMeasurement testTimeMeasurement = new TimeMeasurement() {
@Override
public long startedAt() {
return testTime;
}
@Override
public long elapsed() {
return 13;
}
};
formatter.newTestStarted(testPage, testTimeMeasurement);
formatter.testComplete(testPage, new TestSummary(1, 2, 3, 4), testTimeMeasurement);
formatter.allTestingComplete(totalTimeMeasurement.stop());
}
@Test
public void allTestingCompleteShouldProduceLinksAndSetTotalRunTimeOnReport() throws Exception {
TimeMeasurement totalTimeMeasurement = new TimeMeasurement().start();
performTest(totalTimeMeasurement);
assertEquals(totalTimeMeasurement.elapsed(), formatter.suiteExecutionReport.getTotalRunTimeInMillis());
String output = writer.toString();
Document document = XmlUtil.newDocument(output);
Element suiteResultsElement = document.getDocumentElement();
assertEquals("suiteResults", suiteResultsElement.getNodeName());
assertEquals(new FitNesseVersion().toString(), XmlUtil.getTextValue(suiteResultsElement, "FitNesseVersion"));
assertEquals("SuitePage", XmlUtil.getTextValue(suiteResultsElement, "rootPath"));
NodeList xmlPageReferences = suiteResultsElement.getElementsByTagName("pageHistoryReference");
assertEquals(1, xmlPageReferences.getLength());
for (int referenceIndex = 0; referenceIndex < xmlPageReferences.getLength(); referenceIndex++) {
Element pageHistoryReferenceElement = (Element) xmlPageReferences.item(referenceIndex);
assertEquals("SuitePage.TestPage", XmlUtil.getTextValue(pageHistoryReferenceElement, "name"));
assertEquals(DateTimeUtil.formatDate(new Date(testTime)), XmlUtil.getTextValue(pageHistoryReferenceElement, "date"));
String link = "SuitePage.TestPage?pageHistory&resultDate=19521205011900";
assertEquals(link, XmlUtil.getTextValue(pageHistoryReferenceElement, "pageHistoryLink"));
Element countsElement = XmlUtil.getElementByTagName(pageHistoryReferenceElement, "counts");
assertEquals("1", XmlUtil.getTextValue(countsElement, "right"));
assertEquals("2", XmlUtil.getTextValue(countsElement, "wrong"));
assertEquals("3", XmlUtil.getTextValue(countsElement, "ignores"));
assertEquals("4", XmlUtil.getTextValue(countsElement, "exceptions"));
assertEquals("13", XmlUtil.getTextValue(pageHistoryReferenceElement, "runTimeInMillis"));
}
Element finalCounts = XmlUtil.getElementByTagName(suiteResultsElement, "finalCounts");
assertEquals("0", XmlUtil.getTextValue(finalCounts, "right"));
assertEquals("1", XmlUtil.getTextValue(finalCounts, "wrong"));
assertEquals("0", XmlUtil.getTextValue(finalCounts, "ignores"));
assertEquals("0", XmlUtil.getTextValue(finalCounts, "exceptions"));
assertEquals(String.valueOf(totalTimeMeasurement.elapsed()),
XmlUtil.getTextValue(suiteResultsElement, "totalRunTimeInMillis"));
}
}