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; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.part.ViewPart; /** * @author Ali Echihabi * * To change the template for this generated type comment go to * Window>Preferences>Java>Code Generation>Code and Comments */ /* * Created on May 22, 2004 * * To change the template for this generated file go to * Window>Preferences>Java>Code Generation>Code and Comments */ /** * @author Ali Echihabi (ali_echihabi@ieee.org) * * Plugin for PHP unit Testing. * www.phpeclipse.de * * This the main view showing the progress and reports. * */ public class PHPUnitView extends ViewPart { /* * like J Unit * a tree. * The first level nodes are the test suites. * children are nested test suites. * leafs: test functions. */ private int numTests; // total number of tests private int numTestsRun; // number of tests run so far 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) Label labelRuns, labelRunsVal; // Runs: 12 Label labelErrors, labelErrorsVal; Label labelFailures, labelFailuresVal; Text reportArea; // TODO: replace with Tree display like JUnit Button startButton; public PHPUnitView() { } 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"); reportArea = new Text(parent, SWT.MULTI | SWT.BORDER | SWT.WRAP | SWT.V_SCROLL | SWT.READ_ONLY); startButton = new Button(parent, SWT.CENTER); startButton.setText("Start Tests"); startButton.addMouseListener( new MouseListener() { public void mouseDoubleClick(MouseEvent arg0) { // TODO Auto-generated method stub } public void mouseDown(MouseEvent arg0) { // TODO Auto-generated method stub startTests(); } public void mouseUp(MouseEvent arg0) { // TODO Auto-generated method stub } }); // end add action listener. // TODO layout! } /* (non-Javadoc) * @see org.eclipse.ui.IWorkbenchPart#setFocus() */ public void setFocus() { //markTestPass("hello"); } /** * mark the given test as passed in the GUI. * * @param testID */ private void markTestPass(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"); } // action to start tests: private void startTests() { // preparation: // take the full test suite (could containt other test suites). // create temp php file that starts that suite and uses socketTestReport // as a test result reporter. // add listener: localhost , port 13579 // start listening at port. reportArea.append("Tests started \n"); listenForReports(); } 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(); } } /** * handle this report: test passed, faile, end of all. * @param report */ private void handleReport(String report) { reportArea.append("msg: " + report + "\n"); } }