// 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.formatters;
import util.RegexTestCase;
import util.TimeMeasurement;
import fitnesse.FitNesseContext;
import fitnesse.responders.run.CompositeExecutionLog;
import fitnesse.responders.run.TestPage;
import fitnesse.responders.run.TestSummary;
import fitnesse.wiki.InMemoryPage;
import fitnesse.wiki.WikiPage;
public class TestHtmlFormatterTest extends RegexTestCase {
private BaseFormatter formatter;
private StringBuffer pageBuffer = new StringBuffer();
private TestPage page;
private WikiPage root;
private FitNesseContext context;
public void setUp() throws Exception {
root = InMemoryPage.makeRoot("RooT");
page = new TestPage(root.addChildPage("NewPage"));
page.getData().setContent("page content here");
context = new FitNesseContext();
formatter = new TestHtmlFormatter(context, page.getSourcePage()) {
@Override
protected void writeData(String output) {
pageBuffer.append(output);
}
};
}
public void tearDown() throws Exception {
}
public void testTestSummaryTestPass() throws Exception {
TimeMeasurement totalTimeMeasurement = new TimeMeasurement().start();
TimeMeasurement timeMeasurement = new TimeMeasurement();
formatter.announceNumberTestsToRun(1);
formatter.newTestStarted(page, timeMeasurement.start());
formatter.testComplete(page, new TestSummary(4, 0, 0, 0), timeMeasurement.stop());
formatter.allTestingComplete(totalTimeMeasurement.stop());
assertSubString("<script>document.getElementById(\"test-summary\").innerHTML =", pageBuffer.toString());
assertSubString("<strong>Assertions:</strong> 4 right, 0 wrong, 0 ignored, 0 exceptions", pageBuffer.toString());
assertSubString("document.getElementById(\"test-summary\").className = \"pass\"", pageBuffer.toString());
}
public void testTestSummaryTestFail() throws Exception {
TimeMeasurement totalTimeMeasurement = new TimeMeasurement().start();
TimeMeasurement timeMeasurement = new TimeMeasurement();
formatter.announceNumberTestsToRun(1);
formatter.newTestStarted(page, timeMeasurement.start());
formatter.testComplete(page, new TestSummary(4, 1, 0, 0), timeMeasurement.stop());
formatter.allTestingComplete(totalTimeMeasurement.stop());
assertSubString("<strong>Assertions:</strong> 4 right, 1 wrong, 0 ignored, 0 exceptions", pageBuffer.toString());
assertSubString("document.getElementById(\"test-summary\").className = \"fail\"", pageBuffer.toString());
}
public void testExecutionStatusHtml() throws Exception {
TimeMeasurement totalTimeMeasurement = new TimeMeasurement().start();
TimeMeasurement timeMeasurement = new TimeMeasurement();
formatter.setExecutionLogAndTrackingId("2", new CompositeExecutionLog(root.addChildPage("ErrorLogs")));
formatter.announceNumberTestsToRun(1);
formatter.newTestStarted(page, timeMeasurement.start());
formatter.testComplete(page, new TestSummary(4, 1, 0, 0), timeMeasurement.stop());
formatter.allTestingComplete(totalTimeMeasurement.stop());
assertSubString("Tests Executed OK", pageBuffer.toString());
}
public void testTail() throws Exception {
TimeMeasurement totalTimeMeasurement = new TimeMeasurement().start();
TimeMeasurement timeMeasurement = new TimeMeasurement();
formatter.announceNumberTestsToRun(1);
formatter.newTestStarted(page, timeMeasurement.start());
formatter.testComplete(page, new TestSummary(4, 1, 0, 0), timeMeasurement.stop());
formatter.allTestingComplete(totalTimeMeasurement.stop());
assertSubString("<strong>Assertions:</strong>", pageBuffer.toString());
}
public void testStop() throws Exception {
TimeMeasurement totalTimeMeasurement = new TimeMeasurement().start();
TimeMeasurement timeMeasurement = new TimeMeasurement();
formatter.setExecutionLogAndTrackingId("2", new CompositeExecutionLog(root.addChildPage("ErrorLogs")));
formatter.announceNumberTestsToRun(1);
formatter.newTestStarted(page, timeMeasurement.start());
formatter.testComplete(page, new TestSummary(4, 1, 0, 0), timeMeasurement.stop());
formatter.allTestingComplete(totalTimeMeasurement.stop());
//assert stop button added - double escaped, since it's in javascript
assertSubString("<a href=\\\"#\\\" onclick=\\\"doSilentRequest('?responder=stoptest&id=2')\\\" class=\\\"stop\\\">", pageBuffer.toString());
//assert stop button removed
assertSubString("document.getElementById(\"test-action\").innerHTML = \"\"", pageBuffer.toString());
}
public void testIncompleteMessageAfterException() throws Exception {
TimeMeasurement timeMeasurement = new TimeMeasurement();
formatter.setExecutionLogAndTrackingId("2", new CompositeExecutionLog(root.addChildPage("ErrorLogs")));
formatter.announceNumberTestsToRun(1);
formatter.newTestStarted(page, timeMeasurement.start());
pageBuffer.setLength(0);
formatter.errorOccured();
//assert stop button added
assertSubString("Testing was interupted", pageBuffer.toString());
//assert stop button removed
assertSubString("className = \"ignore\"", pageBuffer.toString());
}
public void testTimingShouldAppearInSummary() throws Exception {
TimeMeasurement totalTimeMeasurement = newConstantElapsedTimeMeasurement(987).start();
TimeMeasurement timeMeasurement = newConstantElapsedTimeMeasurement(600);
formatter.announceNumberTestsToRun(1);
formatter.newTestStarted(page, timeMeasurement.start());
formatter.testComplete(page, new TestSummary(1, 2, 3, 4), timeMeasurement.stop());
formatter.allTestingComplete(totalTimeMeasurement.stop());
assertSubString("<strong>Assertions:</strong> 1 right, 2 wrong, 3 ignored, 4 exceptions (0.600 seconds)", pageBuffer.toString());
}
private TimeMeasurement newConstantElapsedTimeMeasurement(final long theElapsedTime) {
return new TimeMeasurement() {
@Override
public long elapsed() {
return theElapsedTime;
}
};
}
}