Exemplo n.º 1
0
class A(object):
    name = Ecore.EAttribute(eType=Ecore.EString)
    children = Ecore.EReference(upper=-1, containment=True)
    parent = Ecore.EReference(eOpposite=children)

    def __init__(self, name=None, children=None):
        if children:
            self.children.update(children)
        self.name = name

    def __repr__(self):
        return self.name
Exemplo n.º 2
0
def test_xmi_save_none_value(tmpdir):
    f = tmpdir.mkdir('pyecore-tmp').join('default_none_value.xmi')

    # Build a simple metamodel
    Root = Ecore.EClass('Root')
    Root.eStructuralFeatures.append(Ecore.EReference('element', Ecore.EObject))
    Root.eStructuralFeatures.append(Ecore.EAttribute('name', Ecore.EString))
    Root.eStructuralFeatures.append(
        Ecore.EAttribute('ints', Ecore.EInt, upper=-1))
    pack = Ecore.EPackage('mypack',
                          nsURI='http://mypack/1.0',
                          nsPrefix='mypack_pref')
    pack.eClassifiers.append(Root)

    r = Root()
    r.element = None
    r.name = None
    r.ints.extend([3, 4, 5])

    rset = ResourceSet()
    resource = rset.create_resource(URI(str(f)))
    resource.append(r)
    resource.save(options={XMIOptions.SERIALIZE_DEFAULT_VALUES: True})

    with open(str(f), 'r') as f:
        tree = etree.parse(f)
        xmlroot = tree.getroot()
        assert xmlroot[0].tag in ('name', 'element')
        assert xmlroot[1].tag in ('name', 'element')
        assert xmlroot[0].tag != xmlroot[1].tag
Exemplo n.º 3
0
def test_xmi_ecore_save_heterogeneous_metamodel(tmpdir):
    f = tmpdir.mkdir('pyecore-tmp').join('heterogeneous.xmi')

    # Build a simple metamodel
    Root = Ecore.EClass('Root')
    Root.eStructuralFeatures.append(Ecore.EReference('element', Ecore.EObject))
    pack = Ecore.EPackage('mypack',
                          nsURI='http://mypack/1.0',
                          nsPrefix='mypack_pref')
    pack.eClassifiers.append(Root)

    rset = ResourceSet()

    resource = rset.get_resource('tests/xmi/xmi-tests/My.ecore')
    root = resource.contents[0]
    rset.metamodel_registry[root.nsURI] = root

    # We open a first model with a special metamodel
    resource = rset.get_resource('tests/xmi/xmi-tests/MyRoot.xmi')
    root1 = resource.contents[0]

    r = Root(element=root1)
    resource = rset.create_resource(URI(str(f)))
    resource.append(r)
    resource.save()

    with open(str(f), 'r') as f:
        tree = etree.parse(f)
        xmlroot = tree.getroot()
        assert 'mypack_pref' in xmlroot.nsmap
        assert 'myprefix' in xmlroot.nsmap
Exemplo n.º 4
0
def lib():
    package = Ecore.EPackage('mypackage')
    package.nsURI = 'http://simplemetamodel/1.0'
    package.nsPrefix = 'simplemm'
    AbsA = Ecore.EClass('AbsA', abstract=True)
    AbsA.eStructuralFeatures.append(Ecore.EReference('toa', AbsA))
    A = Ecore.EClass('A', superclass=(AbsA,))
    SubA = Ecore.EClass('SubA', superclass=(A,))
    MyRoot = Ecore.EClass('MyRoot')
    MyRoot.a_container = Ecore.EReference('a_container', eType=AbsA, upper=-1,
                                          containment=True)
    MyRoot.eStructuralFeatures.append(MyRoot.a_container)
    package.eClassifiers.extend([MyRoot, A, SubA, AbsA])
    package.MyRoot = MyRoot
    package.SubA = SubA
    package.A = A
    # we register the metamodel first
    global_registry[package.nsURI] = package
    return package
