1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148
|
import pytest
from gaphas.connections import Connections
from gaphas.connector import Handle
from gaphas.guide import Guide, GuidedItemMove, find_closest
from gaphas.item import Element, Line
from gaphas.solver import WEAK
@pytest.fixture
def line(canvas, connections):
line = Line(connections)
canvas.add(line)
return line
def test_find_closest(view, connections):
"""Test find closest method."""
set1 = [0, 10, 20]
set2 = [2, 15, 30]
d, closest = find_closest(set1, set2)
assert 2.0 == d
assert [2.0] == closest
def test_element_guide():
e1 = Element(Connections())
assert 10 == e1.width
assert 10 == e1.height
guides = list(Guide(e1).horizontal())
assert 0.0 == guides[0]
assert 5.0 == guides[1]
assert 10.0 == guides[2]
guides = list(Guide(e1).vertical())
assert 0.0 == guides[0]
assert 5.0 == guides[1]
assert 10.0 == guides[2]
def test_line_guide(line, canvas):
line.handles().append(Handle((20, 20), strength=WEAK))
line.handles().append(Handle((30, 30), strength=WEAK))
line.handles().append(Handle((40, 40), strength=WEAK))
line.orthogonal = True
canvas.update_now((line,))
guides = list(Guide(line).horizontal())
assert len(line.handles()) == len(guides)
assert 0.0 == guides[0]
assert 10.0 == guides[1]
assert 10.0 == guides[2]
assert 40.0 == guides[3]
guides = list(Guide(line).vertical())
assert len(line.handles()) == len(guides)
assert 10.0 == guides[0]
assert 10.0 == guides[1]
assert 30.0 == guides[2]
assert 30.0 == guides[3]
def test_line_guide_horizontal(line, canvas):
line.handles().append(Handle((20, 20)))
line.handles().append(Handle((30, 30)))
line.handles().append(Handle((40, 40)))
line.horizontal = True
line.orthogonal = True
canvas.update_now((line,))
guides = list(Guide(line).horizontal())
assert len(line.handles()) == len(guides)
assert 10.0 == guides[0]
assert 10.0 == guides[1]
assert 30.0 == guides[2]
@pytest.mark.asyncio
async def test_guide_item_in_motion(connections, canvas, view, window):
e1 = Element(connections)
e2 = Element(connections)
e3 = Element(connections)
canvas.add(e1)
canvas.add(e2)
canvas.add(e3)
assert 0 == e1.matrix[4]
assert 0 == e1.matrix[5]
e2.matrix.translate(40, 40)
canvas.request_update(e2)
await view.update()
assert 40 == e2.matrix[4]
assert 40 == e2.matrix[5]
guider = GuidedItemMove(e3, view)
guider.start_move((0, 0))
assert 0 == e3.matrix[4]
assert 0 == e3.matrix[5]
# Moved back to guided lines:
for d in range(3):
guider.move((d, d))
assert 0 == e3.matrix[4]
assert 0 == e3.matrix[5]
guider.move((20, 20))
assert 20 == e3.matrix[4]
assert 20 == e3.matrix[5]
@pytest.mark.asyncio
async def test_guide_item_in_motion_2(connections, canvas, view):
e1 = Element(connections)
e2 = Element(connections)
e3 = Element(connections)
canvas.add(e1)
canvas.add(e2)
canvas.add(e3)
assert 0 == e1.matrix[4]
assert 0 == e1.matrix[5]
e2.matrix.translate(40, 40)
canvas.request_update(e2)
await view.update()
assert 40 == e2.matrix[4]
assert 40 == e2.matrix[5]
guider = GuidedItemMove(e3, view)
guider.start_move((3, 3))
assert 0 == e3.matrix[4]
assert 0 == e3.matrix[5]
# Moved back to guided lines:
for y in range(4, 6):
guider.move((3, y))
assert 0 == e3.matrix[4]
assert 0 == e3.matrix[5]
# Take into account initial cursor offset of (3, 3)
guider.move((20, 23))
assert 17 == e3.matrix[4]
assert 20 == e3.matrix[5]
|