// 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.runner;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import util.FileUtil;
import util.RegexTestCase;
import fitnesse.http.Request;
import fitnesse.responders.run.TestSummary;
import fitnesse.testutil.FitNesseUtil;
import fitnesse.wiki.InMemoryPage;
public class FormattingOptionTest extends RegexTestCase {
private ByteArrayOutputStream output;
private FormattingOption option;
private CachingResultFormatter formatter;
private PageResult result1;
private PageResult result2;
private TestSummary finalSummary;
private int port = FitNesseUtil.port;
public void setUp() throws Exception {
output = new ByteArrayOutputStream();
}
public void tearDown() throws Exception {
new File("testOutput.txt").delete();
}
public void testConstruction() throws Exception {
option = new FormattingOption("mock", "stdout", output, "localhost", 8081, "SomePage");
assertEquals("mock", option.format);
assertSame(output, option.output);
assertEquals("localhost", option.host);
assertEquals(8081, option.port);
assertEquals("SomePage", option.rootPath);
}
public void testConstructionWithFile() throws Exception {
option = new FormattingOption("mock", "testOutput.txt", output, "localhost", 8081, "SomePage");
assertEquals(FileOutputStream.class, option.output.getClass());
option.output.write("sample data".getBytes());
option.output.close();
assertEquals("sample data", FileUtil.getFileContent("testOutput.txt"));
}
public void testRawResults() throws Exception {
sampleFormatter();
option = new FormattingOption("raw", "stdout", output, "localhost", port, "SomePage");
option.process(formatter.getResultStream(), formatter.getByteCount());
String content = output.toString();
assertSubString(result1.toString(), content);
assertSubString(result2.toString(), content);
}
public void testRequest() throws Exception {
option = new FormattingOption("mock", "stdout", output, "localhost", 8081, "SomePage");
String requestString = option.buildRequest(new ByteArrayInputStream("test results".getBytes()), 12).getText();
Request request = new Request(new ByteArrayInputStream(requestString.getBytes()));
request.parse();
assertEquals("POST /SomePage HTTP/1.1", request.getRequestLine());
assertTrue(request.getHeader("Content-Type").toString().startsWith("multipart"));
assertEquals("localhost:8081", request.getHeader("Host"));
assertEquals("format", request.getInput("responder"));
assertEquals("mock", request.getInput("format"));
assertEquals("test results", request.getInput("results"));
}
public void testTheWholeDeal() throws Exception {
sampleFormatter();
FitNesseUtil.startFitnesse(InMemoryPage.makeRoot("RooT"));
try {
option = new FormattingOption("mock", "stdout", output, "localhost", port, "");
option.process(formatter.getResultStream(), formatter.getByteCount());
}
finally {
FitNesseUtil.stopFitnesse();
}
String result = output.toString();
assertSubString("Mock Results", result);
assertSubString(result1.toString(), result);
assertSubString(result2.toString(), result);
}
private void sampleFormatter() throws Exception {
formatter = new CachingResultFormatter();
result1 = new PageResult("ResultOne", new TestSummary(1, 2, 3, 4), "result one content");
result2 = new PageResult("ResultTwo", new TestSummary(4, 3, 2, 1), "result two content");
finalSummary = new TestSummary(5, 5, 5, 5);
formatter.acceptResult(result1);
formatter.acceptResult(result2);
formatter.acceptFinalCount(finalSummary);
}
}