tests: use new test methods in test_hidpp20_simple
This commit is contained in:
parent
5e351399f5
commit
88ac4c9f89
|
@ -1,8 +1,4 @@
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from functools import partial
|
|
||||||
from typing import Any
|
|
||||||
from typing import Optional
|
|
||||||
from unittest import mock
|
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
|
@ -10,6 +6,8 @@ from lib.logitech_receiver import common
|
||||||
from lib.logitech_receiver import hidpp20
|
from lib.logitech_receiver import hidpp20
|
||||||
from lib.logitech_receiver import hidpp20_constants
|
from lib.logitech_receiver import hidpp20_constants
|
||||||
|
|
||||||
|
from . import hidpp
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class Dumper:
|
class Dumper:
|
||||||
|
@ -23,106 +21,76 @@ def test_hexint_presenter():
|
||||||
assert result == "0x12"
|
assert result == "0x12"
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
|
||||||
class Device:
|
|
||||||
name: str = "TEST DEVICE"
|
|
||||||
|
|
||||||
|
|
||||||
DEVICE = Device
|
|
||||||
_hidpp20 = hidpp20.Hidpp20()
|
_hidpp20 = hidpp20.Hidpp20()
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
def test_get_firmware():
|
||||||
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):
|
|
||||||
responses = [
|
responses = [
|
||||||
Response("02FFFF", DEVICE, hidpp20_constants.FEATURE.DEVICE_FW_VERSION, 0x00, ()),
|
hidpp.Response("02FFFF", 0x0400),
|
||||||
Response("01414243030401000101000102030405", DEVICE, hidpp20_constants.FEATURE.DEVICE_FW_VERSION, 0x10, (0,)),
|
hidpp.Response("01414243030401000101000102030405", 0x0410, "00"),
|
||||||
Response("02414243030401000101000102030405", DEVICE, hidpp20_constants.FEATURE.DEVICE_FW_VERSION, 0x10, (1,)),
|
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 len(result) == 2
|
||||||
assert isinstance(result[0], common.FirmwareInfo)
|
assert isinstance(result[0], common.FirmwareInfo)
|
||||||
assert isinstance(result[1], common.FirmwareInfo)
|
assert isinstance(result[1], common.FirmwareInfo)
|
||||||
|
|
||||||
|
|
||||||
def test_get_ids(mock_feature_request):
|
def test_get_ids():
|
||||||
responses = [Response("FF12345678000D123456789ABC", DEVICE, hidpp20_constants.FEATURE.DEVICE_FW_VERSION, 0x00, ())]
|
responses = [hidpp.Response("FF12345678000D123456789ABC", 0x0400)]
|
||||||
mock_feature_request.side_effect = partial(feature_request, responses)
|
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 unitId == "12345678"
|
||||||
assert modelId == "123456789ABC"
|
assert modelId == "123456789ABC"
|
||||||
assert tid_map == {"btid": "1234", "wpid": "5678", "usbid": "9ABC"}
|
assert tid_map == {"btid": "1234", "wpid": "5678", "usbid": "9ABC"}
|
||||||
|
|
||||||
|
|
||||||
def test_get_kind(mock_feature_request):
|
def test_get_kind():
|
||||||
responses = [Response("00", DEVICE, hidpp20_constants.FEATURE.DEVICE_NAME, 0x20, ())]
|
responses = [hidpp.Response("00", 0x0420)]
|
||||||
mock_feature_request.side_effect = partial(feature_request, responses)
|
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 == "keyboard"
|
||||||
assert result == 1
|
assert result == 1
|
||||||
|
|
||||||
|
|
||||||
def test_get_name(mock_feature_request):
|
def test_get_name():
|
||||||
responses = [
|
responses = [
|
||||||
Response("12", DEVICE, hidpp20_constants.FEATURE.DEVICE_NAME, 0x00, ()),
|
hidpp.Response("12", 0x0400),
|
||||||
Response("4142434445464748494A4B4C4D4E4F", DEVICE, hidpp20_constants.FEATURE.DEVICE_NAME, 0x10, (0,)),
|
hidpp.Response("4142434445464748494A4B4C4D4E4F", 0x0410, "00"),
|
||||||
Response("505152530000000000000000000000", DEVICE, hidpp20_constants.FEATURE.DEVICE_NAME, 0x10, (15,)),
|
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"
|
assert result == "ABCDEFGHIJKLMNOPQR"
|
||||||
|
|
||||||
|
|
||||||
def test_get_friendly_name(mock_feature_request):
|
def test_get_friendly_name():
|
||||||
responses = [
|
responses = [
|
||||||
Response("12", DEVICE, hidpp20_constants.FEATURE.DEVICE_FRIENDLY_NAME, 0x00, ()),
|
hidpp.Response("12", 0x0400),
|
||||||
Response("004142434445464748494A4B4C4D4E", DEVICE, hidpp20_constants.FEATURE.DEVICE_FRIENDLY_NAME, 0x10, (0,)),
|
hidpp.Response("004142434445464748494A4B4C4D4E", 0x0410, "00"),
|
||||||
Response("0E4F50515253000000000000000000", DEVICE, hidpp20_constants.FEATURE.DEVICE_FRIENDLY_NAME, 0x10, (14,)),
|
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"
|
assert result == "ABCDEFGHIJKLMNOPQR"
|
||||||
|
|
||||||
|
|
||||||
def test_get_battery_status(mock_feature_request):
|
def test_get_battery_status():
|
||||||
responses = [Response("502000FFFF", DEVICE, hidpp20_constants.FEATURE.BATTERY_STATUS, 0x00, ())]
|
responses = [hidpp.Response("502000FFFF", 0x0400)]
|
||||||
mock_feature_request.side_effect = partial(feature_request, responses)
|
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 feature == hidpp20_constants.FEATURE.BATTERY_STATUS
|
||||||
assert battery.level == 80
|
assert battery.level == 80
|
||||||
|
@ -130,11 +98,11 @@ def test_get_battery_status(mock_feature_request):
|
||||||
assert battery.status == common.Battery.STATUS.discharging
|
assert battery.status == common.Battery.STATUS.discharging
|
||||||
|
|
||||||
|
|
||||||
def test_get_battery_voltage(mock_feature_request):
|
def test_get_battery_voltage():
|
||||||
responses = [Response("1000FFFFFF", DEVICE, hidpp20_constants.FEATURE.BATTERY_VOLTAGE, 0x00, ())]
|
responses = [hidpp.Response("1000FFFFFF", 0x0400)]
|
||||||
mock_feature_request.side_effect = partial(feature_request, responses)
|
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 feature == hidpp20_constants.FEATURE.BATTERY_VOLTAGE
|
||||||
assert battery.level == 90
|
assert battery.level == 90
|
||||||
|
@ -142,22 +110,22 @@ def test_get_battery_voltage(mock_feature_request):
|
||||||
assert battery.voltage == 0x1000
|
assert battery.voltage == 0x1000
|
||||||
|
|
||||||
|
|
||||||
def test_get_battery_unified(mock_feature_request):
|
def test_get_battery_unified():
|
||||||
responses = [Response("500100FFFF", DEVICE, hidpp20_constants.FEATURE.UNIFIED_BATTERY, 0x10, ())]
|
responses = [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_unified(DEVICE)
|
feature, battery = _hidpp20.get_battery_unified(device)
|
||||||
|
|
||||||
assert feature == hidpp20_constants.FEATURE.UNIFIED_BATTERY
|
assert feature == hidpp20_constants.FEATURE.UNIFIED_BATTERY
|
||||||
assert battery.level == 80
|
assert battery.level == 80
|
||||||
assert battery.status == common.Battery.STATUS.discharging
|
assert battery.status == common.Battery.STATUS.discharging
|
||||||
|
|
||||||
|
|
||||||
def test_get_adc_measurement(mock_feature_request):
|
def test_get_adc_measurement():
|
||||||
responses = [Response("100003", DEVICE, hidpp20_constants.FEATURE.ADC_MEASUREMENT, 0x00, ())]
|
responses = [hidpp.Response("100003", 0x0400)]
|
||||||
mock_feature_request.side_effect = partial(feature_request, responses)
|
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 feature == hidpp20_constants.FEATURE.ADC_MEASUREMENT
|
||||||
assert battery.level == 90
|
assert battery.level == 90
|
||||||
|
@ -165,11 +133,11 @@ def test_get_adc_measurement(mock_feature_request):
|
||||||
assert battery.voltage == 0x1000
|
assert battery.voltage == 0x1000
|
||||||
|
|
||||||
|
|
||||||
def test_get_battery(mock_feature_request):
|
def test_get_battery():
|
||||||
responses = [Response("502000FFFF", DEVICE, hidpp20_constants.FEATURE.BATTERY_STATUS, 0x00, ())]
|
responses = [hidpp.Response("502000FFFF", 0x0400)]
|
||||||
mock_feature_request.side_effect = partial(feature_request, responses)
|
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 feature == hidpp20_constants.FEATURE.BATTERY_STATUS
|
||||||
assert battery.level == 80
|
assert battery.level == 80
|
||||||
|
@ -177,15 +145,15 @@ def test_get_battery(mock_feature_request):
|
||||||
assert battery.status == common.Battery.STATUS.discharging
|
assert battery.status == common.Battery.STATUS.discharging
|
||||||
|
|
||||||
|
|
||||||
def test_get_battery_none(mock_feature_request):
|
def test_get_battery_none():
|
||||||
responses = [
|
responses = [
|
||||||
Response(None, DEVICE, hidpp20_constants.FEATURE.BATTERY_STATUS, 0x00, ()),
|
hidpp.Response(None, 0x0000, f"{hidpp20_constants.FEATURE.BATTERY_STATUS:0>4X}"),
|
||||||
Response(None, DEVICE, hidpp20_constants.FEATURE.BATTERY_VOLTAGE, 0x00, ()),
|
hidpp.Response(None, 0x0000, f"{hidpp20_constants.FEATURE.BATTERY_VOLTAGE:0>4X}"),
|
||||||
Response("500100ffff", DEVICE, hidpp20_constants.FEATURE.UNIFIED_BATTERY, 0x10, ()),
|
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 feature == hidpp20_constants.FEATURE.UNIFIED_BATTERY
|
||||||
assert battery.level == 80
|
assert battery.level == 80
|
||||||
|
@ -199,11 +167,11 @@ def test_get_battery_none(mock_feature_request):
|
||||||
# get_profiles is complex
|
# get_profiles is complex
|
||||||
|
|
||||||
|
|
||||||
def test_get_mouse_pointer_info(mock_feature_request):
|
def test_get_mouse_pointer_info():
|
||||||
responses = [Response("01000A", DEVICE, hidpp20_constants.FEATURE.MOUSE_POINTER, 0x00, ())]
|
responses = [hidpp.Response("01000A", 0x0400)]
|
||||||
mock_feature_request.side_effect = partial(feature_request, responses)
|
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 == {
|
assert result == {
|
||||||
"dpi": 0x100,
|
"dpi": 0x100,
|
||||||
|
@ -213,52 +181,52 @@ def test_get_mouse_pointer_info(mock_feature_request):
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
def test_get_vertical_scrolling_info(mock_feature_request):
|
def test_get_vertical_scrolling_info():
|
||||||
responses = [Response("01080C", DEVICE, hidpp20_constants.FEATURE.VERTICAL_SCROLLING, 0x00, ())]
|
responses = [hidpp.Response("01080C", 0x0400)]
|
||||||
mock_feature_request.side_effect = partial(feature_request, responses)
|
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}
|
assert result == {"roller": "standard", "ratchet": 8, "lines": 12}
|
||||||
|
|
||||||
|
|
||||||
def test_get_hi_res_scrolling_info(mock_feature_request):
|
def test_get_hi_res_scrolling_info():
|
||||||
responses = [Response("0102", DEVICE, hidpp20_constants.FEATURE.HI_RES_SCROLLING, 0x00, ())]
|
responses = [hidpp.Response("0102", 0x0400)]
|
||||||
mock_feature_request.side_effect = partial(feature_request, responses)
|
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 mode == 1
|
||||||
assert resolution == 2
|
assert resolution == 2
|
||||||
|
|
||||||
|
|
||||||
def test_get_pointer_speed_info(mock_feature_request):
|
def test_get_pointer_speed_info():
|
||||||
responses = [Response("0102", DEVICE, hidpp20_constants.FEATURE.POINTER_SPEED, 0x00, ())]
|
responses = [hidpp.Response("0102", 0x0400)]
|
||||||
mock_feature_request.side_effect = partial(feature_request, responses)
|
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
|
assert result == 0x0102 / 256
|
||||||
|
|
||||||
|
|
||||||
def test_get_lowres_wheel_status(mock_feature_request):
|
def test_get_lowres_wheel_status():
|
||||||
responses = [Response("01", DEVICE, hidpp20_constants.FEATURE.LOWRES_WHEEL, 0x00, ())]
|
responses = [hidpp.Response("01", 0x0400)]
|
||||||
mock_feature_request.side_effect = partial(feature_request, responses)
|
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++"
|
assert result == "HID++"
|
||||||
|
|
||||||
|
|
||||||
def test_get_hires_wheel(mock_feature_request):
|
def test_get_hires_wheel():
|
||||||
responses = [
|
responses = [
|
||||||
Response("010C", DEVICE, hidpp20_constants.FEATURE.HIRES_WHEEL, 0x00, ()),
|
hidpp.Response("010C", 0x0400),
|
||||||
Response("05FF", DEVICE, hidpp20_constants.FEATURE.HIRES_WHEEL, 0x10, ()),
|
hidpp.Response("05FF", 0x0410),
|
||||||
Response("03FF", DEVICE, hidpp20_constants.FEATURE.HIRES_WHEEL, 0x30, ()),
|
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 multi == 1
|
||||||
assert has_invert is True
|
assert has_invert is True
|
||||||
|
@ -269,145 +237,137 @@ def test_get_hires_wheel(mock_feature_request):
|
||||||
assert ratchet is True
|
assert ratchet is True
|
||||||
|
|
||||||
|
|
||||||
def test_get_new_fn_inversion(mock_feature_request):
|
def test_get_new_fn_inversion():
|
||||||
responses = [Response("0300", DEVICE, hidpp20_constants.FEATURE.NEW_FN_INVERSION, 0x00, ())]
|
responses = [hidpp.Response("0300", 0x0400)]
|
||||||
mock_feature_request.side_effect = partial(feature_request, responses)
|
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 result == (True, False)
|
||||||
assert mock_feature_request.call_count == 1
|
|
||||||
assert len(responses) == 0
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def mock_gethostname(mocker):
|
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(
|
@pytest.mark.parametrize(
|
||||||
"responses, expected_result",
|
"responses, expected_result",
|
||||||
[
|
[
|
||||||
([Response(None, DEVICE, hidpp20.FEATURE.HOSTS_INFO, 0x00, ())], {}),
|
([hidpp.Response(None, 0x0400)], {}),
|
||||||
([Response("02000000", DEVICE, hidpp20.FEATURE.HOSTS_INFO, 0x00, ())], {}),
|
([hidpp.Response("02000000", 0x0400)], {}),
|
||||||
(
|
(
|
||||||
[
|
[
|
||||||
Response("03000200", DEVICE, hidpp20.FEATURE.HOSTS_INFO, 0x00, ()),
|
hidpp.Response("03000200", 0x0400),
|
||||||
Response("FF01FFFF05FFFF", DEVICE, hidpp20.FEATURE.HOSTS_INFO, 0x10, (0x00,)),
|
hidpp.Response("FF01FFFF05FFFF", 0x0410, "00"),
|
||||||
Response("0000414243444500FFFFFFFFFF", DEVICE, hidpp20.FEATURE.HOSTS_INFO, 0x30, (0x00, 0x00)),
|
hidpp.Response("0000414243444500FFFFFFFFFF", 0x0430, "0000"),
|
||||||
Response("FF01FFFF10FFFF", DEVICE, hidpp20.FEATURE.HOSTS_INFO, 0x10, (0x01,)),
|
hidpp.Response("FF01FFFF10FFFF", 0x0410, "01"),
|
||||||
Response("01004142434445464748494A4B4C4D", DEVICE, hidpp20.FEATURE.HOSTS_INFO, 0x30, (0x01, 0)),
|
hidpp.Response("01004142434445464748494A4B4C4D", 0x0430, "0100"),
|
||||||
Response("01134E4F5000FFFFFFFFFFFFFFFFFF", DEVICE, hidpp20.FEATURE.HOSTS_INFO, 0x30, (0x01, 14)),
|
hidpp.Response("01134E4F5000FFFFFFFFFFFFFFFFFF", 0x0430, "010E"),
|
||||||
Response("03000200", DEVICE, hidpp20.FEATURE.HOSTS_INFO, 0x00, ()),
|
hidpp.Response("000000000008", 0x0410, "00"),
|
||||||
Response("000000000008", DEVICE, hidpp20.FEATURE.HOSTS_INFO, 0x10, (0x0,)),
|
hidpp.Response("0208", 0x0440, "000041424344454647"),
|
||||||
Response("0208", DEVICE, hidpp20.FEATURE.HOSTS_INFO, 0x40, (0x0, 0x0, bytearray("getafix", "utf-8"))),
|
|
||||||
],
|
],
|
||||||
{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):
|
def test_get_host_names(responses, expected_result, mock_gethostname):
|
||||||
mock_feature_request.side_effect = partial(feature_request, responses)
|
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 result == expected_result
|
||||||
assert len(responses) == 0
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
"responses, expected_result",
|
"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, ()),
|
hidpp.Response("03000002", 0x0400),
|
||||||
Response("000000000008", DEVICE, hidpp20.FEATURE.HOSTS_INFO, 0x10, (0x2,)),
|
hidpp.Response("000000000008", 0x0410, "02"),
|
||||||
Response("0208", DEVICE, hidpp20.FEATURE.HOSTS_INFO, 0x40, (0x2, 0x0, bytearray("THIS IS A LONG", "utf-8"))),
|
hidpp.Response("020E", 0x0440, "02004142434445464748494A4B4C4D4E"),
|
||||||
],
|
],
|
||||||
True,
|
True,
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
[
|
[
|
||||||
Response("03000002", DEVICE, hidpp20.FEATURE.HOSTS_INFO, 0x00, ()),
|
hidpp.Response("03000002", 0x0400),
|
||||||
Response("000000000014", DEVICE, hidpp20.FEATURE.HOSTS_INFO, 0x10, (0x2,)),
|
hidpp.Response("000000000014", 0x0410, "02"),
|
||||||
Response("020E", DEVICE, hidpp20.FEATURE.HOSTS_INFO, 0x40, (0x2, 0, bytearray("THIS IS A LONG", "utf-8"))),
|
hidpp.Response("020E", 0x0440, "02004142434445464748494A4B4C4D4E"),
|
||||||
Response("0214", DEVICE, hidpp20.FEATURE.HOSTS_INFO, 0x40, (0x2, 14, bytearray(" HOST NAME", "utf-8"))),
|
hidpp.Response("0214", 0x0440, "020E4F505152535455565758"),
|
||||||
],
|
],
|
||||||
True,
|
True,
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
def test_set_host_name(responses, expected_result, mock_feature_request):
|
def test_set_host_name(responses, expected_result):
|
||||||
mock_feature_request.side_effect = partial(feature_request, responses)
|
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 result == expected_result
|
||||||
assert len(responses) == 0
|
|
||||||
|
|
||||||
|
|
||||||
def test_get_onboard_mode(mock_feature_request):
|
def test_get_onboard_mode():
|
||||||
responses = [Response("03FFFFFFFF", DEVICE, hidpp20_constants.FEATURE.ONBOARD_PROFILES, 0x20, ())]
|
responses = [hidpp.Response("03FFFFFFFF", 0x0420)]
|
||||||
mock_feature_request.side_effect = partial(feature_request, responses)
|
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 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):
|
def test_set_onboard_mode():
|
||||||
responses = [Response("03FFFFFFFF", DEVICE, hidpp20_constants.FEATURE.ONBOARD_PROFILES, 0x10, (0x3,))]
|
responses = [hidpp.Response("03FFFFFFFF", 0x0410, "03")]
|
||||||
mock_feature_request.side_effect = partial(feature_request, responses)
|
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
|
assert res is not None
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
"responses, expected_result",
|
"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, ()),
|
hidpp.Response(None, 0x0000, f"{hidpp20_constants.FEATURE.REPORT_RATE:0>4X}"),
|
||||||
Response("04FFFF", DEVICE, hidpp20.FEATURE.EXTENDED_ADJUSTABLE_REPORT_RATE, 0x20, ()),
|
hidpp.Response("04FFFF", 0x0420),
|
||||||
],
|
],
|
||||||
"500us",
|
"500us",
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
def test_get_polling_rate(responses, expected_result, mock_feature_request):
|
def test_get_polling_rate(
|
||||||
mock_feature_request.side_effect = partial(feature_request, responses)
|
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 result == expected_result
|
||||||
assert len(responses) == 0
|
|
||||||
|
|
||||||
|
|
||||||
def test_get_remaining_pairing(mock_feature_request):
|
def test_get_remaining_pairing():
|
||||||
responses = [Response("03FFFF", None, hidpp20.FEATURE.REMAINING_PAIRING, 0x0, ())]
|
responses = [hidpp.Response("03FFFF", 0x0400)]
|
||||||
mock_feature_request.side_effect = partial(feature_request, responses)
|
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 result == 0x03
|
||||||
assert len(responses) == 0
|
|
||||||
|
|
||||||
|
|
||||||
def test_config_change(mock_feature_request):
|
def test_config_change():
|
||||||
responses = [Response("03FFFF", None, hidpp20.FEATURE.CONFIG_CHANGE, 0x10, (0x2,))]
|
responses = [hidpp.Response("03FFFF", 0x0410, "02")]
|
||||||
mock_feature_request.side_effect = partial(feature_request, responses)
|
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 result == bytes.fromhex("03FFFF")
|
||||||
assert len(responses) == 0
|
|
||||||
|
|
||||||
|
|
||||||
def test_decipher_battery_status():
|
def test_decipher_battery_status():
|
||||||
|
|
Loading…
Reference in New Issue