[PATCH evemu 7/7] python: add InputEvent.matches(type, code) for comparisons
Peter Hutterer
peter.hutterer at who-t.net
Tue Nov 4 20:48:45 PST 2014
Benjamin,
can you remember the reason his one didn't get merged? It's the most useful
one of the series, the one I use the most whenever I need to analyse event
sequences.
Cheers,
Peter
On Fri, Aug 29, 2014 at 09:44:09AM +1000, Peter Hutterer wrote:
> Allows for:
> if e.matches("EV_REL", "REL_X"):
> print("Relative X events")
>
> but it'll happily take integers as well.
>
> Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
> ---
> python/evemu/__init__.py | 9 +++++++++
> python/evemu/tests/test_device.py | 40 +++++++++++++++++++++++++++++++++++++++
> 2 files changed, 49 insertions(+)
>
> diff --git a/python/evemu/__init__.py b/python/evemu/__init__.py
> index 65e4673..7af5032 100644
> --- a/python/evemu/__init__.py
> +++ b/python/evemu/__init__.py
> @@ -133,6 +133,15 @@ class InputEvent(object):
> self.code = code
> self.value = value
>
> + def matches(self, type, code = None):
> + if event_get_value(type) != self.type:
> + return False
> +
> + if code != None and event_get_value(self.type, code) != self.code:
> + return False
> +
> + return True
> +
> def __str__(self):
> f = tempfile.TemporaryFile()
> libc = evemu.base.LibC()
> diff --git a/python/evemu/tests/test_device.py b/python/evemu/tests/test_device.py
> index f2d14db..10bd290 100644
> --- a/python/evemu/tests/test_device.py
> +++ b/python/evemu/tests/test_device.py
> @@ -278,5 +278,45 @@ class DevicePropertiesTestCase(evemu.testing.testcase.BaseTestCase):
> self.assertEqual(evemu.input_prop_get_name("foo"), None)
> self.assertEqual(evemu.input_prop_get_name(None), None)
>
> + def test_event_matching(self):
> + e = evemu.InputEvent(0, 0, 0x01, 44, 0)
> + self.assertTrue(e.matches("EV_KEY"))
> + self.assertTrue(e.matches("EV_KEY", "KEY_Z"))
> + self.assertTrue(e.matches(0x01))
> + self.assertTrue(e.matches(0x01, 44))
> + self.assertTrue(e.matches("EV_KEY", 44))
> + self.assertTrue(e.matches(0x01, "KEY_Z"))
> +
> + for t in range(-1, 0xff):
> + for c in range(-1, 0xff):
> + if t != e.type or c != e.code:
> + self.assertFalse(e.matches(t, c))
> +
> + e = evemu.InputEvent(0, 0, 0x02, 0x01, 0)
> + self.assertTrue(e.matches("EV_REL"))
> + self.assertTrue(e.matches("EV_REL", "REL_Y"))
> + self.assertTrue(e.matches(0x02))
> + self.assertTrue(e.matches(0x02, 0x01))
> + self.assertTrue(e.matches("EV_REL", 0x01))
> + self.assertTrue(e.matches(0x02, "REL_Y"))
> +
> + for t in range(-1, 0xff):
> + for c in range(-1, 0xff):
> + if t != e.type or c != e.code:
> + self.assertFalse(e.matches(t, c))
> +
> + e = evemu.InputEvent(0, 0, 0x03, 0x00, 0)
> + self.assertTrue(e.matches("EV_ABS"))
> + self.assertTrue(e.matches("EV_ABS", "ABS_X"))
> + self.assertTrue(e.matches(0x03))
> + self.assertTrue(e.matches(0x03, 0x00))
> + self.assertTrue(e.matches("EV_ABS", 0x00))
> + self.assertTrue(e.matches(0x03, "ABS_X"))
> +
> + for t in range(-1, 0xff):
> + for c in range(-1, 0xff):
> + if t != e.type or c != e.code:
> + self.assertFalse(e.matches(t, c))
> +
> if __name__ == "__main__":
> unittest.main()
> --
> 1.9.3
>
More information about the Input-tools
mailing list