24 lines
1.3 KiB
Python
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()
|