diff --git a/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/core/RSECoreTestCase.java b/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/core/RSECoreTestCase.java index fdac40cfa8d..325f79200df 100644 --- a/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/core/RSECoreTestCase.java +++ b/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/core/RSECoreTestCase.java @@ -42,6 +42,7 @@ import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.QualifiedName; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.jobs.Job; +import org.eclipse.rse.core.SystemBasePlugin; import org.eclipse.rse.tests.RSETestsPlugin; import org.eclipse.rse.tests.core.RSEWaitAndDispatchUtil.IInterruptCondition; import org.eclipse.ui.IViewPart; @@ -49,6 +50,7 @@ import org.eclipse.ui.IViewReference; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchWindow; +import org.eclipse.ui.PartInitException; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.WorkbenchException; import org.osgi.framework.Bundle; @@ -61,7 +63,7 @@ public class RSECoreTestCase extends TestCase { private final Properties properties = new Properties(); // Internal. Used to remember view zoom state changes. - private boolean rseSystemsViewZoomStateChanged = false; + private final String PROP_RSE_SYSTEMS_VIEW_ZOOM_STATE_CHANGED = "rseSystemsViewZoomStateChanged"; //$NON-NLS-1$ /** * Constructor. @@ -94,6 +96,7 @@ public class RSECoreTestCase extends TestCase { setProperty(IRSECoreTestCaseProperties.PROP_SWITCH_TO_PERSPECTIVE, "org.eclipse.rse.ui.view.SystemPerspective"); //$NON-NLS-1$ setProperty(IRSECoreTestCaseProperties.PROP_FORCE_BACKGROUND_EXECUTION, false); setProperty(IRSECoreTestCaseProperties.PROP_PERFORMANCE_TIMING_INCLUDE_SETUP_TEARDOWN, false); + setProperty(PROP_RSE_SYSTEMS_VIEW_ZOOM_STATE_CHANGED, false); } /** @@ -348,32 +351,37 @@ public class RSECoreTestCase extends TestCase { protected void setUp() throws Exception { super.setUp(); - String perspectiveId = getProperty(IRSECoreTestCaseProperties.PROP_SWITCH_TO_PERSPECTIVE); + final String perspectiveId = getProperty(IRSECoreTestCaseProperties.PROP_SWITCH_TO_PERSPECTIVE); assertNotNull("Invalid null-value for test case perspective id!", perspectiveId); //$NON-NLS-1$ - // in case the test case is launched within a new workspace, the eclipse intro - // view is hiding everything else. Find the intro page and hide it. - hideView("org.eclipse.ui.internal.introview", perspectiveId); //$NON-NLS-1$ - - // toggle the Remote Systems View zoom state. - rseSystemsViewZoomStateChanged = false; - IViewPart part = showView(IRSEViews.RSE_REMOTE_SYSTEMS_VIEW_ID, perspectiveId); - assertNotNull("RSE Remote System View is not available!", part); //$NON-NLS-1$ - // Unfortunately, for the zooming, we needs the view reference and not the view part :-( - IViewReference reference = findView(IRSEViews.RSE_REMOTE_SYSTEMS_VIEW_ID, perspectiveId); - assertNotNull("Failed to lookup view reference for RSE Remote Systems View!", reference); //$NON-NLS-1$ - if (reference.getPage().getPartState(reference) != IWorkbenchPage.STATE_MAXIMIZED - && isProperty(IRSECoreTestCaseProperties.PROP_MAXIMIZE_REMOTE_SYSTEMS_VIEW, true)) { - reference.getPage().toggleZoom(reference); - rseSystemsViewZoomStateChanged = true; - } else if (reference.getPage().getPartState(reference) == IWorkbenchPage.STATE_MAXIMIZED - && isProperty(IRSECoreTestCaseProperties.PROP_MAXIMIZE_REMOTE_SYSTEMS_VIEW, false)) { - reference.getPage().toggleZoom(reference); - rseSystemsViewZoomStateChanged = true; - } + // all view managment must happen in the UI thread! + PlatformUI.getWorkbench().getDisplay().syncExec(new Runnable() { + public void run() { + // in case the test case is launched within a new workspace, the eclipse intro + // view is hiding everything else. Find the intro page and hide it. + hideView("org.eclipse.ui.internal.introview", perspectiveId); //$NON-NLS-1$ + + // toggle the Remote Systems View zoom state. + setProperty(PROP_RSE_SYSTEMS_VIEW_ZOOM_STATE_CHANGED, false); + IViewPart part = showView(IRSEViews.RSE_REMOTE_SYSTEMS_VIEW_ID, perspectiveId); + assertNotNull("RSE Remote System View is not available!", part); //$NON-NLS-1$ + // Unfortunately, for the zooming, we needs the view reference and not the view part :-( + IViewReference reference = findView(IRSEViews.RSE_REMOTE_SYSTEMS_VIEW_ID, perspectiveId); + assertNotNull("Failed to lookup view reference for RSE Remote Systems View!", reference); //$NON-NLS-1$ + if (reference.getPage().getPartState(reference) != IWorkbenchPage.STATE_MAXIMIZED + && isProperty(IRSECoreTestCaseProperties.PROP_MAXIMIZE_REMOTE_SYSTEMS_VIEW, true)) { + reference.getPage().toggleZoom(reference); + setProperty(PROP_RSE_SYSTEMS_VIEW_ZOOM_STATE_CHANGED, true); + } else if (reference.getPage().getPartState(reference) == IWorkbenchPage.STATE_MAXIMIZED + && isProperty(IRSECoreTestCaseProperties.PROP_MAXIMIZE_REMOTE_SYSTEMS_VIEW, false)) { + reference.getPage().toggleZoom(reference); + setProperty(PROP_RSE_SYSTEMS_VIEW_ZOOM_STATE_CHANGED, true); + } + } + }); // Give the UI a chance to repaint if the view zoom state changed - if (rseSystemsViewZoomStateChanged) RSEWaitAndDispatchUtil.waitAndDispatch(1000); + if (isProperty(PROP_RSE_SYSTEMS_VIEW_ZOOM_STATE_CHANGED, true)) RSEWaitAndDispatchUtil.waitAndDispatch(1000); } /* (non-Javadoc) @@ -381,20 +389,25 @@ public class RSECoreTestCase extends TestCase { */ protected void tearDown() throws Exception { // restore the original view zoom state - if (rseSystemsViewZoomStateChanged) { - String perspectiveId = getProperty(IRSECoreTestCaseProperties.PROP_SWITCH_TO_PERSPECTIVE); + if (isProperty(PROP_RSE_SYSTEMS_VIEW_ZOOM_STATE_CHANGED, true)) { + final String perspectiveId = getProperty(IRSECoreTestCaseProperties.PROP_SWITCH_TO_PERSPECTIVE); assertNotNull("Invalid null-value for test case perspective id!", perspectiveId); //$NON-NLS-1$ - IViewReference reference = findView(IRSEViews.RSE_REMOTE_SYSTEMS_VIEW_ID, perspectiveId); - assertNotNull("Failed to lookup view reference for RSE Remote Systems View!", reference); //$NON-NLS-1$ - if (reference.getPage().getPartState(reference) == IWorkbenchPage.STATE_MAXIMIZED - && isProperty(IRSECoreTestCaseProperties.PROP_MAXIMIZE_REMOTE_SYSTEMS_VIEW, true)) { - reference.getPage().toggleZoom(reference); - } else if (reference.getPage().getPartState(reference) != IWorkbenchPage.STATE_MAXIMIZED - && isProperty(IRSECoreTestCaseProperties.PROP_MAXIMIZE_REMOTE_SYSTEMS_VIEW, false)) { - reference.getPage().toggleZoom(reference); - } - rseSystemsViewZoomStateChanged = false; + // all view managment must happen in the UI thread! + PlatformUI.getWorkbench().getDisplay().syncExec(new Runnable() { + public void run() { + IViewReference reference = findView(IRSEViews.RSE_REMOTE_SYSTEMS_VIEW_ID, perspectiveId); + assertNotNull("Failed to lookup view reference for RSE Remote Systems View!", reference); //$NON-NLS-1$ + if (reference.getPage().getPartState(reference) == IWorkbenchPage.STATE_MAXIMIZED + && isProperty(IRSECoreTestCaseProperties.PROP_MAXIMIZE_REMOTE_SYSTEMS_VIEW, true)) { + reference.getPage().toggleZoom(reference); + } else if (reference.getPage().getPartState(reference) != IWorkbenchPage.STATE_MAXIMIZED + && isProperty(IRSECoreTestCaseProperties.PROP_MAXIMIZE_REMOTE_SYSTEMS_VIEW, false)) { + reference.getPage().toggleZoom(reference); + } + setProperty(PROP_RSE_SYSTEMS_VIEW_ZOOM_STATE_CHANGED, false); + } + }); } super.tearDown(); @@ -408,9 +421,8 @@ public class RSECoreTestCase extends TestCase { * @param viewId The unique view id. Must be not null. * @param perspectiveId The unique perspective id within the view should be searched. Must be not null. * @return The view reference instance to the view or null if not available. - * @throws WorkbenchException If the specified perspective could not be shown. */ - protected final IViewReference findView(String viewId, String perspectiveId) throws WorkbenchException { + protected final IViewReference findView(String viewId, String perspectiveId) { assert viewId != null && perspectiveId != null; if (viewId == null || perspectiveId == null) return null; @@ -419,11 +431,15 @@ public class RSECoreTestCase extends TestCase { IWorkbench workbench = PlatformUI.getWorkbench(); assertNotNull("Failed to query current workbench instance!", workbench); //$NON-NLS-1$ // and the corresponding currently active workbench window. - IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); + IWorkbenchWindow window = workbench.getActiveWorkbenchWindow(); assertNotNull("Failed to query currently active workbench window!", window); //$NON-NLS-1$ // Now we have to switch to the specified perspecitve - workbench.showPerspective(perspectiveId, window); + try { + workbench.showPerspective(perspectiveId, window); + } catch (WorkbenchException e) { + SystemBasePlugin.logError("Failed to switch to requested perspective (id = " + perspectiveId + ")!", e); //$NON-NLS-1$ //$NON-NLS-2$ + } // From the active workbench window, we need the active workbench page IWorkbenchPage page = window.getActivePage(); @@ -438,9 +454,8 @@ public class RSECoreTestCase extends TestCase { * @param viewId The unique view id. Must be not null. * @param perspectiveId The unique perspective id within the view should be activated. Must be not null. * @return The view part instance to the view or null if it cannot be shown. - * @throws WorkbenchException If the specified perspective could not be shown. */ - protected final IViewPart showView(String viewId, String perspectiveId) throws WorkbenchException { + protected final IViewPart showView(String viewId, String perspectiveId) { assert viewId != null && perspectiveId != null; if (viewId == null || perspectiveId == null) return null; @@ -453,13 +468,24 @@ public class RSECoreTestCase extends TestCase { assertNotNull("Failed to query currently active workbench window!", window); //$NON-NLS-1$ // Now we have to switch to the specified perspecitve - workbench.showPerspective(perspectiveId, window); + try { + workbench.showPerspective(perspectiveId, window); + } catch (WorkbenchException e) { + SystemBasePlugin.logError("Failed to switch to requested perspective (id = " + perspectiveId + ")!", e); //$NON-NLS-1$ //$NON-NLS-2$ + } // From the active workbench window, we need the active workbench page IWorkbenchPage page = window.getActivePage(); assertNotNull("Failed to query currently active workbench page!", page); //$NON-NLS-1$ - return page.showView(viewId); + IViewPart part = null; + try { + part = page.showView(viewId); + } catch (PartInitException e) { + SystemBasePlugin.logError("Failed to show view (id = " + viewId + ")!", e); //$NON-NLS-1$ //$NON-NLS-2$ + } + + return part; } /** @@ -467,9 +493,8 @@ public class RSECoreTestCase extends TestCase { * * @param viewId The unique view id. Must be not null. * @param perspectiveId The unique perspective id the view should be hidden from. Must be not null. - * @throws WorkbenchException If the specified perspective could not be shown. */ - protected final void hideView(String viewId, String perspectiveId) throws WorkbenchException { + protected final void hideView(String viewId, String perspectiveId) { assert viewId != null && perspectiveId != null; if (viewId == null || perspectiveId == null) return;