// 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.responders.ErrorResponder; import fitnesse.runner.HtmlResultFormatter; import fitnesse.runner.MockResultFormatter; import fitnesse.runner.PageResult; import fitnesse.runner.ResultFormatter; import fitnesse.runner.XmlResultFormatter; 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); System.out.println("TestResultFormattingResponder"); 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 = (String) 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(); } }