tests: improve infrastructure for testing setting_templates

This commit is contained in:
Peter F. Patel-Schneider 2024-03-25 07:35:52 -04:00
parent 1ed5f765e3
commit 4d0f93b35c
3 changed files with 343 additions and 420 deletions

View File

@ -505,6 +505,9 @@ class NamedInts:
def __or__(self, other): def __or__(self, other):
return NamedInts(**self.__dict__, **other.__dict__) return NamedInts(**self.__dict__, **other.__dict__)
def __eq__(self, other):
return type(self) == type(other) and self._values == other._values
class UnsortedNamedInts(NamedInts): class UnsortedNamedInts(NamedInts):
def _sort_values(self): def _sort_values(self):

View File

@ -136,7 +136,8 @@ class Device:
codename: str = "TESTC" codename: str = "TESTC"
responses: Any = field(default_factory=list) responses: Any = field(default_factory=list)
feature: Optional[int] = None feature: Optional[int] = None
features: Any = None offset: Optional[int] = 4
version: Optional[int] = 0
setting_callback: Any = None setting_callback: Any = None
_backlight = _keys = _remap_keys = _led_effects = None _backlight = _keys = _remap_keys = _led_effects = None
@ -150,15 +151,15 @@ class Device:
def __post_init__(self): def __post_init__(self):
self.persister = configuration._DeviceEntry() self.persister = configuration._DeviceEntry()
self.features = hidpp20.FeaturesArray(self) self.features = hidpp20.FeaturesArray(self)
self.responses += [Response("010001", 0x0000, "0001"), Response("20", 0x0100)] self.responses = [Response("010001", 0x0000, "0001"), Response("20", 0x0100)] + self.responses
if self.feature is not None: if self.feature is not None:
self.responses.append(Response("040001", 0x0000, f"{self.feature:0>4X}")) self.responses.append(Response(f"{self.offset:0>2X}00{self.version:0>2X}", 0x0000, f"{self.feature:0>4X}"))
def request(self, id, *params, no_reply=False): def request(self, id, *params, no_reply=False):
if params is None: if params is None:
params = [] params = []
params = b"".join(pack("B", p) if isinstance(p, int) else p for p in params) params = b"".join(pack("B", p) if isinstance(p, int) else p for p in params)
print("REQUEST ", self.name, hex(id), params.hex()) print("REQUEST ", self.name, hex(id), params.hex().upper())
for r in self.responses: for r in self.responses:
if id == r.id and params == bytes.fromhex(r.params): if id == r.id and params == bytes.fromhex(r.params):
print("RESPONSE", self.name, hex(r.id), r.params, r.response) print("RESPONSE", self.name, hex(r.id), r.params, r.response)

File diff suppressed because it is too large Load Diff