X-Git-Url: http://secure.phpeclipse.com 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 bc1dd6a..656610d 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,13 +1,33 @@ package net.sourceforge.phpeclipse.phpunit; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; + +import net.sourceforge.phpeclipse.phpunit.testpool.TestCase; +import net.sourceforge.phpeclipse.phpunit.testpool.TestPool; +import net.sourceforge.phpeclipse.phpunit.testpool.TestSuite; + +import org.eclipse.jface.action.Action; +import org.eclipse.jface.action.IToolBarManager; +import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.swt.SWT; import org.eclipse.swt.events.MouseEvent; import org.eclipse.swt.events.MouseListener; +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.Label; -import org.eclipse.swt.widgets.Text; +import org.eclipse.ui.IActionBars; +import org.eclipse.ui.ISharedImages; +import org.eclipse.ui.IViewSite; +import org.eclipse.ui.PartInitException; +import org.eclipse.ui.PlatformUI; import org.eclipse.ui.part.ViewPart; /** @@ -33,9 +53,11 @@ import org.eclipse.ui.part.ViewPart; * */ - public class PHPUnitView extends ViewPart { + + + /* * like J Unit * a tree. @@ -44,82 +66,188 @@ public class PHPUnitView extends ViewPart { * leafs: test functions. * hierarchy: package->testsuite1->testcase->test_function */ - - - 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) - + + private static PHPUnitView view = null; private XMLReportHandler handler; + + private TestPool testPool; + + //private Button startButton; - Label labelRuns, labelRunsVal; // Runs: 12 - Label labelErrors, labelErrorsVal; - Label labelFailures, labelFailuresVal; + private ProgressInfoComposite progressInfoComposite; + private ResultsInfoComposite resultsInfoComposite; + private SettingsInfoComposite settingsInfoComposite; //TODO: move somewhere else, launcher, wizard or preferences. - Text reportArea; // TODO: replace with Tree display like JUnit - Button startButton; public PHPUnitView() { - handler = new XMLReportHandler(); + + if(view == null) + view = this; + } + public static PHPUnitView getDefault() { + + + return view; + } + public void createPartControl(Composite parent) { + + //parent.setLayout(new FillLayout(SWT.VERTICAL)); + + GridLayout gridLayout = new GridLayout(); + gridLayout.numColumns = 1; + + // set title and layout + parent.setLayout(gridLayout); + + + //Launch ToolBar: + setActions(); + + //Build the progress info Composites + progressInfoComposite = new ProgressInfoComposite(parent); + progressInfoComposite.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING)); + + + + //Build the result info composite + resultsInfoComposite = new ResultsInfoComposite(parent); + resultsInfoComposite.setLayoutData(new GridData(GridData.GRAB_VERTICAL | GridData.FILL_BOTH)); + + //build the settings composite + //buildSettingsComposite(parent); -// //viewer = new TreeViewer(parent); -// labelRuns = new Label(parent, SWT.WRAP); -// labelRuns.setText("Runs: "); -// labelRunsVal = new Label(parent, SWT.WRAP); -// labelRunsVal.setText("0 / 0"); + settingsInfoComposite = new SettingsInfoComposite(parent, SWT.NONE); + + +// startButton = new Button(parent, SWT.CENTER); +// startButton.setText("Start Tests"); +// startButton.addMouseListener(new MouseListener() { +// +// public void mouseDoubleClick(MouseEvent arg0) { +// +// } +// +// public void mouseDown(MouseEvent arg0) { +// +// try { +// String testFile = settingsInfoComposite.getTestSuite(); +// startTests(testFile); +// } catch (IOException e) { +// // TODO Auto-generated catch block +// e.printStackTrace(); +// } +// +// +// } +// +// public void mouseUp(MouseEvent arg0) { +// +// +// } +// +// }); // end add action listener. + + } + + /** + * @param parent + */ + private void buildSettingsComposite(Composite parent) { + + + //settingsInfoComposite = new Group(parent, SWT.NONE); + //settingsInfoComposite.setText("Settings"); +// settingsInfoComposite.setLayout(new GridLayout(2,false)); +// // -// labelFailures = new Label(parent, SWT.WRAP); -// labelFailures.setText("Failures: "); -// labelFailuresVal = new Label(parent, SWT.WRAP); -// labelFailuresVal.setText("0"); +// //the test suite to launch +// Label testSuiteLabel = new Label(settingsInfoComposite, SWT.NONE); +// testSuiteLabel.setText("Test suite to run:"); +// //testSuiteLabel.setLayoutData(new GridData()) +// Text testSuiteText = new Text(settingsInfoComposite, SWT.NONE); // -// labelErrors = new Label(parent, SWT.WRAP); -// labelErrors.setText("Errors: "); -// labelErrorsVal = new Label(parent, SWT.WRAP); -// labelErrorsVal.setText("0"); +// //the path to php +// Label phpPathLabel = new Label(settingsInfoComposite, SWT.NONE); +// phpPathLabel.setText("php Path:"); +// //testSuiteLabel.setLayoutData(new GridData()) +// Text phpPathText = new Text(settingsInfoComposite, SWT.NONE); + + } - reportArea = new Text(parent, SWT.MULTI | SWT.BORDER | - SWT.WRAP | SWT.V_SCROLL | SWT.READ_ONLY); + private void setActions() { + final IActionBars actionBars = getViewSite().getActionBars(); + IToolBarManager toolBarManager = actionBars.getToolBarManager(); + + String iconsPath = "C:\\Documents and Settings\\Ali Echihabi\\My Documents\\workspace.eclipse2.1\\net.sourceforge.phpeclipse.phpunit\\icons"; - startButton = new Button(parent, SWT.CENTER); - startButton.setText("Start Tests"); - startButton.addMouseListener( new MouseListener() { + ImageDescriptor descriptor = null; + String icon = ""; - public void mouseDoubleClick(MouseEvent arg0) { - // TODO Auto-generated method stub + Action selectTestAction = new Action() { + + public void run() { + settingsInfoComposite.showFileDialog(); } - - public void mouseDown(MouseEvent arg0) { - // TODO Auto-generated method stub - startTests(); - } - - public void mouseUp(MouseEvent arg0) { - // TODO Auto-generated method stub + }; + selectTestAction.setText("Select Test Suite"); + selectTestAction.setToolTipText("Select Test Suite"); + try { + icon = "tsuite.gif"; + descriptor = ImageDescriptor.createFromURL(new URL("file://" + iconsPath + "//" + icon)); + selectTestAction.setImageDescriptor(descriptor); + } catch (MalformedURLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + + toolBarManager.add(selectTestAction); + + + Action startTestAction = new Action() { + + public void run() { + String testFile = settingsInfoComposite.getTestSuite(); + try { + startTests(testFile); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } - - - - }); // end add action listener. - - // TODO layout! + }; + startTestAction.setText("Start Test"); + startTestAction.setToolTipText("Start Test Suite"); + + try { + icon = "start.gif"; + descriptor = ImageDescriptor.createFromURL(new URL("file://" + iconsPath + "//" + icon)); + startTestAction.setImageDescriptor(descriptor); + } catch (MalformedURLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + + toolBarManager.add(startTestAction); } + + /* (non-Javadoc) * @see org.eclipse.ui.IWorkbenchPart#setFocus() */ public void setFocus() { - //markTestPass("hello"); + } /** @@ -127,66 +255,141 @@ public class PHPUnitView extends ViewPart { * * @param testID */ - public void markTestPassed(String testID) { - + private void markTestPassed(String testID) { + // testid, use it in hashmap to retrieve tree item of test and // change icon color, increment pass counter, etc... + + testPool.getTest(testID).setVerdict(TestCase.PASS); - - //for now: - reportArea.append("test : " + testID + " passed \n"); + } - public void markTestStarted(String testID) { + + private void markTestFail(String testID) { + + testPool.getTest(testID).setVerdict(TestCase.FAIL); - 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"); + + // action to start tests: + public void startTests() throws IOException { + +// // 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. +// +// testPool = new TestPool("RUN MONDAY 11:15 PM"); +// listenForReports(); +// +// try { +// Runtime.getRuntime().exec("php.exe \"C:/Program Files/Apache Group/Apache2/htdocs/phpUnit/suite.php\""); +// } catch (Exception e) { +// +// e.printStackTrace(); +// } + + startTests("C:/Program Files/Apache Group/Apache2/htdocs/phpUnit/suite.php"); + } - - public void markTestingFinished() { + + public void startTests(String testSuite) throws IOException { - reportArea.append("end all tests \n"); + //testSuite: the name of the file containing the suite we want to run. + // we will put that test suite inside a contained that uses our SocketResult. - } + //reset from previous run + reset(); + + + testSuite = testSuite.replaceAll("\\\\", "/"); + + System.out.println("new: " + testSuite); + + //where the plugin's temp files should go + String tempFolder = "C:\\tmp"; + String tempFileName = "temTest.php"; + + //create the file. + File testFile = new File(tempFolder + "/" + tempFileName); + BufferedWriter out = new BufferedWriter(new FileWriter(testFile)); + + out.write("addTest(new TestSuite(\"" + testSuiteName + "\"));" + "\n"); + + + + //out.write("$suite->addTest(new TestSuite(\"MoreTesterTests\"));" + "\n"); - // action to start tests: - private void startTests() { + //out.write("$suite->addTest(new TestSuite(\"ManyFailingTests\"));" + "\n"); + //out.write("$suite->addTest(new TestSuite(\"AssertEqualsTests\"));" + "\n"); + + out.write("$result = new SocketTestResult();" + "\n"); + out.write("$suite->run($result);" + "\n"); + out.write("$result->report(); " + "\n"); + + out.write("" + "\n"); + out.write("" + "\n"); + + out.write("?>" + "\n"); - // 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. + out.flush(); + out.close(); - reportArea.append("Tests started \n"); listenForReports(); + try { + Runtime.getRuntime().exec("php.exe " + tempFolder + "/" + tempFileName); + } catch (Exception e) { + + e.printStackTrace(); + } + + //testFile.delete(); + + } + + /** + * + */ + private void reset() { + handler = new XMLReportHandler(); + testPool = new TestPool("Ali Baba"); + + progressInfoComposite.resetInfo(); + resultsInfoComposite.resetInfo(); } - + /** * */ private void listenForReports() { - - ConnectionListener conListener = new ConnectionListener(); conListener.start(this); } //end of method - + /** * handle this report: test passed, faile, end of all. * @param report @@ -194,49 +397,76 @@ public class PHPUnitView extends ViewPart { 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) { + public void handleCommand( + String command, + String testCount, + String testID) { - if (command.equals("testStarted")) { - - createNewTest("testName", testID); - markTestStarted(testID); - - } else if (command.equals("testFinished")) { + + if (command.equals("startAll")) { + + //markTestingStarted(new Integer(testCount).intValue()); + + + } else if (command.equals("testSuiteStarted")) { + + //createNewTestSuite("TestSuiteName: " + testID, testID, new Integer(testCount).intValue()); + TestSuite suite = new TestSuite("TestSuiteName: " + testID, testID, new Integer(testCount).intValue()); + testPool.addTestSuite(suite); + + } else if (command.equals("testStarted")) { + + testPool.addTest(new TestCase("TestName: " + testID, testID)); + + } else if (command.equals("testFINISHED")) { + + - - // do nothing wait for verdict } else if (command.equals("endAll")) { - - markTestingFinished(); + + } - + + update(); + + + } /** + * + */ + private void update() { + + //progressInfoComposite.updateInfo(numTests, testPool.getNumTestsRun(), numFailures, numErrors); + progressInfoComposite.updateInfo(testPool); + resultsInfoComposite.updateInfo(testPool); + + } + + + /** * @param currentTestID * @param verdict */ public void setTestVerdict(String currentTestID, String verdict) { - if( verdict.equals("passed")) + if (verdict.equals("passed")) markTestPassed(currentTestID); else markTestFail(currentTestID); - } /** @@ -244,17 +474,11 @@ public class PHPUnitView extends ViewPart { * @param exception */ public void addTestException(String currentTestID, String exception) { - - reportArea.append(" test " + currentTestID + " exception: " + exception + "\n"); - - } - - - - -} //end of class - + //TODO: decide how to show exceptions. don't show them for now. + //reportArea.append(" test " + currentTestID + " exception: " + exception + "\n"); + } +} //end of class