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}"
 |