package org.test4j.spec.printer; import java.io.File; import java.util.ArrayList; import java.util.List; import org.test4j.spec.ISpec; import org.test4j.spec.inner.IScenario; import org.test4j.spec.inner.IScenarioStep; import org.test4j.tools.commons.ResourceHelper; public class HtmlFilePrinter extends AbstractPrinter { static String outputDir = System.getProperty("user.dir") + "/jspec-output/"; static String Default_Html_Style; static { try { Default_Html_Style = ResourceHelper.readFromFile(HtmlFilePrinter.class, "printer.css"); } catch (Exception e) { Default_Html_Style = ""; e.printStackTrace(); } } List<String> htmls = new ArrayList<String>(20); @Override public void printSummary(Class<? extends ISpec> spec) { StringBuilder summary = new StringBuilder(); summary.append("<html><head>"); summary.append("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />"); summary.append("<style>").append(Default_Html_Style).append("</style>"); summary.append("</head><body><div>"); for (String html : htmls) { summary.append(html); } summary.append("</div></body></html>"); ResourceHelper.writeStringToFile(new File(outputDir + getSpecHtmlFile(spec)), summary.toString()); htmls.clear(); } String getSpecHtmlFile(Class<? extends ISpec> spec) { String file = spec.getName().replace('.', '/'); return file + ".html"; } StringBuilder scenarioHtml = null; @Override protected void printHeader(ISpec spec, IScenario scenario) { scenarioHtml = new StringBuilder(); scenarioHtml.append("<table>"); scenarioHtml.append("<tr><th colspan=\"2\">").append(scenario.getName()).append("</th></tr>"); } @Override protected void printStep(IScenarioStep step) { scenarioHtml.append("<tr>"); String claz = this.getStyle(step); if (step.isFailure()) { scenarioHtml.append(String.format("<td rowspan=\"2\" class=\"%s\">", claz)); } else { scenarioHtml.append(String.format("<td class=\"%s\">", claz)); } scenarioHtml.append(step.getMethod()).append("</td>"); scenarioHtml.append("<td>").append(step.getDisplayText()); scenarioHtml.append("</td>"); scenarioHtml.append("</tr>"); if (step.isFailure()) { // String error = StringHelper.toString(step.getError()); String error = step.getError().getMessage(); error = error == null ? "" : error; scenarioHtml.append("<tr><td>").append(error.replaceAll("\\n", "<br/>")).append("</td></tr>"); } } @Override protected void printTailer(ISpec spec, IScenario scenario) { scenarioHtml.append("</table>"); htmls.add(this.scenarioHtml.toString()); scenarioHtml = null; } private String getStyle(IScenarioStep step) { if (step.isSuspend()) { return "suspend"; } else if (step.isSuccess()) { return "success"; } else { return "failure"; } } }