コード例 #1
0
ファイル: copypaste.py プロジェクト: taroyuyu/gaphor
def copy_state(element: State):
    yield element.id, copy_named_element(element)
    if element.entry:
        yield from copy(element.entry)
    if element.exit:
        yield from copy(element.exit)
    if element.doActivity:
        yield from copy(element.doActivity)
コード例 #2
0
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
コード例 #3
0
def copy_class(element):
    yield element.id, copy_named_element(element)
    for feature in itertools.chain(
            element.ownedAttribute,
            element.ownedOperation,
    ):
        yield from copy(feature)
コード例 #4
0
def copy_operation(element: Operation):
    yield element.id, copy_named_element(element)
    for feature in itertools.chain(
            element.formalParameter,
            element.returnResult,
    ):
        yield from copy(feature)
コード例 #5
0
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)
コード例 #6
0
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
コード例 #7
0
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
コード例 #8
0
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
コード例 #9
0
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
コード例 #10
0
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
コード例 #11
0
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
コード例 #12
0
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
コード例 #13
0
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
コード例 #14
0
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
コード例 #15
0
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
コード例 #16
0
ファイル: copypaste.py プロジェクト: taroyuyu/gaphor
def copy_transition(element: Transition):
    yield element.id, copy_named_element(element)
    if element.guard:
        yield from copy(element.guard)
コード例 #17
0
 def copy(self, items):
     if items:
         self.copy_buffer = copy(items)
コード例 #18
0
def copy_message(element: Message):
    yield element.id, copy_named_element(element)
    if element.sendEvent:
        yield from copy(element.sendEvent)
    if element.receiveEvent:
        yield from copy(element.receiveEvent)
コード例 #19
0
ファイル: fixtures.py プロジェクト: taroyuyu/gaphor
def copy_and_paste(items, diagram, element_factory, retain=[]):
    buffer = copy(items)
    return paste(buffer, diagram, element_factory.lookup)
コード例 #20
0
def copy_association(element: Association):
    yield element.id, copy_named_element(element)
    for end in element.memberEnd:
        yield from copy(end)
コード例 #21
0
def copy_operation(element: Operation):
    yield element.id, copy_named_element(element)
    for feature in element.ownedParameter:
        yield from copy(feature)
コード例 #22
0
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)
コード例 #23
0
ファイル: copypaste.py プロジェクト: taroyuyu/gaphor
def copy_class(element: PartitionItem):
    yield element.id, copy_presentation(element)
    for partition in element.partition:
        yield from copy(partition)
コード例 #24
0
 def copy(self, items):
     global copy_buffer
     if items:
         copy_buffer = copy(items)
コード例 #25
0
def copy_execution_specification(element: ExecutionSpecification):
    yield element.id, copy_named_element(element)
    for occurrence in element.executionOccurrenceSpecification:
        yield from copy(occurrence)
コード例 #26
0
ファイル: copypaste.py プロジェクト: taroyuyu/gaphor
def copy_connector(element: Connector):
    yield element.id, copy_named_element(element)
    for end in element.end:
        yield from copy(end)
コード例 #27
0
ファイル: copypaste.py プロジェクト: taroyuyu/gaphor
def copy_connector_end(element: ConnectorEnd):
    yield element.id, copy_element(element)
    if element.partWithPort:
        yield from copy(element.partWithPort)