package org.testng.xml;

import org.testng.TestNGException;
import org.testng.remote.strprotocol.GenericMessage;
import org.testng.remote.strprotocol.IRemoteSuiteListener;
import org.testng.remote.strprotocol.IRemoteTestListener;
import org.testng.remote.strprotocol.SuiteMessage;
import org.testng.remote.strprotocol.TestMessage;
import org.testng.remote.strprotocol.TestResultMessage;
import org.xml.sax.SAXException;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;

/**
 * Parses testng-result.xml.
 *
 * @see ResultContentHandler
 *
 * @author Cedric Beust <cedric@beust.com>
 */
public class ResultXMLParser extends XMLParser<Object> {
  private IRemoteTestListener m_testListener;
  private IRemoteSuiteListener m_suiteListener;

  public ResultXMLParser(IRemoteSuiteListener suiteListener, IRemoteTestListener testListener) {
    m_suiteListener = suiteListener;
    m_testListener = testListener;
  }

  public void parse() {
  }

  @Override
  public Object parse(String currentFile, InputStream inputStream, boolean loadClasses) {
    ResultContentHandler handler = new ResultContentHandler(m_suiteListener, m_testListener,
        loadClasses);

    try {
      m_saxParser.parse(inputStream, handler);

      return null;
    }
    catch (FileNotFoundException e) {
      throw new TestNGException(e);
    } catch (SAXException e) {
      throw new TestNGException(e);
    } catch (IOException e) {
      throw new TestNGException(e);
    }
  }

  public static void main(String[] args) throws FileNotFoundException {
    IRemoteSuiteListener l1 = new IRemoteSuiteListener() {

      @Override
      public void onInitialization(GenericMessage genericMessage) {
      }

      @Override
      public void onStart(SuiteMessage suiteMessage) {
      }

      @Override
      public void onFinish(SuiteMessage suiteMessage) {
      }

    };

    IRemoteTestListener l2 = new IRemoteTestListener() {

      @Override
      public void onStart(TestMessage tm) {
      }

      @Override
      public void onFinish(TestMessage tm) {
      }

      @Override
      public void onTestStart(TestResultMessage trm) {
      }

      @Override
      public void onTestSuccess(TestResultMessage trm) {
      }

      @Override
      public void onTestFailure(TestResultMessage trm) {
      }

      @Override
      public void onTestSkipped(TestResultMessage trm) {
      }

      @Override
      public void onTestFailedButWithinSuccessPercentage(TestResultMessage trm) {
      }

    };
    ResultXMLParser parser = new ResultXMLParser(l1, l2);
    String fileName = "/Users/cbeust/java/testng/test-output/testng-results.xml";
    parser.parse(fileName, new FileInputStream(new File(fileName)), false /* don't load classes */);
  }
}
