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)
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)
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
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
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)
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)
def _on_navigability_change(self, combo): nav = self.NAVIGABILITY[combo.get_active()] modelfactory.set_navigability(self.subject.association, self.subject, nav)