diff --git a/tests/logitech_receiver/test_profiles.py b/tests/logitech_receiver/test_profiles.py new file mode 100644 index 00000000..e7207e4b --- /dev/null +++ b/tests/logitech_receiver/test_profiles.py @@ -0,0 +1,120 @@ +import re + +import logitech_receiver.hidpp20 as hidpp20 +import pytest +import yaml + + +def test_led_setting_bytes(): + ebytes = bytes.fromhex("0A01020300500407000000") + + setting = hidpp20.LEDEffectSetting.from_bytes(ebytes) + + assert setting.ID == 0x0A + assert setting.color == 0x010203 + assert setting.period == 0x0050 + assert setting.form == 0x04 + assert setting.intensity == 0x07 + + bytes_out = setting.to_bytes() + + assert ebytes == bytes_out + + +def test_led_setting_yaml(): + ebytes = bytes.fromhex("0A01020300500407000000") + eyaml = ( + "!LEDEffectSetting {ID: !NamedInt {name: Breathe, value: 0xa}, color: 0x10203, " + "form: 0x4, intensity: 0x7, period: 0x50} " + ) + + setting = hidpp20.LEDEffectSetting.from_bytes(ebytes) + + assert setting.ID == 0x0A + assert setting.color == 0x010203 + assert setting.period == 0x0050 + assert setting.form == 0x04 + assert setting.intensity == 0x07 + + yaml_out = yaml.dump(setting) + + assert eyaml == re.compile(r"\s+").sub(" ", yaml_out) + + setting = yaml.safe_load(eyaml) + + assert setting.to_bytes() == ebytes + + +def test_button_bytes_1(): + bbytes = bytes.fromhex("8000FFFF") + + button = hidpp20.Button.from_bytes(bbytes) + + assert button.behavior == 0x8 + assert button.type == 0x00 + + bytes_out = button.to_bytes() + + assert bbytes == bytes_out + + +def test_button_bytes_2(): + bbytes = bytes.fromhex("900aFF00") + + button = hidpp20.Button.from_bytes(bbytes) + + assert button.behavior == 0x9 + + bytes_out = button.to_bytes() + + assert bbytes == bytes_out + + +def test_button_bytes_3(): + bbytes = bytes.fromhex("80020454") + + button = hidpp20.Button.from_bytes(bbytes) + + assert button.behavior == 0x8 + assert button.modifiers == 0x04 + + bytes_out = button.to_bytes() + + assert bbytes == bytes_out + + +@pytest.fixture +def profile_bytes(): + return bytes.fromhex( + "01010290018003000700140028FFFFFF" + "FFFF0000000000000000000000000000" + "8000FFFF900aFF00800204548000FFFF" + "900aFF00800204548000FFFF900aFF00" + "800204548000FFFF900aFF0080020454" + "8000FFFF900aFF00800204548000FFFF" + "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + "54004500370000000000000000000000" + "00000000000000000000000000000000" + "00000000000000000000000000000000" + "0A01020300500407000000FFFFFFFFFF" + "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + "FFFFFFFFFFFFFFFFFFFFFFFFFF7C81" + ) + + +def test_profile_bytes(profile_bytes): + pbytes = profile_bytes + profile = hidpp20.OnboardProfile.from_bytes(2, 1, 16, 0, pbytes) + + assert profile.sector == 2 + assert profile.resolutions == [0x0190, 0x0380, 0x0700, 0x1400, 0x2800] + assert profile.buttons[0].to_bytes() == bytes.fromhex("8000FFFF") + assert profile.lighting[0].to_bytes() == bytes.fromhex("0A01020300500407000000") + assert profile.name == "TE7" + + bytes_out = profile.to_bytes(255) + + assert pbytes == bytes_out