01: // Copyright (C) 2003,2004,2005 by Object Mentor, Inc. All rights reserved.
02: // Released under the terms of the GNU General Public License version 2 or later.
03: package fitnesse.responders.run;
04:
05: import fitnesse.runner.*;
06: import fitnesse.*;
07: import fitnesse.components.FitProtocol;
08: import fitnesse.util.*;
09: import fitnesse.http.*;
10: import java.io.*;
11: import fit.Counts;
12:
13: public class TestResultFormattingResponder implements Responder {
14: public ResultFormatter formatter = new MockResultFormatter();
15: public Counts finalCounts;
16: private FitNesseContext context;
17: private String baseUrl;
18: private String rootPath;
19:
20: public Response makeResponse(FitNesseContext context,
21: Request request) throws Exception {
22: init(context, request);
23:
24: String results = (String) request.getInput("results");
25: byte[] bytes = results.getBytes("UTF-8");
26: processResults(new ByteArrayInputStream(bytes));
27:
28: InputStreamResponse response = new InputStreamResponse();
29: response.setBody(formatter.getResultStream(), formatter
30: .getByteCount());
31: // InputStream resultsStream = formatter.getResultStream();
32: // StreamReader reader = new StreamReader(resultsStream);
33: // response.setContent(reader.read(formatter.getByteCount()));
34:
35: return response;
36: }
37:
38: public void init(FitNesseContext context, Request request)
39: throws Exception {
40: this .context = context;
41: baseUrl = (String) request.getHeader("Host");
42: rootPath = (String) request.getResource();
43: formatter = makeFormatter(request);
44: }
45:
46: public void processResults(InputStream input) throws Exception {
47: StreamReader reader = new StreamReader(input);
48: boolean readingResults = true;
49: while (readingResults) {
50: int bytesToRead = FitProtocol.readSize(reader);
51: if (bytesToRead != 0) {
52: String resultString = reader.read(bytesToRead);
53: PageResult result = PageResult.parse(resultString);
54: formatter.acceptResult(result);
55: } else
56: readingResults = false;
57: }
58: formatter.acceptFinalCount(FitProtocol.readCounts(reader));
59: }
60:
61: public ResultFormatter makeFormatter(Request request)
62: throws Exception {
63: String format = (String) request.getInput("format");
64: if (format != null) {
65: if ("html".equals(format))
66: return new HtmlResultFormatter(context.htmlPageFactory,
67: baseUrl, rootPath);
68: if ("xml".equals(format))
69: return new XmlResultFormatter(baseUrl, rootPath);
70: }
71: return new MockResultFormatter();
72: }
73: }
|