blob: 4ba1764991ccc3668740818db8c007044cecc328 [file] [log] [blame]
/******************************************************************************
* Copyright (c) 2005, 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.gmf.tests.runtime.diagram.ui.logic;
import junit.framework.Test;
import junit.framework.TestSuite;
import org.eclipse.draw2d.geometry.Point;
import org.eclipse.draw2d.geometry.Rectangle;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.xmi.XMLResource;
import org.eclipse.gef.ConnectionEditPart;
import org.eclipse.gmf.examples.runtime.diagram.logic.internal.editparts.LEDEditPart;
import org.eclipse.gmf.examples.runtime.diagram.logic.internal.editparts.TerminalEditPart;
import org.eclipse.gmf.examples.runtime.diagram.logic.semantic.LED;
import org.eclipse.gmf.runtime.diagram.core.commands.DeleteCommand;
import org.eclipse.gmf.runtime.diagram.core.util.ViewUtil;
import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
import org.eclipse.gmf.runtime.diagram.ui.editparts.ShapeEditPart;
import org.eclipse.gmf.runtime.diagram.ui.parts.IDiagramGraphicalViewer;
import org.eclipse.gmf.runtime.emf.type.core.ElementTypeRegistry;
import org.eclipse.gmf.runtime.emf.type.core.IElementType;
import org.eclipse.gmf.runtime.notation.View;
import org.eclipse.gmf.tests.runtime.diagram.ui.AbstractTestBase;
import org.eclipse.gmf.tests.runtime.diagram.ui.util.ITestCommandCallback;
/**
* Tests the
* {@link org.eclipse.gmf.runtime.diagram.ui.parts.DiagramGraphicalViewer}
* class.
*
* @author cmahoney
*/
public class DiagramGraphicalViewerTests
extends AbstractTestBase {
public static Test suite() {
TestSuite s = new TestSuite(DiagramGraphicalViewerTests.class);
return s;
}
public DiagramGraphicalViewerTests() {
super("Diagram Graphical Viewer Test Suite");//$NON-NLS-1$
}
protected void setTestFixture() {
testFixture = new LogicTestFixture();
}
/** Returns the logic test fixture */
protected LogicTestFixture getLogicTestFixture() {
return (LogicTestFixture) getTestFixture();
}
/**
* Tests the ID to EditPart registry in the
* <code>DiagramGraphicalViewer</code>.
*
* @throws Exception
*/
public void testIDToEditPartRegistry()
throws Exception {
final LogicTestFixture fixture = getLogicTestFixture();
fixture.openDiagram();
Rectangle rect = new Rectangle(getDiagramEditPart().getFigure()
.getBounds());
getDiagramEditPart().getFigure().translateToAbsolute(rect);
IElementType typeLED = ElementTypeRegistry.getInstance().getType(
"logic.led");//$NON-NLS-1$
IElementType typeWire = ElementTypeRegistry.getInstance().getType(
"logic.wire");//$NON-NLS-1$
Point createPt = new Point(100, 100);
LEDEditPart led1EP = (LEDEditPart) getLogicTestFixture()
.createShapeUsingTool(typeLED, createPt, getDiagramEditPart());
createPt.getTranslated(led1EP.getFigure().getSize().getExpanded(100,
100));
LEDEditPart led2EP = (LEDEditPart) getLogicTestFixture()
.createShapeUsingTool(typeLED, createPt, getDiagramEditPart());
createPt.getTranslated(led2EP.getFigure().getSize().getExpanded(100,
100));
final IDiagramGraphicalViewer viewer = (IDiagramGraphicalViewer) getDiagramEditPart()
.getViewer();
EObject led1 = led1EP.getNotationView()
.getElement();
EObject led2 = led2EP.getNotationView()
.getElement();
final String led1ID = ((XMLResource) led1.eResource()).getID(led1);
final String led2ID = ((XMLResource) led2.eResource()).getID(led2);
// Create a wire relationship between an outgoing terminal on LED1 and
// an incoming terminal on LED2.
EObject outputTerminal = (EObject) ((LED) ((View) led1EP.getModel())
.getElement()).getOutputTerminals().get(0);
TerminalEditPart outputTerminalEP = (TerminalEditPart) viewer
.findEditPartsForElement(
((XMLResource) outputTerminal.eResource()).getID(outputTerminal),
TerminalEditPart.class).get(0);
EObject inputTerminal = (EObject) ((LED) ((View) led2EP.getModel())
.getElement()).getInputTerminals().get(0);
TerminalEditPart inputTerminalEP = (TerminalEditPart) viewer
.findEditPartsForElement(
((XMLResource) inputTerminal.eResource()).getID(inputTerminal),
TerminalEditPart.class).get(0);
ConnectionEditPart wireEP = getLogicTestFixture()
.createConnectorUsingTool(outputTerminalEP, inputTerminalEP,
typeWire);
EObject wire = ((View) wireEP.getModel()).getElement();
String wireID = ((XMLResource) wire.eResource()).getID(wire);
assertEquals("Number of LEDEditPart for led1ID incorrect", 1, viewer//$NON-NLS-1$
.findEditPartsForElement(led1ID, LEDEditPart.class).size());
assertEquals("Number of ConnectionEditParts for led1ID incorrect", 0,//$NON-NLS-1$
viewer.findEditPartsForElement(led1ID, ConnectionEditPart.class)
.size());
View shape3 = createShapeView(getDiagramEditPart(), ViewUtil
.resolveSemanticElement(led2EP.getNotationView()), new Point(100,
200));
assertEquals("Number of ShapeEditParts for led2ID incorrect", 2, viewer//$NON-NLS-1$
.findEditPartsForElement(led2ID, ShapeEditPart.class).size());
DeleteCommand delete = new DeleteCommand(getLogicTestFixture().getEditingDomain(), shape3);
testCommand(delete, new ITestCommandCallback() {
public void onCommandExecution() {
assertEquals("Number of LEDEditParts for led1ID incorrect", 1,//$NON-NLS-1$
viewer.findEditPartsForElement(led1ID, LEDEditPart.class)
.size());
assertEquals("Number of LEDEditParts for led2ID incorrect", 1,//$NON-NLS-1$
viewer.findEditPartsForElement(led2ID, LEDEditPart.class)
.size());
}
});
clearDiagram();
assertEquals("Number of IGraphicalEditParts for led1ID incorrect", 0,//$NON-NLS-1$
viewer.findEditPartsForElement(led1ID, IGraphicalEditPart.class)
.size());
assertEquals("Number of IGraphicalEditParts for led2ID incorrect", 0,//$NON-NLS-1$
viewer.findEditPartsForElement(led2ID, IGraphicalEditPart.class)
.size());
assertEquals("Number of IGraphicalEditParts for wireID incorrect", 0,//$NON-NLS-1$
viewer.findEditPartsForElement(wireID, IGraphicalEditPart.class)
.size());
}
}