put connection Listener and report listener as seperate threads.
[phpeclipse.git] / net.sourceforge.phpeclipse.phpunit / src / net / sourceforge / phpeclipse / phpunit / XMLReportHandler.java
diff --git a/net.sourceforge.phpeclipse.phpunit/src/net/sourceforge/phpeclipse/phpunit/XMLReportHandler.java b/net.sourceforge.phpeclipse.phpunit/src/net/sourceforge/phpeclipse/phpunit/XMLReportHandler.java
new file mode 100644 (file)
index 0000000..84ead73
--- /dev/null
@@ -0,0 +1,152 @@
+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 = "<report id='2' command='testFINISHED' testCount='1' testID='manyfailingtests_testpass1'> <verdict desc='passed'> <exceptions></exceptions></verdict></report> ";
+               handler.handle(xml, null);      
+               
+               xml = "<report id='2' command='testFINISHED' testCount='1' testID='manyfailingtests_testpass1'> <verdict desc='passed'> <exceptions></exceptions></verdict></report> ";
+               handler.handle(xml, null);
+               
+               xml = "<report id='3' command='testStarted' testCount='2' testID='manyfailingtests_testpass2'> </report> ";
+               handler.handle(xml, null);
+               
+               xml = "<report id='4' command='testFINISHED' testCount='2' testID='manyfailingtests_testpass2'> <verdict desc='passed'> <exceptions></exceptions></verdict></report>";
+               handler.handle(xml, null);              
+       }
+
+}
\ No newline at end of file