def test_remaining(self): dg = Datagram() dg.add_uint16(25) dg.add_int64(-354843598374) dgi = dg.iterator() self.assertEqual(dgi.remaining(), 10) s = 'remaining unit test' dg.add_string32(s.encode('utf-8')) self.assertEqual(dgi.remaining(), 10 + 4 + len(s)) self.assertEqual(dgi.get_uint16(), 25) self.assertEqual(dgi.remaining(), 8 + 4 + len(s)) dgi.seek(dg.get_length()) self.assertEqual(dgi.remaining(), 0) dgi.seek(0) self.assertEqual(dgi.remaining(), 10 + 4 + len(s)) dgi.seek(14) self.assertEqual(dgi.remaining(), len(s)) dgi.seek(999) self.assertEqual(dgi.remaining(), 0)
def test_get(self): dg = Datagram() dg.add_uint16(25) dg.add_int64(-354843598374) dg.add_string32('datagram iterator test'.encode('utf-8')) dgi = dg.iterator() self.assertEqual(dgi.get_uint16(), 25) self.assertEqual(dgi.get_int64(), -354843598374) self.assertEqual(dgi.get_string32(), 'datagram iterator test')
def test_copy_datagram(self): dg = Datagram() dg.add_string32('testing copy'.encode('utf-8')) dg2 = dg.copy() self.assertEqual(dg.bytes(), dg2.bytes()) dg.add_uint16(65200) self.assertNotEqual(dg.bytes(), dg2.bytes()) data = dg2.bytes() del dg self.assertEqual(dg2.bytes(), data)
def test_overwrite(self): dg = Datagram() dg.add_uint32(2828) pos = dg.tell() self.assertEqual(pos, 4) dg.add_uint16(24) dg.add_int64(-352793) dg.seek(pos) dg.add_uint16(5000) dg.seek(len(dg)) dg.add_string32(b'overwrite') dgi = dg.iterator() self.assertEqual(dgi.get_uint32(), 2828) self.assertEqual(dgi.get_uint16(), 5000) self.assertEqual(dgi.get_int64(), -352793) self.assertEqual(dgi.get_string32(), 'overwrite')
def test_add_data(self): s = 'hello_world'.encode('utf-8') dg = Datagram() dg.add_string16(s) other = struct.pack(f'<H{len(s)}b', len(s), *s) self.assertEqual(dg.bytes(), other) s = 'abcdefghijklmnop'.encode('utf-8') dg = Datagram() dg.add_string32(s) other = struct.pack(f'<I{len(s)}b', len(s), *s) self.assertEqual(dg.bytes(), other) dg.add_bytes(b'') self.assertEqual(dg.bytes(), other) dg = Datagram() dg.add_string16(b'') self.assertEqual(dg.bytes(), b'\x00\x00') dg = Datagram() random.seed('pydc') s = bytes(random.randint(0, 255) for _ in range((1 << 16))) with self.assertRaises(OverflowError): dg.add_string16(s) dg = Datagram() s = bytes(random.randint(0, 255) for _ in range((1 << 16))) dg.add_string32(s) s = b''.join((struct.pack('<I', len(s)), s)) self.assertEqual(dg.bytes(), s) dg = Datagram() dg.add_string32(b'') self.assertEqual(dg.bytes(), struct.pack('<I', 0)) dg = Datagram() c = chr(0x1F600).encode('utf-8') dg.add_bytes(c) self.assertEqual(dg.bytes(), c)