put connection Listener and report listener as seperate threads.
authorshleh <shleh>
Sat, 24 Jul 2004 23:21:45 +0000 (23:21 +0000)
committershleh <shleh>
Sat, 24 Jul 2004 23:21:45 +0000 (23:21 +0000)
Eclipse paints properly now as we wait for reports to come in.

net.sourceforge.phpeclipse.phpunit/src/net/sourceforge/phpeclipse/phpunit/ConnectionListener.java [new file with mode: 0644]
net.sourceforge.phpeclipse.phpunit/src/net/sourceforge/phpeclipse/phpunit/PHPUnitView.java
net.sourceforge.phpeclipse.phpunit/src/net/sourceforge/phpeclipse/phpunit/ReportListener.java [new file with mode: 0644]
net.sourceforge.phpeclipse.phpunit/src/net/sourceforge/phpeclipse/phpunit/XMLReportHandler.java [new file with mode: 0644]

diff --git a/net.sourceforge.phpeclipse.phpunit/src/net/sourceforge/phpeclipse/phpunit/ConnectionListener.java b/net.sourceforge.phpeclipse.phpunit/src/net/sourceforge/phpeclipse/phpunit/ConnectionListener.java
new file mode 100644 (file)
index 0000000..e947753
--- /dev/null
@@ -0,0 +1,51 @@
+/*
+ * Created on Jul 24, 2004
+ *
+ * To change the template for this generated file go to
+ * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
+ */
+package net.sourceforge.phpeclipse.phpunit;
+
+import java.net.ServerSocket;
+import java.net.Socket;
+
+/**
+ * @author Ali Echihabi
+ *
+ * To change the template for this generated type comment go to
+ * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
+ */
+public class ConnectionListener extends Thread {
+
+       private ServerSocket sSocket = null;
+       private Socket serviceSocket = null;
+       
+       public void run() {
+
+               try {
+
+                       //reportArea.append("listening at port 12345");
+
+                       sSocket = new ServerSocket(12345);
+
+                       // accept connection from test reporter.
+                       serviceSocket = sSocket.accept();
+
+                       (new ReportListener(serviceSocket)).start();
+
+                       sSocket.close();
+
+               } catch (Exception e) {
+
+                       e.printStackTrace();
+
+               }
+
+       } // end of run()
+
+       public static void main(String[] args) {
+               
+               (new ConnectionListener()).start();
+       }
+
+}
index 6510e34..341c218 100644 (file)
@@ -1,14 +1,7 @@
 package net.sourceforge.phpeclipse.phpunit;
 
 
-import java.io.BufferedReader;
-import java.io.InputStreamReader;
-import java.net.ServerSocket;
-import java.net.Socket;
-
 import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.ControlEvent;
-import org.eclipse.swt.events.ControlListener;
 import org.eclipse.swt.events.MouseEvent;
 import org.eclipse.swt.events.MouseListener;
 import org.eclipse.swt.widgets.Button;
