All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.testng.reporters.TextReporter Maven / Gradle / Ivy

There is a newer version: 7.10.1
Show newest version
package org.testng.reporters;

import static org.testng.internal.Utils.isStringNotBlank;

import org.testng.ITestContext;
import org.testng.ITestNGMethod;
import org.testng.ITestResult;
import org.testng.TestListenerAdapter;
import org.testng.internal.Utils;

import java.util.ArrayList;
import java.util.List;

/**
 * A simple reporter that collects the results and prints them on standard out.
 */
public class TextReporter extends TestListenerAdapter {

  private final int m_verbose;
  private final String m_testName;

  public TextReporter(String testName, int verbose) {
    m_testName = testName;
    m_verbose = verbose;
  }

  @Override
  public void onFinish(ITestContext context) {
    if (m_verbose >= 2) {
      logResults();
    }
  }

  private static List resultsToMethods(List results) {
    List result = new ArrayList<>(results.size());
    for (ITestResult tr : results) {
      result.add(tr.getMethod());
    }

    return result;
  }

  private void logResults() {
    // Log Text
    for (ITestResult tr : getConfigurationFailures()) {
      Throwable ex = tr.getThrowable();
      String stackTrace = "";
      if (ex != null && m_verbose >= 2) {
        stackTrace = Utils.shortStackTrace(ex, false);
      }

      logResult("FAILED CONFIGURATION",
          Utils.detailedMethodName(tr.getMethod(), false),
          tr.getMethod().getDescription(),
          stackTrace,
          tr.getParameters(),
          tr.getMethod().getConstructorOrMethod().getParameterTypes()
      );
    }

    for (ITestResult tr : getConfigurationSkips()) {
      logResult("SKIPPED CONFIGURATION",
          Utils.detailedMethodName(tr.getMethod(), false),
          tr.getMethod().getDescription(),
          null,
          tr.getParameters(),
          tr.getMethod().getConstructorOrMethod().getParameterTypes()
      );
    }

    for (ITestResult tr : getPassedTests()) {
      logResult("PASSED", tr, null);
    }

    for (ITestResult tr : getFailedTests()) {
      Throwable ex = tr.getThrowable();
      String stackTrace= "";
      if (ex != null && m_verbose >= 2) {
        stackTrace= Utils.shortStackTrace(ex, false);
      }

      logResult("FAILED", tr, stackTrace);
    }

    for (ITestResult tr : getSkippedTests()) {
      Throwable throwable = tr.getThrowable();
      logResult("SKIPPED", tr, throwable != null ? Utils.shortStackTrace(throwable, false) : null);
    }

    List ft = resultsToMethods(getFailedTests());
    StringBuilder logBuf = new StringBuilder("\n===============================================\n");
    logBuf.append("    ").append(m_testName).append("\n");
    logBuf.append("    Tests run: ").append(Utils.calculateInvokedMethodCount(getAllTestMethods()))
        .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("\n").append("    Configuration Failures: ").append(confFailures)
          .append(", Skips: ").append(confSkips);
    }
    logBuf.append("\n===============================================\n");
    logResult("", logBuf.toString());
  }

  private void logResult(String status, ITestResult tr, String stackTrace) {
    logResult(status, tr.getName(), tr.getMethod().getDescription(), stackTrace,
        tr.getParameters(), tr.getMethod().getConstructorOrMethod().getParameterTypes());
  }

  private void logResult(String status, String message) {
    StringBuilder buf = new StringBuilder();
    if(isStringNotBlank(status)) {
      buf.append(status).append(": ");
    }
    buf.append(message);

    System.out.println(buf);
  }

  private void logResult(String status, String name,
          String description, String stackTrace,
          Object[] params, Class[] paramTypes) {
    StringBuilder msg = new StringBuilder(name);

    if (null != params && params.length > 0) {
      msg.append("(");

      // The error might be a data provider parameter mismatch, so make
      // a special case here
      if (params.length != paramTypes.length) {
        msg.append(name).append(": Wrong number of arguments were passed by ")
                .append("the Data Provider: found ").append(params.length).append(" but ")
                .append("expected ").append(paramTypes.length)
                .append(")");
      } else {
        for (int i= 0; i < params.length; i++) {
          if (i > 0) {
            msg.append(", ");
          }
          msg.append(Utils.toString(params[i], paramTypes[i]));
        }

        msg.append(")");
      }
    }
    if (!Utils.isStringEmpty(description)) {
      msg.append("\n");
      for (int i = 0; i < status.length() + 2; i++) {
        msg.append(" ");
      }
      msg.append(description);
    }
    if (!Utils.isStringEmpty(stackTrace)) {
      msg.append("\n").append(stackTrace);
    }

    logResult(status, msg.toString());
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy