/*
* Copyright (c) 2009 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.migration;
import junit.framework.TestCase;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
import org.eclipse.gmf.codegen.gmfgen.CreateShortcutAction;
import org.eclipse.gmf.codegen.gmfgen.CustomParser;
import org.eclipse.gmf.codegen.gmfgen.ExternalParser;
import org.eclipse.gmf.codegen.gmfgen.GMFGenPackage;
import org.eclipse.gmf.codegen.gmfgen.GenContextMenu;
import org.eclipse.gmf.codegen.gmfgen.GenContributionItem;
import org.eclipse.gmf.codegen.gmfgen.GenEditorGenerator;
import org.eclipse.gmf.codegen.gmfgen.GenParserImplementation;
import org.eclipse.gmf.codegen.gmfgen.GenParsers;
import org.eclipse.gmf.codegen.gmfgen.LabelTextAccessMethod;
import org.eclipse.gmf.codegen.gmfgen.LoadResourceAction;
import org.eclipse.gmf.codegen.gmfgen.PredefinedParser;
import org.eclipse.gmf.tests.Plugin;
/**
* No tests for added FeatureLabelModelFacet#editableMetaFeatures, as empty value is ok (see AbstractParser).
* @author artem
*/
public class TestMigrate08to09 extends TestCase {
private GenEditorGenerator editorGen;
@Override
protected void setUp() throws Exception {
EObject root = new ResourceSetImpl().getEObject(Plugin.createURI("/models/migration/08to09.gmfgen#/"), true);
assertNotNull(root);
assertEquals(GMFGenPackage.eNS_URI, root.eClass().getEPackage().getNsURI());
assertTrue(root instanceof GenEditorGenerator /*root.eClass() == genEditorGenEClass */); // XXX how about next year's changes?
editorGen = (GenEditorGenerator) root;
}
/**
* Concept of GenParser and ParserImplementation introduced to replace edit/view methods of FeatureLabelModelFacet
*/
public void testGenParsers() {
GenParsers genParsers = editorGen.getLabelParsers();
assertNotNull(genParsers);
assertEquals(editorGen.getDiagram().getParsersPackageName(), genParsers.getImplPackageName()); // ok to remove when parserPackageName is gone
assertEquals(editorGen.getDiagram().getParserProviderPriority(), genParsers.getProviderPriority());
assertEquals(editorGen.getDiagram().getParserProviderQualifiedClassName(), genParsers.getQualifiedClassName());
assertFalse(genParsers.getImplementations().isEmpty());
boolean customParserFound = false, externalParserFound = false;
PredefinedParser predefinedParser = null;
for (GenParserImplementation gpi : genParsers.getImplementations()) {
if (gpi instanceof CustomParser) {
customParserFound = true;
} else if (gpi instanceof ExternalParser) {
externalParserFound = true;
} else if (gpi instanceof PredefinedParser) {
predefinedParser = (PredefinedParser) gpi;
}
}
assertFalse("Old models had no means to define CustomParser", customParserFound);
assertTrue("Missing ExternalParser use ", externalParserFound);
assertTrue("Missing PredefinedParser use ", predefinedParser != null);
assertFalse(predefinedParser.getUses().isEmpty());
assertEquals(LabelTextAccessMethod.MESSAGE_FORMAT, predefinedParser.getEditMethod());
assertEquals(LabelTextAccessMethod.PRINTF, predefinedParser.getViewMethod());
}
/**
* LoadResourceAction, CreateShortcutAction are now distinct classes, explicitly inserted into diagram's context menu
*/
public void testActions() {
assertFalse(editorGen.getContextMenus().isEmpty());
GenContextMenu diagramMenu = null;
for (GenContextMenu cm : editorGen.getContextMenus()) {
if (cm.getContext().size() == 1 && cm.getContext().get(0) == editorGen.getDiagram()) {
diagramMenu = cm;
}
}
assertNotNull(diagramMenu);
LoadResourceAction loadResAction = null;
CreateShortcutAction createShortcutAction = null;
for (GenContributionItem ci : diagramMenu.getItems()) {
if (ci instanceof CreateShortcutAction) {
createShortcutAction = (CreateShortcutAction) ci;
} else if (ci instanceof LoadResourceAction) {
loadResAction = (LoadResourceAction) ci;
}
}
assertNotNull(loadResAction);
assertNotNull(createShortcutAction);
assertNotNull(loadResAction.getQualifiedClassName());
assertNotNull(createShortcutAction.getQualifiedClassName());
}
}