/* * Copyright (c) 2010-2013 Eike Stepper (Berlin, Germany) 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: * Martin Fluegge - initial API and implementation */ package org.eclipse.emf.cdo.dawn.tests.ui.gmf; import org.eclipse.emf.cdo.dawn.examples.acore.AAttribute; import org.eclipse.emf.cdo.dawn.examples.acore.AClass; import org.eclipse.emf.cdo.dawn.examples.acore.ACoreRoot; import org.eclipse.emf.cdo.dawn.examples.acore.AInterface; import org.eclipse.emf.cdo.dawn.examples.acore.AOperation; import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.parts.AClassEditPart; import org.eclipse.emf.cdo.dawn.tests.AbstractDawnGEFTest; import org.eclipse.emf.cdo.dawn.tests.ui.util.DawnAcoreTestUtil; import org.eclipse.emf.cdo.eresource.CDOResource; import org.eclipse.emf.cdo.session.CDOSession; import org.eclipse.emf.cdo.view.CDOView; import org.eclipse.emf.common.util.EList; import org.eclipse.gmf.runtime.notation.Diagram; import org.eclipse.swtbot.eclipse.gef.finder.widgets.SWTBotGefEditPart; import org.eclipse.swtbot.eclipse.gef.finder.widgets.SWTBotGefEditor; import org.eclipse.swtbot.swt.finder.junit.SWTBotJunit4ClassRunner; import org.eclipse.swtbot.swt.finder.matchers.AbstractMatcher; import org.hamcrest.Description; import org.junit.Test; import org.junit.runner.RunWith; import java.util.ArrayList; import java.util.List; /** * @author Martin Fluegge */ @RunWith(SWTBotJunit4ClassRunner.class) public class SimpleDiagramTest extends AbstractDawnGEFTest { @Test public void testCreateNewDawnDiagramAndAddElements() throws Exception { SWTBotGefEditor editor = DawnAcoreTestUtil.openNewAcoreGMFEditor("default.acore_diagram", getBot()); assertNotNull(editor); createNodeWithLabel(DawnAcoreTestUtil.A_CLASS, 100, 100, "A", getBot(), editor); createNodeWithLabel(DawnAcoreTestUtil.A_CLASS, 250, 100, "B", getBot(), editor); createNodeWithLabel(DawnAcoreTestUtil.A_CLASS, 150, 250, "C", getBot(), editor); editor.saveAndClose(); { CDOSession session = openSession(); CDOView view = session.openView(); CDOResource diagramResource = view.getResource("/default.acore_diagram"); CDOResource semanticResource = view.getResource("/default.acore"); assertNotNull(diagramResource); assertNotNull(semanticResource); Diagram diagram = (Diagram)diagramResource.getContents().get(0); ACoreRoot semanticRoot = (ACoreRoot)semanticResource.getContents().get(0); assertEquals(3, diagram.getChildren().size()); assertEquals(3, semanticRoot.getClasses().size()); Character name = 'A'; for (AClass aClass : semanticRoot.getClasses()) { assertEquals(name.toString(), aClass.getName()); name++; } } } @Test public void testCreateNewDawnDiagramAndAddElementsWithEdges() throws Exception { SWTBotGefEditor editor = DawnAcoreTestUtil.openNewAcoreGMFEditor("default.acore_diagram", getBot()); assertNotNull(editor); createNodeWithLabel(DawnAcoreTestUtil.A_CLASS, 100, 100, "A", getBot(), editor); createNodeWithLabel(DawnAcoreTestUtil.A_CLASS, 250, 100, "B", getBot(), editor); createNodeWithLabel(DawnAcoreTestUtil.A_CLASS, 150, 250, "C", getBot(), editor); createEdge(DawnAcoreTestUtil.CONNECTION_IHERITS, 100, 100, 250, 100, editor); createEdge(DawnAcoreTestUtil.CONNECTION_IHERITS, 100, 100, 150, 250, editor); List<SWTBotGefEditPart> connectionEditParts = getAllConnections(editor); assertEquals(2, connectionEditParts.size()); editor.save(); { CDOSession session = openSession(); CDOView view = session.openView(); CDOResource diagramResource = view.getResource("/default.acore_diagram"); CDOResource semanticResource = view.getResource("/default.acore"); assertNotNull(diagramResource); assertNotNull(semanticResource); Diagram diagram = (Diagram)diagramResource.getContents().get(0); ACoreRoot semanticRoot = (ACoreRoot)semanticResource.getContents().get(0); assertEquals(3, diagram.getChildren().size()); assertEquals(3, semanticRoot.getClasses().size()); Character name = 'A'; for (AClass aClass : semanticRoot.getClasses()) { assertEquals(name.toString(), aClass.getName()); name++; } view.close(); } // for (SWTBotGefEditPart ep : connectionEditParts) // { // ConnectionEditPart connectionEditPart = (ConnectionEditPart)ep.part(); // Connection connection = (Connection)connectionEditPart.getFigure(); // // Point midpoint = connection.getPoints().getMidpoint().getCopy(); // // editor.click(midpoint.x, midpoint.y); // editor.drag(midpoint.x, midpoint.y, 0, 20); // } // editor.save(); // editor.close(); } @Test public void testAClassWithAttributes() throws Exception { SWTBotGefEditor editor = DawnAcoreTestUtil.openNewAcoreGMFEditor("default.acore_diagram", getBot()); createNodeWithLabel(DawnAcoreTestUtil.A_CLASS, 100, 100, "A", getBot(), editor); editor.activateTool(DawnAcoreTestUtil.A_ATTRIBUTE); editor.click(100, 100); typeTextToFocusedWidget("public foo:int", getBot(), true); editor.save(); { CDOSession session = openSession(); CDOView view = session.openView(); CDOResource diagramResource = view.getResource("/default.acore_diagram"); CDOResource semanticResource = view.getResource("/default.acore"); assertNotNull(diagramResource); assertNotNull(semanticResource); Diagram diagram = (Diagram)diagramResource.getContents().get(0); ACoreRoot semanticRoot = (ACoreRoot)semanticResource.getContents().get(0); assertEquals(1, diagram.getChildren().size()); AClass aClass = semanticRoot.getClasses().get(0); assertEquals(1, aClass.getAttributes().size()); AAttribute aAttribute = aClass.getAttributes().get(0); assertEquals("public", aAttribute.getAccessright().toString()); assertEquals("int", aAttribute.getDataType().toString()); assertEquals("foo", aAttribute.getName()); } } @Test public void testAClassWithOperations() throws Exception { SWTBotGefEditor editor = DawnAcoreTestUtil.openNewAcoreGMFEditor("default.acore_diagram", getBot()); createNodeWithLabel(DawnAcoreTestUtil.A_CLASS, 100, 100, "A", getBot(), editor); editor.activateTool(DawnAcoreTestUtil.A_OPERATION); editor.click(100, 100); typeTextToFocusedWidget("public foo():int", getBot(), true); editor.save(); { CDOSession session = openSession(); CDOView view = session.openView(); CDOResource diagramResource = view.getResource("/default.acore_diagram"); CDOResource semanticResource = view.getResource("/default.acore"); assertNotNull(diagramResource); assertNotNull(semanticResource); Diagram diagram = (Diagram)diagramResource.getContents().get(0); ACoreRoot semanticRoot = (ACoreRoot)semanticResource.getContents().get(0); assertEquals(1, diagram.getChildren().size()); AClass aClass = semanticRoot.getClasses().get(0); assertEquals(1, aClass.getOperations().size()); AOperation aOperation = aClass.getOperations().get(0); assertEquals("foo", aOperation.getName()); assertEquals("public", aOperation.getAccessright().toString()); assertEquals("int", aOperation.getDataType().toString()); } } @Test public void testAInterfaceWithOperations() throws Exception { SWTBotGefEditor editor = DawnAcoreTestUtil.openNewAcoreGMFEditor("default.acore_diagram", getBot()); createNodeWithLabel(DawnAcoreTestUtil.A_INTERFACE, 100, 100, "A", getBot(), editor); editor.activateTool(DawnAcoreTestUtil.A_OPERATION); editor.click(100, 100); typeTextToFocusedWidget("public foo():int", getBot(), true); editor.save(); { CDOSession session = openSession(); CDOView view = session.openView(); CDOResource diagramResource = view.getResource("/default.acore_diagram"); CDOResource semanticResource = view.getResource("/default.acore"); assertNotNull(diagramResource); assertNotNull(semanticResource); Diagram diagram = (Diagram)diagramResource.getContents().get(0); ACoreRoot semanticRoot = (ACoreRoot)semanticResource.getContents().get(0); assertEquals(1, diagram.getChildren().size()); AInterface aInterface = semanticRoot.getInterfaces().get(0); AOperation aOperation = aInterface.getOperations().get(0); assertEquals("foo", aOperation.getName()); assertEquals("public", aOperation.getAccessright().toString()); assertEquals("int", aOperation.getDataType().toString()); } } @Test public void testConnections() throws Exception { SWTBotGefEditor editor = DawnAcoreTestUtil.openNewAcoreGMFEditor("default.acore_diagram", getBot()); assertNotNull(editor); createNodeWithLabel(DawnAcoreTestUtil.A_CLASS, 100, 100, "A", getBot(), editor); createNodeWithLabel(DawnAcoreTestUtil.A_CLASS, 300, 100, "B", getBot(), editor); createNodeWithLabel(DawnAcoreTestUtil.A_CLASS, 100, 300, "C", getBot(), editor); createNodeWithLabel(DawnAcoreTestUtil.A_CLASS, 300, 300, "D", getBot(), editor); createNodeWithLabel(DawnAcoreTestUtil.A_INTERFACE, 200, 200, "Interface", getBot(), editor); createEdge(DawnAcoreTestUtil.CONNECTION_IHERITS, 100, 100, 300, 100, editor); createEdge(DawnAcoreTestUtil.CONNECTION_ASSOCIATION, 310, 110, 310, 310, editor); createEdge(DawnAcoreTestUtil.CONNECTION_COMPOSITION, 300, 300, 100, 300, editor); createEdge(DawnAcoreTestUtil.CONNECTION_AGGREGATION, 100, 300, 100, 100, editor); createEdge(DawnAcoreTestUtil.CONNECTION_IMPLEMENTS, 100, 100, 200, 200, editor); List<SWTBotGefEditPart> connectionEditParts = getAllConnections(editor); assertEquals(5, connectionEditParts.size()); editor.save(); { CDOSession session = openSession(); CDOView view = session.openView(); CDOResource diagramResource = view.getResource("/default.acore_diagram"); CDOResource semanticResource = view.getResource("/default.acore"); assertNotNull(diagramResource); assertNotNull(semanticResource); Diagram diagram = (Diagram)diagramResource.getContents().get(0); ACoreRoot semanticRoot = (ACoreRoot)semanticResource.getContents().get(0); assertEquals(5, diagram.getChildren().size()); assertEquals(4, semanticRoot.getClasses().size()); assertEquals(1, semanticRoot.getInterfaces().size()); AClass A = semanticRoot.getClasses().get(0); AClass B = semanticRoot.getClasses().get(1); AClass C = semanticRoot.getClasses().get(2); AClass D = semanticRoot.getClasses().get(3); // A EList<AInterface> implementedInterfaces = A.getImplementedInterfaces(); assertEquals(1, implementedInterfaces.size()); assertEquals(implementedInterfaces.get(0), semanticRoot.getInterfaces().get(0)); assertEquals(1, A.getSubClasses().size()); assertEquals(B, A.getSubClasses().get(0)); // B assertEquals(1, B.getAssociations().size()); assertEquals(D, B.getAssociations().get(0)); // C assertEquals(1, C.getAggregations().size()); assertEquals(A, C.getAggregations().get(0)); // D assertEquals(1, D.getCompositions().size()); assertEquals(C, D.getCompositions().get(0)); view.close(); } editor.close(); } @Test public void testExceptionOnClose() throws Exception { SWTBotGefEditor editor = DawnAcoreTestUtil.openNewAcoreGMFEditor("default.acore_diagram", getBot()); assertNotNull(editor); editor.close(); } private List<SWTBotGefEditPart> getAllConnections(final SWTBotGefEditor editor) { List<SWTBotGefEditPart> aClassEditParts = editor.editParts(new AbstractMatcher<AClassEditPart>() { @Override protected boolean doMatch(Object item) { if (item instanceof AClassEditPart) { return true; } return false; } public void describeTo(Description description) { } }); List<SWTBotGefEditPart> ret = new ArrayList<SWTBotGefEditPart>(); for (SWTBotGefEditPart editPart : aClassEditParts) { ret.addAll(editPart.sourceConnections()); } return ret; } }