blob: acd1adee37a3e12633930b037b6eaa52bf25280a [file] [log] [blame]
/******************************************************************************
* 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
}
});
}
}