From: shleh Date: Sat, 24 Jul 2004 23:21:45 +0000 (+0000) Subject: put connection Listener and report listener as seperate threads. X-Git-Url: http://secure.phpeclipse.com put connection Listener and report listener as seperate threads. Eclipse paints properly now as we wait for reports to come in. --- 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 index 0000000..e947753 --- /dev/null +++ b/net.sourceforge.phpeclipse.phpunit/src/net/sourceforge/phpeclipse/phpunit/ConnectionListener.java @@ -0,0 +1,51 @@ +/* + * Created on Jul 24, 2004 + * + * To change the template for this generated file go to + * Window>Preferences>Java>Code Generation>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>Preferences>Java>Code Generation>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(); + } + +} diff --git a/net.sourceforge.phpeclipse.phpunit/src/net/sourceforge/phpeclipse/phpunit/PHPUnitView.java b/net.sourceforge.phpeclipse.phpunit/src/net/sourceforge/phpeclipse/phpunit/PHPUnitView.java index 6510e34..341c218 100644 --- a/net.sourceforge.phpeclipse.phpunit/src/net/sourceforge/phpeclipse/phpunit/PHPUnitView.java +++ b/net.sourceforge.phpeclipse.phpunit/src/net/sourceforge/phpeclipse/phpunit/PHPUnitView.java @@ -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 index 0000000..035f48f --- /dev/null +++ b/net.sourceforge.phpeclipse.phpunit/src/net/sourceforge/phpeclipse/phpunit/ReportListener.java @@ -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 index 0000000..84ead73 --- /dev/null +++ b/net.sourceforge.phpeclipse.phpunit/src/net/sourceforge/phpeclipse/phpunit/XMLReportHandler.java @@ -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 = " "; + handler.handle(xml, null); + + xml = " "; + handler.handle(xml, null); + + xml = " "; + handler.handle(xml, null); + + xml = " "; + handler.handle(xml, null); + } + +} \ No newline at end of file