/* * Copyright (c) 2005, 2008 Borland Software Corporation * * 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: * Artem Tikhomirov (Borland) - initial API and implementation */ package org.eclipse.gmf.tests.tr; import org.eclipse.gmf.codegen.gmfgen.GenCommonBase; import org.eclipse.gmf.codegen.gmfgen.GenEditorGenerator; import org.eclipse.gmf.codegen.gmfgen.GenLink; import org.eclipse.gmf.codegen.gmfgen.GenNode; import org.eclipse.gmf.codegen.gmfgen.GenTopLevelNode; import org.eclipse.gmf.codegen.gmfgen.Palette; import org.eclipse.gmf.codegen.gmfgen.ToolEntry; import org.eclipse.gmf.codegen.gmfgen.ToolGroup; import org.eclipse.gmf.codegen.gmfgen.ToolGroupItem; import org.eclipse.gmf.internal.bridge.genmodel.DiagramGenModelTransformer; import org.eclipse.gmf.internal.bridge.genmodel.DiagramRunTimeModelHelper; import org.eclipse.gmf.mappings.LinkMapping; import org.eclipse.gmf.mappings.Mapping; import org.eclipse.gmf.mappings.NodeMapping; import org.eclipse.gmf.mappings.TopNodeReference; import org.eclipse.gmf.tests.Utils; public abstract class GenModelTransformerTest extends AbstractMappingTransformerTest { protected GenEditorGenerator myTransformationResult; private DiagramGenModelTransformer myTransformer; private final DiagramRunTimeModelHelper myDiagramModelHelper; protected GenModelTransformerTest(String name, DiagramRunTimeModelHelper rtHelper) { super(name); assert rtHelper != null; myDiagramModelHelper = rtHelper; } protected void setUp() throws Exception { super.setUp(); final Mapping m = getMapping(); myTransformer = new DiagramGenModelTransformer(myDiagramModelHelper); myTransformer.setEMFGenModel(Utils.createGenModel(m.getDiagram().getDomainModel())); myTransformer.transform(m); myTransformationResult = myTransformer.getResult(); } 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 } 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 } private static int countUses(GenCommonBase genElement, Palette palette) { int uses = 0; for (ToolGroup nextGroup : palette.getGroups()) { for (ToolGroupItem item : nextGroup.getEntries()) { if (false == item instanceof ToolEntry) { continue; } for (GenCommonBase cb : ((ToolEntry) item).getElements()) { if (cb == genElement) { uses++; // although it's hardly there's more that one GenCommonBase in EMF EList for ToolEntry#elements, doesn't hurt // *not to* break here } } } } return uses; } }