コード例 #1
0
    def test_change_wheel_direction(self):
        # not just wheel, anything that suddenly reports a different value.
        # as long as type and code are equal its the same key, so there is no
        # way both directions can be held down.
        self.assertEqual(reader.read(), None)
        self.create_helper()
        self.assertEqual(reader.read(), None)
        reader.start_reading('device 1')
        self.assertEqual(reader.read(), None)

        send_event_to_reader(new_event(EV_REL, REL_WHEEL, 1))
        self.assertEqual(reader.read(), (EV_REL, REL_WHEEL, 1))
        self.assertEqual(len(reader._unreleased), 1)
        self.assertEqual(reader.read(), None)

        send_event_to_reader(new_event(EV_REL, REL_WHEEL, -1))
        self.assertEqual(reader.read(), (EV_REL, REL_WHEEL, -1))
        # notice that this is no combination of two sides, the previous
        # entry in unreleased has to get overwritten. So there is still only
        # one element in it.
        self.assertEqual(len(reader._unreleased), 1)
        self.assertEqual(reader.read(), None)
コード例 #2
0
    def test_reading_ignore_duplicate_down(self):
        send_event_to_reader(new_event(EV_ABS, ABS_Z, 1, 10))

        self.assertEqual(reader.read(), (EV_ABS, ABS_Z, 1))
        self.assertEqual(reader.read(), None)

        # duplicate
        send_event_to_reader(new_event(EV_ABS, ABS_Z, 1, 10))
        self.assertEqual(reader.read(), None)
        self.assertEqual(len(reader._unreleased), 1)
        self.assertEqual(len(reader.get_unreleased_keys()), 1)
        self.assertIsInstance(reader.get_unreleased_keys(), Key)

        # release
        send_event_to_reader(new_event(EV_ABS, ABS_Z, 0, 10))
        self.assertEqual(reader.read(), None)
        self.assertEqual(len(reader._unreleased), 0)
        self.assertIsNone(reader.get_unreleased_keys())
コード例 #3
0
    def test_reading_wheel(self):
        # will be treated as released automatically at some point
        self.create_helper()
        reader.start_reading('device 1')

        send_event_to_reader(new_event(EV_REL, REL_WHEEL, 0))
        self.assertIsNone(reader.read())

        send_event_to_reader(new_event(EV_REL, REL_WHEEL, 1))
        result = reader.read()
        self.assertIsInstance(result, Key)
        self.assertEqual(result, (EV_REL, REL_WHEEL, 1))
        self.assertEqual(result, ((EV_REL, REL_WHEEL, 1), ))
        self.assertNotEqual(result, ((EV_REL, REL_WHEEL, 1), (1, 1, 1)))
        self.assertEqual(result.keys, ((EV_REL, REL_WHEEL, 1), ))

        # it won't return the same event twice
        self.assertEqual(reader.read(), None)

        # but it is still remembered unreleased
        self.assertEqual(len(reader._unreleased), 1)
        self.assertEqual(reader.get_unreleased_keys(), (EV_REL, REL_WHEEL, 1))
        self.assertIsInstance(reader.get_unreleased_keys(), Key)

        # as long as new wheel events arrive, it is considered unreleased
        for _ in range(10):
            send_event_to_reader(new_event(EV_REL, REL_WHEEL, 1))
            self.assertEqual(reader.read(), None)
            self.assertEqual(len(reader._unreleased), 1)

        # read a few more times, at some point it is treated as unreleased
        for _ in range(4):
            self.assertEqual(reader.read(), None)
        self.assertEqual(len(reader._unreleased), 0)
        self.assertIsNone(reader.get_unreleased_keys())
        """combinations"""

        send_event_to_reader(new_event(EV_REL, REL_WHEEL, 1, 1000))
        send_event_to_reader(new_event(EV_KEY, KEY_COMMA, 1, 1001))
        combi_1 = ((EV_REL, REL_WHEEL, 1), (EV_KEY, KEY_COMMA, 1))
        combi_2 = ((EV_KEY, KEY_COMMA, 1), (EV_KEY, KEY_A, 1))
        read = reader.read()
        self.assertEqual(read, combi_1)
        self.assertEqual(reader.read(), None)
        self.assertEqual(len(reader._unreleased), 2)
        self.assertEqual(reader.get_unreleased_keys(), combi_1)

        # don't send new wheel down events, it should get released again
        i = 0
        while len(reader._unreleased) == 2:
            read = reader.read()
            if i == 100:
                raise AssertionError('Did not release the wheel')
            i += 1
        # and only the comma remains. However, a changed combination is
        # only returned when a new key is pressed. Only then the pressed
        # down keys are collected in a new Key object.
        self.assertEqual(read, None)
        self.assertEqual(reader.read(), None)
        self.assertEqual(len(reader._unreleased), 1)
        self.assertEqual(reader.get_unreleased_keys(), combi_1[1])

        # press down a new key, now it will return a different combination
        send_event_to_reader(new_event(EV_KEY, KEY_A, 1, 1002))
        self.assertEqual(reader.read(), combi_2)
        self.assertEqual(len(reader._unreleased), 2)

        # release all of them
        send_event_to_reader(new_event(EV_KEY, KEY_COMMA, 0))
        send_event_to_reader(new_event(EV_KEY, KEY_A, 0))
        self.assertEqual(reader.read(), None)
        self.assertEqual(len(reader._unreleased), 0)
        self.assertEqual(reader.get_unreleased_keys(), None)
