using Runnable to comply to the SWT threading model.
[phpeclipse.git] / net.sourceforge.phpeclipse.phpunit / src / net / sourceforge / phpeclipse / phpunit / PHPUnitView.java
1 package net.sourceforge.phpeclipse.phpunit;
2
3
4 import org.eclipse.swt.SWT;
5 import org.eclipse.swt.events.MouseEvent;
6 import org.eclipse.swt.events.MouseListener;
7 import org.eclipse.swt.widgets.Button;
8 import org.eclipse.swt.widgets.Composite;
9 import org.eclipse.swt.widgets.Label;
10 import org.eclipse.swt.widgets.Text;
11 import org.eclipse.ui.part.ViewPart;
12
13 /**
14  * @author Ali Echihabi
15  *
16  * To change the template for this generated type comment go to
17  * Window>Preferences>Java>Code Generation>Code and Comments
18  */
19 /*
20  * Created on May 22, 2004
21  *
22  * To change the template for this generated file go to
23  * Window>Preferences>Java>Code Generation>Code and Comments
24  */
25
26 /**
27  * @author Ali Echihabi (ali_echihabi@ieee.org)
28  *
29  * Plugin for PHP unit Testing.
30  * www.phpeclipse.de
31  * 
32  * This the main view showing the progress and reports.
33  * 
34  */
35
36
37 public class PHPUnitView extends ViewPart {
38
39         /*
40          * like J Unit
41          * a tree.
42          * The first level nodes are the test suites.
43          * children are nested test suites.
44          * leafs: test functions.
45          * hierarchy: package->testsuite1->testcase->test_function
46          */
47         
48         
49         private int numTests; // total number of tests
50         private int numTestsRun; // number of tests run so far
51         private int numFailures; // number of failures so far
52         private int numErrors; // number of errors so far
53         private int numPasses; // number of passes so far (they should add up)   
54         
55
56         private XMLReportHandler handler;
57
58         Label labelRuns, labelRunsVal; // Runs: 12
59         Label labelErrors, labelErrorsVal;
60         Label labelFailures, labelFailuresVal;
61         
62         Text reportArea; // TODO: replace with Tree display like JUnit
63
64         Button startButton;
65
66         public PHPUnitView() {
67                 handler = new XMLReportHandler();
68         }
69         
70         public void createPartControl(Composite parent) {
71                 
72 //              //viewer = new TreeViewer(parent);
73 //              labelRuns = new Label(parent, SWT.WRAP);
74 //              labelRuns.setText("Runs: ");
75 //              labelRunsVal = new Label(parent, SWT.WRAP);
76 //              labelRunsVal.setText("0 / 0");
77 //              
78 //              labelFailures = new Label(parent, SWT.WRAP);
79 //              labelFailures.setText("Failures: ");
80 //              labelFailuresVal = new Label(parent, SWT.WRAP);
81 //              labelFailuresVal.setText("0");
82 //              
83 //              labelErrors = new Label(parent, SWT.WRAP);
84 //              labelErrors.setText("Errors: ");
85 //              labelErrorsVal = new Label(parent, SWT.WRAP);
86 //              labelErrorsVal.setText("0");
87
88                 reportArea = new Text(parent, SWT.MULTI | SWT.BORDER |
89                 SWT.WRAP | SWT.V_SCROLL | SWT.READ_ONLY);
90                 
91                 startButton = new Button(parent, SWT.CENTER);
92                 startButton.setText("Start Tests");
93                 startButton.addMouseListener( new MouseListener() {
94
95                         public void mouseDoubleClick(MouseEvent arg0) {
96                                 // TODO Auto-generated method stub
97                                 
98                         }
99
100                         public void mouseDown(MouseEvent arg0) {
101                                 // TODO Auto-generated method stub
102                                 startTests();
103                         }
104
105                         public void mouseUp(MouseEvent arg0) {
106                                 // TODO Auto-generated method stub
107                                 
108                         }
109
110
111                         
112                         
113                         }); // end add action listener.
114                 
115                 // TODO layout!
116         }
117
118         /* (non-Javadoc)
119          * @see org.eclipse.ui.IWorkbenchPart#setFocus()
120          */
121         public void setFocus() {
122                 //markTestPass("hello");
123         }
124
125         /**
126          * mark the given test as passed in the GUI.
127          * 
128          * @param testID
129          */
130         public void markTestPassed(String testID) {
131                 
132                 // testid, use it in hashmap to retrieve tree item of test and
133                 // change icon color, increment pass counter, etc...
134                 
135                 
136                 //for now:
137                 reportArea.append("test : " + testID + " passed \n");
138         }
139
140         public void markTestStarted(String testID) {
141                 
142                 reportArea.append("test started: " + testID + " \n");
143         }
144          
145         public void createNewTest(String testName, String testID) {
146           
147                 reportArea.append("new test: " + testName + " - testID " + testID + " \n");     
148         
149         }
150         
151         public void markTestFail(String testID) {
152                 reportArea.append("test "  + testID + " failed \n");
153         }
154         
155         public void markTestingFinished() {
156                 
157                 reportArea.append("end all tests \n");  
158                 
159         }
160         
161         // action to start tests:
162         private void startTests() {
163                 
164                 // preparation:
165                 // take the full test suite (could containt other test suites).
166                 // create temp php file that starts that suite and uses socketTestReport 
167                 // as a test result reporter.
168                 // add listener: localhost , port 13579
169                 // start listening at port.
170                 
171                 reportArea.append("Tests started \n");
172                 listenForReports();
173                 
174                 
175                 
176         }
177         
178         /**
179          * 
180          */
181         private void listenForReports() {
182
183
184
185                 ConnectionListener conListener = new ConnectionListener();
186                 conListener.start(this);
187
188         } //end of method
189         
190         /**
191          * handle this report: test passed, faile, end of all.
192          * @param report
193          */
194         public void handleReport(String report) {
195
196                 //delegate to the XML report handler.           
197                 //reportArea.append("msg: " + report + "\n");
198                 handler.handle(report, this);
199
200         
201                 
202         }
203         
204         /**
205          * @param command
206          * @param testCount
207          * @param testID
208          */
209         public void handleCommand(String command, String testCount, String testID) {
210
211                 if (command.equals("testStarted")) {
212                                 
213                         createNewTest("testName", testID);
214                         markTestStarted(testID);
215                                 
216                 } else if (command.equals("testFinished")) {
217                         
218                                 
219                         // do nothing wait for verdict
220                 } else if (command.equals("endAll")) {
221                                 
222                         markTestingFinished();
223                 }
224                                         
225                 
226         }
227
228         /**
229          * @param currentTestID
230          * @param verdict
231          */
232         public void setTestVerdict(String currentTestID, String verdict) {
233
234                 if( verdict.equals("passed")) 
235                         markTestPassed(currentTestID);
236                 else
237                         markTestFail(currentTestID);
238
239
240         }
241
242         /**
243          * @param currentTestID
244          * @param exception
245          */
246         public void addTestException(String currentTestID, String exception) {
247                 
248                 reportArea.append("   test " + currentTestID + " exception: " + exception + "\n");
249                 
250         }
251         
252
253
254
255 } //end of class
256         
257
258
259
260