diff --git a/tests/logitech_receiver/test_hidpp20_simple.py b/tests/logitech_receiver/test_hidpp20_simple.py index 40919397..e90274b7 100644 --- a/tests/logitech_receiver/test_hidpp20_simple.py +++ b/tests/logitech_receiver/test_hidpp20_simple.py @@ -1,8 +1,4 @@ from dataclasses import dataclass -from functools import partial -from typing import Any -from typing import Optional -from unittest import mock import pytest @@ -10,6 +6,8 @@ from lib.logitech_receiver import common from lib.logitech_receiver import hidpp20 from lib.logitech_receiver import hidpp20_constants +from . import hidpp + @dataclass class Dumper: @@ -23,106 +21,76 @@ def test_hexint_presenter(): assert result == "0x12" -@dataclass -class Device: - name: str = "TEST DEVICE" - - -DEVICE = Device _hidpp20 = hidpp20.Hidpp20() -@dataclass -class Response: - response: Optional[str] - device: Any - feature: int - function: int - params: Any - no_reply: bool = False - - -def feature_request(responses, device, feature, function=0x00, *params, no_reply=False): - r = responses[0] - responses.pop(0) - assert r.device == device - assert (r.feature, r.function, r.params) == (feature, function, params) - return bytes.fromhex(r.response) if r.response is not None else None - - -@pytest.fixture -def mock_feature_request(): - with mock.patch("lib.logitech_receiver.hidpp20.feature_request", return_value=None) as mock_feature_request: - yield mock_feature_request - - -def test_get_firmware(mock_feature_request): +def test_get_firmware(): responses = [ - Response("02FFFF", DEVICE, hidpp20_constants.FEATURE.DEVICE_FW_VERSION, 0x00, ()), - Response("01414243030401000101000102030405", DEVICE, hidpp20_constants.FEATURE.DEVICE_FW_VERSION, 0x10, (0,)), - Response("02414243030401000101000102030405", DEVICE, hidpp20_constants.FEATURE.DEVICE_FW_VERSION, 0x10, (1,)), + hidpp.Response("02FFFF", 0x0400), + hidpp.Response("01414243030401000101000102030405", 0x0410, "00"), + hidpp.Response("02414243030401000101000102030405", 0x0410, "01"), ] - mock_feature_request.side_effect = partial(feature_request, responses) + device = hidpp.Device(responses=responses, feature=hidpp20_constants.FEATURE.DEVICE_FW_VERSION) - result = _hidpp20.get_firmware(DEVICE) + result = _hidpp20.get_firmware(device) assert len(result) == 2 assert isinstance(result[0], common.FirmwareInfo) assert isinstance(result[1], common.FirmwareInfo) -def test_get_ids(mock_feature_request): - responses = [Response("FF12345678000D123456789ABC", DEVICE, hidpp20_constants.FEATURE.DEVICE_FW_VERSION, 0x00, ())] - mock_feature_request.side_effect = partial(feature_request, responses) +def test_get_ids(): + responses = [hidpp.Response("FF12345678000D123456789ABC", 0x0400)] + device = hidpp.Device(responses=responses, feature=hidpp20_constants.FEATURE.DEVICE_FW_VERSION) - unitId, modelId, tid_map = _hidpp20.get_ids(DEVICE) + unitId, modelId, tid_map = _hidpp20.get_ids(device) assert unitId == "12345678" assert modelId == "123456789ABC" assert tid_map == {"btid": "1234", "wpid": "5678", "usbid": "9ABC"} -def test_get_kind(mock_feature_request): - responses = [Response("00", DEVICE, hidpp20_constants.FEATURE.DEVICE_NAME, 0x20, ())] - mock_feature_request.side_effect = partial(feature_request, responses) +def test_get_kind(): + responses = [hidpp.Response("00", 0x0420)] + device = hidpp.Device(responses=responses, feature=hidpp20_constants.FEATURE.DEVICE_NAME) - result = _hidpp20.get_kind(DEVICE) + result = _hidpp20.get_kind(device) assert result == "keyboard" assert result == 1 -def test_get_name(mock_feature_request): +def test_get_name(): responses = [ - Response("12", DEVICE, hidpp20_constants.FEATURE.DEVICE_NAME, 0x00, ()), - Response("4142434445464748494A4B4C4D4E4F", DEVICE, hidpp20_constants.FEATURE.DEVICE_NAME, 0x10, (0,)), - Response("505152530000000000000000000000", DEVICE, hidpp20_constants.FEATURE.DEVICE_NAME, 0x10, (15,)), + hidpp.Response("12", 0x0400), + hidpp.Response("4142434445464748494A4B4C4D4E4F", 0x0410, "00"), + hidpp.Response("505152530000000000000000000000", 0x0410, "0F"), ] - mock_feature_request.side_effect = partial(feature_request, responses) + device = hidpp.Device(responses=responses, feature=hidpp20_constants.FEATURE.DEVICE_NAME) - result = _hidpp20.get_name(DEVICE) + result = _hidpp20.get_name(device) assert result == "ABCDEFGHIJKLMNOPQR" -def test_get_friendly_name(mock_feature_request): +def test_get_friendly_name(): responses = [ - Response("12", DEVICE, hidpp20_constants.FEATURE.DEVICE_FRIENDLY_NAME, 0x00, ()), - Response("004142434445464748494A4B4C4D4E", DEVICE, hidpp20_constants.FEATURE.DEVICE_FRIENDLY_NAME, 0x10, (0,)), - Response("0E4F50515253000000000000000000", DEVICE, hidpp20_constants.FEATURE.DEVICE_FRIENDLY_NAME, 0x10, (14,)), + hidpp.Response("12", 0x0400), + hidpp.Response("004142434445464748494A4B4C4D4E", 0x0410, "00"), + hidpp.Response("0E4F50515253000000000000000000", 0x0410, "0E"), ] - mock_feature_request.side_effect = partial(feature_request, responses) + device = hidpp.Device(responses=responses, feature=hidpp20_constants.FEATURE.DEVICE_FRIENDLY_NAME) - result = _hidpp20.get_friendly_name(DEVICE) + result = _hidpp20.get_friendly_name(device) assert result == "ABCDEFGHIJKLMNOPQR" -def test_get_battery_status(mock_feature_request): - responses = [Response("502000FFFF", DEVICE, hidpp20_constants.FEATURE.BATTERY_STATUS, 0x00, ())] - mock_feature_request.side_effect = partial(feature_request, responses) +def test_get_battery_status(): + responses = [hidpp.Response("502000FFFF", 0x0400)] + device = hidpp.Device(responses=responses, feature=hidpp20_constants.FEATURE.BATTERY_STATUS) - feature, battery = _hidpp20.get_battery_status(DEVICE) + feature, battery = _hidpp20.get_battery_status(device) assert feature == hidpp20_constants.FEATURE.BATTERY_STATUS assert battery.level == 80 @@ -130,11 +98,11 @@ def test_get_battery_status(mock_feature_request): assert battery.status == common.Battery.STATUS.discharging -def test_get_battery_voltage(mock_feature_request): - responses = [Response("1000FFFFFF", DEVICE, hidpp20_constants.FEATURE.BATTERY_VOLTAGE, 0x00, ())] - mock_feature_request.side_effect = partial(feature_request, responses) +def test_get_battery_voltage(): + responses = [hidpp.Response("1000FFFFFF", 0x0400)] + device = hidpp.Device(responses=responses, feature=hidpp20_constants.FEATURE.BATTERY_VOLTAGE) - feature, battery = _hidpp20.get_battery_voltage(DEVICE) + feature, battery = _hidpp20.get_battery_voltage(device) assert feature == hidpp20_constants.FEATURE.BATTERY_VOLTAGE assert battery.level == 90 @@ -142,22 +110,22 @@ def test_get_battery_voltage(mock_feature_request): assert battery.voltage == 0x1000 -def test_get_battery_unified(mock_feature_request): - responses = [Response("500100FFFF", DEVICE, hidpp20_constants.FEATURE.UNIFIED_BATTERY, 0x10, ())] - mock_feature_request.side_effect = partial(feature_request, responses) +def test_get_battery_unified(): + responses = [hidpp.Response("500100FFFF", 0x0410)] + device = hidpp.Device(responses=responses, feature=hidpp20_constants.FEATURE.UNIFIED_BATTERY) - feature, battery = _hidpp20.get_battery_unified(DEVICE) + feature, battery = _hidpp20.get_battery_unified(device) assert feature == hidpp20_constants.FEATURE.UNIFIED_BATTERY assert battery.level == 80 assert battery.status == common.Battery.STATUS.discharging -def test_get_adc_measurement(mock_feature_request): - responses = [Response("100003", DEVICE, hidpp20_constants.FEATURE.ADC_MEASUREMENT, 0x00, ())] - mock_feature_request.side_effect = partial(feature_request, responses) +def test_get_adc_measurement(): + responses = [hidpp.Response("100003", 0x0400)] + device = hidpp.Device(responses=responses, feature=hidpp20_constants.FEATURE.ADC_MEASUREMENT) - feature, battery = _hidpp20.get_adc_measurement(DEVICE) + feature, battery = _hidpp20.get_adc_measurement(device) assert feature == hidpp20_constants.FEATURE.ADC_MEASUREMENT assert battery.level == 90 @@ -165,11 +133,11 @@ def test_get_adc_measurement(mock_feature_request): assert battery.voltage == 0x1000 -def test_get_battery(mock_feature_request): - responses = [Response("502000FFFF", DEVICE, hidpp20_constants.FEATURE.BATTERY_STATUS, 0x00, ())] - mock_feature_request.side_effect = partial(feature_request, responses) +def test_get_battery(): + responses = [hidpp.Response("502000FFFF", 0x0400)] + device = hidpp.Device(responses=responses, feature=hidpp20_constants.FEATURE.BATTERY_STATUS) - feature, battery = _hidpp20.get_battery(DEVICE, hidpp20_constants.FEATURE.BATTERY_STATUS) + feature, battery = _hidpp20.get_battery(device, hidpp20_constants.FEATURE.BATTERY_STATUS) assert feature == hidpp20_constants.FEATURE.BATTERY_STATUS assert battery.level == 80 @@ -177,15 +145,15 @@ def test_get_battery(mock_feature_request): assert battery.status == common.Battery.STATUS.discharging -def test_get_battery_none(mock_feature_request): +def test_get_battery_none(): responses = [ - Response(None, DEVICE, hidpp20_constants.FEATURE.BATTERY_STATUS, 0x00, ()), - Response(None, DEVICE, hidpp20_constants.FEATURE.BATTERY_VOLTAGE, 0x00, ()), - Response("500100ffff", DEVICE, hidpp20_constants.FEATURE.UNIFIED_BATTERY, 0x10, ()), + hidpp.Response(None, 0x0000, f"{hidpp20_constants.FEATURE.BATTERY_STATUS:0>4X}"), + hidpp.Response(None, 0x0000, f"{hidpp20_constants.FEATURE.BATTERY_VOLTAGE:0>4X}"), + hidpp.Response("500100ffff", 0x0410), ] - mock_feature_request.side_effect = partial(feature_request, responses) + device = hidpp.Device(responses=responses, feature=hidpp20_constants.FEATURE.UNIFIED_BATTERY) - feature, battery = _hidpp20.get_battery(DEVICE, None) + feature, battery = _hidpp20.get_battery(device, None) assert feature == hidpp20_constants.FEATURE.UNIFIED_BATTERY assert battery.level == 80 @@ -199,11 +167,11 @@ def test_get_battery_none(mock_feature_request): # get_profiles is complex -def test_get_mouse_pointer_info(mock_feature_request): - responses = [Response("01000A", DEVICE, hidpp20_constants.FEATURE.MOUSE_POINTER, 0x00, ())] - mock_feature_request.side_effect = partial(feature_request, responses) +def test_get_mouse_pointer_info(): + responses = [hidpp.Response("01000A", 0x0400)] + device = hidpp.Device(responses=responses, feature=hidpp20_constants.FEATURE.MOUSE_POINTER) - result = _hidpp20.get_mouse_pointer_info(DEVICE) + result = _hidpp20.get_mouse_pointer_info(device) assert result == { "dpi": 0x100, @@ -213,52 +181,52 @@ def test_get_mouse_pointer_info(mock_feature_request): } -def test_get_vertical_scrolling_info(mock_feature_request): - responses = [Response("01080C", DEVICE, hidpp20_constants.FEATURE.VERTICAL_SCROLLING, 0x00, ())] - mock_feature_request.side_effect = partial(feature_request, responses) +def test_get_vertical_scrolling_info(): + responses = [hidpp.Response("01080C", 0x0400)] + device = hidpp.Device(responses=responses, feature=hidpp20_constants.FEATURE.VERTICAL_SCROLLING) - result = _hidpp20.get_vertical_scrolling_info(DEVICE) + result = _hidpp20.get_vertical_scrolling_info(device) assert result == {"roller": "standard", "ratchet": 8, "lines": 12} -def test_get_hi_res_scrolling_info(mock_feature_request): - responses = [Response("0102", DEVICE, hidpp20_constants.FEATURE.HI_RES_SCROLLING, 0x00, ())] - mock_feature_request.side_effect = partial(feature_request, responses) +def test_get_hi_res_scrolling_info(): + responses = [hidpp.Response("0102", 0x0400)] + device = hidpp.Device(responses=responses, feature=hidpp20_constants.FEATURE.HI_RES_SCROLLING) - mode, resolution = _hidpp20.get_hi_res_scrolling_info(DEVICE) + mode, resolution = _hidpp20.get_hi_res_scrolling_info(device) assert mode == 1 assert resolution == 2 -def test_get_pointer_speed_info(mock_feature_request): - responses = [Response("0102", DEVICE, hidpp20_constants.FEATURE.POINTER_SPEED, 0x00, ())] - mock_feature_request.side_effect = partial(feature_request, responses) +def test_get_pointer_speed_info(): + responses = [hidpp.Response("0102", 0x0400)] + device = hidpp.Device(responses=responses, feature=hidpp20_constants.FEATURE.POINTER_SPEED) - result = _hidpp20.get_pointer_speed_info(DEVICE) + result = _hidpp20.get_pointer_speed_info(device) assert result == 0x0102 / 256 -def test_get_lowres_wheel_status(mock_feature_request): - responses = [Response("01", DEVICE, hidpp20_constants.FEATURE.LOWRES_WHEEL, 0x00, ())] - mock_feature_request.side_effect = partial(feature_request, responses) +def test_get_lowres_wheel_status(): + responses = [hidpp.Response("01", 0x0400)] + device = hidpp.Device(responses=responses, feature=hidpp20_constants.FEATURE.LOWRES_WHEEL) - result = _hidpp20.get_lowres_wheel_status(DEVICE) + result = _hidpp20.get_lowres_wheel_status(device) assert result == "HID++" -def test_get_hires_wheel(mock_feature_request): +def test_get_hires_wheel(): responses = [ - Response("010C", DEVICE, hidpp20_constants.FEATURE.HIRES_WHEEL, 0x00, ()), - Response("05FF", DEVICE, hidpp20_constants.FEATURE.HIRES_WHEEL, 0x10, ()), - Response("03FF", DEVICE, hidpp20_constants.FEATURE.HIRES_WHEEL, 0x30, ()), + hidpp.Response("010C", 0x0400), + hidpp.Response("05FF", 0x0410), + hidpp.Response("03FF", 0x0430), ] - mock_feature_request.side_effect = partial(feature_request, responses) + device = hidpp.Device(responses=responses, feature=hidpp20_constants.FEATURE.HIRES_WHEEL) - multi, has_invert, has_ratchet, inv, res, target, ratchet = _hidpp20.get_hires_wheel(DEVICE) + multi, has_invert, has_ratchet, inv, res, target, ratchet = _hidpp20.get_hires_wheel(device) assert multi == 1 assert has_invert is True @@ -269,145 +237,137 @@ def test_get_hires_wheel(mock_feature_request): assert ratchet is True -def test_get_new_fn_inversion(mock_feature_request): - responses = [Response("0300", DEVICE, hidpp20_constants.FEATURE.NEW_FN_INVERSION, 0x00, ())] - mock_feature_request.side_effect = partial(feature_request, responses) +def test_get_new_fn_inversion(): + responses = [hidpp.Response("0300", 0x0400)] + device = hidpp.Device(responses=responses, feature=hidpp20_constants.FEATURE.NEW_FN_INVERSION) - result = _hidpp20.get_new_fn_inversion(DEVICE) + result = _hidpp20.get_new_fn_inversion(device) assert result == (True, False) - assert mock_feature_request.call_count == 1 - assert len(responses) == 0 @pytest.fixture def mock_gethostname(mocker): - mocker.patch("socket.gethostname", return_value="getafix.foo.org") + mocker.patch("socket.gethostname", return_value="ABCDEFG.foo.org") @pytest.mark.parametrize( "responses, expected_result", [ - ([Response(None, DEVICE, hidpp20.FEATURE.HOSTS_INFO, 0x00, ())], {}), - ([Response("02000000", DEVICE, hidpp20.FEATURE.HOSTS_INFO, 0x00, ())], {}), + ([hidpp.Response(None, 0x0400)], {}), + ([hidpp.Response("02000000", 0x0400)], {}), ( [ - Response("03000200", DEVICE, hidpp20.FEATURE.HOSTS_INFO, 0x00, ()), - Response("FF01FFFF05FFFF", DEVICE, hidpp20.FEATURE.HOSTS_INFO, 0x10, (0x00,)), - Response("0000414243444500FFFFFFFFFF", DEVICE, hidpp20.FEATURE.HOSTS_INFO, 0x30, (0x00, 0x00)), - Response("FF01FFFF10FFFF", DEVICE, hidpp20.FEATURE.HOSTS_INFO, 0x10, (0x01,)), - Response("01004142434445464748494A4B4C4D", DEVICE, hidpp20.FEATURE.HOSTS_INFO, 0x30, (0x01, 0)), - Response("01134E4F5000FFFFFFFFFFFFFFFFFF", DEVICE, hidpp20.FEATURE.HOSTS_INFO, 0x30, (0x01, 14)), - Response("03000200", DEVICE, hidpp20.FEATURE.HOSTS_INFO, 0x00, ()), - Response("000000000008", DEVICE, hidpp20.FEATURE.HOSTS_INFO, 0x10, (0x0,)), - Response("0208", DEVICE, hidpp20.FEATURE.HOSTS_INFO, 0x40, (0x0, 0x0, bytearray("getafix", "utf-8"))), + hidpp.Response("03000200", 0x0400), + hidpp.Response("FF01FFFF05FFFF", 0x0410, "00"), + hidpp.Response("0000414243444500FFFFFFFFFF", 0x0430, "0000"), + hidpp.Response("FF01FFFF10FFFF", 0x0410, "01"), + hidpp.Response("01004142434445464748494A4B4C4D", 0x0430, "0100"), + hidpp.Response("01134E4F5000FFFFFFFFFFFFFFFFFF", 0x0430, "010E"), + hidpp.Response("000000000008", 0x0410, "00"), + hidpp.Response("0208", 0x0440, "000041424344454647"), ], - {0: (True, "getafix"), 1: (True, "ABCDEFGHIJKLMNO")}, + {0: (True, "ABCDEFG"), 1: (True, "ABCDEFGHIJKLMNO")}, ), ], ) -def test_get_host_names(responses, expected_result, mock_feature_request, mock_gethostname): - mock_feature_request.side_effect = partial(feature_request, responses) +def test_get_host_names(responses, expected_result, mock_gethostname): + device = hidpp.Device(responses=responses, feature=hidpp20_constants.FEATURE.HOSTS_INFO) - result = _hidpp20.get_host_names(DEVICE) + result = _hidpp20.get_host_names(device) assert result == expected_result - assert len(responses) == 0 @pytest.mark.parametrize( "responses, expected_result", [ - ([Response(None, DEVICE, hidpp20.FEATURE.HOSTS_INFO, 0x00, ())], None), + ([hidpp.Response(None, 0x0400)], None), ( [ - Response("03000002", DEVICE, hidpp20.FEATURE.HOSTS_INFO, 0x00, ()), - Response("000000000008", DEVICE, hidpp20.FEATURE.HOSTS_INFO, 0x10, (0x2,)), - Response("0208", DEVICE, hidpp20.FEATURE.HOSTS_INFO, 0x40, (0x2, 0x0, bytearray("THIS IS A LONG", "utf-8"))), + hidpp.Response("03000002", 0x0400), + hidpp.Response("000000000008", 0x0410, "02"), + hidpp.Response("020E", 0x0440, "02004142434445464748494A4B4C4D4E"), ], True, ), ( [ - Response("03000002", DEVICE, hidpp20.FEATURE.HOSTS_INFO, 0x00, ()), - Response("000000000014", DEVICE, hidpp20.FEATURE.HOSTS_INFO, 0x10, (0x2,)), - Response("020E", DEVICE, hidpp20.FEATURE.HOSTS_INFO, 0x40, (0x2, 0, bytearray("THIS IS A LONG", "utf-8"))), - Response("0214", DEVICE, hidpp20.FEATURE.HOSTS_INFO, 0x40, (0x2, 14, bytearray(" HOST NAME", "utf-8"))), + hidpp.Response("03000002", 0x0400), + hidpp.Response("000000000014", 0x0410, "02"), + hidpp.Response("020E", 0x0440, "02004142434445464748494A4B4C4D4E"), + hidpp.Response("0214", 0x0440, "020E4F505152535455565758"), ], True, ), ], ) -def test_set_host_name(responses, expected_result, mock_feature_request): - mock_feature_request.side_effect = partial(feature_request, responses) +def test_set_host_name(responses, expected_result): + device = hidpp.Device(responses=responses, feature=hidpp20_constants.FEATURE.HOSTS_INFO) - result = _hidpp20.set_host_name(DEVICE, "THIS IS A LONG HOST NAME") + result = _hidpp20.set_host_name(device, "ABCDEFGHIJKLMNOPQRSTUVWX") assert result == expected_result - assert len(responses) == 0 -def test_get_onboard_mode(mock_feature_request): - responses = [Response("03FFFFFFFF", DEVICE, hidpp20_constants.FEATURE.ONBOARD_PROFILES, 0x20, ())] - mock_feature_request.side_effect = partial(feature_request, responses) +def test_get_onboard_mode(): + responses = [hidpp.Response("03FFFFFFFF", 0x0420)] + device = hidpp.Device(responses=responses, feature=hidpp20_constants.FEATURE.ONBOARD_PROFILES) - result = _hidpp20.get_onboard_mode(DEVICE) + result = _hidpp20.get_onboard_mode(device) assert result == 0x3 - assert mock_feature_request.call_count == 1 - assert mock_feature_request.call_args[0] == (DEVICE, hidpp20_constants.FEATURE.ONBOARD_PROFILES, 0x20) -def test_set_onboard_mode(mock_feature_request): - responses = [Response("03FFFFFFFF", DEVICE, hidpp20_constants.FEATURE.ONBOARD_PROFILES, 0x10, (0x3,))] - mock_feature_request.side_effect = partial(feature_request, responses) +def test_set_onboard_mode(): + responses = [hidpp.Response("03FFFFFFFF", 0x0410, "03")] + device = hidpp.Device(responses=responses, feature=hidpp20_constants.FEATURE.ONBOARD_PROFILES) - res = _hidpp20.set_onboard_mode(DEVICE, 0x3) + res = _hidpp20.set_onboard_mode(device, 0x3) - assert mock_feature_request.call_count == 1 assert res is not None @pytest.mark.parametrize( "responses, expected_result", [ - ([Response("03FFFF", DEVICE, hidpp20.FEATURE.REPORT_RATE, 0x10, ())], "3ms"), + ([hidpp.Response("03FFFF", 0x0420)], "1ms"), ( [ - Response(None, DEVICE, hidpp20.FEATURE.REPORT_RATE, 0x10, ()), - Response("04FFFF", DEVICE, hidpp20.FEATURE.EXTENDED_ADJUSTABLE_REPORT_RATE, 0x20, ()), + hidpp.Response(None, 0x0000, f"{hidpp20_constants.FEATURE.REPORT_RATE:0>4X}"), + hidpp.Response("04FFFF", 0x0420), ], "500us", ), ], ) -def test_get_polling_rate(responses, expected_result, mock_feature_request): - mock_feature_request.side_effect = partial(feature_request, responses) +def test_get_polling_rate( + responses, + expected_result, +): + device = hidpp.Device(responses=responses, feature=hidpp20_constants.FEATURE.EXTENDED_ADJUSTABLE_REPORT_RATE) - result = _hidpp20.get_polling_rate(DEVICE) + result = _hidpp20.get_polling_rate(device) assert result == expected_result - assert len(responses) == 0 -def test_get_remaining_pairing(mock_feature_request): - responses = [Response("03FFFF", None, hidpp20.FEATURE.REMAINING_PAIRING, 0x0, ())] - mock_feature_request.side_effect = partial(feature_request, responses) +def test_get_remaining_pairing(): + responses = [hidpp.Response("03FFFF", 0x0400)] + device = hidpp.Device(responses=responses, feature=hidpp20_constants.FEATURE.REMAINING_PAIRING) - result = _hidpp20.get_remaining_pairing(None) + result = _hidpp20.get_remaining_pairing(device) assert result == 0x03 - assert len(responses) == 0 -def test_config_change(mock_feature_request): - responses = [Response("03FFFF", None, hidpp20.FEATURE.CONFIG_CHANGE, 0x10, (0x2,))] - mock_feature_request.side_effect = partial(feature_request, responses) +def test_config_change(): + responses = [hidpp.Response("03FFFF", 0x0410, "02")] + device = hidpp.Device(responses=responses, feature=hidpp20_constants.FEATURE.CONFIG_CHANGE) - result = _hidpp20.config_change(None, 0x2) + result = _hidpp20.config_change(device, 0x2) assert result == bytes.fromhex("03FFFF") - assert len(responses) == 0 def test_decipher_battery_status():