From f58f805e4a37256b1c70d8a7e18f16a715d728cc Mon Sep 17 00:00:00 2001 From: David Dykstal Date: Thu, 2 Nov 2006 14:57:15 +0000 Subject: [PATCH] update framework to allow foreground and background running of tests --- .../plugin.xml | 18 +++++ .../tests/framework/TestFrameworkPlugin.java | 8 ++- .../framework/actions/RunHolderDelegate.java | 70 ++++++++++++++----- .../ToggleRunInBackgroundDelegate.java | 28 ++++++++ .../framework/ui/TestSuiteHolderView.java | 63 ++++++++++------- 5 files changed, 141 insertions(+), 46 deletions(-) create mode 100644 rse/tests/org.eclipse.rse.tests.framework/src/org/eclipse/rse/tests/framework/actions/ToggleRunInBackgroundDelegate.java diff --git a/rse/tests/org.eclipse.rse.tests.framework/plugin.xml b/rse/tests/org.eclipse.rse.tests.framework/plugin.xml index c27d0377139..10661746cb9 100644 --- a/rse/tests/org.eclipse.rse.tests.framework/plugin.xml +++ b/rse/tests/org.eclipse.rse.tests.framework/plugin.xml @@ -62,6 +62,24 @@ id="org.eclipse.rse.tests.framework.RunHolder"/> + + + + + + + + diff --git a/rse/tests/org.eclipse.rse.tests.framework/src/org/eclipse/rse/tests/framework/TestFrameworkPlugin.java b/rse/tests/org.eclipse.rse.tests.framework/src/org/eclipse/rse/tests/framework/TestFrameworkPlugin.java index 36013271270..7bdc1053b39 100644 --- a/rse/tests/org.eclipse.rse.tests.framework/src/org/eclipse/rse/tests/framework/TestFrameworkPlugin.java +++ b/rse/tests/org.eclipse.rse.tests.framework/src/org/eclipse/rse/tests/framework/TestFrameworkPlugin.java @@ -9,7 +9,9 @@ * *******************************************************************************/ package org.eclipse.rse.tests.framework; +import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; +import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.ui.plugin.AbstractUIPlugin; import org.osgi.framework.BundleContext; @@ -17,6 +19,8 @@ import org.osgi.framework.BundleContext; * The main plugin class to be used in the desktop. */ public class TestFrameworkPlugin extends AbstractUIPlugin { + + public static final String PREF_RUN_IN_BACKGROUND = "org.eclipse.rse.tests.runInBackground"; private static TestFrameworkPlugin plugin; @@ -26,6 +30,8 @@ public class TestFrameworkPlugin extends AbstractUIPlugin { public void start(BundleContext context) throws Exception { super.start(context); plugin = this; + IPreferenceStore store = getPreferenceStore(); + store.setDefault(PREF_RUN_IN_BACKGROUND, true); } /* (non-Javadoc) @@ -50,7 +56,7 @@ public class TestFrameworkPlugin extends AbstractUIPlugin { public void logUnexpectedException(Exception e) { e.printStackTrace(); String id = getBundle().getSymbolicName(); - Status status = new Status(Status.ERROR, id, 0, "Unexpected Exception", e); + Status status = new Status(IStatus.ERROR, id, 0, "Unexpected Exception", e); getLog().log(status); } diff --git a/rse/tests/org.eclipse.rse.tests.framework/src/org/eclipse/rse/tests/framework/actions/RunHolderDelegate.java b/rse/tests/org.eclipse.rse.tests.framework/src/org/eclipse/rse/tests/framework/actions/RunHolderDelegate.java index 390b7303ea4..88680005847 100644 --- a/rse/tests/org.eclipse.rse.tests.framework/src/org/eclipse/rse/tests/framework/actions/RunHolderDelegate.java +++ b/rse/tests/org.eclipse.rse.tests.framework/src/org/eclipse/rse/tests/framework/actions/RunHolderDelegate.java @@ -9,6 +9,7 @@ * *******************************************************************************/ package org.eclipse.rse.tests.framework.actions; +import java.lang.reflect.InvocationTargetException; import java.util.Iterator; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; @@ -16,9 +17,13 @@ import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.SubProgressMonitor; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.jface.action.IAction; +import org.eclipse.jface.operation.IRunnableContext; +import org.eclipse.jface.operation.IRunnableWithProgress; +import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.rse.tests.framework.AbstractTestSuiteHolder; +import org.eclipse.rse.tests.framework.TestFrameworkPlugin; import org.eclipse.ui.IObjectActionDelegate; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.IWorkbenchPartSite; @@ -61,26 +66,19 @@ public class RunHolderDelegate implements IObjectActionDelegate { * @see org.eclipse.ui.IActionDelegate#run(org.eclipse.jface.action.IAction) */ public void run(IAction action) { - final ISelection selection = this.selection; + IPreferenceStore store = TestFrameworkPlugin.getDefault().getPreferenceStore(); + boolean runInBackground = store.getBoolean(TestFrameworkPlugin.PREF_RUN_IN_BACKGROUND); + if (runInBackground) { + runInBackground(); + } else { + runInUI(); + } + } + + private void runInBackground() { Job job = new Job("Running JUnit Tests Suites") { - IStatus result = Status.OK_STATUS; - protected IStatus run(IProgressMonitor monitor) { - if (selection instanceof IStructuredSelection) { - IStructuredSelection ss = (IStructuredSelection) selection; - monitor.beginTask("", ss.size()); - for (Iterator z = ss.iterator(); z.hasNext();) { - AbstractTestSuiteHolder holder = (AbstractTestSuiteHolder) z.next(); - monitor.subTask(holder.getName()); - IProgressMonitor subMonitor = new SubProgressMonitor(monitor, 1); - holder.run(subMonitor); - if (monitor.isCanceled()) { - result = Status.CANCEL_STATUS; - break; - } - } - monitor.done(); - } + IStatus result = runTests(monitor); return result; } }; @@ -90,4 +88,40 @@ public class RunHolderDelegate implements IObjectActionDelegate { IWorkbenchSiteProgressService siteService = (IWorkbenchSiteProgressService) site.getAdapter(IWorkbenchSiteProgressService.class); siteService.schedule(job, 0, true); } + + private void runInUI() { + IRunnableWithProgress runnable = new IRunnableWithProgress() { + public void run(IProgressMonitor monitor) { + runTests(monitor); + } + }; + IWorkbenchPartSite site = part.getSite(); + IWorkbenchSiteProgressService siteService = (IWorkbenchSiteProgressService) site.getAdapter(IWorkbenchSiteProgressService.class); + try { + siteService.runInUI(siteService, runnable, null); + } catch (InvocationTargetException e) { + } catch (InterruptedException e) { + } + } + + private IStatus runTests(IProgressMonitor monitor) { + IStatus result = Status.OK_STATUS; + if (selection instanceof IStructuredSelection) { + IStructuredSelection ss = (IStructuredSelection) selection; + monitor.beginTask("", ss.size()); + for (Iterator z = ss.iterator(); z.hasNext();) { + AbstractTestSuiteHolder holder = (AbstractTestSuiteHolder) z.next(); + monitor.subTask(holder.getName()); + IProgressMonitor subMonitor = new SubProgressMonitor(monitor, 1); + holder.run(subMonitor); + if (monitor.isCanceled()) { + result = Status.CANCEL_STATUS; + break; + } + } + monitor.done(); + } + return result; + } + } \ No newline at end of file diff --git a/rse/tests/org.eclipse.rse.tests.framework/src/org/eclipse/rse/tests/framework/actions/ToggleRunInBackgroundDelegate.java b/rse/tests/org.eclipse.rse.tests.framework/src/org/eclipse/rse/tests/framework/actions/ToggleRunInBackgroundDelegate.java new file mode 100644 index 00000000000..5a4ed586232 --- /dev/null +++ b/rse/tests/org.eclipse.rse.tests.framework/src/org/eclipse/rse/tests/framework/actions/ToggleRunInBackgroundDelegate.java @@ -0,0 +1,28 @@ +package org.eclipse.rse.tests.framework.actions; + +import org.eclipse.jface.action.IAction; +import org.eclipse.jface.preference.IPreferenceStore; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.rse.tests.framework.TestFrameworkPlugin; +import org.eclipse.ui.IViewActionDelegate; +import org.eclipse.ui.IViewPart; + +public class ToggleRunInBackgroundDelegate extends Object implements IViewActionDelegate { + + public void init(IViewPart view) { + } + + public void run(IAction action) { + boolean runInBackground = action.isChecked(); + setPreference(runInBackground); + } + + public void selectionChanged(IAction action, ISelection selection) { + } + + private void setPreference(boolean runInBackground) { + IPreferenceStore store = TestFrameworkPlugin.getDefault().getPreferenceStore(); + store.setValue(TestFrameworkPlugin.PREF_RUN_IN_BACKGROUND, runInBackground); + } + +} diff --git a/rse/tests/org.eclipse.rse.tests.framework/src/org/eclipse/rse/tests/framework/ui/TestSuiteHolderView.java b/rse/tests/org.eclipse.rse.tests.framework/src/org/eclipse/rse/tests/framework/ui/TestSuiteHolderView.java index 780c0feec09..b74ba61dfce 100644 --- a/rse/tests/org.eclipse.rse.tests.framework/src/org/eclipse/rse/tests/framework/ui/TestSuiteHolderView.java +++ b/rse/tests/org.eclipse.rse.tests.framework/src/org/eclipse/rse/tests/framework/ui/TestSuiteHolderView.java @@ -57,14 +57,13 @@ import org.osgi.framework.Bundle; * Provides a view of the test suites installed in this workbench. */ public class TestSuiteHolderView extends ViewPart implements ITestSuiteHolderListener, ISelectionChangedListener { + private class MyLabelProvider implements ITableLabelProvider { public Image getColumnImage(Object element, int columnIndex) { AbstractTestSuiteHolder holder = (AbstractTestSuiteHolder) element; Image columnImage = null; - switch (columnIndex) { - case 1: // name column - break; - case 0: { // graphic column + String columnId = getColumnId(columnIndex); + if (columnId.equals("graphic")) { TestResult result = holder.getTestResult(); if (result != null) { if (result.wasSuccessful()) { @@ -75,14 +74,6 @@ public class TestSuiteHolderView extends ViewPart implements ITestSuiteHolderLis } else { columnImage = graphicUnknown; } - break; - } - case 2: // status column - break; - case 3: // date column - break; - default: - break; } return columnImage; } @@ -90,14 +81,12 @@ public class TestSuiteHolderView extends ViewPart implements ITestSuiteHolderLis public String getColumnText(Object element, int columnIndex) { AbstractTestSuiteHolder holder = (AbstractTestSuiteHolder) element; String columnText = null; - switch (columnIndex) { - case 1: // name column + String columnId = getColumnId(columnIndex); + if (columnId.equals("name")) { columnText = holder.getName(); - break; - case 0: // graphic column + } else if (columnId.equals("graphic")) { columnText = ""; - break; - case 2: // status column + } else if (columnId.equals("status")) { TestResult result = holder.getTestResult(); if (result != null) { Object[] values = { new Integer(result.runCount()), new Integer(result.failureCount()), new Integer(result.errorCount()) }; @@ -106,8 +95,7 @@ public class TestSuiteHolderView extends ViewPart implements ITestSuiteHolderLis } else { columnText = ""; } - break; - case 3: // run date/time column + } else if (columnId.equals("stamp")) { Calendar stamp = holder.getLastRunTime(); if (stamp != null) { DateFormat formatter = DateFormat.getDateTimeInstance(); @@ -115,12 +103,9 @@ public class TestSuiteHolderView extends ViewPart implements ITestSuiteHolderLis } else { columnText = ""; } - break; - default: - break; } return columnText; - }; + } public void addListener(ILabelProviderListener listener) { } @@ -219,10 +204,11 @@ public class TestSuiteHolderView extends ViewPart implements ITestSuiteHolderLis private String[] columnTitles = {"", "Test Suite", "Summary", "Time Run"}; private SelectionListener[] columnListeners = {graphicListener, nameListener, statusListener, stampListener}; private boolean[] columnResizable = {false, true, true, true}; + private boolean[] columnMoveable = {false, true, true, true}; private Image graphicFailed = null; private Image graphicPassed = null; private Image graphicUnknown = null; - + /* * (non-Javadoc) * @@ -241,9 +227,11 @@ public class TestSuiteHolderView extends ViewPart implements ITestSuiteHolderLis int n = columnIds.length; for (int i = 0; i < n; i++) { TableColumn column = new TableColumn(table, SWT.NONE); + column.setData("id", columnIds[i]); column.setText(columnTitles[i]); column.setWidth(columnWidths[i]); column.setResizable(columnResizable[i]); + column.setMoveable(columnMoveable[i]); column.addSelectionListener(columnListeners[i]); } holderViewer = new TableViewer(table); @@ -349,7 +337,28 @@ public class TestSuiteHolderView extends ViewPart implements ITestSuiteHolderLis */ public void testHolderReset(ITestSuiteHolder holder) { updateHolderInView(holder); - updateResultString(holder);; + updateResultString(holder); + } + + /** + * Columns in this table may be reordered. Given a column index retrieve its id. + * @param columnIndex the index of the column + * @return The string id of the column. Will be null if no id has been assigned or columnIndex is out + * of range. + */ + private String getColumnId(int columnIndex) { + String columnId = null; + if (holderViewer != null) { + Table table = holderViewer.getTable(); + int n = table.getColumnCount(); + if (0 <= columnIndex && columnIndex < n) { + TableColumn column = table.getColumn(columnIndex); + if (column != null) { + columnId = (String) column.getData("id"); + } + } + } + return columnId; } /** @@ -367,7 +376,7 @@ public class TestSuiteHolderView extends ViewPart implements ITestSuiteHolderLis control.getDisplay().syncExec(runnable); } } - + /** * Updates the result string for the holder if the holder is the only one in the * current selection. Can be run from a non-UI thread.