vita_gamepad/tests/test_protocol.py

51 lines
1.3 KiB
Python

import unittest
from vitapad.protocol import (
Buttons,
InputState,
PACKET_SIZE,
decode_packet,
encode_packet,
sequence_is_newer,
)
class ProtocolTests(unittest.TestCase):
def test_round_trip(self) -> None:
state = InputState(
sequence=123456,
buttons=Buttons.A | Buttons.UP,
lx=1,
ly=2,
rx=253,
ry=254,
lt=17,
rt=240,
)
encoded = encode_packet(state)
self.assertEqual(len(encoded), PACKET_SIZE)
self.assertEqual(decode_packet(encoded), state)
def test_rejects_bad_packets(self) -> None:
with self.assertRaises(ValueError):
decode_packet(b"")
packet = bytearray(encode_packet(InputState()))
packet[0] = 0
with self.assertRaises(ValueError):
decode_packet(packet)
def test_sequence_comparison_wraps(self) -> None:
self.assertTrue(sequence_is_newer(11, 10))
self.assertFalse(sequence_is_newer(10, 10))
self.assertFalse(sequence_is_newer(9, 10))
self.assertTrue(sequence_is_newer(0, 0xFFFFFFFF))
def test_axis_validation(self) -> None:
with self.assertRaises(ValueError):
encode_packet(InputState(lx=256))
if __name__ == "__main__":
unittest.main()