Commit 881ccc36 authored by Benjamin Tissoires's avatar Benjamin Tissoires

selftests/hid: tablets: move move_to function to PenDigitizer

We can easily subclass PenDigitizer for introducing firmware bugs when
subclassing Pen is harder.

Move move_to from Pen to PenDigitizer so we get that ability
Reviewed-by: default avatarPeter Hutterer <peter.hutterer@who-t.net>
Acked-by: default avatarJiri Kosina <jkosina@suse.com>
Link: https://lore.kernel.org/r/20231206-wip-selftests-v2-6-c0350c2f5986@kernel.orgSigned-off-by: default avatarBenjamin Tissoires <bentiss@kernel.org>
parent d52f5206
...@@ -282,7 +282,7 @@ class Pen(object): ...@@ -282,7 +282,7 @@ class Pen(object):
self._old_values = None self._old_values = None
self.current_state = None self.current_state = None
def _restore(self): def restore(self):
if self._old_values is not None: if self._old_values is not None:
for i in [ for i in [
"x", "x",
...@@ -297,50 +297,8 @@ class Pen(object): ...@@ -297,50 +297,8 @@ class Pen(object):
]: ]:
setattr(self, i, getattr(self._old_values, i)) setattr(self, i, getattr(self._old_values, i))
def move_to(self, state): def backup(self):
# fill in the previous values self._old_values = copy.copy(self)
if self.current_state == PenState.PEN_IS_OUT_OF_RANGE:
self._restore()
print(f"\n *** pen is moving to {state} ***")
if state == PenState.PEN_IS_OUT_OF_RANGE:
self._old_values = copy.copy(self)
self.x = 0
self.y = 0
self.tipswitch = False
self.tippressure = 0
self.azimuth = 0
self.inrange = False
self.width = 0
self.height = 0
self.invert = False
self.eraser = False
self.x_tilt = 0
self.y_tilt = 0
self.twist = 0
elif state == PenState.PEN_IS_IN_RANGE:
self.tipswitch = False
self.inrange = True
self.invert = False
self.eraser = False
elif state == PenState.PEN_IS_IN_CONTACT:
self.tipswitch = True
self.inrange = True
self.invert = False
self.eraser = False
elif state == PenState.PEN_IS_IN_RANGE_WITH_ERASING_INTENT:
self.tipswitch = False
self.inrange = True
self.invert = True
self.eraser = False
elif state == PenState.PEN_IS_ERASING:
self.tipswitch = False
self.inrange = True
self.invert = True
self.eraser = True
self.current_state = state
def __assert_axis(self, evdev, axis, value): def __assert_axis(self, evdev, axis, value):
if ( if (
...@@ -384,6 +342,51 @@ class PenDigitizer(base.UHIDTestDevice): ...@@ -384,6 +342,51 @@ class PenDigitizer(base.UHIDTestDevice):
continue continue
self.fields = [f.usage_name for f in r] self.fields = [f.usage_name for f in r]
def move_to(self, pen, state):
# fill in the previous values
if pen.current_state == PenState.PEN_IS_OUT_OF_RANGE:
pen.restore()
print(f"\n *** pen is moving to {state} ***")
if state == PenState.PEN_IS_OUT_OF_RANGE:
pen.backup()
pen.x = 0
pen.y = 0
pen.tipswitch = False
pen.tippressure = 0
pen.azimuth = 0
pen.inrange = False
pen.width = 0
pen.height = 0
pen.invert = False
pen.eraser = False
pen.x_tilt = 0
pen.y_tilt = 0
pen.twist = 0
elif state == PenState.PEN_IS_IN_RANGE:
pen.tipswitch = False
pen.inrange = True
pen.invert = False
pen.eraser = False
elif state == PenState.PEN_IS_IN_CONTACT:
pen.tipswitch = True
pen.inrange = True
pen.invert = False
pen.eraser = False
elif state == PenState.PEN_IS_IN_RANGE_WITH_ERASING_INTENT:
pen.tipswitch = False
pen.inrange = True
pen.invert = True
pen.eraser = False
elif state == PenState.PEN_IS_ERASING:
pen.tipswitch = False
pen.inrange = True
pen.invert = True
pen.eraser = True
pen.current_state = state
def event(self, pen): def event(self, pen):
rs = [] rs = []
r = self.create_report(application=self.cur_application, data=pen) r = self.create_report(application=self.cur_application, data=pen)
...@@ -462,7 +465,7 @@ class BaseTest: ...@@ -462,7 +465,7 @@ class BaseTest:
cur_state = PenState.PEN_IS_OUT_OF_RANGE cur_state = PenState.PEN_IS_OUT_OF_RANGE
p = Pen(50, 60) p = Pen(50, 60)
p.move_to(PenState.PEN_IS_OUT_OF_RANGE) uhdev.move_to(p, PenState.PEN_IS_OUT_OF_RANGE)
events = self.post(uhdev, p) events = self.post(uhdev, p)
self.validate_transitions(cur_state, p, evdev, events) self.validate_transitions(cur_state, p, evdev, events)
...@@ -475,7 +478,7 @@ class BaseTest: ...@@ -475,7 +478,7 @@ class BaseTest:
events = self.post(uhdev, p) events = self.post(uhdev, p)
self.validate_transitions(cur_state, p, evdev, events) self.validate_transitions(cur_state, p, evdev, events)
assert len(events) >= 3 # X, Y, SYN assert len(events) >= 3 # X, Y, SYN
p.move_to(state) uhdev.move_to(p, state)
if scribble and state != PenState.PEN_IS_OUT_OF_RANGE: if scribble and state != PenState.PEN_IS_OUT_OF_RANGE:
p.x += 1 p.x += 1
p.y -= 1 p.y -= 1
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment