1
0
Files
h8-536-decoder/tests/test_bench_connect_lcd.py
2026-05-26 00:15:25 +10:00

58 lines
1.8 KiB
Python

import unittest
from h8536.bench_connect_lcd import (
CONNECT_LCD_SEQUENCE,
FrameDetector,
format_frame,
frame_checksum,
frame_checksum_ok,
label_frame,
parse_frame,
)
class BenchConnectLcdTest(unittest.TestCase):
def test_connect_sequence_matches_emulator_preset(self):
self.assertEqual(
[format_frame(frame) for frame in CONNECT_LCD_SEQUENCE],
[
"04 00 00 40 00 1E",
"04 00 00 80 00 DE",
"04 00 00 C0 00 9E",
],
)
def test_parse_frame_appends_xor_checksum(self):
frame = parse_frame("04 00 00 80 00")
self.assertEqual(frame, bytes.fromhex("0400008000DE"))
self.assertEqual(frame_checksum(frame), 0xDE)
self.assertTrue(frame_checksum_ok(frame))
def test_detector_recombines_split_rx_chunks(self):
detector = FrameDetector()
self.assertEqual(detector.feed(bytes.fromhex("000000")), [])
detected = detector.feed(bytes.fromhex("0080DA02000200005A"))
self.assertEqual(
[(format_frame(frame), label) for frame, label in detected],
[
("00 00 00 00 80 DA", "heartbeat"),
("02 00 02 00 00 5A", "connect_ok_path_response_candidate"),
],
)
def test_label_frame_marks_unlabeled_checksum_ok_frame(self):
self.assertEqual(label_frame(bytes.fromhex("01000000005B")), "checksum_ok_unlabeled")
def test_label_frame_marks_real_bench_c0_6020_response(self):
self.assertEqual(label_frame(bytes.fromhex("0780C060205D")), "visible_C0_6020_family_candidate")
def test_label_frame_marks_visible_retry_ack_target(self):
self.assertEqual(label_frame(bytes.fromhex("07804020902D")), "visible_retry_0040_2090_candidate")
if __name__ == "__main__":
unittest.main()