def test__ecore_task__filtered_elements(): # prepare test model: # ------------------- # ThePackage # Class1 # SubPackage # Class2 # MyEnum package = EPackage('ThePackage') class1 = EClass('Class1') class2 = EClass('Class2') enum = EEnum('MyEnum', literals=['A', 'B']) subpackage = EPackage('SubPackage') package.eSubpackages.append(subpackage) package.eClassifiers.append(class1) subpackage.eClassifiers.extend([class2, enum]) task = EcoreTask() task.element_type = EPackage assert set(task.filtered_elements(package)) == {package, subpackage} task.element_type = EClass assert set(task.filtered_elements(package)) == {class1, class2} task.element_type = EEnum assert set(task.filtered_elements(package)) == {enum}
def test_package_with_enum(pygen_output_dir): enumpkg = EPackage('enumpkg') enum = EEnum('MyEnum', literals=('X', 'Y', 'Z')) enumpkg.eClassifiers.append(enum) mm = generate_meta_model(enumpkg, pygen_output_dir) generated_enum = mm.eClassifiers['MyEnum'] assert isinstance(generated_enum, EEnum) assert set(l.name for l in generated_enum.eLiterals) == {'X', 'Y', 'Z'}
def test__ecore_generator__manage_default_value_enumeration(): enumeration = EEnum('MyEnum', literals=('None_', 'A', 'B')) attribute = EAttribute('with_default', enumeration) attribute.defaultValueLiteral = 'A' result = EcoreGenerator.manage_default_value(attribute) assert result == 'MyEnum.A' attribute.defaultValueLiteral = 'None_' result = EcoreGenerator.manage_default_value(attribute) assert result == 'MyEnum.None_' attribute.defaultValueLiteral = 'None' result = EcoreGenerator.manage_default_value(attribute) assert result == 'MyEnum.None_'
def test_classifier_imports(pygen_output_dir): # super types and enums from another package have to be imported in using module: rootpkg = EPackage('import_test') ppkg = EPackage('provider') upkg = EPackage('user') rootpkg.eSubpackages.extend([ppkg, upkg]) super_class = EClass('SuperClass') enum = EEnum('AnEnum', literals=('A', 'B')) ppkg.eClassifiers.extend((super_class, enum)) derived_class = EClass('DerivedClass', superclass=super_class) derived_class.eStructuralFeatures.append(EAttribute('kind', enum)) upkg.eClassifiers.append(derived_class) # simply importing successully shows the imports have made the types visible mm = generate_meta_model(rootpkg, pygen_output_dir) assert mm
def test_user_module_default_values(pygen_output_dir): rootpkg = EPackage('with_default_values') e1 = EEnum('MyEnum', literals=('None_', 'A', 'B')) rootpkg.eClassifiers.append(e1) c1 = EClass('MyClass') a1 = EAttribute('a1', EString) a1.defaultValueLiteral = 'my_str' a2 = EAttribute('a2', EInt) a2.defaultValueLiteral = '7654321' a3 = EAttribute('a3', e1) a3.defaultValueLiteral = 'None' c1.eStructuralFeatures.extend([a1, a2, a3]) rootpkg.eClassifiers.append(c1) mm = generate_meta_model(rootpkg, pygen_output_dir) assert mm.MyClass.a1.default_value == 'my_str' assert mm.MyClass.a2.default_value == 7654321 assert mm.MyClass.a3.default_value == mm.MyEnum.None_
https://fr.wikipedia.org/wiki/Eclipse_Modeling_Framework#/media/File:EMF_based_meta-model.png The static metamodel had been produced by hand in this example """ import sys import pyecore.ecore as Ecore from pyecore.ecore import EObject, EAttribute, EString, EEnum, EReference, \ MetaEClass, EInteger name = 'library' nsPrefix = 'lib' nsURI = 'http://emf.wikipedia.org/2011/Library' # Do not remove eClass = Ecore.EPackage(name=name, nsURI=nsURI, nsPrefix=nsPrefix) BookCategory = EEnum('BookCategory', literals=['ScienceFiction', 'Biography', 'Mistery']) class Book(EObject, metaclass=MetaEClass): title = EAttribute(eType=EString) pages = EAttribute(eType=EInteger) category = EAttribute(eType=BookCategory, default_value=BookCategory.ScienceFiction) def __init__(self): super().__init__() class Writer(EObject, metaclass=MetaEClass): name = EAttribute(eType=EString) books = EReference(eType=Book, lower=1, upper=-1)