def test_copy_item_adds_new_item_to_the_diagram(diagram, element_factory): cls = element_factory.create(UML.Class) cls_item = diagram.create(ClassItem, subject=cls) buffer = copy(cls_item) paste(buffer, diagram, element_factory.lookup) assert len(diagram.canvas.get_root_items()) == 2
def test_copy_to_new_diagram(diagram, element_factory): new_diagram = element_factory.create(Diagram) cls = element_factory.create(UML.Class) cls_item = diagram.create(ClassItem, subject=cls) buffer = copy({cls_item}) paste(buffer, new_diagram, element_factory.lookup) assert len(list(new_diagram.get_all_items())) == 1 assert next(new_diagram.get_all_items()).diagram is new_diagram
def test_copy_multiple_items(diagram, element_factory): cls = element_factory.create(UML.Class) cls_item1 = diagram.create(ClassItem, subject=cls) cls_item2 = diagram.create(ClassItem, subject=cls) buffer = copy({cls_item1, cls_item2}) paste(buffer, diagram, element_factory.lookup) assert len(diagram.canvas.get_root_items()) == 4 assert len(element_factory.lselect(UML.Class)) == 1
def test_copied_item_references_same_model_element(diagram, element_factory): cls = element_factory.create(UML.Class) cls_item = diagram.create(ClassItem, subject=cls) buffer = copy(cls_item) paste(buffer, diagram, element_factory.lookup) assert len(diagram.canvas.get_root_items()) == 2 item1, item2 = diagram.canvas.get_root_items() assert item1.subject is item2.subject
def test_copy_item_with_connection(diagram, element_factory): gen_cls_item, spc_cls_item, gen_item = two_classes_and_a_generalization( diagram, element_factory ) buffer = copy({gen_cls_item, gen_item, spc_cls_item}) new_items = paste(buffer, diagram, element_factory.lookup) new_gen_item = next(i for i in new_items if isinstance(i, GeneralizationItem)) new_cls_item1 = diagram.connections.get_connection( new_gen_item.handles()[0] ).connected new_cls_item2 = diagram.connections.get_connection( new_gen_item.handles()[1] ).connected assert new_cls_item1 in diagram.get_all_items() assert new_cls_item2 in diagram.get_all_items() assert len(new_items) == 3 assert new_cls_item1 in new_items assert new_cls_item2 in new_items # Model elements are not copied assert new_cls_item1.subject is gen_cls_item.subject assert new_cls_item2.subject is spc_cls_item.subject assert new_gen_item.subject is gen_item.subject
def test_copy_item_with_connection(diagram, element_factory): gen_cls_item, spc_cls_item, gen_item = two_classes_and_a_generalization( diagram, element_factory) buffer = copy({gen_cls_item, gen_item, spc_cls_item}) new_items = paste(buffer, diagram, element_factory.lookup) new_gen_item = next(i for i in new_items if isinstance(i, GeneralizationItem)) new_cls_item1 = new_gen_item.canvas.get_connection( new_gen_item.handles()[0]).connected new_cls_item2 = new_gen_item.canvas.get_connection( new_gen_item.handles()[1]).connected assert new_cls_item1 in diagram.canvas.get_root_items() assert new_cls_item2 in diagram.canvas.get_root_items() assert len(new_items) == 3 assert new_cls_item1 in new_items assert new_cls_item2 in new_items # Model elements are not copied assert len( element_factory.lselect(lambda e: isinstance(e, UML.Class))) == 2 assert (len( element_factory.lselect(lambda e: isinstance(e, UML.Generalization))) == 1)
def test_copy_paste_of_nested_item(diagram, element_factory, node_with_component): node_item, comp_item = node_with_component buffer = copy({comp_item}) (new_comp_item,) = paste(buffer, diagram, element_factory.lookup) assert new_comp_item.parent is node_item
def test_copy_item_adds_new_item_to_the_diagram(diagram, element_factory): cls = element_factory.create(UML.Class) cls_item = diagram.create(ClassItem, subject=cls) _, buffer = next(copy(cls_item)) paster = paste(buffer, diagram, element_factory.lookup) next(paster) next(paster, None) assert len(list(diagram.get_all_items())) == 2
def test_copy_paste_of_item_with_nested_item(diagram, element_factory, node_with_component): node_item, comp_item = node_with_component buffer = copy(set(node_with_component)) new_items = paste(buffer, diagram, element_factory.lookup) new_node_item = next(i for i in new_items if isinstance(i, NodeItem)) new_comp_item = next(i for i in new_items if isinstance(i, ComponentItem)) assert diagram.canvas.get_parent(new_comp_item) is new_node_item
def test_copied_item_references_same_model_element(diagram, element_factory): cls = element_factory.create(UML.Class) cls_item = diagram.create(ClassItem, subject=cls) _, buffer = next(copy(cls_item)) for element in paste(buffer, diagram, element_factory.lookup): pass assert len(list(diagram.get_all_items())) == 2 item1, item2 = diagram.get_all_items() assert item1.subject is item2.subject
def test_copy_item_when_subject_has_been_removed(diagram, element_factory): package = element_factory.create(UML.Package) cls = element_factory.create(UML.Class) cls.package = package orig_cls_id = cls.id cls_item = diagram.create(ClassItem, subject=cls) buffer = copy({cls_item}) cls_item.unlink() cls.unlink() # normally handled by the sanitizer service assert len(diagram.canvas.get_all_items()) == 0 assert len(element_factory.lselect()) == 3 assert not element_factory.lookup(orig_cls_id) print(buffer) paste(buffer, diagram, element_factory.lookup) new_cls = element_factory.lselect(UML.Class)[0] assert len(diagram.canvas.get_root_items()) == 1 assert new_cls.package is package assert element_factory.lookup(orig_cls_id) is new_cls
def test_copy_item_without_copying_connection(diagram, element_factory): cls = element_factory.create(UML.Class) cls_item = diagram.create(ClassItem, subject=cls) gen_item = diagram.create(GeneralizationItem) connect(gen_item, gen_item.handles()[0], cls_item) buffer = copy({cls_item}) new_items = paste(buffer, diagram, element_factory.lookup) assert len(diagram.canvas.get_root_items()) == 3 assert len(element_factory.lselect(UML.Class)) == 1 assert type(new_items) is set assert len(new_items) == 1
def paste(self, diagram): """Paste items in the copy-buffer to the diagram.""" with Transaction(self.event_manager): # Create new id's that have to be used to create the items: new_items: Set[Presentation] = paste( copy_buffer, diagram, self.element_factory.lookup ) # move pasted items a bit, so user can see result of his action :) for item in new_items: if item.parent not in new_items: item.matrix.translate(10, 10) return new_items
def copy_clear_and_paste(items, diagram, element_factory, retain=[]): buffer = copy(items) clear_model(diagram, element_factory, retain) print(buffer) return paste(buffer, diagram, element_factory.lookup)
def copy_and_paste(items, diagram, element_factory, retain=[]): buffer = copy(items) return paste(buffer, diagram, element_factory.lookup)