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
This commit is contained in:
Matthias Hagmann 2024-03-03 23:34:55 +01:00 committed by Peter F. Patel-Schneider
parent c23c6b7124
commit 7ec3eddccc
2 changed files with 44 additions and 17 deletions

View File

@ -405,7 +405,7 @@ class Ex100Receiver(Receiver):
assert notification.address == 0x02 assert notification.address == 0x02
online = True online = True
encrypted = bool(notification.data[0] & 0x80) 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() wpid = "00" + notification.data[2:3].hex().upper()
return online, encrypted, wpid, kind return online, encrypted, wpid, kind
@ -414,10 +414,11 @@ class Ex100Receiver(Receiver):
if not wpid: if not wpid:
logger.error("Unable to get wpid from udev for device %d of %s", number, self) 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") 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)"} return {"wpid": wpid, "kind": kind, "polling": "", "serial": None, "power_switch": "(unknown)"}
def get_kind_from_index(self, index):
def _get_kind_from_index(receiver, index):
"""Get device kind from 27Mhz device index""" """Get device kind from 27Mhz device index"""
# From drivers/hid/hid-logitech-dj.c # From drivers/hid/hid-logitech-dj.c
if index == 1: # mouse if index == 1: # mouse
@ -429,8 +430,8 @@ class Ex100Receiver(Receiver):
elif index == 4: # numpad elif index == 4: # numpad
kind = 3 kind = 3
else: # unknown device number on 27Mhz receiver else: # unknown device number on 27Mhz receiver
logger.error("failed to calculate device kind for device %d of %s", index, self) logger.error("failed to calculate device kind for device %d of %s", index, receiver)
raise exceptions.NoSuchDevice(number=index, receiver=self, error="Unknown 27Mhz device number") raise exceptions.NoSuchDevice(number=index, receiver=receiver, error="Unknown 27Mhz device number")
return kind return kind

View File

@ -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)