@@ -49,6 +42,7 @@ public class PHPUnitView extends ViewPart {
         * The first level nodes are the test suites.
         * children are nested test suites.
         * leafs: test functions.
+        * hierarchy: package->testsuite1->testcase->test_function
         */
        
        
@@ -57,6 +51,9 @@ public class PHPUnitView extends ViewPart {
        private int numFailures; // number of failures so far
        private int numErrors; // number of errors so far
        private int numPasses; // number of passes so far (they should add up)   
+       
+
+       private XMLReportHandler handler;
 
        Label labelRuns, labelRunsVal; // Runs: 12
        Label labelErrors, labelErrorsVal;
@@ -67,26 +64,26 @@ public class PHPUnitView extends ViewPart {
        Button startButton;
 
        public PHPUnitView() {
-               
+               handler = new XMLReportHandler();
        }
        
        public void createPartControl(Composite parent) {
                
-               //viewer = new TreeViewer(parent);
-               labelRuns = new Label(parent, SWT.WRAP);
-               labelRuns.setText("Runs: ");
-               labelRunsVal = new Label(parent, SWT.WRAP);
-               labelRunsVal.setText("0 / 0");
-               
-               labelFailures = new Label(parent, SWT.WRAP);
-               labelFailures.setText("Failures: ");
-               labelFailuresVal = new Label(parent, SWT.WRAP);
-               labelFailuresVal.setText("0");
-               
-               labelErrors = new Label(parent, SWT.WRAP);
-               labelErrors.setText("Errors: ");
-               labelErrorsVal = new Label(parent, SWT.WRAP);
-               labelErrorsVal.setText("0");
+//             //viewer = new TreeViewer(parent);
+//             labelRuns = new Label(parent, SWT.WRAP);
+//             labelRuns.setText("Runs: ");
+//             labelRunsVal = new Label(parent, SWT.WRAP);
+//             labelRunsVal.setText("0 / 0");
+//             
+//             labelFailures = new Label(parent, SWT.WRAP);
+//             labelFailures.setText("Failures: ");
+//             labelFailuresVal = new Label(parent, SWT.WRAP);
+//             labelFailuresVal.setText("0");
+//             
+//             labelErrors = new Label(parent, SWT.WRAP);
+//             labelErrors.setText("Errors: ");
+//             labelErrorsVal = new Label(parent, SWT.WRAP);
+//             labelErrorsVal.setText("0");
 
                reportArea = new Text(parent, SWT.MULTI | SWT.BORDER |
                SWT.WRAP | SWT.V_SCROLL | SWT.READ_ONLY);
@@ -130,18 +127,36 @@ public class PHPUnitView extends ViewPart {
         * 
         * @param testID
         */
-       private void markTestPass(String testID) {
+       public void markTestPassed(String testID) {
                
                // testid, use it in hashmap to retrieve tree item of test and
                // change icon color, increment pass counter, etc...
                
                
                //for now:
-               reportArea.append("test passed");
+               reportArea.append("test passed \n");
        }
 
+       public void markTestStarted(String testID) {
+               
+               reportArea.append("test started \n");
+       }
+        
+       public void createNewTest(String testName, String testID) {
+         
+               reportArea.append("new test: " + testName + " - testID \n");    
+       
+       }
        
+       public void markTestFail(String testID) {
+               reportArea.append("test failed \n");
+       }
        
+       public void markTestingFinished() {
+               
+               reportArea.append("end all tests \n");  
+               
+       }
        
        // action to start tests:
        private void startTests() {
@@ -161,45 +176,13 @@ public class PHPUnitView extends ViewPart {
        }
        
        private void listenForReports() {
-               
-               ServerSocket sSocket = null;
-               Socket serviceSocket = null;    
-               
-               try {
-                       
-                       reportArea.append("listening at port 12345");
-                       
-                       sSocket = new ServerSocket(12345);
-                       
-                       // accept connection from test reporter.
-                       serviceSocket = sSocket.accept();
-       
-               
-                       InputStreamReader reader = new InputStreamReader(serviceSocket.getInputStream());                       
-                       BufferedReader in = new BufferedReader(reader);
-                       String report = null;
-                       
-                       // keep listening until the 
-                       while ( (report = in.readLine()) != null && (report != "end_all_tests") ) {                     
-                               
-                               handleReport(report);                   
-                       }                       
-                       
-                       reportArea.append("Finished!");
-                       
-                       sSocket.close();
-                       serviceSocket.close();          
-                       
-               } catch (Exception e) {
-                       
-                       e.printStackTrace();
-                       
-               } 
-               
-               
-                               
-               
-       }
+
+
+
+               ConnectionListener conListener = new ConnectionListener();
+               conListener.start();
+
+       } //end of method
        
        /**
         * handle this report: test passed, faile, end of all.
@@ -209,7 +192,27 @@ public class PHPUnitView extends ViewPart {
                
                reportArea.append("msg: " + report + "\n");
                
+               String event = report.substring(0, report.indexOf(" "));
+               
+               System.out.println(event);
+
+               handler.handle(report, this);
+
+       
+               
        }
        
+       public void handleCommand(String command, String testCount, String testID) {
+               
+               
+       }
+       
+
+
+
+} //end of class
+       
+
+
+
 
-}
diff --git a/net.sourceforge.phpeclipse.phpunit/src/net/sourceforge/phpeclipse/phpunit/ReportListener.java b/net.sourceforge.phpeclipse.phpunit/src/net/sourceforge/phpeclipse/phpunit/ReportListener.java
new file mode 100644 (file)
index 0000000..035f48f
--- /dev/null
@@ -0,0 +1,48 @@
+package net.sourceforge.phpeclipse.phpunit;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.net.Socket;        
+
+public class ReportListener extends Thread {
+
+       Socket serviceSocket;
+       
+       public ReportListener(Socket serviceSocket) {
+
+               this.serviceSocket = serviceSocket;
+
+       }
+
+       public void run() {
+
+               InputStreamReader reader;
+
+               try {
+                       reader = new InputStreamReader(serviceSocket.getInputStream());
+
+                       BufferedReader in = new BufferedReader(reader);
+                       String report = null;
+                       int i = 0;
+                       // keep listening until the 
+                       while ( (report = in.readLine()) != null &&
+                                       (report != "end_all_tests") ) {
+
+                               System.out.println("received something...");
+                               //handleReport(report);
+                               System.out.println(report);
+                       }
+
+                       //reportArea.append("Finished!");
+                       System.out.println("Finished");
+                       serviceSocket.close();
+
+               } catch (IOException e) {
+                       // TODO Auto-generated catch block
+                       e.printStackTrace();
+               }
+
+       }
+
+}
\ No newline at end of file
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