Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package com.selgp.moladek.core.reporters;
  
  import  org.testng.ITestContext;
  import  org.testng.ITestNGMethod;
  import  org.testng.ITestResult;
  import  org.testng.TestListenerAdapter;
  import  org.testng.internal.Utils;
 import  org.testng.log4testng.Logger;
 
 import java.io.*;
 import java.util.*;

A simple reporter that collects and prints failures in HTML.

Author(s):
guillem.hernandez
 
 public class HtmlFailureReporter extends TestListenerAdapter {
 
     private static final Logger LOGGER = Logger.getLogger(HtmlFailureReporter.class);
 
     private String methodTestName = null;
     private PrintWriter methodOutput;
 
     public HtmlFailureReporter() {
          = TestRunner.getInstance()..toString();
     }
 
     public HtmlFailureReporter(String testName) {
          = testName;
     }
 
     @Override
     public void onFinish(ITestContext context) {
     }
 
     private ITestNGMethod[] resultsToMethods(List<ITestResult> results) {
         ITestNGMethod[] result = new ITestNGMethod[results.size()];
         int i = 0;
         for (ITestResult tr : results) {
             result[i++] = tr.getMethod();
         }
 
         return result;
     }
 
     private Map<StringStringgetAttributeMap(ITestResult tr) {
         Map<StringStringattributes = new HashMap<StringString>();
         for (String attribute : tr.getAttributeNames()) {
             attributes.put(attributetr.getAttribute(attribute).toString());
         }
 
         return attributes;
     }
 
     private void logResults() {
         .println("<table><tbody>");
         List<StringtestResults = new ArrayList<String>();
 
         // Log Text
         for (Object o : getConfigurationFailures()) {
             ITestResult tr = (ITestResult) o;
             String stackTrace = getErrorMessage(tr);
 
             testResults.add(getLogResult(Utils.detailedMethodName(tr.getMethod(), false), tr.getMethod()
                     .getDescription(), stackTracetr.getParameters(), tr.getMethod()
                     .getConstructorOrMethod().getParameterTypes(), getAttributeMap(tr), getStackReport(tr)));
         }
         sortLogAndClearResults("FAILED CONFIGURATION"testResults);
 
         for (Object o : getConfigurationSkips()) {
             ITestResult tr = (ITestResult) o;
             String stackTrace = getErrorMessage(tr);
 
             testResults.add(getLogResult(Utils.detailedMethodName(tr.getMethod(), false), tr.getMethod()
                     .getDescription(), stackTracetr.getParameters(), tr.getMethod()
                     .getConstructorOrMethod().getParameterTypes(), getAttributeMap(tr), getStackReport(tr)));
         }
         sortLogAndClearResults("SKIPPED CONFIGURATION"testResults);
 
     /*
      * Do not log Passed tests for (Object o : getPassedTests()) { ITestResult
      * tr = (ITestResult) o; logResult("PASSED", tr.getName(),
      * tr.getMethod().getDescription(), null, tr.getParameters(),
      * tr.getMethod().getMethod().getParameterTypes()); }
      */
 
         for (Object o : getFailedTests()) {
             ITestResult tr = (ITestResult) o;
             String stackTrace = getErrorMessage(tr);
 
             testResults.add(getLogResult(tr.getName(), tr.getMethod().getDescription(), stackTrace,
                     tr.getParameters(), tr.getMethod().getConstructorOrMethod().getParameterTypes(),
                     getAttributeMap(tr), getStackReport(tr)));
         }
        sortLogAndClearResults("FAILED"testResults);
        for (Object o : getSkippedTests()) {
            ITestResult tr = (ITestResult) o;
            String stackTrace = getErrorMessage(tr);
            testResults.add(getLogResult(tr.getName(), tr.getMethod().getDescription(), stackTrace,
                    tr.getParameters(), tr.getMethod().getConstructorOrMethod().getParameterTypes(),
                    getAttributeMap(tr), getStackReport(tr)));
        }
        sortLogAndClearResults("SKIPPED"testResults);
        .println("</tbody></table>");
    }
    private String getStackReport(ITestResult tr) {
        StringBuffer sb = new StringBuffer();
        Throwable tw = tr.getThrowable();
        String fullStackTrace = "";
        String id = "stack-trace" + tr.hashCode();
        if (tw != null) {
            String[] stackTraces = Utils.stackTrace(twtrue);
            fullStackTrace = stackTraces[1];
            // JavaScript link
            sb.append("<br><a href='#' onClick='toggleBox(\"").append(id)
                    .append("\", this, \"click to show stack trace\", \"click to hide stack trace\"); ")
                    .append("return false'>").append("click to show stack trace").append("</a>\n")
                    .append("<div class='stack-trace' id='" + id + "' style='display: none;'>")
                    .append("<pre>" + fullStackTrace + "</pre>").append("</div>");
        }
        return sb.toString();
    }
    private void sortLogAndClearResults(String statusList<StringtestResults) {
        Collections.sort(testResults, Collator.getInstance());
        for (String result : testResults) {
            logResult(statusresult);
        }
        testResults.clear();
    }
    private void logResume() {
        ITestNGMethod[] ft = resultsToMethods(getFailedTests());
        ITestNGMethod[] pt = resultsToMethods(getPassedTests());
        StringBuffer logBuf =
                new StringBuffer("<br>===============================================<br>");
        logBuf.append("    ").append("Suite: " + ).append("<br>");
        logBuf.append("    Total Tests: ")
                .append(Utils.calculateInvokedMethodCount(getAllTestMethods())).append(", Passes: ")
                .append(Utils.calculateInvokedMethodCount(pt)).append(", Failures: ")
                .append(Utils.calculateInvokedMethodCount(ft)).append(", Skips: ")
                .append(Utils.calculateInvokedMethodCount(resultsToMethods(getSkippedTests())));
        int confFailures = getConfigurationFailures().size();
        int confSkips = getConfigurationSkips().size();
        if (confFailures > 0 || confSkips > 0) {
            logBuf.append("<br>").append("    Configuration Failures: ").append(confFailures)
                    .append(", Skips: ").append(confSkips);
        }
        logBuf.append("<br>===============================================<br><br>");
        logResult(""logBuf.toString());
    }
    private String getName() {
        return ;
    }
    private void logResult(String statusString message) {
        StringBuffer buf = new StringBuffer();
        if (!"".equals(status)) {
            buf.append("<tr class=\"" + status.toLowerCase() + "odd" + "\"><td");
            // Group it if has retry analizer and it's not the first failure
            if ((message.contains("Retry: ")) && (!message.contains("Retry: 0"))) {
                buf.append(" style=\"background-color: white;\">");
            } else {
                buf.append(">").append(status).append(": ");
            }
            buf.append("</td>");
        }
        buf.append(message);
        buf.append("</td></tr>");
        .print(buf.toString());
    }
    private String getLogResult(String nameString descriptionString stackTraceObject[] params,
                                @SuppressWarnings("rawtypes"Class[] paramTypesMap<StringStringattributes,
                                String stackTraceReport) {
        StringBuffer msg = new StringBuffer("\n<td><strong>" + name + "</strong>");
        if ((params != null) || (attributes.size() > 0)) {
            msg.append(" [");
            // The error might be a data provider parameter mismatch, so make
            // a special case here
            if (params != null) {
                if (params.length != paramTypes.length) {
                    msg.append("<br>" + name + ": Wrong number of arguments were passed by "
                            + "the Data Provider: found " + params.length + " but " + "expected "
                            + paramTypes.length + ")");
                } else {
                    for (int i = 0; i < params.lengthi++) {
                        if (i > 0) {
                            msg.append("<br>");
                        }
                        msg.append(Utils.toString(params[i], paramTypes[i]));
                        if (i == 0) { // first parameter is the line index
                            msg.append("]");
                        }
                    }
                }
            }
            int i = 0;
            for (String attribute : attributes.keySet()) {
                if (i > 0) {
                    msg.append("<br>");
                }
                msg.append(attribute + ": " + attributes.get(attribute));
                if (i == 0) { // first parameter is the line index
                    msg.append("]");
                }
                i++;
            }
            msg.append("</td></tr>");
            msg.append("<tr><td></td><td>");
            // stack trace
            msg.append("\n<tr><td></td><td>").append(stackTrace).append(stackTraceReport)
                    .append("</td></tr>");
        }
    /*
     * Do not log descriptions if (!Utils.isStringEmpty(description)) {
     * msg.append("\n"); for (int i = 0; i < status.length() + 2; i++) {
     * msg.append(" "); } msg.append(description); }
     */
        return msg.toString();
    }
    public void ppp(String s) {
        ..println("[TextReporter " + getName() + "] " + s);
    }
    private void generateReport(String outdir) {
        try {
             = createWriter(outdir);
        } catch (IOException e) {
            .error("output file"e);
            return;
        }
        startHtml();
        logResume();
        logResults();
        endHtml();
        .flush();
        .close();
        .info("Report stored in: " + outdir);
    }
    private PrintWriter createWriter(String outdirthrows IOException {
        new File(outdir).mkdirs();
        return new PrintWriter(new BufferedWriter(new FileWriter(new File(outdir,
                TestRunner.getInstance(). + ".html"))));
    }

    
Starts HTML stream.
    private void startHtml(PrintWriter out) {
        HtmlReporterUtil.startHtml(out);
        addJScode(out);
    }
    private void addJScode(PrintWriter out) {
        out.println("<script type=\"text/javascript\">" + "function flip(e) {"
                + "current = e.style.display;" + "if (current == 'block') {" + "e.style.display = 'none';"
                + "return 0;" + "}" + "else {" + "e.style.display = 'block';" + "return 1;" + "}" + "}"
                + "function toggleBox(szDivId, elem, msg1, msg2) {"
                + "var res = -1;  if (document.getElementById) {"
                + "res = flip(document.getElementById(szDivId));" + "}"
                + "else if (document.all) {"
                // this is the way old msie versions work
                + "res = flip(document.all[szDivId]);" + "}" + "if(elem) {"
                + "if(res == 0) elem.innerHTML = msg1; else elem.innerHTML = msg2;" + "}" + "}"
                + "</script>");
    }

    
Finishes HTML stream.
    private void endHtml(PrintWriter out) {
        out.println("</body></html>");
    }
    private String getErrorMessage(ITestResult tr) {
        Throwable ex = tr.getThrowable();
        String error = "Unknown reason, probably due to an unsatisfied configuration";
        if (ex != null) {
            error = StringEscapeUtils.escapeHtml(ex.getMessage());
        }
        return error;
    }
New to GrepCode? Check out our FAQ X