package org.testng.internal;

import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.testng.*;
import org.testng.xml.XmlSuite;

public class ConsoleReporter implements IReporter {

  @Override
  public void generateReport(
      List<XmlSuite> xmlSuites, List<ISuite> suites, String outputDirectory) {
    for (ISuite suite : suites) {
      for (Map.Entry<String, ISuiteResult> testResult : suite.getResults().entrySet()) {
        Set<ITestResult> results =
            testResult.getValue().getTestContext().getFailedTests().getAllResults();
        if (results.isEmpty()) {
          continue;
        }
        System.out.println(
            "Failures in <suite> :" + suite.getName() + ", <test> :" + testResult.getKey());
        for (ITestResult result : results) {
          String c = result.getMethod().getRealClass().getName();
          String m = result.getMethod().getMethodName() + "()";
          System.out.println(c + "." + m);
          if (result.getThrowable() != null) {
            StringWriter sw = new StringWriter();
            PrintWriter writer = new PrintWriter(sw);
            result.getThrowable().printStackTrace(writer);
            System.out.printf("StackTrace:\n %s \n%n", Utils.filterTrace(sw.toString()));
          }
        }
      }
    }
  }
}
