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
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
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
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())
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)
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
def revert(self, target): segment = Segment(target, target.diagram) segment.merge_segment(self.segment, self.count)