コード例 #4
0
    def test_combine_triggers(self):
        reader.start_reading('device 1')

        i = 0

        def next_timestamp():
            nonlocal i
            i += 1
            return time.time() + i

        # based on an observed bug
        send_event_to_reader(new_event(3, 1, 0, next_timestamp()))
        send_event_to_reader(new_event(3, 0, 0, next_timestamp()))
        send_event_to_reader(new_event(3, 2, 1, next_timestamp()))
        self.assertEqual(reader.read(), (EV_ABS, ABS_Z, 1))
        send_event_to_reader(new_event(3, 0, 0, next_timestamp()))
        send_event_to_reader(new_event(3, 5, 1, next_timestamp()))
        self.assertEqual(reader.read(),
                         ((EV_ABS, ABS_Z, 1), (EV_ABS, ABS_RZ, 1)))
        send_event_to_reader(new_event(3, 5, 0, next_timestamp()))
        send_event_to_reader(new_event(3, 0, 0, next_timestamp()))
        send_event_to_reader(new_event(3, 1, 0, next_timestamp()))
        self.assertEqual(reader.read(), None)
        send_event_to_reader(new_event(3, 2, 1, next_timestamp()))
        send_event_to_reader(new_event(3, 1, 0, next_timestamp()))
        send_event_to_reader(new_event(3, 0, 0, next_timestamp()))
        # due to not properly handling the duplicate down event it cleared
        # the combination and returned it. Instead it should report None
        # and by doing that keep the previous combination.
        self.assertEqual(reader.read(), None)
コード例 #5
0
    def test_reading_3(self):
        self.create_helper()
        # a combination of events via Socket with reads inbetween
        reader.start_reading('gamepad')

        send_event_to_reader(new_event(EV_KEY, CODE_1, 1, 1001))
        self.assertEqual(reader.read(), ((EV_KEY, CODE_1, 1)))

        custom_mapping.set('gamepad.joystick.left_purpose', BUTTONS)
        send_event_to_reader(new_event(EV_ABS, ABS_Y, 1, 1002))
        self.assertEqual(reader.read(),
                         ((EV_KEY, CODE_1, 1), (EV_ABS, ABS_Y, 1)))

        send_event_to_reader(new_event(EV_ABS, ABS_HAT0X, -1, 1003))
        self.assertEqual(reader.read(),
                         ((EV_KEY, CODE_1, 1), (EV_ABS, ABS_Y, 1),
                          (EV_ABS, ABS_HAT0X, -1)))

        # adding duplicate down events won't report a different combination.
        # import for triggers, as they keep reporting more down-events before
        # they are released
        send_event_to_reader(new_event(EV_ABS, ABS_Y, 1, 1005))
        self.assertEqual(reader.read(), None)
        send_event_to_reader(new_event(EV_ABS, ABS_HAT0X, -1, 1006))
        self.assertEqual(reader.read(), None)

        send_event_to_reader(new_event(EV_KEY, CODE_1, 0, 1004))
        read = reader.read()
        self.assertEqual(read, None)

        send_event_to_reader(new_event(EV_ABS, ABS_Y, 0, 1007))
        self.assertEqual(reader.read(), None)

        send_event_to_reader(new_event(EV_KEY, ABS_HAT0X, 0, 1008))
        self.assertEqual(reader.read(), None)