tests: extend testing of hidpp20

This commit is contained in:
Peter F. Patel-Schneider 2024-03-30 09:25:32 -04:00
parent d6499808f9
commit c7a2f1698b
1 changed files with 124 additions and 114 deletions

View File

@ -630,6 +630,7 @@ def test_Backlight():
("0300000000005000000000", common.NamedInt(0x3, "Cycle"), None, None, 0x5000, 0x00, None, None), ("0300000000005000000000", common.NamedInt(0x3, "Cycle"), None, None, 0x5000, 0x00, None, None),
("0A20304010005020000000", common.NamedInt(0xA, "Breathe"), 0x203040, None, 0x1000, 0x20, None, 0x50), ("0A20304010005020000000", common.NamedInt(0xA, "Breathe"), 0x203040, None, 0x1000, 0x20, None, 0x50),
("0B20304000100000000000", common.NamedInt(0xB, "Ripple"), 0x203040, None, 0x1000, None, None, None), ("0B20304000100000000000", common.NamedInt(0xB, "Ripple"), 0x203040, None, 0x1000, None, None, None),
("0A01020300500407000000", common.NamedInt(0xA, "Breathe"), 0x010203, None, 0x0050, 0x07, None, 0x04),
], ],
) )
def test_LEDEffectSetting(hex, ID, color, speed, period, intensity, ramp, form): def test_LEDEffectSetting(hex, ID, color, speed, period, intensity, ramp, form):
@ -646,7 +647,10 @@ def test_LEDEffectSetting(hex, ID, color, speed, period, intensity, ramp, form):
assert getattr(setting, "intensity", None) == intensity assert getattr(setting, "intensity", None) == intensity
assert getattr(setting, "ramp", None) == ramp assert getattr(setting, "ramp", None) == ramp
assert getattr(setting, "form", None) == form assert getattr(setting, "form", None) == form
assert setting.to_bytes() == byt assert setting.to_bytes() == byt
assert yaml.safe_load(yaml.dump(setting)) == setting
assert yaml.safe_load(str(setting)) == setting
@pytest.mark.parametrize( @pytest.mark.parametrize(
@ -737,119 +741,90 @@ def test_LED_RGB_EffectsInfo(feature, cls, responses, readable, count, count_0):
assert effects.zones[0].count == count_0 assert effects.zones[0].count == count_0
def test_led_setting_bytes(): @pytest.mark.parametrize(
ebytes = bytes.fromhex("0A01020300500407000000") "hex, behavior, sector, address, typ, val, modifiers, data, byt",
[
("05010203", 0x0, 0x501, 0x0203, None, None, None, None, None),
("15020304", 0x1, 0x502, 0x0304, None, None, None, None, None),
("8000FFFF", 0x8, None, None, 0x00, None, None, None, None),
("80010102", 0x8, None, None, 0x01, 0x0102, None, None, None),
("80020454", 0x8, None, None, 0x02, 0x54, 0x04, None, None),
("80030454", 0x8, None, None, 0x03, 0x0454, None, None, None),
("900AFF01", 0x9, None, None, None, 0x0A, None, 0x01, None),
("709090A0", 0x7, None, None, None, None, None, None, b"\x70\x90\x90\xA0"),
],
)
def test_button_bytes(hex, behavior, sector, address, typ, val, modifiers, data, byt):
button = hidpp20.Button.from_bytes(bytes.fromhex(hex))
setting = hidpp20.LEDEffectSetting.from_bytes(ebytes) assert getattr(button, "behavior", None) == behavior
assert getattr(button, "sector", None) == sector
assert setting.ID == 0x0A assert getattr(button, "address", None) == address
assert setting.color == 0x010203 assert getattr(button, "type", None) == typ
assert setting.period == 0x0050 assert getattr(button, "value", None) == val
assert setting.form == 0x04 assert getattr(button, "modifiers", None) == modifiers
assert setting.intensity == 0x07 assert getattr(button, "data", None) == data
assert getattr(button, "bytes", None) == byt
bytes_out = setting.to_bytes() assert button.to_bytes().hex().upper() == hex
assert yaml.safe_load(yaml.dump(button)).to_bytes().hex().upper() == hex
assert ebytes == bytes_out
def test_led_setting_yaml(): hex1 = (
ebytes = bytes.fromhex("0A01020300500407000000") "01010290018003000700140028FFFFFF"
# eyaml = ( "FFFF0000000000000000000000000000"
# "!LEDEffectSetting {ID: !NamedInt {name: Breathe, value: 0xa}, color: 0x10203, " "8000FFFF900AFF00800204548000FFFF"
# "form: 0x4, intensity: 0x7, period: 0x50} " "900AFF00800204548000FFFF900AFF00"
# ) "800204548000FFFF900AFF0080020454"
"8000FFFF900AFF00800204548000FFFF"
setting = hidpp20.LEDEffectSetting.from_bytes(ebytes) "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
assert setting.ID == 0x0A "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
assert setting.color == 0x010203 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
assert setting.period == 0x0050 "54004500370000000000000000000000"
assert setting.form == 0x04 "00000000000000000000000000000000"
assert setting.intensity == 0x07 "00000000000000000000000000000000"
"0A01020300500407000000FFFFFFFFFF"
yaml_out = yaml.dump(setting) "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFF7C81"
# assert eyaml == re.compile(r"\s+").sub(" ", yaml_out) )
hex2 = (
setting = yaml.safe_load(yaml_out) "01010290018003000700140028FFFFFF"
"FFFF0000000000000000000000000000"
assert setting.to_bytes() == ebytes "8000FFFF900AFF00800204548000FFFF"
"900AFF00800204548000FFFF900AFF00"
"800204548000FFFF900AFF0080020454"
"8000FFFF900AFF00800204548000FFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"0A01020300500407000000FFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFF27C9"
)
def test_button_bytes_1(): @pytest.mark.parametrize(
bbytes = bytes.fromhex("8000FFFF") "hex, name, sector, enabled, buttons, gbuttons, resolutions, button, lighting",
[
(hex1, "TE7", 2, 1, 16, 0, [0x0190, 0x0380, 0x0700, 0x1400, 0x2800], "8000FFFF", "0A01020300500407000000"),
(hex2, "", 2, 1, 16, 0, [0x0190, 0x0380, 0x0700, 0x1400, 0x2800], "8000FFFF", "0A01020300500407000000"),
],
)
def test_OnboardProfile_bytes(hex, name, sector, enabled, buttons, gbuttons, resolutions, button, lighting):
profile = hidpp20.OnboardProfile.from_bytes(sector, enabled, buttons, gbuttons, bytes.fromhex(hex))
button = hidpp20.Button.from_bytes(bbytes) assert profile.name == name
assert profile.sector == sector
assert profile.resolutions == resolutions
assert profile.buttons[0].to_bytes().hex().upper() == button
assert profile.lighting[0].to_bytes().hex().upper() == lighting
assert button.behavior == 0x8 assert profile.to_bytes(len(hex) // 2).hex().upper() == hex
assert button.type == 0x00 assert yaml.safe_load(yaml.dump(profile)).to_bytes(len(hex) // 2).hex().upper() == hex
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
responses_profiles = [ responses_profiles = [
@ -871,17 +846,52 @@ responses_profiles = [
hidpp.Response("00000000000000000000000000000000", 0x0450, "000100C0"), hidpp.Response("00000000000000000000000000000000", 0x0450, "000100C0"),
hidpp.Response("0A01020300500407000000FFFFFFFFFF", 0x0450, "000100D0"), hidpp.Response("0A01020300500407000000FFFFFFFFFF", 0x0450, "000100D0"),
hidpp.Response("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", 0x0450, "000100E0"), hidpp.Response("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", 0x0450, "000100E0"),
hidpp.Response("FFFFFFFFFFFFFFFFFFFFFFFFFF7C81", 0x0450, "000100EE"), hidpp.Response("FFFFFFFFFFFFFFFFFFFFFFFFFF7C81AB", 0x0450, "000100EE"),
]
responses_profiles_rom = [
hidpp.Response("0104010101020100FE0200", 0x0400),
hidpp.Response("00000000", 0x0450, "00000000"),
hidpp.Response("010101FF", 0x0450, "01000000"),
hidpp.Response("FFFFFFFF", 0x0450, "01000004"),
hidpp.Response("01010290018003000700140028FFFFFF", 0x0450, "01010000"),
hidpp.Response("FFFF0000000000000000000000000000", 0x0450, "01010010"),
hidpp.Response("8000FFFF900aFF00800204548000FFFF", 0x0450, "01010020"),
hidpp.Response("900aFF00800204548000FFFF900aFF00", 0x0450, "01010030"),
hidpp.Response("800204548000FFFF900aFF0080020454", 0x0450, "01010040"),
hidpp.Response("8000FFFF900aFF00800204548000FFFF", 0x0450, "01010050"),
hidpp.Response("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", 0x0450, "01010060"),
hidpp.Response("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", 0x0450, "01010070"),
hidpp.Response("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", 0x0450, "01010080"),
hidpp.Response("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", 0x0450, "01010090"),
hidpp.Response("54004500370000000000000000000000", 0x0450, "010100A0"),
hidpp.Response("00000000000000000000000000000000", 0x0450, "010100B0"),
hidpp.Response("00000000000000000000000000000000", 0x0450, "010100C0"),
hidpp.Response("0A01020300500407000000FFFFFFFFFF", 0x0450, "010100D0"),
hidpp.Response("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", 0x0450, "010100E0"),
hidpp.Response("FFFFFFFFFFFFFFFFFFFFFFFFFF7C81AB", 0x0450, "010100EE"),
] ]
device_onb = hidpp.Device("ONB", True, 4.5, responses=responses_profiles, feature=hidpp20_constants.FEATURE.ONBOARD_PROFILES)
@pytest.mark.parametrize(
def test_profiles(): "responses, name, count, buttons, gbuttons, sectors, size",
device_onb._profiles = None [
profiles = _hidpp20.get_profiles(device_onb) (responses_profiles, "ONB", 1, 2, 2, 1, 254),
(responses_profiles_rom, "ONB", 1, 2, 2, 1, 254),
],
)
def test_OnboardProfiles_device(responses, name, count, buttons, gbuttons, sectors, size):
device = hidpp.Device(name, True, 4.5, responses=responses, feature=hidpp20_constants.FEATURE.ONBOARD_PROFILES)
device._profiles = None
profiles = _hidpp20.get_profiles(device)
assert profiles assert profiles
assert profiles.version == hidpp20.OnboardProfilesVersion
assert profiles.name == name
assert profiles.count == count
assert profiles.buttons == buttons
assert profiles.gbuttons == gbuttons
assert profiles.sectors == sectors
assert profiles.size == size
assert len(profiles.profiles) == count
assert yaml.safe_load(yaml.dump(profiles)).to_bytes().hex() == profiles.to_bytes().hex()
# OnboardProfiles needs more testing