コード例 #1
0
def test_constraints_after_merge(canvas, connections, line, view):
    """Test if constraints are recreated after line merge."""
    line2 = Line(connections)
    canvas.add(line2)
    head = line2.handles()[0]

    canvas.request_update(line)
    canvas.request_update(line2)
    view.update()

    HandleMove(line2, head, view).connect((25, 25))
    cinfo = connections.get_connection(head)
    assert line == cinfo.connected

    segment = Segment(line, canvas)
    segment.split_segment(0)
    assert len(line.handles()) == 3
    orig_constraint = cinfo.constraint

    segment.merge_segment(0)
    assert len(line.handles()) == 2

    h1, h2 = line.handles()
    # Connection shall be reconstrained between 1st and 2nd handle
    cinfo = canvas.connections.get_connection(head)
    assert orig_constraint != cinfo.constraint
コード例 #2
0
def test_line_merge_segment(diagram, undo_manager, event_manager):
    with Transaction(event_manager):
        line = diagram.create(LinePresentation)
        segment = Segment(line, diagram)
        segment.split((5, 5))

    head_handle = line.head
    tail_handle = line.tail

    with Transaction(event_manager):
        segment = Segment(line, diagram)
        segment.merge_segment(0)

    assert len(line.handles()) == 2
    assert line.head is head_handle
    assert line.tail is tail_handle

    undo_manager.undo_transaction()

    assert len(line.handles()) == 3
    assert line.head is head_handle
    assert line.tail is tail_handle

    undo_manager.redo_transaction()

    assert len(line.handles()) == 2
コード例 #3
0
def test_merge_first_single(line, canvas, view):
    """Test single line merging starting from 1st segment."""
    line.handles()[1].pos = (20, 0)
    segment = Segment(line, canvas)
    segment.split_segment(0)

    # We start with 3 handles and 2 ports, after merging 2 handles and 1 port
    # are expected
    assert len(line.handles()) == 3
    assert len(line.ports()) == 2
    old_ports = line.ports()[:]

    segment = Segment(line, canvas)
    handles, ports = segment.merge_segment(0)
    # Deleted handles and ports
    assert 1 == len(handles)
    assert 2 == len(ports)
    # Handles and ports left after segment merging
    assert 2 == len(line.handles())
    assert 1 == len(line.ports())

    assert handles[0] not in line.handles()
    assert ports[0] not in line.ports()
    assert ports[1] not in line.ports()

    # Old ports are completely removed as they are replaced by new one port
    assert old_ports == ports

    # Finally, created port shall span between first and last handle
    port = line.ports()[0]
    assert (0, 0) == port.start.pos
    assert (20, 0) == port.end.pos
コード例 #4
0
def test_orthogonal_line_merge(canvas, connections, line):
    """Test orthogonal line merging."""
    assert 0 == len(connections.solver._constraints)

    line.handles()[-1].pos = 100, 100

    segment = Segment(line, canvas)
    # Prepare the self.line for merging
    segment.split_segment(0)
    segment.split_segment(0)
    line.orthogonal = True

    assert 3 == len(connections.solver._constraints)
    assert 4 == len(line.handles())
    assert 3 == len(line.ports())

    # Test the merging
    segment.merge_segment(0)

    assert 2 == len(connections.solver._constraints)
    assert 3 == len(line.handles())
    assert 2 == len(line.ports())
コード例 #5
0
def test_params_errors(canvas, connections, num_segments):
    """Test parameter error exceptions."""
    line = Line(connections)
    canvas.add(line)
    segment = Segment(line, canvas)
    with pytest.raises(ValueError):
        if isinstance(num_segments, tuple):
            segment.split_segment(0)
            segment.merge_segment(num_segments[0], num_segments[1])
        elif num_segments == 0:
            assert 2 == len(line.handles())
            segment.merge_segment(0)
        else:
            segment.split_segment(0)
            segment.merge_segment(num_segments)
コード例 #6
0
def test_merge_multiple(canvas, line):
    """Test multiple line merge."""
    line.handles()[1].pos = (20, 16)
    segment = Segment(line, canvas)
    segment.split_segment(0, count=3)

    # Start with 4 handles and 3 ports, merge 3 segments
    assert len(line.handles()) == 4
    assert len(line.ports()) == 3

    handles, ports = segment.merge_segment(0, count=3)
    assert 2 == len(handles)
    assert 3 == len(ports)
    assert 2 == len(line.handles())
    assert 1 == len(line.ports())

    assert not set(handles).intersection(set(line.handles()))
    assert not set(ports).intersection(set(line.ports()))

    # Finally, the created port shall span between first and last handle
    port = line.ports()[0]
    assert (0, 0) == port.start.pos
    assert (20, 16) == port.end.pos
コード例 #7
0
ファイル: segment.py プロジェクト: taroyuyu/gaphor
 def revert(self, target):
     segment = Segment(target, target.diagram)
     segment.merge_segment(self.segment, self.count)