// 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;
import java.io.ByteArrayOutputStream;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;
import util.RegexTestCase;
import fit.Counts;
import fit.FitProtocol;
import fitnesse.FitNesseContext;
import fitnesse.http.MockRequest;
import fitnesse.http.MockResponseSender;
import fitnesse.http.Response;
import fitnesse.runner.HtmlResultFormatter;
import fitnesse.runner.MockResultFormatter;
import fitnesse.runner.PageResult;
import fitnesse.runner.XmlResultFormatter;
import fitnesse.testutil.FitNesseUtil;
public class TestResultFormattingResponderTest extends RegexTestCase {
private PipedOutputStream output;
private PipedInputStream input;
private TestResultFormattingResponder responder;
private MockResultFormatter formatter;
private PageResult result1;
private PageResult result2;
private FitNesseContext context;
public void setUp() throws Exception {
output = new PipedOutputStream();
input = new PipedInputStream(output);
responder = new TestResultFormattingResponder();
formatter = new MockResultFormatter();
responder.formatter = formatter;
result1 = new PageResult("Result1Title", new TestSummary(1, 2, 3, 4), "result1 data");
result2 = new PageResult("Result2Title", new TestSummary(4, 3, 2, 1), "result2 data");
context = FitNesseUtil.makeTestContext(null);
}
public void testOneResult() throws Exception {
FitProtocol.writeData(result1.toString(), output);
FitProtocol.writeCounts(new Counts(0, 0, 0, 0), output);
responder.processResults(input);
assertEquals(1, formatter.results.size());
assertEquals(result1.toString(), formatter.results.get(0).toString());
}
public void testTwoResults() throws Exception {
FitProtocol.writeData(result1.toString(), output);
FitProtocol.writeData(result2.toString(), output);
FitProtocol.writeCounts(new Counts(0, 0, 0, 0), output);
responder.processResults(input);
assertEquals(2, formatter.results.size());
assertEquals(result1.toString(), formatter.results.get(0).toString());
assertEquals(result2.toString(), formatter.results.get(1).toString());
}
public void testFinalCounts() throws Exception {
FitProtocol.writeData(result1.toString(), output);
Counts counts = new Counts(1, 2, 3, 4);
FitProtocol.writeCounts(counts, output);
responder.processResults(input);
TestSummary summary = formatter.finalSummary;
assertEquals(counts.right, summary.getRight());
assertEquals(counts.wrong, summary.getWrong());
assertEquals(counts.ignores, summary.getIgnores());
assertEquals(counts.exceptions, summary.getExceptions());
}
public void testMakeResponse() throws Exception {
MockRequest request = new MockRequest();
ByteArrayOutputStream output = new ByteArrayOutputStream();
FitProtocol.writeData(result1.toString(), output);
FitProtocol.writeData(result2.toString(), output);
FitProtocol.writeCounts(new Counts(5, 5, 5, 5), output);
request.addInput("results", output.toString());
Response response = responder.makeResponse(context, request);
MockResponseSender sender = new MockResponseSender();
sender.doSending(response);
String html = sender.sentData();
assertSubString("Mock Results", html);
// assertTrue(html.startsWith("<!DOCTYPE html>"));
// assertTrue(html.endsWith("</html>"));
//
// assertSubString("<base href=\"http://somehost.com:8080/\"", html);
// assertSubString("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/>", html);
// assertSubString("href=\"/files/css/fitnesse_print.css\"", html);
// assertSubString("Command Line Test Results", html);
}
public void testMockFormatter() throws Exception {
checkFormatterCreated(null, MockResultFormatter.class);
}
public void testHtmlFormatter() throws Exception {
checkFormatterCreated("html", HtmlResultFormatter.class);
}
public void testXmlFormatter() throws Exception {
checkFormatterCreated("xml", XmlResultFormatter.class);
}
private void checkFormatterCreated(String format, Class<?> formatterClass) throws Exception {
MockRequest request = new MockRequest();
request.addHeader("Host", "locahost:8080");
request.setResource("/");
if (format != null)
request.addInput("format", format);
responder.init(context, request);
assertEquals(formatterClass, responder.formatter.getClass());
}
}