package org.eclipselabs.spray.examples.one.tests; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import org.eclipse.draw2d.IFigure; import org.eclipse.emf.ecore.EObject; import org.eclipse.gef.GraphicalEditPart; import org.eclipse.graphiti.mm.algorithms.GraphicsAlgorithm; import org.eclipse.graphiti.mm.algorithms.RoundedRectangle; import org.eclipse.graphiti.mm.pictograms.PictogramLink; import org.eclipse.graphiti.mm.pictograms.Shape; import org.eclipse.graphiti.ui.internal.figures.GFAbstractShape; import org.eclipse.graphiti.ui.internal.figures.GFRoundedRectangle; import org.eclipse.swtbot.eclipse.finder.widgets.SWTBotEditor; 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.junit.Test; import org.junit.runner.RunWith; import BusinessDomainDsl.BusinessClass; @SuppressWarnings("restriction") @RunWith(SWTBotJunit4ClassRunner.class) public class SimpleUITest extends AbstractGraphitiTest { final String projectName = "org.eclipselabs.spray.examples.SimpleUITest"; @Test public void testCreateNewBusinessClass() throws Exception { final String perspective = "Java"; final String diagramFolder = "src"; final String fileName = "ExampleOneTest"; final String diagramTypeName = "mod4j"; final String objectFromToolbar = "BusinessClass"; final String businessClassName = "Test"; int targetX = 50; int targetY = 60; bot.perspectiveByLabel(perspective).activate(); createNewProject(projectName); selectFolderNode(projectName, diagramFolder); createDiagramViaGraphitiExampleWizard(diagramTypeName, fileName); SWTBotEditor editor = bot.activeEditor(); editor.save(); final SWTBotGefEditor ged = bot.gefEditor(editor.getTitle()); createBusinessClass(ged, objectFromToolbar, businessClassName, targetX, targetY); assertBusinessClassRepresentationExists(ged, businessClassName, targetX, targetY); } private void createBusinessClass(final SWTBotGefEditor ged, final String objectFromToolbar, final String name, int targetX, int targetY) { ged.activateTool(objectFromToolbar); ged.drag(targetX, targetY, 55, 55); bot.text().setText(name); bot.button("OK").click(); } private void assertBusinessClassRepresentationExists(SWTBotGefEditor ged, String shapeName, int targetX, int targetY) { SWTBotGefEditPart editPart = ged.getEditPart("<<BusinessClass>> Test"); IFigure figure = assertFigure(targetX, targetY, editPart); assertRoundedRectangle(targetX, targetY, figure); assertDomainObject(shapeName, editPart); } private IFigure assertFigure(int targetX, int targetY, SWTBotGefEditPart editPart) { IFigure figure = ((GraphicalEditPart) editPart.part()).getFigure(); assertNotNull("figure not found", figure); assertEquals(targetX, figure.getBounds().x); assertEquals(targetY, figure.getBounds().y); return figure; } private void assertRoundedRectangle(int targetX, int targetY, IFigure figure) { assertTrue("rounded rectangle expected", figure instanceof GFRoundedRectangle); assertTrue( "rounded rectangle should be a specialization of abstract shape", figure instanceof GFAbstractShape); GFRoundedRectangle rectangle = (GFRoundedRectangle) figure; try { Method method = GFAbstractShape.class .getDeclaredMethod("getGraphicsAlgorithm"); method.setAccessible(true); GraphicsAlgorithm ga = (GraphicsAlgorithm) method.invoke(rectangle); assertTrue(ga instanceof RoundedRectangle); RoundedRectangle rec = (RoundedRectangle) ga; assertEquals(targetX, rec.getX()); assertEquals(targetY, rec.getY()); } catch (SecurityException e) { fail(e.getMessage()); e.printStackTrace(); } catch (NoSuchMethodException e) { fail(e.getMessage()); e.printStackTrace(); } catch (IllegalArgumentException e) { fail(e.getMessage()); e.printStackTrace(); } catch (IllegalAccessException e) { fail(e.getMessage()); e.printStackTrace(); } catch (InvocationTargetException e) { fail(e.getMessage()); e.printStackTrace(); } } private void assertDomainObject(String shapeName, SWTBotGefEditPart editPart) { Object model = ((GraphicalEditPart) editPart.part()).getModel(); assertTrue("should have been shape", model instanceof Shape); Shape shape = (Shape) model; PictogramLink link = shape.getLink(); assertNotNull("not linked with bo", link); assertEquals("not the expected bo count", 1, link.getBusinessObjects().size()); EObject bo = link.getBusinessObjects().get(0); assertTrue("should have been business class", bo instanceof BusinessClass); BusinessClass bc = (BusinessClass) bo; assertNotNull("bc name set", bc.getName()); assertEquals("not the expected bc name", shapeName, bc.getName()); } @Override protected String getProjectName() { return projectName; } }