/**
* Copyright (c) 2005-2006 IBM Corporation and others.
* 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:
* IBM - Initial API and implementation
*/
package org.eclipse.emf.test.tools.codegen;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import org.eclipse.emf.codegen.ecore.genmodel.GenAnnotation;
import org.eclipse.emf.codegen.ecore.genmodel.GenModel;
import org.eclipse.emf.codegen.ecore.genmodel.GenModelFactory;
import org.eclipse.emf.codegen.ecore.genmodel.GenPackage;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.EcoreFactory;
import org.eclipse.emf.ecore.EcorePackage;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.resource.impl.ResourceFactoryImpl;
import org.eclipse.emf.ecore.resource.impl.ResourceImpl;
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
import org.junit.Before;
import org.junit.Test;
public class GenModelTest
{
protected GenModel genModel;
@Before
public void setUp() throws Exception
{
genModel = createGenModel();
}
protected GenModel createGenModel()
{
List<EPackage> ePackages = new ArrayList<EPackage>();
ePackages.add(createEPackage(0, true, false));
ePackages.add(createEPackage(1, false, false));
ePackages.add(createEPackage(2, true, true));
ePackages.add(createEPackage(3, false, true));
GenModel genModel = GenModelFactory.eINSTANCE.createGenModel();
genModel.setModelDirectory("project1/f1");
genModel.initialize(ePackages);
genModel.setModelPluginClass("modelPluginClass.PC");
genModel.setEditPluginClass("editPluginClass.PC");
genModel.setEditorPluginClass("editorPluginClass.PC");
genModel.setTestSuiteClass("testSuiteClass.TC");
{
GenPackage genPackage = genModel.getGenPackages().get(0);
assertEquals("ePackage0", genPackage.getEcorePackage().getName());
genPackage.setPrefix("P0");
genPackage.setBasePackage("org.example0");
genPackage.setInterfacePackageSuffix("pub");
genPackage.setClassPackageSuffix("internal");
genPackage.setUtilityPackageSuffix("utility.pub");
genPackage.setProviderPackageSuffix("edit");
genPackage.setPresentationPackageSuffix("ui");
genPackage.setTestsPackageSuffix("junit");
}
{
GenPackage genPackage = genModel.getGenPackages().get(1);
assertEquals("ePackage1", genPackage.getEcorePackage().getName());
genPackage.setPrefix("P1");
genPackage.setBasePackage("org.example1");
genPackage.setInterfacePackageSuffix("pub1");
genPackage.setClassPackageSuffix("internal1");
genPackage.setUtilityPackageSuffix("utility1.pub1");
genPackage.setProviderPackageSuffix("edit1");
genPackage.setPresentationPackageSuffix("ui1");
genPackage.setTestsPackageSuffix("junit1");
}
{
GenPackage genPackage = genModel.getGenPackages().get(2);
assertEquals("ePackage2", genPackage.getEcorePackage().getName());
genPackage.setPrefix("P2");
genPackage.setBasePackage("org.example2");
GenPackage subPackage = genPackage.getNestedGenPackages().get(0);
assertEquals("subEPackage2", subPackage.getEcorePackage().getName());
subPackage.setPrefix("S2");
subPackage.setBasePackage("org.exampleS2");
}
{
GenPackage genPackage = genModel.getGenPackages().get(3);
assertEquals("ePackage3", genPackage.getEcorePackage().getName());
genPackage.setPrefix("P3");
genPackage.setInterfacePackageSuffix("pub3");
GenPackage subPackage = genPackage.getNestedGenPackages().get(0);
assertEquals("subEPackage3", subPackage.getEcorePackage().getName());
subPackage.setPrefix("S3");
}
return genModel;
}
protected EPackage createEPackage(int id, boolean hasClass, boolean subPackage)
{
EPackage ePackage = EcoreFactory.eINSTANCE.createEPackage();
ePackage.setName("ePackage" + id);
ePackage.setNsPrefix("NSPrefix_" + ePackage.getName());
ePackage.setNsURI("NSURI_" + ePackage.getName());
if (hasClass)
{
EClass eClass = EcoreFactory.eINSTANCE.createEClass();
eClass.setName("Class1");
ePackage.getEClassifiers().add(eClass);
}
if (subPackage)
{
EPackage subEPackage = EcoreFactory.eINSTANCE.createEPackage();
subEPackage.setName("subEPackage" + id);
subEPackage.setNsPrefix("NSPrefix_" + subEPackage.getName());
subEPackage.setNsURI("NSURI_" + subEPackage.getName());
ePackage.getESubpackages().add(subEPackage);
EClass eClass = EcoreFactory.eINSTANCE.createEClass();
eClass.setName("Class2");
subEPackage.getEClassifiers().add(eClass);
}
return ePackage;
}
/*
* Bugzilla 98140
*/
@Test
public void testGetModelQualifiedPackageNames() throws Exception
{
List<String> packageNames = genModel.getModelQualifiedPackageNames();
modelQualifiedPackageNamesTest(packageNames);
assertTrue(packageNames.isEmpty());
genModel.setTestsDirectory(genModel.getModelDirectory());
packageNames = genModel.getModelQualifiedPackageNames();
modelQualifiedPackageNamesTest(packageNames);
testsQualifiedPackageNamesTest(packageNames);
assertTrue(packageNames.isEmpty());
}
/*
* Bugzilla 98140
*/
@Test
public void testGetEditQualifiedPackageNames() throws Exception
{
List<String> packageNames = genModel.getEditQualifiedPackageNames();
editQualifiedPackageNamesTest(packageNames);
assertTrue(packageNames.isEmpty());
genModel.setEditDirectory(genModel.getModelDirectory());
packageNames = genModel.getEditQualifiedPackageNames();
modelQualifiedPackageNamesTest(packageNames);
editQualifiedPackageNamesTest(packageNames);
assertTrue(packageNames.isEmpty());
//
packageNames = genModel.getModelQualifiedPackageNames();
modelQualifiedPackageNamesTest(packageNames);
assertTrue(packageNames.isEmpty());
genModel.setTestsDirectory(genModel.getModelDirectory());
packageNames = genModel.getEditQualifiedPackageNames();
modelQualifiedPackageNamesTest(packageNames);
editQualifiedPackageNamesTest(packageNames);
testsQualifiedPackageNamesTest(packageNames);
assertTrue(packageNames.isEmpty());
//
packageNames = genModel.getModelQualifiedPackageNames();
modelQualifiedPackageNamesTest(packageNames);
testsQualifiedPackageNamesTest(packageNames);
assertTrue(packageNames.isEmpty());
}
/*
* Bugzilla 98140
*/
@Test
public void testGetEditorQualifiedPackageNames() throws Exception
{
List<String> packageNames = genModel.getEditorQualifiedPackageNames();
editorQualifiedPackageNamesTest(packageNames);
assertTrue(packageNames.isEmpty());
genModel.setEditorDirectory(genModel.getEditDirectory());
packageNames = genModel.getEditorQualifiedPackageNames();
editorQualifiedPackageNamesTest(packageNames);
editQualifiedPackageNamesTest(packageNames);
assertTrue(packageNames.isEmpty());
//
packageNames = genModel.getModelQualifiedPackageNames();
modelQualifiedPackageNamesTest(packageNames);
assertTrue(packageNames.isEmpty());
//
packageNames = genModel.getEditQualifiedPackageNames();
editQualifiedPackageNamesTest(packageNames);
assertTrue(packageNames.isEmpty());
genModel.setEditDirectory(genModel.getModelDirectory());
genModel.setEditorDirectory(genModel.getModelDirectory());
packageNames = genModel.getEditorQualifiedPackageNames();
editorQualifiedPackageNamesTest(packageNames);
modelQualifiedPackageNamesTest(packageNames);
editQualifiedPackageNamesTest(packageNames);
assertTrue(packageNames.isEmpty());
//
packageNames = genModel.getModelQualifiedPackageNames();
modelQualifiedPackageNamesTest(packageNames);
assertTrue(packageNames.isEmpty());
//
packageNames = genModel.getEditQualifiedPackageNames();
modelQualifiedPackageNamesTest(packageNames);
editQualifiedPackageNamesTest(packageNames);
assertTrue(packageNames.isEmpty());
genModel.setTestsDirectory(genModel.getModelDirectory());
packageNames = genModel.getEditorQualifiedPackageNames();
editorQualifiedPackageNamesTest(packageNames);
modelQualifiedPackageNamesTest(packageNames);
editQualifiedPackageNamesTest(packageNames);
testsQualifiedPackageNamesTest(packageNames);
assertTrue(packageNames.isEmpty());
//
packageNames = genModel.getModelQualifiedPackageNames();
modelQualifiedPackageNamesTest(packageNames);
testsQualifiedPackageNamesTest(packageNames);
assertTrue(packageNames.isEmpty());
}
protected void modelQualifiedPackageNamesTest(List<String> packageNames)
{
assertTrue(packageNames.remove("org.example0.ePackage0.pub"));
assertTrue(packageNames.remove("org.example0.ePackage0.internal"));
assertTrue(packageNames.remove("org.example0.ePackage0.utility.pub"));
assertTrue(packageNames.remove("org.example2.ePackage2"));
assertTrue(packageNames.remove("org.example2.ePackage2.impl"));
assertTrue(packageNames.remove("org.example2.ePackage2.util"));
assertTrue(packageNames.remove("org.exampleS2.subEPackage2"));
assertTrue(packageNames.remove("org.exampleS2.subEPackage2.impl"));
assertTrue(packageNames.remove("org.exampleS2.subEPackage2.util"));
assertTrue(packageNames.remove("ePackage3.subEPackage3"));
assertTrue(packageNames.remove("ePackage3.subEPackage3.impl"));
assertTrue(packageNames.remove("ePackage3.subEPackage3.util"));
assertTrue(packageNames.remove("modelPluginClass"));
}
protected void editQualifiedPackageNamesTest(List<String> packageNames)
{
assertTrue(packageNames.remove("org.example0.ePackage0.edit"));
assertTrue(packageNames.remove("org.example2.ePackage2.provider"));
assertTrue(packageNames.remove("org.exampleS2.subEPackage2.provider"));
assertTrue(packageNames.remove("ePackage3.subEPackage3.provider"));
if (!genModel.getModelDirectory().equals(genModel.getEditDirectory()))
{
assertTrue(packageNames.remove("editPluginClass"));
}
}
protected void editorQualifiedPackageNamesTest(List<String> packageNames)
{
assertTrue(packageNames.remove("org.example0.ePackage0.ui"));
assertTrue(packageNames.remove("org.example2.ePackage2.presentation"));
assertTrue(packageNames.remove("org.exampleS2.subEPackage2.presentation"));
assertTrue(packageNames.remove("ePackage3.subEPackage3.presentation"));
if (!genModel.getModelDirectory().equals(genModel.getEditorDirectory()) &&
!genModel.getEditDirectory().equals(genModel.getEditorDirectory()))
{
assertTrue(packageNames.remove("editorPluginClass"));
}
}
protected void testsQualifiedPackageNamesTest(List<String> packageNames)
{
assertTrue(packageNames.remove("org.example0.ePackage0.junit"));
assertTrue(packageNames.remove("org.example2.ePackage2.tests"));
assertTrue(packageNames.remove("org.exampleS2.subEPackage2.tests"));
assertTrue(packageNames.remove("ePackage3.subEPackage3.tests"));
assertTrue(packageNames.remove("testSuiteClass"));
}
/*
* Bugzilla 120964
*/
@Test
public void testReloadGenAnnotations() throws Exception
{
new ResourceImpl(URI.createURI("foo.bar")).getContents().add(genModel);
GenAnnotation nestedGenAnnotation = genModel.createGenAnnotation();
nestedGenAnnotation.setSource("1.1s");
nestedGenAnnotation.getDetails().put("1.1", "one.one");
nestedGenAnnotation.getDetails().put("1.2", "one.two");
nestedGenAnnotation.getReferences().add(genModel);
nestedGenAnnotation.getReferences().add(genModel.getGenPackages().get(1));
nestedGenAnnotation.getReferences().add(EcorePackage.Literals.EATTRIBUTE);
GenAnnotation genAnnotation = genModel.createGenAnnotation();
genAnnotation.setSource("1s");
genAnnotation.getDetails().put("1", "one");
genAnnotation.getDetails().put("2", "two");
genAnnotation.getReferences().add(genModel);
genAnnotation.getReferences().add(genModel.getGenPackages().get(1));
genAnnotation.getReferences().add(EcorePackage.Literals.EATTRIBUTE);
genAnnotation.getReferences().add(nestedGenAnnotation);
nestedGenAnnotation.getReferences().add(genAnnotation);
genAnnotation.getGenAnnotations().add(nestedGenAnnotation);
genModel.getGenAnnotations().add(genAnnotation);
assertGenModelAnnotations(genModel);
GenModel newGenModel = createGenModel();
ResourceSet resourceSet = new ResourceSetImpl();
resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("bar", new ResourceFactoryImpl());
resourceSet.createResource(URI.createURI("foo.bar")).getContents().add(newGenModel);
newGenModel.reconcile(genModel);
assertGenModelAnnotations(genModel);
assertGenModelAnnotations(newGenModel);
}
protected void assertGenModelAnnotations(GenModel genModel) throws Exception
{
assertEquals(1, genModel.getGenAnnotations().size());
GenAnnotation genAnnotation = genModel.getGenAnnotations().get(0);
assertEquals("1s", genAnnotation.getSource());
assertEquals(2, genAnnotation.getDetails().size());
assertEquals("one", genAnnotation.getDetails().get("1"));
assertEquals("two", genAnnotation.getDetails().get("2"));
assertEquals(4, genAnnotation.getReferences().size());
assertEquals(genModel, genAnnotation.getReferences().get(0));
assertEquals(genModel.getGenPackages().get(1), genAnnotation.getReferences().get(1));
assertEquals(EcorePackage.Literals.EATTRIBUTE, genAnnotation.getReferences().get(2));
assertEquals(1, genAnnotation.getGenAnnotations().size());
GenAnnotation nestedGenAnnotation = genAnnotation.getGenAnnotations().get(0);
assertEquals("1.1s", nestedGenAnnotation.getSource());
assertEquals(2, nestedGenAnnotation.getDetails().size());
assertEquals("one.one", nestedGenAnnotation.getDetails().get("1.1"));
assertEquals("one.two", nestedGenAnnotation.getDetails().get("1.2"));
assertEquals(4, nestedGenAnnotation.getReferences().size());
assertEquals(genModel, nestedGenAnnotation.getReferences().get(0));
assertEquals(genModel.getGenPackages().get(1), nestedGenAnnotation.getReferences().get(1));
assertEquals(EcorePackage.Literals.EATTRIBUTE, nestedGenAnnotation.getReferences().get(2));
assertEquals(genAnnotation, nestedGenAnnotation.getReferences().get(3));
assertEquals(nestedGenAnnotation, genAnnotation.getReferences().get(3));
}
/*
* Bugzilla 234105
*/
@Test
public void testGenPackageSubstitutions()
{
EPackage ePackage = EcoreFactory.eINSTANCE.createEPackage();
ePackage.setName("domain");
GenModel genModel = GenModelFactory.eINSTANCE.createGenModel();
genModel.initialize(Collections.singletonList(ePackage));
GenPackage genPackage = genModel.getGenPackages().get(0);
assertEquals("domain", genPackage.getInterfacePackageName());
assertEquals("domain", genPackage.getReflectionPackageName());
assertEquals("domain.impl", genPackage.getClassPackageName());
assertEquals("domain.util", genPackage.getUtilitiesPackageName());
assertEquals("domain.provider", genPackage.getProviderPackageName());
assertEquals("domain.presentation", genPackage.getPresentationPackageName());
assertEquals("domain.tests", genPackage.getTestsPackageName());
genPackage.setInterfacePackageSuffix("api.{0}");
genPackage.setMetaDataPackageSuffix("api.{0}.reflect");
genPackage.setClassPackageSuffix("internal.{0}.impl");
genPackage.setUtilityPackageSuffix("api.{0}.util");
genPackage.setProviderPackageSuffix("api.{0}.provider");
genPackage.setPresentationPackageSuffix("internal.{0}.presentation");
genPackage.setTestsPackageSuffix("internal.{0}.test");
assertEquals("api.domain", genPackage.getInterfacePackageName());
assertEquals("api.domain.reflect", genPackage.getReflectionPackageName());
assertEquals("internal.domain.impl", genPackage.getClassPackageName());
assertEquals("api.domain.util", genPackage.getUtilitiesPackageName());
assertEquals("api.domain.provider", genPackage.getProviderPackageName());
assertEquals("internal.domain.presentation", genPackage.getPresentationPackageName());
assertEquals("internal.domain.test", genPackage.getTestsPackageName());
genPackage.setBasePackage("org.eclipse.emf.tests");
assertEquals("org.eclipse.emf.tests.api.domain", genPackage.getInterfacePackageName());
assertEquals("org.eclipse.emf.tests.api.domain.reflect", genPackage.getReflectionPackageName());
assertEquals("org.eclipse.emf.tests.internal.domain.impl",genPackage.getClassPackageName());
assertEquals("org.eclipse.emf.tests.api.domain.util", genPackage.getUtilitiesPackageName());
assertEquals("org.eclipse.emf.tests.api.domain.provider",genPackage.getProviderPackageName());
assertEquals("org.eclipse.emf.tests.internal.domain.presentation",genPackage.getPresentationPackageName());
assertEquals("org.eclipse.emf.tests.internal.domain.test",genPackage.getTestsPackageName());
}
/*
* Bugzilla 234105
*/
@Test
public void testNestedGenPackageSubstitutions()
{
EPackage ePackage = EcoreFactory.eINSTANCE.createEPackage();
ePackage.setName("domain");
EClass eClass = EcoreFactory.eINSTANCE.createEClass();
eClass.setName("DomainClass");
ePackage.getEClassifiers().add(eClass);
EPackage subEPackage = EcoreFactory.eINSTANCE.createEPackage();
subEPackage.setName("sub");
ePackage.getESubpackages().add(subEPackage);
EPackage subSubEPackage = EcoreFactory.eINSTANCE.createEPackage();
subSubEPackage.setName("subsub");
subEPackage.getESubpackages().add(subSubEPackage);
eClass = EcoreFactory.eINSTANCE.createEClass();
eClass.setName("SubSubClass");
subSubEPackage.getEClassifiers().add(eClass);
GenModel genModel = GenModelFactory.eINSTANCE.createGenModel();
genModel.initialize(Collections.singletonList(ePackage));
GenPackage genPackage = genModel.getGenPackages().get(0).getSubGenPackages().get(0);
assertEquals("domain.sub.subsub", genPackage.getInterfacePackageName());
assertEquals("domain.sub.subsub", genPackage.getReflectionPackageName());
assertEquals("domain.sub.subsub.impl", genPackage.getClassPackageName());
assertEquals("domain.sub.subsub.util", genPackage.getUtilitiesPackageName());
assertEquals("domain.sub.subsub.provider", genPackage.getProviderPackageName());
assertEquals("domain.sub.subsub.presentation", genPackage.getPresentationPackageName());
assertEquals("domain.sub.subsub.tests", genPackage.getTestsPackageName());
genPackage.setInterfacePackageSuffix("api.{0}");
genPackage.setMetaDataPackageSuffix("api.{0}.reflect");
genPackage.setClassPackageSuffix("internal.{1}.nested.{2}.{3}.impl");
genPackage.setUtilityPackageSuffix("api.{1}.{2}.{3}.util");
genPackage.setProviderPackageSuffix("api.{1}.provider");
genPackage.setPresentationPackageSuffix("internal.{3}.presentation");
genPackage.setTestsPackageSuffix("test");
assertEquals("api.domain.sub.subsub", genPackage.getInterfacePackageName());
assertEquals("api.domain.sub.subsub.reflect", genPackage.getReflectionPackageName());
assertEquals("internal.domain.nested.sub.subsub.impl", genPackage.getClassPackageName());
assertEquals("api.domain.sub.subsub.util", genPackage.getUtilitiesPackageName());
assertEquals("api.domain.provider", genPackage.getProviderPackageName());
assertEquals("internal.subsub.presentation", genPackage.getPresentationPackageName());
assertEquals("domain.sub.subsub.test", genPackage.getTestsPackageName());
genModel.getGenPackages().get(0).setBasePackage("org.eclipse.emf.tests");
assertEquals("org.eclipse.emf.tests.api.domain.sub.subsub", genPackage.getInterfacePackageName());
assertEquals("org.eclipse.emf.tests.api.domain.sub.subsub.reflect", genPackage.getReflectionPackageName());
assertEquals("org.eclipse.emf.tests.internal.domain.nested.sub.subsub.impl", genPackage.getClassPackageName());
assertEquals("org.eclipse.emf.tests.api.domain.sub.subsub.util", genPackage.getUtilitiesPackageName());
assertEquals("org.eclipse.emf.tests.api.domain.provider", genPackage.getProviderPackageName());
assertEquals("org.eclipse.emf.tests.internal.subsub.presentation", genPackage.getPresentationPackageName());
assertEquals("org.eclipse.emf.tests.domain.sub.subsub.test", genPackage.getTestsPackageName());
}
/*
* Bugzilla 234105
*/
@Test
public void testGenModelClasses()
{
GenModel genModel = GenModelFactory.eINSTANCE.createGenModel();
genModel.setModelName("Domain");
genModel.setModelDirectory("/com.example.domain/src");
assertNull(genModel.getModelPluginClass());
assertEquals("com.example.domain.provider.DomainEditPlugin", genModel.getEditPluginClass());
assertEquals("com.example.domain.presentation.DomainEditorPlugin", genModel.getEditorPluginClass());
assertEquals("com.example.domain.tests.DomainAllTests", genModel.getTestSuiteClass());
EPackage ePackage = EcoreFactory.eINSTANCE.createEPackage();
ePackage.setName("domain");
genModel.initialize(Collections.singletonList(ePackage));
assertNull(genModel.getModelPluginClass());
assertEquals("domain.provider.DomainEditPlugin", genModel.getEditPluginClass());
assertEquals("domain.presentation.DomainEditorPlugin", genModel.getEditorPluginClass());
assertEquals("domain.tests.DomainAllTests", genModel.getTestSuiteClass());
GenPackage genPackage = genModel.getGenPackages().get(0);
genPackage.setProviderPackageSuffix("edit");
genPackage.setPresentationPackageSuffix("edit.ui");
genPackage.setTestsPackageSuffix("test");
assertNull(genModel.getModelPluginClass());
assertEquals("domain.edit.DomainEditPlugin", genModel.getEditPluginClass());
assertEquals("domain.edit.ui.DomainEditorPlugin", genModel.getEditorPluginClass());
assertEquals("domain.test.DomainAllTests", genModel.getTestSuiteClass());
genPackage.setBasePackage("org.eclipse.example");
assertNull(genModel.getModelPluginClass());
assertEquals("org.eclipse.example.domain.edit.DomainEditPlugin", genModel.getEditPluginClass());
assertEquals("org.eclipse.example.domain.edit.ui.DomainEditorPlugin", genModel.getEditorPluginClass());
assertEquals("org.eclipse.example.domain.test.DomainAllTests", genModel.getTestSuiteClass());
genPackage.setBasePackage(null);
genPackage.setProviderPackageSuffix("internal.{0}.provider");
genPackage.setPresentationPackageSuffix("internal.{0}.presentation");
genPackage.setTestsPackageSuffix("internal.{0}.tests");
assertNull(genModel.getModelPluginClass());
assertEquals("internal.domain.provider.DomainEditPlugin", genModel.getEditPluginClass());
assertEquals("internal.domain.presentation.DomainEditorPlugin", genModel.getEditorPluginClass());
assertEquals("internal.domain.tests.DomainAllTests", genModel.getTestSuiteClass());
genPackage.setBasePackage("com.example");
assertNull(genModel.getModelPluginClass());
assertEquals("com.example.internal.domain.provider.DomainEditPlugin", genModel.getEditPluginClass());
assertEquals("com.example.internal.domain.presentation.DomainEditorPlugin", genModel.getEditorPluginClass());
assertEquals("com.example.internal.domain.tests.DomainAllTests", genModel.getTestSuiteClass());
}
/*
* Bugzilla 403547
*/
@Test
public void testURIFragments() throws Exception
{
new ResourceImpl(URI.createURI("foo.bar")).getContents().add(genModel);
GenAnnotation nestedGenAnnotation = genModel.createGenAnnotation();
nestedGenAnnotation.setSource("%");
nestedGenAnnotation.getDetails().put("1.1", "one.one");
nestedGenAnnotation.getDetails().put("1.2", "one.two");
nestedGenAnnotation.getReferences().add(genModel);
nestedGenAnnotation.getReferences().add(genModel.getGenPackages().get(1));
nestedGenAnnotation.getReferences().add(EcorePackage.Literals.EATTRIBUTE);
GenAnnotation genAnnotation = genModel.createGenAnnotation();
genAnnotation.setSource("http://foo.bar");
genAnnotation.getDetails().put("1", "one");
genAnnotation.getDetails().put("2", "two");
genAnnotation.getReferences().add(genModel);
genAnnotation.getReferences().add(genModel.getGenPackages().get(1));
genAnnotation.getReferences().add(EcorePackage.Literals.EATTRIBUTE);
genAnnotation.getReferences().add(nestedGenAnnotation);
nestedGenAnnotation.getReferences().add(genAnnotation);
genAnnotation.getGenAnnotations().add(nestedGenAnnotation);
genModel.getGenAnnotations().add(genAnnotation);
assertURIFragments(genModel);
GenModel newGenModel = createGenModel();
ResourceSet resourceSet = new ResourceSetImpl();
resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("bar", new ResourceFactoryImpl());
resourceSet.createResource(URI.createURI("foo.bar")).getContents().add(newGenModel);
newGenModel.reconcile(genModel);
assertURIFragments(genModel);
assertURIFragments(newGenModel);
assertURIFragments(genModel.eResource(), newGenModel.eResource());
}
protected void assertURIFragments(GenModel genModel) throws Exception
{
assertEquals(1, genModel.getGenAnnotations().size());
GenAnnotation genAnnotation = genModel.getGenAnnotations().get(0);
assertEquals("http://foo.bar", genAnnotation.getSource());
assertEquals(2, genAnnotation.getDetails().size());
assertEquals("one", genAnnotation.getDetails().get("1"));
assertEquals("two", genAnnotation.getDetails().get("2"));
assertEquals(4, genAnnotation.getReferences().size());
assertEquals(genModel, genAnnotation.getReferences().get(0));
assertEquals(genModel.getGenPackages().get(1), genAnnotation.getReferences().get(1));
assertEquals(EcorePackage.Literals.EATTRIBUTE, genAnnotation.getReferences().get(2));
assertEquals(1, genAnnotation.getGenAnnotations().size());
GenAnnotation nestedGenAnnotation = genAnnotation.getGenAnnotations().get(0);
assertEquals("%", nestedGenAnnotation.getSource());
assertEquals(2, nestedGenAnnotation.getDetails().size());
assertEquals("one.one", nestedGenAnnotation.getDetails().get("1.1"));
assertEquals("one.two", nestedGenAnnotation.getDetails().get("1.2"));
assertEquals(4, nestedGenAnnotation.getReferences().size());
assertEquals(genModel, nestedGenAnnotation.getReferences().get(0));
assertEquals(genModel.getGenPackages().get(1), nestedGenAnnotation.getReferences().get(1));
assertEquals(EcorePackage.Literals.EATTRIBUTE, nestedGenAnnotation.getReferences().get(2));
assertEquals(genAnnotation, nestedGenAnnotation.getReferences().get(3));
assertEquals(nestedGenAnnotation, genAnnotation.getReferences().get(3));
}
protected void assertURIFragments(Resource genModelResource, Resource newGenModelResource) throws Exception
{
for (Iterator<EObject> i = genModelResource.getAllContents(); i.hasNext(); )
{
EObject eObject = i.next();
String uriFragment = genModelResource.getURIFragment(eObject);
EObject newEObject = genModelResource.getEObject(uriFragment);
assertNotNull(newEObject);
String newURIFragment = genModelResource.getURIFragment(newEObject);
assertEquals(uriFragment, newURIFragment);
}
}
}