Package org.testng.reporters

Source Code of org.testng.reporters.JUnitReportReporter

package org.testng.reporters;

import org.testng.IReporter;
import org.testng.ISuite;
import org.testng.ISuiteResult;
import org.testng.ITestContext;
import org.testng.ITestResult;
import org.testng.collections.Lists;
import org.testng.collections.Maps;
import org.testng.internal.Utils;
import org.testng.internal.annotations.Sets;
import org.testng.xml.XmlSuite;

import java.io.File;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;

public class JUnitReportReporter implements IReporter {

  @Override
  public void generateReport(List<XmlSuite> xmlSuites, List<ISuite> suites,
      String defaultOutputDirectory) {

    String outputDirectory = defaultOutputDirectory + File.separator + "junitreports";
    Map<Class<?>, Set<ITestResult>> results = Maps.newHashMap();
    for (ISuite suite : suites) {
      Map<String, ISuiteResult> suiteResults = suite.getResults();
      for (ISuiteResult sr : suiteResults.values()) {
        ITestContext tc = sr.getTestContext();
        addResults(tc.getPassedTests().getAllResults(), results);
        addResults(tc.getFailedTests().getAllResults(), results);
        addResults(tc.getSkippedTests().getAllResults(), results);
      }
    }

    for (Map.Entry<Class<?>, Set<ITestResult>> entry : results.entrySet()) {
      Class<?> cls = entry.getKey();
      Properties p1 = new Properties();
      p1.setProperty("name", cls.getName());
      Date timeStamp = Calendar.getInstance().getTime();
      p1.setProperty(XMLConstants.ATTR_TIMESTAMP, timeStamp.toGMTString());

      List<Properties> testCases = Lists.newArrayList();
      int failures = 0;
      int testCount = 0;
      int totalTime = 0;

      for (ITestResult tr: entry.getValue()) {
        if (tr.getStatus() != ITestResult.SUCCESS) failures++;
        Properties p2 = new Properties();
        p2.setProperty("classname", tr.getMethod().getMethod().getDeclaringClass().getName());
        p2.setProperty("name", tr.getMethod().getMethodName());
        long time = tr.getEndMillis() - tr.getStartMillis();
        p2.setProperty("time", "" + time);
        totalTime += time;
        testCount++;
        testCases.add(p2);
      }

      p1.setProperty("failures", "" + failures);
      p1.setProperty("errors", "" + 0);
      p1.setProperty("name", cls.getName());
      p1.setProperty("tests", "" + testCount);
      p1.setProperty("time", "" + totalTime);
      try {
        p1.setProperty(XMLConstants.ATTR_HOSTNAME, InetAddress.getLocalHost().getHostName());
      } catch (UnknownHostException e) {
        // ignore
      }

      //
      // Now that we have all the information we need, generate the file
      //
      XMLStringBuffer xsb = new XMLStringBuffer("");
      xsb.setXmlDetails("1.0", "UTF-8");
      xsb.addComment("Generated by " + getClass().getName());

      xsb.push("testsuite", p1);
      for (Properties p : testCases) {
        xsb.addEmptyElement("testcase", p);
      }
      xsb.pop("testsuite");

      String fileName = "TEST-" + cls.getName() + ".xml";
      Utils.writeFile(outputDirectory, fileName, xsb.toXML());
    }

//    System.out.println(xsb.toXML());
//    System.out.println("");

  }

  private void addResults(Set<ITestResult> allResults, Map<Class<?>, Set<ITestResult>> out) {
    for (ITestResult tr : allResults) {
      Class<?> cls = tr.getMethod().getMethod().getDeclaringClass();
      Set<ITestResult> l = out.get(cls);
      if (l == null) {
        l = Sets.newHashSet();
        out.put(cls, l);
      }
      l.add(tr);
    }
  }

}
TOP

Related Classes of org.testng.reporters.JUnitReportReporter

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.