54 lines
1.9 KiB
Python
54 lines
1.9 KiB
Python
from unittest import mock
|
|
|
|
from logitech_receiver.hidpp10_constants import ErrorCode
|
|
from logitech_receiver.hidpp10_constants import Registers
|
|
from solaar.cli.probe import run
|
|
|
|
|
|
# Mock receiver class
|
|
class MockReceiver:
|
|
handle = 1
|
|
isDevice = False
|
|
|
|
def read_register(self, register, *args):
|
|
return 0 if register == Registers.RECEIVER_INFO else b"\x01\x03"
|
|
|
|
|
|
def test_run_register_errors():
|
|
mock_args = mock.Mock()
|
|
mock_args.receiver = False
|
|
|
|
mock_receiver = MockReceiver()
|
|
|
|
# Define expected addresses to be called in order
|
|
expected_addresses = []
|
|
|
|
for reg in range(0, 0xFF):
|
|
expected_addresses.append((0x8100 | reg, 0)) # First short call, returns invalid_value (continue)
|
|
expected_addresses.append((0x8100 | reg, 1)) # Second short call, returns invalid_address (stop here)
|
|
|
|
expected_addresses.append((0x8100 | (0x200 + reg), 0)) # First long call, returns invalid_value (continue)
|
|
expected_addresses.append((0x8100 | (0x200 + reg), 1)) # Second long call, returns invalid_address (stop here)
|
|
|
|
# To record the actual addresses called
|
|
called_addresses = []
|
|
|
|
def mock_base_request(handle, devnumber, reg, sub, return_error=False):
|
|
called_addresses.append((reg, sub))
|
|
if sub == 0:
|
|
return ErrorCode.INVALID_VALUE
|
|
elif sub == 1:
|
|
return ErrorCode.INVALID_ADDRESS
|
|
return b"\x01\x02"
|
|
|
|
with mock.patch("logitech_receiver.base.request", side_effect=mock_base_request), mock.patch(
|
|
"solaar.cli.probe._print_receiver", return_value=None
|
|
):
|
|
# Call the run function with mocked receivers and args (passing real find_receiver function)
|
|
run([mock_receiver], mock_args, None, None)
|
|
|
|
# Evaluate that the addresses called match the expected addresses
|
|
assert (
|
|
called_addresses == expected_addresses
|
|
), f"Called addresses {called_addresses} do not match expected {expected_addresses}"
|