diff --git a/lib/logitech_receiver/receiver.py b/lib/logitech_receiver/receiver.py index ade67292..758327fc 100644 --- a/lib/logitech_receiver/receiver.py +++ b/lib/logitech_receiver/receiver.py @@ -26,6 +26,7 @@ from .device import Device logger = logging.getLogger(__name__) +_hidpp10 = hidpp10.Hidpp10() _R = hidpp10_constants.REGISTERS _IR = hidpp10_constants.INFO_SUBREGISTERS @@ -98,7 +99,7 @@ class Receiver: @property def firmware(self): if self._firmware is None and self.handle: - self._firmware = hidpp10.get_firmware(self) + self._firmware = _hidpp10.get_firmware(self) return self._firmware # how many pairings remain (None for unknown, -1 for unlimited) @@ -124,12 +125,12 @@ class Receiver: ) else: set_flag_bits = 0 - ok = hidpp10.set_notification_flags(self, set_flag_bits) + ok = _hidpp10.set_notification_flags(self, set_flag_bits) if ok is None: logger.warning("%s: failed to %s receiver notifications", self, "enable" if enable else "disable") return None - flag_bits = hidpp10.get_notification_flags(self) + flag_bits = _hidpp10.get_notification_flags(self) flag_names = None if flag_bits is None else tuple(hidpp10_constants.NOTIFICATION_FLAG.flag_names(flag_bits)) if logger.isEnabledFor(logging.INFO): logger.info("%s: receiver notifications %s => %s", self, "enabled" if enable else "disabled", flag_names) diff --git a/setup.py b/setup.py index 9b40ddce..80e26e8b 100755 --- a/setup.py +++ b/setup.py @@ -86,7 +86,7 @@ For instructions on installing Solaar see https://pwr-solaar.github.io/Solaar/in "report-descriptor": ["hid-parser"], "desktop-notifications": ["Notify (>= 0.7)"], "git-commit": ["python-git-info"], - "test": ["pytest", "pytest-cov"], + "test": ["pytest", "pytest-mock", "pytest-cov"], "dev": ["ruff"], }, package_dir={"": "lib"}, diff --git a/tests/logitech_receiver/test_hidpp10.py b/tests/logitech_receiver/test_hidpp10.py new file mode 100644 index 00000000..955c2070 --- /dev/null +++ b/tests/logitech_receiver/test_hidpp10.py @@ -0,0 +1,42 @@ +import pytest + +from logitech_receiver import hidpp10, hidpp10_constants + + +class FakeDevice: + kind = "fake" + online = True + registers = [hidpp10_constants.REGISTERS.three_leds] + + def request(self, *params): + return b"fake request" + + def read_register(self, register_number, *params): + return "fake register" + + +@pytest.fixture +def setup_hidpp10(): + device = FakeDevice() + hid = hidpp10.Hidpp10() + + yield device, hid + + +def test_hidpp10(setup_hidpp10): + device, hid = setup_hidpp10 + + firmwares = hid.get_firmware(device) + + assert len(firmwares) == 3 + for firmware in firmwares: + assert firmware.kind in ["Firmware", "Bootloader", "Other"] + + +def test_set_3leds(setup_hidpp10, mocker): + device, hid = setup_hidpp10 + spy_write_register = mocker.spy(hidpp10, "write_register") + + hid.set_3leds(device) + + spy_write_register.assert_called_once_with(device, hidpp10_constants.REGISTERS.three_leds, 17, 17)