forked from unclebob/fitnesse
/
TestResultFormattingResponder.java
81 lines (72 loc) · 2.82 KB
/
TestResultFormattingResponder.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
// 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.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import util.StreamReader;
import fit.Counts;
import fit.FitProtocol;
import fitnesse.FitNesseContext;
import fitnesse.Responder;
import fitnesse.http.InputStreamResponse;
import fitnesse.http.Request;
import fitnesse.http.Response;
import fitnesse.runner.HtmlResultFormatter;
import fitnesse.runner.MockResultFormatter;
import fitnesse.runner.PageResult;
import fitnesse.runner.ResultFormatter;
import fitnesse.runner.XmlResultFormatter;
import fitnesse.testsystems.TestSummary;
/**
* This responder works in conjunction with the {@link fitnesse.runner.FormattingOption} class.
*/
public class TestResultFormattingResponder implements Responder {
public ResultFormatter formatter = new MockResultFormatter();
public Counts finalCounts;
private FitNesseContext context;
private String baseUrl;
private String rootPath;
public Response makeResponse(FitNesseContext context, Request request) throws Exception {
init(context, request);
String results = (String) request.getInput("results");
byte[] bytes = results.getBytes("UTF-8");
processResults(new ByteArrayInputStream(bytes));
InputStreamResponse response = new InputStreamResponse();
response.setBody(formatter.getResultStream(), formatter.getByteCount());
return response;
}
public void init(FitNesseContext context, Request request) throws IOException {
this.context = context;
baseUrl = (String) request.getHeader("Host");
rootPath = request.getResource();
formatter = makeFormatter(request);
}
public void processResults(InputStream input) throws Exception {
StreamReader reader = new StreamReader(input);
boolean readingResults = true;
while (readingResults) {
int bytesToRead = FitProtocol.readSize(reader);
if (bytesToRead != 0) {
String resultString = reader.read(bytesToRead);
PageResult result = PageResult.parse(resultString);
formatter.acceptResult(result);
} else
readingResults = false;
}
Counts counts = FitProtocol.readCounts(reader);
TestSummary testSummary =
new TestSummary(counts.right, counts.wrong, counts.ignores, counts.exceptions);
formatter.acceptFinalCount(testSummary);
}
public ResultFormatter makeFormatter(Request request) throws IOException {
String format = (String) request.getInput("format");
if (format != null) {
if ("html".equals(format))
return new HtmlResultFormatter(context, baseUrl, rootPath);
if ("xml".equals(format))
return new XmlResultFormatter(baseUrl, rootPath);
}
return new MockResultFormatter();
}
}