예제 #1
0
    def test_attribute_navigability(self):
        """Test navigable attribute of a class or an interface
        """
        c1 = self.factory.create(uml2.Class)
        c2 = self.factory.create(uml2.Class)
        assoc = modelfactory.create_association(self.factory, c1, c2)

        end = assoc.memberEnd[0]
        assert end.type is c1
        assert end.type is c1

        modelfactory.set_navigability(assoc, end, True)

        # class/interface navigablity, Association.navigableOwnedEnd not
        # involved
        self.assertTrue(end not in assoc.navigableOwnedEnd)
        self.assertTrue(end not in assoc.ownedEnd)
        self.assertTrue(end in c2.ownedAttribute)
        self.assertTrue(end.navigability is True)

        # uknown navigability
        modelfactory.set_navigability(assoc, end, None)
        self.assertTrue(end not in assoc.navigableOwnedEnd)
        self.assertTrue(end in assoc.ownedEnd)
        self.assertTrue(end not in c2.ownedAttribute)
        self.assertTrue(end.owner is assoc)
        self.assertTrue(end.navigability is None)

        # non-navigability
        modelfactory.set_navigability(assoc, end, False)
        self.assertTrue(end not in assoc.navigableOwnedEnd)
        self.assertTrue(end not in assoc.ownedEnd)
        self.assertTrue(end not in c2.ownedAttribute)
        self.assertTrue(end.owner is None)
        self.assertTrue(end.navigability is False)

        # check other navigability change possibilities
        modelfactory.set_navigability(assoc, end, None)
        self.assertTrue(end not in assoc.navigableOwnedEnd)
        self.assertTrue(end in assoc.ownedEnd)
        self.assertTrue(end not in c2.ownedAttribute)
        self.assertTrue(end.owner is assoc)
        self.assertTrue(end.navigability is None)

        modelfactory.set_navigability(assoc, end, True)
        self.assertTrue(end not in assoc.navigableOwnedEnd)
        self.assertTrue(end not in assoc.ownedEnd)
        self.assertTrue(end in c2.ownedAttribute)
        self.assertTrue(end.owner is c2)
        self.assertTrue(end.navigability is True)
예제 #2
0
    def reconnect(self, handle, port):
        line = self.line
        c = self.get_connected(handle)
        if handle is line.head:
            end = line.tail_end
            oend = line.head_end
        elif handle is line.tail:
            end = line.head_end
            oend = line.tail_end
        else:
            raise ValueError('Incorrect handle passed to adapter')

        nav = oend.subject.navigability

        modelfactory.set_navigability(line.subject, end.subject, None)  # clear old data

        oend.subject.type = c.subject
        modelfactory.set_navigability(line.subject, oend.subject, nav)
예제 #3
0
    def test_property_navigability(self):
        factory = elementfactory.ElementFactory()
        p = factory.create(uml2.Property)
        assert p.navigability is None

        c1 = factory.create(uml2.Class)
        c2 = factory.create(uml2.Class)
        a = modelfactory.create_association(factory, c1, c2)
        assert a.memberEnd[0].navigability is None
        assert a.memberEnd[1].navigability is None

        modelfactory.set_navigability(a, a.memberEnd[0], True)
        assert a.memberEnd[0].navigability is True
        assert a.memberEnd[1].navigability is None

        modelfactory.set_navigability(a, a.memberEnd[0], False)
        assert a.memberEnd[0].navigability is False
        assert a.memberEnd[1].navigability is None
예제 #4
0
def class_and_association_with_copy(diagram, element_factory, copy):
    c = diagram.create(diagramitems.ClassItem,
                       subject=element_factory.create(UML.Class))

    a = diagram.create(diagramitems.AssociationItem)
    connect(a, a.handles()[0], c)
    connect(a, a.handles()[1], c)

    set_navigability(a.subject, a.subject.memberEnd[0], True)

    copy.copy({a, c})
    new_diagram = element_factory.create(UML.Diagram)
    pasted_items = copy.paste(new_diagram)

    aa = pasted_items.pop()
    if not isinstance(aa, diagramitems.AssociationItem):
        aa = pasted_items.pop()

    return c, a, aa
예제 #5
0
    def test_relationship_navigability(self):
        """Test navigable relationship of a classifier
        """
        n1 = self.factory.create(uml2.Node)
        n2 = self.factory.create(uml2.Node)
        assoc = modelfactory.create_association(self.factory, n1, n2)

        end = assoc.memberEnd[0]
        assert end.type is n1

        modelfactory.set_navigability(assoc, end, True)

        # class/interface navigablity, Association.navigableOwnedEnd not
        # involved
        self.assertTrue(end in assoc.navigableOwnedEnd)
        self.assertTrue(end not in assoc.ownedEnd)
        self.assertTrue(end.navigability is True)

        # uknown navigability
        modelfactory.set_navigability(assoc, end, None)
        self.assertTrue(end not in assoc.navigableOwnedEnd)
        self.assertTrue(end in assoc.ownedEnd)
        self.assertTrue(end.navigability is None)

        # non-navigability
        modelfactory.set_navigability(assoc, end, False)
        self.assertTrue(end not in assoc.navigableOwnedEnd)
        self.assertTrue(end not in assoc.ownedEnd)
        self.assertTrue(end.navigability is False)

        # check other navigability change possibilities
        modelfactory.set_navigability(assoc, end, None)
        self.assertTrue(end not in assoc.navigableOwnedEnd)
        self.assertTrue(end in assoc.ownedEnd)
        self.assertTrue(end.navigability is None)

        modelfactory.set_navigability(assoc, end, True)
        self.assertTrue(end in assoc.navigableOwnedEnd)
        self.assertTrue(end not in assoc.ownedEnd)
        self.assertTrue(end.navigability is True)
예제 #6
0
    def test_reconnect(self):
        """Test association item reconnection
        """
        asc = self.create(items.AssociationItem)
        c1 = self.create(items.ClassItem, uml2.Class)
        c2 = self.create(items.ClassItem, uml2.Class)
        c3 = self.create(items.ClassItem, uml2.Class)

        self.connect(asc, asc.head, c1)
        self.connect(asc, asc.tail, c2)
        modelfactory.set_navigability(asc.subject, asc.tail_end.subject, True)

        a = asc.subject

        self.connect(asc, asc.tail, c3)

        self.assertSame(a, asc.subject)
        ends = [p.type for p in asc.subject.memberEnd]
        self.assertTrue(c1.subject in ends)
        self.assertTrue(c3.subject in ends)
        self.assertTrue(c2.subject not in ends)
        self.assertTrue(asc.tail_end.subject.navigability)
예제 #7
0
 def _on_navigability_change(self, combo):
     nav = self.NAVIGABILITY[combo.get_active()]
     modelfactory.set_navigability(self.subject.association, self.subject,
                                   nav)