improved layout for view.
[phpeclipse.git] / net.sourceforge.phpeclipse.phpunit / src / net / sourceforge / phpeclipse / phpunit / PHPUnitView.java
index 5d8e181..1d146a3 100644 (file)
@@ -2,10 +2,25 @@ package net.sourceforge.phpeclipse.phpunit;
 
 
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.MouseEvent;
+import org.eclipse.swt.events.MouseListener;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Group;
 import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.ProgressBar;
+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
  *
@@ -32,6 +47,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
         */
        
        
@@ -40,49 +56,240 @@ 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;
        Label labelFailures, labelFailuresVal;
        
+       Text reportArea; // TODO: replace with Tree display like JUnit
+
+       Button startButton;
 
        public PHPUnitView() {
-               
+               handler = new XMLReportHandler();
        }
        
+
+       
        public void createPartControl(Composite parent) {
                
-               //viewer = new TreeViewer(parent);
-               labelRuns = new Label(parent, SWT.WRAP);
+               
+               //layout: 
+               FillLayout fillLayout = new FillLayout(SWT.VERTICAL);
+               parent.setLayout(fillLayout);
+               
+               Group progressInfoComposite = new Group(parent, SWT.SHADOW_ETCHED_IN);
+               Group resultsInfoComposite = new Group(parent, SWT.NONE);
+               
+               
+               //Build the progress info Composite             
+               progressInfoComposite.setText("Progress:");
+               GridLayout gridLayout = new GridLayout();
+               gridLayout.numColumns = 1;
+               
+               progressInfoComposite.setLayout(gridLayout);
+               
+               
+               ProgressBar progressBar = new ProgressBar(progressInfoComposite, SWT.HORIZONTAL);
+               progressBar.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL|GridData.FILL_HORIZONTAL));
+               
+               Composite labelsComposite = new Composite(progressInfoComposite, SWT.NONE);
+               labelsComposite.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL|GridData.FILL_HORIZONTAL));
+               
+               labelsComposite.setLayout(new FillLayout(SWT.HORIZONTAL));
+               
+               labelRuns = new Label(labelsComposite, SWT.NONE);
                labelRuns.setText("Runs: ");
-               labelRunsVal = new Label(parent, SWT.WRAP);
+               labelRunsVal = new Label(labelsComposite, SWT.NONE);
                labelRunsVal.setText("0 / 0");
                
-               labelFailures = new Label(parent, SWT.WRAP);
+               labelFailures = new Label(labelsComposite, SWT.NONE);
                labelFailures.setText("Failures: ");
-               labelFailuresVal = new Label(parent, SWT.WRAP);
+               labelFailuresVal = new Label(labelsComposite, SWT.NONE);
                labelFailuresVal.setText("0");
                
-               labelErrors = new Label(parent, SWT.WRAP);
+               labelErrors = new Label(labelsComposite, SWT.NONE);
                labelErrors.setText("Errors: ");
-               labelErrorsVal = new Label(parent, SWT.WRAP);
+               labelErrorsVal = new Label(labelsComposite, SWT.NONE);
                labelErrorsVal.setText("0");
 
+               //Build the result info composite
+               resultsInfoComposite.setText("Results:");
+               resultsInfoComposite.setLayout(fillLayout);
+               
+               reportArea = new Text(resultsInfoComposite, 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.
+
        }
 
        /* (non-Javadoc)
         * @see org.eclipse.ui.IWorkbenchPart#setFocus()
         */
        public void setFocus() {
+               //markTestPass("hello");
+       }
+
+       /**
+        * mark the given test as passed in the GUI.
+        * 
+        * @param 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 : " + testID + " passed \n");
+       }
+
+       public void markTestStarted(String testID) {
+               
+               reportArea.append("test started: " + testID + " \n");
+       }
+        
+       public void createNewTest(String testName, String testID) {
+         
+               reportArea.append("new test: " + testName + " - testID " + testID + " \n");     
+       
+       }
+       
+       public void markTestFail(String testID) {
+               reportArea.append("test "  + testID + " failed \n");
+       }
+       
+       public void markTestingFinished() {
+               
+               reportArea.append("end all tests \n");  
+               
+       }
+       
+       // 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() {
 
 
 
+               ConnectionListener conListener = new ConnectionListener();
+               conListener.start(this);
+
+       } //end of method
        
+       /**
+        * handle this report: test passed, faile, end of all.
+        * @param report
+        */
+       public void handleReport(String report) {
+
+               //delegate to the XML report handler.           
+               //reportArea.append("msg: " + report + "\n");
+               handler.handle(report, this);
+
        
+               
+       }
        
+       /**
+        * @param command
+        * @param testCount
+        * @param testID
+        */
+       public void handleCommand(String command, String testCount, String testID) {
+
+               if (command.equals("testStarted")) {
+                               
+                       createNewTest("testName", testID);
+                       markTestStarted(testID);
+                               
+               } else if (command.equals("testFinished")) {
+                       
+                               
+                       // do nothing wait for verdict
+               } else if (command.equals("endAll")) {
+                               
+                       markTestingFinished();
+               }
+                                       
+               
+       }
+
+       /**
+        * @param currentTestID
+        * @param verdict
+        */
+       public void setTestVerdict(String currentTestID, String verdict) {
+
+               if( verdict.equals("passed")) 
+                       markTestPassed(currentTestID);
+               else
+                       markTestFail(currentTestID);
+
+
+       }
+
+       /**
+        * @param currentTestID
+        * @param exception
+        */
+       public void addTestException(String currentTestID, String exception) {
+               
+               //TODO: decide how to show exceptions. don't show them for now.
+               //reportArea.append("   test " + currentTestID + " exception: " + exception + "\n");
+               
+       }
        
+
+
+
+} //end of class
        
 
-}
+
+
+