/* * Copyright (c) 2008, 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: * Anna Karjakina (Borland) - initial API and implementation */ package org.eclipse.gmf.tests.migration; import java.util.List; import junit.framework.TestCase; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EEnum; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EPackage; import org.eclipse.emf.ecore.EStructuralFeature; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.resource.ResourceSet; import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; import org.eclipse.gmf.internal.codegen.util.Migrate2008; import org.eclipse.gmf.internal.codegen.util.ModelVersions; import org.eclipse.gmf.internal.common.ToolingResourceFactory; public class TestCustomCopier extends TestCase { private EPackage gmfgen_2008; private EClass cGenEditorGenerator; private EClass cGenDiagram; private EClass cGenAuditRule; private EClass cGenExpressionInterpreter; private EClass cGenJavaExpressionProvider; private EClass cValueExpression; private EClass cGenMetricRule; private EEnum eGenLanguage; private EClass cGenLink; private EClass cGenChildNode; private EClass cGenLinkConstraints; private EClass cTypeModelFacet; private EClass cGenFeatureSeqInitializer; private EClass cGenFeatureValueSpec; public TestCustomCopier(String name) { super(name); } @Override protected void setUp() throws Exception { gmfgen_2008 = EPackage.Registry.INSTANCE.getEPackage(ModelVersions.GMFGEN_2_1); cGenEditorGenerator = (EClass) gmfgen_2008.getEClassifier("GenEditorGenerator"); cGenDiagram = (EClass) gmfgen_2008.getEClassifier("GenDiagram"); cGenAuditRule = (EClass) gmfgen_2008.getEClassifier("GenAuditRule"); cGenExpressionInterpreter = (EClass) gmfgen_2008.getEClassifier("GenExpressionInterpreter"); cGenJavaExpressionProvider = (EClass) gmfgen_2008.getEClassifier("GenJavaExpressionProvider"); cValueExpression = (EClass) gmfgen_2008.getEClassifier("ValueExpression"); cGenMetricRule = (EClass) gmfgen_2008.getEClassifier("GenMetricRule"); eGenLanguage = (EEnum) gmfgen_2008.getEClassifier("GenLanguage"); cGenLink = (EClass) gmfgen_2008.getEClassifier("GenLink"); cGenChildNode = (EClass) gmfgen_2008.getEClassifier("GenChildNode"); cGenLinkConstraints = (EClass) gmfgen_2008.getEClassifier("GenLinkConstraints"); cTypeModelFacet = (EClass) gmfgen_2008.getEClassifier("TypeModelFacet"); cGenFeatureSeqInitializer = (EClass) gmfgen_2008.getEClassifier("GenFeatureSeqInitializer"); cGenFeatureValueSpec = (EClass) gmfgen_2008.getEClassifier("GenFeatureValueSpec"); } public void test06to08ModelTransform() throws Exception { //EObject testRoot = createTestModel(); final URI uri = MigrationPatchesTest.createURI("228913-copier.gmfgen#/"); Resource r = new ToolingResourceFactory().createResource(uri.trimFragment()); ResourceSet rset = new ResourceSetImpl(); rset.getResources().add(r); EObject testRoot = rset.getEObject(uri, true); final Migrate2008 m = new Migrate2008(); EObject newGenModel = m.go(testRoot); assertTrue(m.wasMigrationApplied()); checkTestModel(newGenModel); } private void checkTestModel(EObject editorGen) throws Exception { EPackage p = editorGen.eClass().getEPackage(); assertEquals(gmfgen_2008.getNsURI(), p.getNsURI()); assertEquals(cGenEditorGenerator, editorGen.eClass()); final EStructuralFeature aGenExpressionInterpreter_Language = cGenExpressionInterpreter.getEStructuralFeature("language"); final EStructuralFeature aValueExpression_Body = cValueExpression.getEStructuralFeature("body"); final EStructuralFeature rValueExpression_Provider = cValueExpression.getEStructuralFeature("provider"); EObject auditRoot = (EObject) editorGen.eGet(editorGen.eClass().getEStructuralFeature("audits")); assertNotNull(auditRoot); @SuppressWarnings("unchecked") List<EObject> auditRules = (List<EObject>) auditRoot.eGet(auditRoot.eClass().getEStructuralFeature("rules")); assertEquals(1, auditRules.size()); EObject aud1 = auditRules.get(0); EObject aud1VE = (EObject) aud1.eGet(cGenAuditRule.getEStructuralFeature("rule")); assertNotNull(aud1VE); assertEquals("audit1", aud1VE.eGet(aValueExpression_Body)); EObject aud1VEprov = (EObject) aud1VE.eGet(rValueExpression_Provider); assertNotNull(aud1VEprov); assertEquals(eGenLanguage.getEEnumLiteral("ocl"), aud1VEprov.eGet(aGenExpressionInterpreter_Language)); // can't invoke ExprProviderBase#getLanguage() method EObject metricsContainer = (EObject) editorGen.eGet(cGenEditorGenerator.getEStructuralFeature("metrics")); assertNotNull(metricsContainer); @SuppressWarnings("unchecked") List<EObject> metricsRules = (List<EObject>) metricsContainer.eGet(metricsContainer.eClass().getEStructuralFeature("metrics")); assertEquals(1, metricsRules.size()); EObject met1VE = (EObject) metricsRules.get(0).eGet(cGenMetricRule.getEStructuralFeature("rule")); assertNotNull(met1VE); assertEquals("audit1", met1VE.eGet(aValueExpression_Body)); EObject met1VEprov = (EObject) met1VE.eGet(rValueExpression_Provider); assertNotNull(met1VEprov); assertEquals(eGenLanguage.getEEnumLiteral("ocl"), met1VEprov.eGet(aGenExpressionInterpreter_Language)); // can't invoke ExprProviderBase#getLanguage() method assertEquals(aud1VEprov, met1VEprov); assertTrue(aud1VEprov == met1VEprov); assertEquals(met1VE, aud1VE); // copy assertTrue(met1VE == aud1VE); EObject diagram = (EObject) editorGen.eGet(cGenEditorGenerator.getEStructuralFeature("diagram")); assertNotNull(diagram); @SuppressWarnings("unchecked") List<EObject> links = (List<EObject>) diagram.eGet(cGenDiagram.getEStructuralFeature("links")); assertEquals(2, links.size()); EObject link1 = links.get(0); assertNotNull(link1); EObject csts1 = (EObject) link1.eGet(cGenLink.getEStructuralFeature("creationConstraints")); assertNotNull(csts1); assertNull(csts1.eGet(cGenLinkConstraints.getEStructuralFeature("targetEnd"))); EObject src1 = (EObject) csts1.eGet(cGenLinkConstraints.getEStructuralFeature("sourceEnd")); assertNotNull(src1); assertEquals("source_link1", src1.eGet(aValueExpression_Body)); EObject src1prov = (EObject) src1.eGet(rValueExpression_Provider); assertNotNull(src1prov); assertEquals(eGenLanguage.getEEnumLiteral("nregexp"), src1prov.eGet(aGenExpressionInterpreter_Language)); EObject link2 = links.get(1); EObject csts2 = (EObject) link2.eGet(cGenLink.getEStructuralFeature("creationConstraints")); assertNotNull(csts2); assertNull(csts2.eGet(cGenLinkConstraints.getEStructuralFeature("sourceEnd"))); EObject trg2 = (EObject) csts2.eGet(cGenLinkConstraints.getEStructuralFeature("targetEnd")); assertNotNull(trg2); assertEquals("target_link2", trg2.eGet(aValueExpression_Body)); EObject trg2prov = (EObject) trg2.eGet(rValueExpression_Provider); assertNotNull(trg2prov); //assertEquals(eGenLanguage.getEEnumLiteral("java"), trg2prov.getLanguage()); assertEquals(cGenJavaExpressionProvider, trg2prov.eClass()); // can't invoke op getLanguage(), at least check eClass @SuppressWarnings("unchecked") List<EObject> nodes = (List<EObject>) diagram.eGet(cGenDiagram.getEStructuralFeature("childNodes")); assertEquals(2, nodes.size()); EObject node1 = nodes.get(0); assertNotNull(node1); EObject fac1 = (EObject) node1.eGet(cGenChildNode.getEStructuralFeature("modelFacet")); assertNotNull(fac1); EObject node1cstr = (EObject) fac1.eGet(cTypeModelFacet.getEStructuralFeature("modelElementSelector")); assertNotNull(node1cstr); assertEquals("node1", node1cstr.eGet(aValueExpression_Body)); EObject node1cstrProv = (EObject) node1cstr.eGet(rValueExpression_Provider); assertNotNull(node1cstrProv); assertEquals(eGenLanguage.getEEnumLiteral("ocl"), node1cstrProv.eGet(aGenExpressionInterpreter_Language)); assertEquals(aud1VEprov, node1cstrProv); EObject node2 = nodes.get(1); assertNotNull(node2); EObject fac2 = (EObject) node2.eGet(cGenChildNode.getEStructuralFeature("modelFacet")); assertNotNull(fac2); EObject ir2 = (EObject) fac2.eGet(cTypeModelFacet.getEStructuralFeature("modelElementInitializer")); assertEquals(cGenFeatureSeqInitializer, ir2.eClass()); @SuppressWarnings("unchecked") List<EObject> featureInitializers = (List<EObject>) ir2.eGet(cGenFeatureSeqInitializer.getEStructuralFeature("initializers")); assertEquals(1, featureInitializers.size()); EObject fvs1 = featureInitializers.get(0); assertEquals(cGenFeatureValueSpec, fvs1.eClass()); EObject node2ve = (EObject) fvs1.eGet(cGenFeatureValueSpec.getEStructuralFeature("value")); assertNotNull(node2ve); assertEquals("node2", node2ve.eGet(aValueExpression_Body)); EObject node2veProv = (EObject) node2ve.eGet(rValueExpression_Provider); assertNotNull(node2veProv); assertEquals(eGenLanguage.getEEnumLiteral("regexp"), node2veProv.eGet(aGenExpressionInterpreter_Language)); EObject exprProviderContainer = (EObject) editorGen.eGet(cGenEditorGenerator.getEStructuralFeature("expressionProviders")); assertNotNull(exprProviderContainer); @SuppressWarnings("unchecked") List<EObject> providers = (List<EObject>) exprProviderContainer.eGet(exprProviderContainer.eClass().getEStructuralFeature("providers")); assertEquals(4, providers.size()); assertEquals(cGenExpressionInterpreter, providers.get(0).eClass()); assertEquals(cGenExpressionInterpreter, providers.get(1).eClass()); assertEquals(cGenExpressionInterpreter, providers.get(2).eClass()); assertEquals(cGenJavaExpressionProvider, providers.get(3).eClass()); // feature comes from superclass, may ask either from ExprInterp or JavaExprProv EStructuralFeature rGenExpressionProviderBase_Expressions = cGenExpressionInterpreter.getEStructuralFeature("expressions"); EObject pr1 = providers.get(0); assertEquals(eGenLanguage.getEEnumLiteral("ocl"), pr1.eGet(aGenExpressionInterpreter_Language)); assertEquals(2, ((List<?>) pr1.eGet(rGenExpressionProviderBase_Expressions)).size()); EObject pr2 = providers.get(1); assertEquals(eGenLanguage.getEEnumLiteral("regexp"), pr2.eGet(aGenExpressionInterpreter_Language)); assertEquals(1, ((List<?>) pr2.eGet(rGenExpressionProviderBase_Expressions)).size()); EObject pr3 = providers.get(2); assertEquals(eGenLanguage.getEEnumLiteral("nregexp"), pr3.eGet(aGenExpressionInterpreter_Language)); assertEquals(1, ((List<?>) pr3.eGet(rGenExpressionProviderBase_Expressions)).size()); EObject pr4 = providers.get(3); // Can't invoke java methods on DynamicEObjectImpl :( // assertEquals(eGenLanguage.getEEnumLiteral("java"), pr4.getClass().getMethod("getLanguage").invoke(pr4)); assertEquals(1, ((List<?>) pr4.eGet(rGenExpressionProviderBase_Expressions)).size()); } }