Files

24 lines
1.3 KiB
Python

import pathlib,sys,struct,unittest
sys.path.insert(0,str(pathlib.Path(__file__).parents[1]/'plugins'))
from dmd_bitmap import decode
def frame(mode,payload,identity=1,flags=4,w=2,h=2):return struct.pack('<IIHHB',identity,flags,w,h,mode)+payload
class BitmapTests(unittest.TestCase):
def test_raw_starts_after_encoding_byte(self):
self.assertEqual(decode(frame(0,b'\x01\x02\x03\x04'),{})['pixels'],b'\x01\x02\x03\x04')
def test_row_and_column_packets(self):
payload=bytes([9,7,6,4,9,0])
self.assertEqual(decode(frame(7,payload),{})['pixels'],bytes([0,0,6,9]))
self.assertEqual(decode(frame(1,payload),{})['pixels'],bytes([0,6,0,9]))
def test_delta_preserves_base_and_requires_it(self):
frames={};decode(frame(0,b'\x01\x02\x03\x04'),frames)
delta=frame(9,bytes([254,2,8,9,0]),identity=2)
self.assertEqual(decode(delta,frames)['pixels'],bytes([1,2,8,9]))
with self.assertRaises(ValueError):decode(delta,{})
def test_nibbles_and_odd_dimensions(self):
self.assertEqual(decode(frame(12,b'\x21\xf3',w=3,h=1),{})['pixels'],bytes([1,2,3]))
def test_malformed_bounds_and_unsupported_records(self):
for data in [b'',frame(0,b'\x01'),frame(7,b'\xfc'),frame(7,b'\xff\x01\x00'),frame(7,b'\x00'),frame(2,b'\x00')]:
with self.assertRaises(ValueError):decode(data,{})
if __name__=='__main__':unittest.main()