45 lines
1.7 KiB
Python
45 lines
1.7 KiB
Python
import pytest
|
|
|
|
from kivy.compat import isclose
|
|
from kivy.input import MotionEvent
|
|
|
|
|
|
class DummyMotionEvent(MotionEvent):
|
|
pass
|
|
|
|
|
|
class TestMotionEvent:
|
|
|
|
def create_dummy_motion_event(self):
|
|
return DummyMotionEvent('dummy', 'dummy1', (0, 0))
|
|
|
|
def build_to_absolute_pos_data(self, x_max, y_max, x_step, y_step):
|
|
for x, y in zip(range(0, x_max, x_step), range(0, y_max, y_step)):
|
|
result = (x, y)
|
|
yield x / x_max, y / y_max, x_max, y_max, 0, result
|
|
for x, y, in zip(range(0, x_max, x_step), range(0, y_max, y_step)):
|
|
result = (y, x_max - x)
|
|
yield x / x_max, y / y_max, x_max, y_max, 90, result
|
|
for x, y, in zip(range(0, x_max, x_step), range(0, y_max, y_step)):
|
|
result = (x_max - x, y_max - y)
|
|
yield x / x_max, y / y_max, x_max, y_max, 180, result
|
|
for x, y, in zip(range(0, x_max, x_step), range(0, y_max, y_step)):
|
|
result = (y_max - y, x)
|
|
yield x / x_max, y / y_max, x_max, y_max, 270, result
|
|
|
|
def test_to_absolute_pos(self):
|
|
event = self.create_dummy_motion_event()
|
|
for item in self.build_to_absolute_pos_data(320, 240, 20, 21):
|
|
args = item[:-1]
|
|
expected_x, expected_y = item[-1]
|
|
x, y = event.to_absolute_pos(*args)
|
|
message = ('For args {} expected ({}, {}), got ({}, {})'
|
|
.format(args, expected_x, expected_y, x, y))
|
|
correct = isclose(x, expected_x) and isclose(y, expected_y)
|
|
assert correct, message
|
|
|
|
def test_to_absolute_pos_error(self):
|
|
event = self.create_dummy_motion_event()
|
|
with pytest.raises(ValueError):
|
|
event.to_absolute_pos(0, 0, 100, 100, 10)
|