package net.sourceforge.phpeclipse.phpunit;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.xml.parsers.FactoryConfigurationError;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class XMLReportHandler extends DefaultHandler {
private PHPUnitView view;
private String currentCommand;
private String currentTestCount;
private String currentTestID;
public void handle(String report, PHPUnitView view) {
//TODO : how to parse directly a string?
// now doing it with a stream.
this.view = view;
SAXParser parser;
System.out.println("handling: " + report);
try {
File file = new File("tmp2.xml");
FileOutputStream out = null;
FileInputStream in = null;
out = new FileOutputStream(file);
//OutputStreamWriter outS = new OutputStreamWriter(out, UTF8);
report += "\n \r";
out.write(report.getBytes("UTF8"));
out.close();
in = new FileInputStream(file);
parser = SAXParserFactory.newInstance().newSAXParser();
parser.parse(in, this);
in.close();
file.delete();
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FactoryConfigurationError e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/* (non-Javadoc)
* @see org.xml.sax.ContentHandler#endElement(java.lang.String, java.lang.String, java.lang.String)
*/
public void endElement(String arg0, String arg1, String elementName)
throws SAXException {
// send this current command to view
}
/* (non-Javadoc)
* @see org.xml.sax.ContentHandler#startElement(java.lang.String, java.lang.String, java.lang.String, org.xml.sax.Attributes)
*/
public void startElement(
String arg0,
String arg1,
String elementName,
Attributes attributes)
throws SAXException {
System.out.println(arg0 + " - " + arg1 + " - " + elementName);
if(elementName == "report") {
currentCommand = attributes.getValue("command");
currentTestCount = attributes.getValue("testCount");
currentTestID = attributes.getValue("testID");
//view.handleCommand(currentCommand, currentTestCount, currentTestID);
if (currentCommand == "testStarted") {
//view.createNewTest("testName", currentTestID);
//view.markTestStarted(currentTestID);
} else if (currentCommand == "testFinished") {
// do nothing wait for verdict
} else if (currentCommand == "endAll") {
//view.markTestingFinished();
}
} else if (elementName == "verdict") {
String verdict = attributes.getValue("desc");
// if( verdict == "passed")
// view.markTestPassed(currentTestID);
// else
// view.markTestFail(currentTestID);
} else if (elementName == "exceptions") {
} else if (elementName == "exception") {
}
}
public static void main(String[] args) {
XMLReportHandler handler = new XMLReportHandler();
String xml = "";
xml = " ";
handler.handle(xml, null);
xml = " ";
handler.handle(xml, null);
xml = " ";
handler.handle(xml, null);
xml = " ";
handler.handle(xml, null);
}
}