Exemplo n.º 5
0
def test_delete_resolved_proxy_with_childre():
    A = Ecore.EClass('A')
    A.eStructuralFeatures.append(
        Ecore.EReference('children', A, containment=True, upper=-1))
    a0, a1, a2, a3 = A(), A(), A(), A()
    a0.children.append(a1)
    a1.children.extend([a2, a3])

    proxy = Ecore.EProxy(wrapped=a1)
    proxy.delete()
    assert a0.children == []
Exemplo n.º 6
0
def test_load_multipleroot_with_refs():
    rset = ResourceSet()
    multi_root = path.join('tests', 'xmi', 'xmi-tests',
                           'multiple_with_refs.xmi')

    package = Ecore.EPackage('amm', 'ammuri', 'amm')
    A = Ecore.EClass('A')
    A.eStructuralFeatures.append(Ecore.EAttribute('name', Ecore.EString))
    A.eStructuralFeatures.append(Ecore.EReference('toa', A))
    A.eStructuralFeatures.append(Ecore.EReference('contains', A,
                                                  containment=True))
    package.eClassifiers.append(A)

    rset.metamodel_registry[package.nsURI] = package
    resource = rset.get_resource(URI(str(multi_root)))

    root1, root2 = resource.contents
    assert root1.contains.toa is root2
    assert root1.name == 'root1'
    assert root2.name == 'root2'
    assert root1.contains.name == 'inner'
Exemplo n.º 7
0
def test_deserialize_href_uuid_ref():
    Root = Ecore.EClass('Root')
    Root.eStructuralFeatures.append(Ecore.EReference('element', Ecore.EObject))
    pack = Ecore.EPackage('mypack', nsURI='http://mypack/1.0',
                          nsPrefix='mypack_pref')
    pack.eClassifiers.append(Root)

    rset = ResourceSet()

    resource = rset.get_resource('tests/xmi/xmi-tests/My.ecore')
    root = resource.contents[0]
    rset.metamodel_registry[root.nsURI] = root
    rset.metamodel_registry[pack.nsURI] = pack

    resource = rset.get_resource('tests/xmi/xmi-tests/encoded.xmi')
    root1 = resource.contents[0]
    resource = rset.get_resource('tests/xmi/xmi-tests/encoded2.xmi')
    root2 = resource.contents[0]
    assert root2.element.eClass is root1.eClass
Exemplo n.º 8
0
def test_xmi_multiroot_save(tmpdir):
    # Define a simple model that will be split in many roots
    A = Ecore.EClass('A')
    A.eStructuralFeatures.append(Ecore.EAttribute('name', Ecore.EString))
    pack1 = Ecore.EPackage('pack1', nsURI='http://pack1/1.0', nsPrefix='pack1')
    pack1.eClassifiers.append(A)

    B = Ecore.EClass('B')
    B.eStructuralFeatures.append(Ecore.EAttribute('age', Ecore.EInt))
    B.eStructuralFeatures.append(Ecore.EReference('to_a', A))
    pack2 = Ecore.EPackage('pack2', nsURI='http://pack2/1.0', nsPrefix='pack2')
    pack2.eClassifiers.append(B)

    f = tmpdir.mkdir('pyecore-tmp').join('multi_root.xmi')
    rset = ResourceSet()
    resource = rset.create_resource(URI(str(f)))
    resource.append(pack1)
    resource.append(pack2)
    resource.save()

    with open(str(f), 'r') as f:
        tree = etree.parse(f)
        xmlroot = tree.getroot()
        assert xmlroot.tag == '{{{0}}}XMI'.format(XMI_URL)
Exemplo n.º 9
0
class A(object):
    child = Ecore.EReference(containment=True, upper=-1)
    imply = Ecore.EReference()
    ref_by = Ecore.EReference()
    distant = Ecore.EReference(eType=Ecore.EObject)
Exemplo n.º 10
0
 class Root(object):
     many_a = Ecore.EReference(eType=A, upper=-1, containment=True)
Exemplo n.º 11
0
 class Root(object):
     name = Ecore.EAttribute(eType=Ecore.EString)
     many_a = Ecore.EReference(eType=A, upper=-1, containment=True)
     eclasses = Ecore.EReference(eType=Ecore.EClass,
                                 upper=-1,
                                 containment=True)