// 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 fitnesse.responders.PageFactory;
import fitnesse.responders.run.TestPage;
import util.RegexTestCase;
import util.TimeMeasurement;
import fitnesse.FitNesseContext;
import fitnesse.responders.run.TestSummary;
import fitnesse.responders.templateUtilities.HtmlPage;
import fitnesse.testutil.FitNesseUtil;
import fitnesse.wiki.WikiPageDummy;
public class SuiteHtmlFormatterTest extends RegexTestCase {
//private HtmlPage htmlPage;
private SuiteHtmlFormatter formatter;
private StringBuffer pageBuffer = new StringBuffer();
public void setUp() throws Exception {
FitNesseContext context = FitNesseUtil.makeTestContext();
//htmlPage = context.pageFactory.newPage();
formatter = new SuiteHtmlFormatter(context) {
@Override
protected void writeData(String output) {
pageBuffer.append(output);
}
};
}
public void tearDown() throws Exception {
}
public void testTestSummary() throws Exception {
formatter.processTestResults("TestName", new TestSummary(49, 0, 0, 0));
formatter.processTestResults("TestName2", new TestSummary(1, 0, 2, 0));
formatter.processTestResults("TestName3", new TestSummary(1, 1, 0, 0));
formatter.finishWritingOutput();
assertSubString("<strong>Test Pages:</strong> 2 right, 1 wrong, 0 ignored, 0 exceptions", pageBuffer.toString());
assertSubString("<strong>Assertions:</strong> 51 right, 1 wrong, 2 ignored, 0 exceptions", pageBuffer.toString());
}
private void testSuiteMetaTestSummaryWithTestResults(String pageName) throws Exception {
formatter.processTestResults(pageName, new TestSummary(2, 0, 0, 0));
formatter.finishWritingOutput();
assertSubString("<span class=\\\"results pass\\\">2 right, 0 wrong, 0 ignored, 0 exceptions</span>", pageBuffer.toString());
assertSubString("<strong>Test Pages:</strong> 1 right, 0 wrong, 0 ignored, 0 exceptions", pageBuffer.toString());
assertSubString("<strong>Assertions:</strong> 2 right, 0 wrong, 0 ignored, 0 exceptions", pageBuffer.toString());
}
public void testSuiteSetUpSummaryWithTestResults() throws Exception {
testSuiteMetaTestSummaryWithTestResults("SuiteSetUp");
}
public void testSuiteTearDownSummaryWithTestResults() throws Exception {
testSuiteMetaTestSummaryWithTestResults("SuiteTearDown");
}
private void testSuiteMetaTestSummaryWithoutTestResults(String pageName) throws Exception {
formatter.processTestResults(pageName, new TestSummary(0, 0, 0, 0));
formatter.finishWritingOutput();
assertSubString("<span class=\\\"results pass\\\">0 right, 0 wrong, 0 ignored, 0 exceptions</span>", pageBuffer.toString());
assertSubString("<strong>Test Pages:</strong> 1 right, 0 wrong, 0 ignored, 0 exceptions", pageBuffer.toString());
assertSubString("<strong>Assertions:</strong> 0 right, 0 wrong, 0 ignored, 0 exceptions", pageBuffer.toString());
}
public void testSuiteSetUpSummaryWithoutTestResults() throws Exception {
testSuiteMetaTestSummaryWithoutTestResults("SuiteSetUp");
}
public void testSuiteTearDownSummaryWithoutTestResults() throws Exception {
testSuiteMetaTestSummaryWithoutTestResults("SuiteTearDown");
}
public void testCountsHtml() throws Exception {
formatter.processTestResults("RelativePageName", new TestSummary(1, 0, 0, 0));
assertSubString("<span class=\\\"results pass\\\">1 right, 0 wrong, 0 ignored, 0 exceptions</span>", pageBuffer.toString());
assertSubString("<a href=\\\"#RelativePageName0\\\" class=\\\"link\\\">RelativePageName</a>", pageBuffer.toString());
pageBuffer.setLength(0);
formatter.processTestResults("AnotherPageName", new TestSummary(0, 1, 0, 0));
assertSubString("<span class=\\\"results fail\\\">0 right, 1 wrong, 0 ignored, 0 exceptions</span>", pageBuffer.toString());
assertSubString("<a href=\\\"#AnotherPageName0\\\" class=\\\"link\\\">AnotherPageName</a>", pageBuffer.toString());
}
public void testResultsHtml() throws Exception {
formatter.testSystemStarted(null, "Fit", "laughing.fit");
formatter.announceNumberTestsToRun(2);
formatter.announceStartNewTest("RelativeName", "FullName");
formatter.testOutputChunk("starting");
formatter.testOutputChunk(" output");
formatter.processTestResults("RelativeName", new TestSummary(1, 0, 0, 0));
formatter.testSystemStarted(null, "Slim", "very.slim");
formatter.announceStartNewTest("NewRelativeName", "NewFullName");
formatter.testOutputChunk("second");
formatter.testOutputChunk(" test");
formatter.processTestResults("NewRelativeName", new TestSummary(0, 1, 0, 0));
formatter.finishWritingOutput();
String results = pageBuffer.toString();
assertSubString("<h2>Test Output</h2>", results);
assertSubString("<h2>Test System: Slim:very.slim</h2>", results);
assertSubString("<div class=\"test_output_name\">", results);
assertSubString("<a href=\"FullName\" id=\"RelativeName1\" class=\"test_name\">RelativeName</a>", results);
assertSubString("<div class=\"alternating_block\">starting output</div>", results);
assertSubString("<a href=\"NewFullName\" id=\"NewRelativeName2\" class=\"test_name\">NewRelativeName</a>", results);
assertSubString("<div class=\"alternating_block\">second test</div>", results);
}
public void testTestingProgressIndicator() throws Exception {
formatter.testSystemStarted(null, "Fit", "laughing.fit");
formatter.announceNumberTestsToRun(20);
formatter.announceStartNewTest("RelativeName", "FullName");
assertSubString("<script>document.getElementById(\"test-summary\").innerHTML =" +
" \"<div id=\\\"progressBar\\\" class=\\\"pass\\\" style=\\\"width:0.0%\\\">", pageBuffer.toString());
assertSubString("Running tests ... (1/20)", pageBuffer.toString());
pageBuffer.setLength(0);
formatter.processTestResults("RelativeName", new TestSummary(1, 0, 0, 0));
formatter.announceStartNewTest("RelativeName", "FullName");
assertSubString("<script>document.getElementById(\"test-summary\").innerHTML =" +
" \"<div id=\\\"progressBar\\\" class=\\\"pass\\\" style=\\\"width:5.0%\\\">", pageBuffer.toString());
assertSubString("(2/20)", pageBuffer.toString());
pageBuffer.setLength(0);
formatter.processTestResults("RelativeName", new TestSummary(1, 0, 0, 0));
formatter.announceStartNewTest("RelativeName", "FullName");
assertSubString("<script>document.getElementById(\"test-summary\").innerHTML =" +
" \"<div id=\\\"progressBar\\\" class=\\\"pass\\\" style=\\\"width:10.0%\\\">", pageBuffer.toString());
assertSubString("(3/20)", pageBuffer.toString());
}
public void testTotalTimingShouldAppearInSummary() throws Exception {
TimeMeasurement totalTimeMeasurement = newConstantElapsedTimeMeasurement(900).start();
TimeMeasurement timeMeasurement = newConstantElapsedTimeMeasurement(666);
formatter.page = new WikiPageDummy();
formatter.announceNumberTestsToRun(1);
TestPage firstPage = new TestPage(new WikiPageDummy("page1", "content"));
formatter.newTestStarted(firstPage, timeMeasurement.start());
formatter.testComplete(firstPage, 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.900 seconds)", pageBuffer.toString());
}
public void testIndividualTestTimingsShouldAppearInSummary() throws Exception {
TimeMeasurement totalTimeMeasurement = newConstantElapsedTimeMeasurement(900).start();
TimeMeasurement firstTimeMeasurement = newConstantElapsedTimeMeasurement(670);
TimeMeasurement secondTimeMeasurement = newConstantElapsedTimeMeasurement(890);
formatter.page = new WikiPageDummy();
formatter.announceNumberTestsToRun(2);
TestPage firstPage = new TestPage(new WikiPageDummy("page1", "content"));
TestPage secondPage = new TestPage(new WikiPageDummy("page2", "content"));
formatter.newTestStarted(firstPage, firstTimeMeasurement.start());
formatter.testComplete(firstPage, new TestSummary(1, 2, 3, 4), firstTimeMeasurement.stop());
formatter.newTestStarted(secondPage, secondTimeMeasurement.start());
formatter.testComplete(secondPage, new TestSummary(5, 6, 7, 8), secondTimeMeasurement.stop());
formatter.allTestingComplete(totalTimeMeasurement.stop());
assertHasRegexp("<li.*\\(page1\\).*<span.*>\\(0\\.670 seconds\\)</span>.*</li>", pageBuffer.toString());
assertHasRegexp("<li.*\\(page2\\).*<span.*>\\(0\\.890 seconds\\)</span>.*</li>", pageBuffer.toString());
}
private TimeMeasurement newConstantElapsedTimeMeasurement(final long theElapsedTime) {
return new TimeMeasurement() {
@Override
public long elapsed() {
return theElapsedTime;
}
};
}
}