From 7ec3eddcccaa20a2619c1454ff881231daf65ee2 Mon Sep 17 00:00:00 2001 From: Matthias Hagmann <16444067+MattHag@users.noreply.github.com> Date: Sun, 3 Mar 2024 23:34:55 +0100 Subject: [PATCH] test: Extract get_kind_from_index function and test it Pull get_kind_from_index from class to module level and add tests. Related #1097 --- lib/logitech_receiver/receiver.py | 35 ++++++++++++------------ tests/logitech_receiver/test_receiver.py | 26 ++++++++++++++++++ 2 files changed, 44 insertions(+), 17 deletions(-) create mode 100644 tests/logitech_receiver/test_receiver.py diff --git a/lib/logitech_receiver/receiver.py b/lib/logitech_receiver/receiver.py index 2dc71dc9..dd3c99b1 100644 --- a/lib/logitech_receiver/receiver.py +++ b/lib/logitech_receiver/receiver.py @@ -405,7 +405,7 @@ class Ex100Receiver(Receiver): assert notification.address == 0x02 online = True encrypted = bool(notification.data[0] & 0x80) - kind = hidpp10_constants.DEVICE_KIND[self.get_kind_from_index(number)] + kind = hidpp10_constants.DEVICE_KIND[_get_kind_from_index(self, number)] wpid = "00" + notification.data[2:3].hex().upper() return online, encrypted, wpid, kind @@ -414,24 +414,25 @@ class Ex100Receiver(Receiver): if not wpid: logger.error("Unable to get wpid from udev for device %d of %s", number, self) raise exceptions.NoSuchDevice(number=number, receiver=self, error="Not present 27Mhz device") - kind = hidpp10_constants.DEVICE_KIND[self.get_kind_from_index(number)] + kind = hidpp10_constants.DEVICE_KIND[_get_kind_from_index(self, number)] return {"wpid": wpid, "kind": kind, "polling": "", "serial": None, "power_switch": "(unknown)"} - def get_kind_from_index(self, index): - """Get device kind from 27Mhz device index""" - # From drivers/hid/hid-logitech-dj.c - if index == 1: # mouse - kind = 2 - elif index == 2: # mouse - kind = 2 - elif index == 3: # keyboard - kind = 1 - elif index == 4: # numpad - kind = 3 - else: # unknown device number on 27Mhz receiver - logger.error("failed to calculate device kind for device %d of %s", index, self) - raise exceptions.NoSuchDevice(number=index, receiver=self, error="Unknown 27Mhz device number") - return kind + +def _get_kind_from_index(receiver, index): + """Get device kind from 27Mhz device index""" + # From drivers/hid/hid-logitech-dj.c + if index == 1: # mouse + kind = 2 + elif index == 2: # mouse + kind = 2 + elif index == 3: # keyboard + kind = 1 + elif index == 4: # numpad + kind = 3 + else: # unknown device number on 27Mhz receiver + logger.error("failed to calculate device kind for device %d of %s", index, receiver) + raise exceptions.NoSuchDevice(number=index, receiver=receiver, error="Unknown 27Mhz device number") + return kind receiver_class_mapping = { diff --git a/tests/logitech_receiver/test_receiver.py b/tests/logitech_receiver/test_receiver.py new file mode 100644 index 00000000..8265f8a0 --- /dev/null +++ b/tests/logitech_receiver/test_receiver.py @@ -0,0 +1,26 @@ +from unittest import mock + +import pytest + +from logitech_receiver import exceptions, receiver + + +@pytest.mark.parametrize( + "index, expected_kind", + [ + (0, None), + (1, 2), # mouse + (2, 2), # mouse + (3, 1), # keyboard + (4, 3), # numpad + (5, None), + ], +) +def test_get_kind_from_index(index, expected_kind): + mock_receiver = mock.Mock() + + if expected_kind: + assert receiver._get_kind_from_index(mock_receiver, index) == expected_kind + else: + with pytest.raises(exceptions.NoSuchDevice): + receiver._get_kind_from_index(mock_receiver, index)