public GeneratorBase createGenerator(GenDiagram diagram) { final GenEditorGenerator editorGen = diagram.getEditorGen(); // using caching EmitterSource saves few seconds on test execution (115-118 compared to 112) // but it seems reasonable to avoid unpredictability of reuse (due to use of soft references) // and might be good idea to have separate test to test emitter reuse explicitly return new Generator( editorGen, new CodegenEmitters( !editorGen.isDynamicTemplates(), editorGen.getTemplateDirectory(), editorGen.getModelAccess() != null)); }
// CreateShortcut, LoadResource, InitDiagramFileAction public void testPredefinedActions() throws Exception { DiaGenSource s1 = createLibraryGen(false); final GenEditorGenerator editorGen = s1.getGenDiagram().getEditorGen(); GenContextMenu menu = GMFGenFactory.eINSTANCE.createGenContextMenu(); menu.getContext().add(s1.getGenDiagram()); final CreateShortcutAction createShortcutAction = GMFGenFactory.eINSTANCE.createCreateShortcutAction(); final LoadResourceAction loadResourceAction = GMFGenFactory.eINSTANCE.createLoadResourceAction(); menu.getItems().add(createShortcutAction); menu.getItems().add(loadResourceAction); editorGen.getContextMenus().clear(); // make sure there's no other (default) menus editorGen.getContextMenus().add(menu); editorGen.getDiagram().getContainsShortcutsTo().add("ecore"); assertTrue("sanity", editorGen.getDiagram().generateCreateShortcutAction()); // generateAndCompile(s1); // IProject generatedProject = ResourcesPlugin.getWorkspace().getRoot().getProject(editorGen.getPlugin().getID()); IFile generatedManifest = generatedProject.getFile("plugin.xml"); assertTrue(generatedManifest.exists()); DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder(); Document parsedManifest = db.parse(new InputSource(generatedManifest.getContents())); XPath xf = XPathFactory.newInstance().newXPath(); XPathExpression xe = xf.compile("/plugin/extension[@point = 'org.eclipse.ui.menus']/menuContribution/command"); NodeList result = (NodeList) xe.evaluate(parsedManifest, XPathConstants.NODESET); assertEquals(2, result.getLength()); xe = xf.compile("/plugin/extension[@point = 'org.eclipse.ui.commands']/command"); result = (NodeList) xe.evaluate(parsedManifest, XPathConstants.NODESET); assertTrue(result.getLength() > 2); HashSet<String> allCommands = new HashSet<String>(); for (int i = result.getLength() - 1; i >= 0; i--) { allCommands.add(result.item(i).getAttributes().getNamedItem("defaultHandler").getNodeValue()); } assertTrue(allCommands.contains(createShortcutAction.getQualifiedClassName())); assertTrue(allCommands.contains(loadResourceAction.getQualifiedClassName())); IFile file1 = generatedProject.getFile( "/src/" + createShortcutAction.getQualifiedClassName().replace('.', '/') + ".java"); IFile file2 = generatedProject.getFile( "/src/" + loadResourceAction.getQualifiedClassName().replace('.', '/') + ".java"); assertTrue(file1.exists()); assertTrue(file2.exists()); // // DiaGenSource s2 = createLibraryGen(true); // fail("TODO"); }
/** @generated NOT */ public String getName() { String result = getNameGen(); if (GenCommonBaseImpl.isEmpty(result)) { GenEditorGenerator generator = getEditorGen(); if (generator != null) { String prefix = "Diagram Editor"; GenModel genModel = generator.getDomainGenModel(); if (genModel != null) { prefix = genModel.getModelName(); } result = prefix + " Plugin"; } } return result; }
public void testGenModelTransform() { assertNotNull( "GenEditorGenerator is expected as result of mapping transformation", myTransformationResult); assertNotNull("GenDiagram is expected to be set...", myTransformationResult.getDiagram()); assertNotNull( "... as well as GenPlugin is expected to be set", myTransformationResult.getPlugin()); assertNotNull( "Diagram filename extension not set", myTransformationResult.getDiagramFileExtension()); // FIXME add more GenNode[] genNodes = myTransformer.getTrace().find(getNodeMapping()); assertEquals("Result model contains no GenNode for nodeMapping", 1, genNodes.length); // FIXME add more GenLink genLink = myTransformer.getTrace().find(getLinkMapping()); assertNotNull("Result model contains no GenLink for linkMapping", genLink); // FIXME add more }
// check CustomParser#isGenerateBoilerplate == true emits java class public void testCustomParsers() throws Exception { DiaGenSource s = createLibraryGen(false); final GenEditorGenerator gd = s.getGenDiagram().getEditorGen(); CustomParser cp1 = GMFGenFactory.eINSTANCE.createCustomParser(); cp1.setQualifiedName(gd.getLabelParsers().getImplPackageName() + "CustomParserOne"); CustomParser cp2 = GMFGenFactory.eINSTANCE.createCustomParser(); cp2.setQualifiedName(gd.getLabelParsers().getImplPackageName() + "CustomParserTwo"); cp2.setGenerateBoilerplate(true); gd.getLabelParsers().getImplementations().add(cp1); gd.getLabelParsers().getImplementations().add(cp2); // generateAndCompile(s); // IProject generatedProject = ResourcesPlugin.getWorkspace().getRoot().getProject(gd.getPlugin().getID()); IFile file_cp1 = generatedProject.getFile("/src/" + cp1.getQualifiedName().replace('.', '/') + ".java"); IFile file_cp2 = generatedProject.getFile("/src/" + cp2.getQualifiedName().replace('.', '/') + ".java"); assertFalse(file_cp1.exists()); assertTrue(file_cp2.exists()); }
public void testCompileDynamicDomainModel() throws Exception { DiaGenSource s = createLibraryGen(false); final GenEditorGenerator editorGen = s.getGenDiagram().getEditorGen(); assertNull("prereq", editorGen.getModelAccess()); DynamicModelAccess dma = GMFGenFactory.eINSTANCE.createDynamicModelAccess(); editorGen.setModelAccess(dma); generateAndCompile( s, new GenDiagramMutator("dynmodel") { @Override public void doMutation(GenDiagram d) { final DynamicModelAccess modelAccess = d.getEditorGen().getModelAccess(); modelAccess.setClassName("NonDefaultDynamicAccessorName"); } @Override public void undoMutation(GenDiagram d) { final DynamicModelAccess modelAccess = d.getEditorGen().getModelAccess(); modelAccess.setClassName(null); } }); }
public void testCreatedPalette() { final Palette palette = myTransformationResult.getDiagram().getPalette(); for (TopNodeReference topNode : getMapping().getNodes()) { final NodeMapping nodeMapping = topNode.getChild(); GenTopLevelNode genNode = myTransformer.getTrace().findTopNode(nodeMapping); assertNotNull(genNode); assertEquals(nodeMapping.getTool() != null ? 1 : 0, countUses(genNode, palette)); } for (LinkMapping linkMapping : getMapping().getLinks()) { GenLink genLink = myTransformer.getTrace().find(linkMapping); assertNotNull(genLink); assertEquals(linkMapping.getTool() != null ? 1 : 0, countUses(genLink, palette)); } // TODO add grooping test }
/** * * <!-- begin-user-doc --> * <!-- end-user-doc --> * * @generated */ public GenEditorGenerator getGMFGenEditorGenerator() { if (gmfGenEditorGenerator != null && gmfGenEditorGenerator.eIsProxy()) { InternalEObject oldGMFGenEditorGenerator = (InternalEObject) gmfGenEditorGenerator; gmfGenEditorGenerator = (GenEditorGenerator) eResolveProxy(oldGMFGenEditorGenerator); if (gmfGenEditorGenerator != oldGMFGenEditorGenerator) { if (eNotificationRequired()) { eNotify( new ENotificationImpl( this, Notification.RESOLVE, DawnGmfGenmodelPackage.DAWN_GMF_GENERATOR__GMF_GEN_EDITOR_GENERATOR, oldGMFGenEditorGenerator, gmfGenEditorGenerator)); } } } return gmfGenEditorGenerator; }
public void testCustomActions() throws Exception { DiaGenSource s = createLibraryGen(false); final GenEditorGenerator editorGen = s.getGenDiagram().getEditorGen(); GenContextMenu menu = GMFGenFactory.eINSTANCE.createGenContextMenu(); GenCustomAction a1 = GMFGenFactory.eINSTANCE.createGenCustomAction(); GenCustomAction a2 = GMFGenFactory.eINSTANCE.createGenCustomAction(); GenCustomAction a3 = GMFGenFactory.eINSTANCE.createGenCustomAction(); a1.setGenerateBoilerplate(false); a2.setGenerateBoilerplate(true); a3.setGenerateBoilerplate(true); a1.setQualifiedClassName("org.sample.actions.Action1"); a2.setQualifiedClassName("org.sample.actions.Action2"); a3.setQualifiedClassName("org.sample.actions.Action3"); a1.setName("testaction-1"); a2.setName("testaction-2"); a3.setName("testaction-3"); GenMenuManager subMenu = GMFGenFactory.eINSTANCE.createGenMenuManager(); subMenu.setID("org.sample.submenu"); GenGroupMarker gm = GMFGenFactory.eINSTANCE.createGenGroupMarker(); gm.setGroupName("group.name"); GenCommandAction cmdAction = GMFGenFactory.eINSTANCE.createGenCommandAction(); cmdAction.setCommandIdentifier("org.sample.command"); subMenu.getItems().add(a3); subMenu.getItems().add(gm); subMenu.getItems().add(cmdAction); menu.getItems().add(a1); menu.getItems().add(GMFGenFactory.eINSTANCE.createGenSeparator()); menu.getItems().add(a2); menu.getItems().add(subMenu); editorGen.getContextMenus().clear(); // make sure there's no other (default) menus editorGen.getContextMenus().add(menu); // generateAndCompile(s); // IProject generatedProject = ResourcesPlugin.getWorkspace().getRoot().getProject(editorGen.getPlugin().getID()); IFile generatedManifest = generatedProject.getFile("plugin.xml"); assertTrue(generatedManifest.exists()); DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder(); Document parsedManifest = db.parse(new InputSource(generatedManifest.getContents())); XPath xf = XPathFactory.newInstance().newXPath(); XPathExpression xe = xf.compile("/plugin/extension[@point = 'org.eclipse.ui.menus']/menuContribution"); NodeList result = (NodeList) xe.evaluate(parsedManifest, XPathConstants.NODESET); assertEquals( 2, result.getLength()); // one contribution to global context menu and another for submenu String l1 = result.item(0).getAttributes().getNamedItem("locationURI").getNodeValue(); String l2 = result.item(1).getAttributes().getNamedItem("locationURI").getNodeValue(); assertEquals(l1, "popup:org.eclipse.gmf.runtime.diagram.ui.DiagramEditorContextMenu"); assertEquals(l2, "popup:" + subMenu.getID()); // xe = xf.compile("/plugin/extension[@point = 'org.eclipse.ui.menus']/menuContribution/menu"); result = (NodeList) xe.evaluate(parsedManifest, XPathConstants.NODESET); assertEquals(1, result.getLength()); String menuIdAttr = result.item(0).getAttributes().getNamedItem("id").getNodeValue(); assertEquals(subMenu.getID(), menuIdAttr); // xe = xf.compile("/plugin/extension[@point = 'org.eclipse.ui.menus']/menuContribution/command"); result = (NodeList) xe.evaluate(parsedManifest, XPathConstants.NODESET); assertEquals(4, result.getLength()); // FIXME assert command contribution goes into correct locationURI // xe = xf.compile("/plugin/extension[@point = 'org.eclipse.ui.menus']/menuContribution/separator"); result = (NodeList) xe.evaluate(parsedManifest, XPathConstants.NODESET); assertEquals(2, result.getLength()); // xe = xf.compile( "/plugin/extension[@point = 'org.eclipse.ui.commands']/command[starts-with(@name,'testaction-')]"); result = (NodeList) xe.evaluate(parsedManifest, XPathConstants.NODESET); assertEquals(3, result.getLength()); // xe = xf.compile("/plugin/extension[@point = 'org.eclipse.ui.handlers']/handler"); result = (NodeList) xe.evaluate(parsedManifest, XPathConstants.NODESET); assertEquals(3, result.getLength()); String h1 = result.item(0).getAttributes().getNamedItem("class").getNodeValue(); String h2 = result.item(1).getAttributes().getNamedItem("class").getNodeValue(); String h3 = result.item(2).getAttributes().getNamedItem("class").getNodeValue(); assertEquals(a1.getQualifiedClassName(), h1); assertEquals(a2.getQualifiedClassName(), h2); assertEquals(a3.getQualifiedClassName(), h3); // check real files for handlers IFile file_a1 = generatedProject.getFile("/src/" + a1.getQualifiedClassName().replace('.', '/') + ".java"); IFile file_a2 = generatedProject.getFile("/src/" + a2.getQualifiedClassName().replace('.', '/') + ".java"); IFile file_a3 = generatedProject.getFile("/src/" + a3.getQualifiedClassName().replace('.', '/') + ".java"); assertFalse(file_a1.exists()); assertTrue(file_a2.exists()); assertTrue(file_a3.exists()); }