/****************************************************************************** * Copyright (c) 2002, 2006 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.gmf.tests.runtime.diagram.ui; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.eclipse.draw2d.PositionConstants; import org.eclipse.draw2d.geometry.Point; import org.eclipse.draw2d.geometry.Rectangle; import org.eclipse.gef.EditPart; import org.eclipse.gef.EditPartViewer; import org.eclipse.gef.RootEditPart; import org.eclipse.gef.editparts.ZoomManager; import org.eclipse.gef.ui.actions.GEFActionConstants; import org.eclipse.gmf.runtime.diagram.ui.actions.AlignAction; import org.eclipse.gmf.runtime.diagram.ui.actions.internal.SelectAllAction; import org.eclipse.gmf.runtime.diagram.ui.editparts.DiagramRootEditPart; import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart; import org.eclipse.gmf.runtime.diagram.ui.editparts.ShapeNodeEditPart; import org.eclipse.gmf.tests.runtime.diagram.ui.util.ITestActionCallback; import org.eclipse.jface.viewers.StructuredSelection; public abstract class AbstractDiagramTests extends AbstractTestBase { /** * * @param TestName name for the test */ public AbstractDiagramTests(String arg0) { super(arg0); } protected ZoomManager getZoomManager() { RootEditPart root = getDiagramEditPart().getViewer().getRootEditPart(); if (root instanceof DiagramRootEditPart) { return ((DiagramRootEditPart)root).getZoomManager(); } return null; } public void testZoom() throws Exception { getTestFixture().openDiagram(); assertNotNull("no drawing surface", getDrawSurfaceEditPart()); //$NON-NLS-1$ ZoomManager zoomManager = getZoomManager(); // Ensure the zoom manager exists assertTrue(zoomManager != null); // Zoom in zoomManager.setZoom(zoomManager.getMinZoom()); while (zoomManager.canZoomIn()) { double state = zoomManager.getNextZoomLevel(); assertTrue(state <= zoomManager.getMaxZoom()); assertTrue(state >= zoomManager.getMinZoom()); zoomManager.setZoom(state); } // Zoom out while (zoomManager.canZoomOut()) { double state = zoomManager.getPreviousZoomLevel(); assertTrue(state <= zoomManager.getMaxZoom()); assertTrue(state >= zoomManager.getMinZoom()); zoomManager.setZoom(state); } // Zoom to fit zoomManager.zoomTo(getDrawSurfaceFigure().getBounds()); } public void testZoomToolFunctionality() throws Exception { getTestFixture().openDiagram(); RootEditPart root = getDiagramEditPart().getViewer().getRootEditPart(); DiagramRootEditPart dgrmRoot = (DiagramRootEditPart)root; double currentZoom = dgrmRoot.getZoomManager().getZoom(); dgrmRoot.zoomIn(new Point(200, 200)); double newZoom = dgrmRoot.getZoomManager().getZoom(); assertTrue(newZoom > currentZoom); currentZoom = newZoom; dgrmRoot.zoomOut(new Point(300, 300)); newZoom = dgrmRoot.getZoomManager().getZoom(); assertTrue(newZoom < currentZoom); currentZoom = newZoom; dgrmRoot.zoomTo(new Rectangle(20, 20, 500, 500)); newZoom = dgrmRoot.getZoomManager().getZoom(); assertTrue(newZoom < currentZoom); } /** Return the supplied editpart's {@link ShapeNodeEditPart}children. */ protected List getSelectableShapesIn(IGraphicalEditPart parent) { assertNotNull(parent); List shapes = new ArrayList(); Iterator it = parent.getChildren().iterator(); while (it.hasNext()) { Object child = it.next(); if (child instanceof ShapeNodeEditPart) { if (((ShapeNodeEditPart)child).isSelectable()) shapes.add(child); } shapes.addAll(getSelectableShapesIn((IGraphicalEditPart)child)); } return shapes; } public void testSelect() throws Exception { getTestFixture().openDiagram(); final List connectors = getConnectors(); final List shapes = getSelectableShapesIn(getDrawSurfaceEditPart()); final List all = new ArrayList(); all.addAll(connectors); all.addAll(shapes); selectAll(getDrawSurfaceEditPart(), all); } /** * @param currentSelection <code>EditPart</code> to that will be given the current * selection before the action executes. Can be <code>null</code> indicating no current * selection. * @throws Exception */ protected void selectAll(final IGraphicalEditPart currentSelection, final List shouldSelect) throws Exception { assertNotNull("no drawing surface", getDrawSurfaceEditPart()); //$NON-NLS-1$ // test select all // // prime the selection action to perform the selection within currentSelection if (currentSelection != null) { getDiagramEditPart().getViewer().setSelection( new StructuredSelection(currentSelection)); } SelectAllAction selectAction = SelectAllAction.createSelectAllAction(getWorkbenchPage()); testAction(selectAction, new ITestActionCallback() { public void onRunExecution() { List selectedParts = getDiagramEditPart().getViewer() .getSelectedEditParts(); if (!shouldSelect.isEmpty()) { assertTrue( shouldSelect.containsAll(selectedParts) && selectedParts.containsAll(shouldSelect)); } else { assertTrue( selectedParts.contains(currentSelection)); } } }); } public void testAlignment() throws Exception { getTestFixture().openDiagram(); assertNotNull("no drawing surface", getDrawSurfaceEditPart()); //$NON-NLS-1$ AlignAction a1 = new AlignAction(getWorkbenchPage(), GEFActionConstants.ALIGN_LEFT, PositionConstants.LEFT); AlignAction a2 = new AlignAction(getWorkbenchPage(), GEFActionConstants.ALIGN_RIGHT, PositionConstants.RIGHT); AlignAction a3 = new AlignAction(getWorkbenchPage(), GEFActionConstants.ALIGN_TOP, PositionConstants.TOP); AlignAction a4 = new AlignAction(getWorkbenchPage(), GEFActionConstants.ALIGN_BOTTOM, PositionConstants.BOTTOM); AlignAction a5 = new AlignAction(getWorkbenchPage(), GEFActionConstants.ALIGN_CENTER, PositionConstants.CENTER); AlignAction a6 = new AlignAction(getWorkbenchPage(), GEFActionConstants.ALIGN_MIDDLE, PositionConstants.MIDDLE); EditPartViewer viewer = getDiagramEditPart().getRoot().getViewer(); // test alignment for all shapes selected viewer.deselectAll(); List shapeChildren = getDrawSurfaceEditPart().getChildren(); for (int i = 0; i < shapeChildren.size(); i++) { viewer.appendSelection((EditPart) shapeChildren.get(i)); } testAction(a1, new ITestActionCallback() { public void onRunExecution() { // empty block } }); testAction(a2, new ITestActionCallback() { public void onRunExecution() { //empty block } }); testAction(a3, new ITestActionCallback() { public void onRunExecution() { // empty block } }); testAction(a4, new ITestActionCallback() { public void onRunExecution() { // emtpy block } }); testAction(a5, new ITestActionCallback() { public void onRunExecution() { // empty block } }); testAction(a6, new ITestActionCallback() { public void onRunExecution() { // empty block } }); } }