| /******************************************************************************* |
| * Copyright (c) 2003, 2007 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.ui.parts.tests; |
| |
| import junit.framework.TestCase; |
| |
| import org.eclipse.jface.preference.IPreferenceStore; |
| import org.eclipse.swt.widgets.Display; |
| import org.eclipse.ui.IViewPart; |
| import org.eclipse.ui.IViewReference; |
| import org.eclipse.ui.IWorkbenchPage; |
| import org.eclipse.ui.IWorkbenchPart; |
| import org.eclipse.ui.IWorkbenchPartReference; |
| import org.eclipse.ui.IWorkbenchPreferenceConstants; |
| import org.eclipse.ui.PartInitException; |
| import org.eclipse.ui.PlatformUI; |
| import org.eclipse.ui.internal.util.PrefUtil; |
| import org.eclipse.ui.parts.tests.util.PartsTestUtil; |
| import org.eclipse.ui.parts.tests.util.PartsWorkbenchAdvisor; |
| |
| /** |
| * Test case to ensure that view references are created when neededed. Also |
| * ensures that zooming behaves correctly on start up (Bug 64043). |
| */ |
| public class ViewsReferencesTest extends TestCase { |
| |
| private Display display; |
| |
| /** |
| * Constructor. |
| * |
| * @param testName |
| * The test's name. |
| */ |
| public ViewsReferencesTest(String testName) { |
| super(testName); |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see junit.framework.TestCase#setUp() |
| */ |
| protected void setUp() throws Exception { |
| super.setUp(); |
| createDisplay(); |
| } |
| |
| private void createDisplay() { |
| display = PlatformUI.createDisplay(); |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see junit.framework.TestCase#tearDown() |
| */ |
| protected void tearDown() throws Exception { |
| disposeDisplay(); |
| super.tearDown(); |
| } |
| |
| private void disposeDisplay() { |
| display.dispose(); |
| display = null; |
| } |
| |
| /** |
| * Test that only view0's part has been created (ideally). |
| * |
| */ |
| public void testActivePartView0() { |
| openViews(0); |
| newDisplay(); |
| checkViewsParts(0); |
| } |
| |
| /** |
| * Dispose of the old display and create a new one. |
| */ |
| private void newDisplay() { |
| disposeDisplay(); |
| createDisplay(); |
| } |
| |
| /** |
| * Test that only view1's part has been created (ideally). |
| * |
| */ |
| public void testActivePartView1() { |
| openViews(1); |
| newDisplay(); |
| checkViewsParts(1); |
| |
| } |
| |
| /** |
| * Test that only view2's part has been created (ideally). |
| * |
| */ |
| public void testActivePartView2() { |
| openViews(2); |
| newDisplay(); |
| checkViewsParts(2); |
| } |
| |
| /** |
| * Test that zooming view0 on start up and navigating to other views behaves |
| * correcly. |
| * |
| */ |
| public void testZoomActivePartView0() { |
| // These tests are hard-wired to the pre-3.3 zoom behaviour |
| // Run them anyway to ensure that we preserve the 3.0 mechanism |
| IPreferenceStore apiStore = PrefUtil.getAPIPreferenceStore(); |
| boolean curMinMaxState = apiStore.getBoolean(IWorkbenchPreferenceConstants.ENABLE_NEW_MIN_MAX); |
| apiStore.setValue(IWorkbenchPreferenceConstants.ENABLE_NEW_MIN_MAX, false); |
| |
| openViews(0); |
| newDisplay(); |
| zoomView(0); |
| |
| // Restore the previous state (just in case) |
| apiStore.setValue(IWorkbenchPreferenceConstants.ENABLE_NEW_MIN_MAX, curMinMaxState); |
| } |
| |
| /** |
| * Test that zooming view1 on start up and navigating to other views behaves |
| * correcly. |
| * |
| */ |
| public void testZoomActivePartView1() { |
| // These tests are hard-wired to the pre-3.3 zoom behaviour |
| // Run them anyway to ensure that we preserve the 3.0 mechanism |
| IPreferenceStore apiStore = PrefUtil.getAPIPreferenceStore(); |
| boolean curMinMaxState = apiStore.getBoolean(IWorkbenchPreferenceConstants.ENABLE_NEW_MIN_MAX); |
| apiStore.setValue(IWorkbenchPreferenceConstants.ENABLE_NEW_MIN_MAX, false); |
| |
| openViews(1); |
| newDisplay(); |
| zoomView(1); |
| |
| // Restore the previous state (just in case) |
| apiStore.setValue(IWorkbenchPreferenceConstants.ENABLE_NEW_MIN_MAX, curMinMaxState); |
| } |
| |
| /** |
| * Test that zooming view2 on start up and navigating to other views behaves |
| * correcly. |
| * |
| */ |
| public void testZoomActivePartView2() { |
| // These tests are hard-wired to the pre-3.3 zoom behaviour |
| // Run them anyway to ensure that we preserve the 3.0 mechanism |
| IPreferenceStore apiStore = PrefUtil.getAPIPreferenceStore(); |
| boolean curMinMaxState = apiStore.getBoolean(IWorkbenchPreferenceConstants.ENABLE_NEW_MIN_MAX); |
| apiStore.setValue(IWorkbenchPreferenceConstants.ENABLE_NEW_MIN_MAX, false); |
| |
| openViews(2); |
| newDisplay(); |
| zoomView(2); |
| |
| // Restore the previous state (just in case) |
| apiStore.setValue(IWorkbenchPreferenceConstants.ENABLE_NEW_MIN_MAX, curMinMaxState); |
| } |
| |
| /** |
| * Open all the views. |
| * |
| * @param lastViewToOpen |
| * The index of the last view to be opened. |
| */ |
| private void openViews(final int lastViewToOpen) { |
| PartsWorkbenchAdvisor wa = new PartsWorkbenchAdvisor() { |
| protected void validate(IWorkbenchPage page) { |
| try { |
| for (int index = 0; index < PartsTestUtil.numOfParts; index++) { |
| if (index != lastViewToOpen) |
| page.showView(PartsTestUtil.getView(index)); |
| |
| } |
| page.showView(PartsTestUtil.getView(lastViewToOpen)); |
| } catch (PartInitException e) { |
| e.printStackTrace(System.err); |
| } |
| assertEquals(page.getViewReferences().length, |
| PartsTestUtil.numOfParts); |
| assertTrue(page.getActivePart() instanceof IViewPart); |
| IViewPart activePart = (IViewPart) page.getActivePart(); |
| assertEquals(activePart.getViewSite().getId(), PartsTestUtil |
| .getView(lastViewToOpen)); |
| |
| } |
| }; |
| PlatformUI.createAndRunWorkbench(display, wa); |
| |
| } |
| |
| /** |
| * Check that the active view's part has been created. |
| * |
| * @param lastViewOpened |
| * The active file's index. |
| */ |
| private void checkViewsParts(final int lastViewOpened) { |
| |
| PartsWorkbenchAdvisor wa = new PartsWorkbenchAdvisor() { |
| protected void validate(IWorkbenchPage page) { |
| String activeViewId = PartsTestUtil.getView(lastViewOpened); |
| assertEquals(page.getViewReferences().length, |
| PartsTestUtil.numOfParts); |
| assertTrue(page.getActivePart() instanceof IViewPart); |
| |
| IViewPart activeViewPart = (IViewPart) page.getActivePart(); |
| assertEquals(activeViewPart.getViewSite().getId(), activeViewId); |
| |
| IViewReference[] viewReferences = page.getViewReferences(); |
| int numActiveParts = 0; |
| for (int index = 0; index < viewReferences.length; index++) { |
| if (viewReferences[index].getView(false) != null) |
| numActiveParts++; |
| |
| } |
| // TODO: Ideally, the number of active parts would be 1 |
| assertTrue(numActiveParts <= 2); |
| } |
| }; |
| |
| PlatformUI.createAndRunWorkbench(display, wa); |
| } |
| |
| /** |
| * Zoom the active view and navigate to the other open views. |
| * |
| * @param viewIndex |
| * The active view's index. |
| */ |
| public void zoomView(final int viewIndex) { |
| PartsWorkbenchAdvisor wa = new PartsWorkbenchAdvisor() { |
| protected void validate(IWorkbenchPage page) { |
| IWorkbenchPartReference activePartReference = page |
| .getActivePartReference(); |
| String activePartReferenceId = activePartReference.getId(); |
| assertTrue(activePartReference instanceof IViewReference); |
| assertEquals(activePartReferenceId, PartsTestUtil |
| .getView(viewIndex)); |
| |
| IWorkbenchPart activePart = page.getActivePart(); |
| assertTrue(activePart instanceof IViewPart); |
| |
| PartsTestUtil.zoom(activePart); |
| assertTrue(PartsTestUtil.isZoomed(activePart)); |
| |
| IViewReference[] viewReferences = page.getViewReferences(); |
| String currentViewId = null; |
| |
| for (int index = 0; index < viewReferences.length; index++) { |
| currentViewId = viewReferences[index].getId(); |
| if (!currentViewId.equals(activePartReferenceId)) { |
| try { |
| page.showView(currentViewId); |
| } catch (PartInitException e) { |
| e.printStackTrace(); |
| } |
| activePartReferenceId = currentViewId; |
| } |
| } |
| |
| activePart = page.getActivePart(); |
| assertTrue(activePart instanceof IViewPart); |
| |
| if (PartsTestUtil.isZoomed(activePart)) |
| PartsTestUtil.zoom(activePart); |
| |
| } |
| }; |
| PlatformUI.createAndRunWorkbench(display, wa); |
| } |
| } |