8 class TestBinarySerialize(unittest.TestCase):
9 def test_serializes_null(self):
10 self.assertEqual(binary.serialize(None), b'\x00')
12 def test_serializes_true(self):
13 self.assertEqual(binary.serialize(True), b'\x01')
15 def test_serializes_false(self):
16 self.assertEqual(binary.serialize(False), b'\x02')
18 def test_serializes_integers_in_32_bit_twos_complement_with_network_byte_order(self):
19 self.assertEqual(binary.serialize(-2147483648), b'\x12\x80\x00\x00\x00')
20 self.assertEqual(binary.serialize(-1), b'\x12\xff\xff\xff\xff')
21 self.assertEqual(binary.serialize(0), b'\x12\x00\x00\x00\x00')
22 self.assertEqual(binary.serialize(1), b'\x12\x00\x00\x00\x01')
23 self.assertEqual(binary.serialize(2147483647), b'\x12\x7f\xff\xff\xff')
25 def test_serializes_floats_into_binary64_with_network_byte_order(self):
26 self.assertEqual(binary.serialize(1.0), b'\x21\x3f\xf0\x00\x00\x00\x00\x00\x00')
27 self.assertEqual(binary.serialize(2.0), b'\x21\x40\x00\x00\x00\x00\x00\x00\x00')
28 self.assertEqual(binary.serialize(-2.0), b'\x21\xc0\x00\x00\x00\x00\x00\x00\x00')
29 self.assertEqual(binary.serialize(0.5), b'\x21\x3f\xe0\x00\x00\x00\x00\x00\x00')
30 self.assertEqual(binary.serialize(2.0 ** -1074), b'\x21\x00\x00\x00\x00\x00\x00\x00\x01')
31 self.assertEqual(binary.serialize(2.0 ** -1022), b'\x21\x00\x10\x00\x00\x00\x00\x00\x00')
32 self.assertEqual(binary.serialize(0.0), b'\x21\x00\x00\x00\x00\x00\x00\x00\x00')
34 def test_serializes_binary(self):
35 self.assertEqual(binary.serialize(b'\xde\xad\xbe\xef'), b'\x30\x00\x00\x00\x04\xde\xad\xbe\xef')
37 def test_serializes_utf8(self):
38 self.assertEqual(binary.serialize('Hello, world'), b'\x31\x00\x00\x00\x0cHello, world')
39 self.assertEqual(binary.serialize('世界'), b'\x31\x00\x00\x00\x06\xe4\xb8\x96\xe7\x95\x8c')
41 def test_serializes_list(self):
42 self.assertEqual(binary.serialize([]), b'\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00')
43 self.assertEqual(binary.serialize([1,2,3]), b'\x40\x12\x00\x00\x00\x0c\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x03')
44 self.assertEqual(binary.serialize(['Hello, world', 'Goodnight, moon']), b'\x40\x31\x00\x00\x00#\x00\x00\x00\x02\x00\x00\x00\x0cHello, world\x00\x00\x00\x0fGoodnight, moon')
45 self.assertEqual(binary.serialize([1.618, 2.718, 3.142]), b'\x40\x21\x00\x00\x00\x18\x00\x00\x00\x03?\xf9\xe3S\xf7\xce\xd9\x17@\x05\xbev\xc8\xb49X@\t"\xd0\xe5`A\x89')
47 def test_serializes_dictionary(self):
48 self.assertEqual(binary.serialize({}), b'\x41\x00\x00\x00\x00\x00\x00\x00\x00')
49 self.assertEqual(binary.serialize(collections.OrderedDict([
53 ])), b'A\x00\x00\x00+\x00\x00\x00\x03\x00\x00\x00\x03foo\x12\x00\x00\x00*\x00\x00\x00\x03bar!@\t\x1e\xb8Q\xeb\x85\x1f\x00\x00\x00\x03baz1\x00\x00\x00\x03qux')
55 class TestBinaryDeserialize(unittest.TestCase):
56 def test_deserializes_null(self):
57 self.assertEqual(binary.deserialize(b'\x00'), None)
59 def test_deserializes_true(self):
60 self.assertEqual(binary.deserialize(b'\x01'), True)
62 def test_deserializes_false(self):
63 self.assertEqual(binary.deserialize(b'\x02'), False)
65 def test_deserializes_8_bit_twos_complement_with_network_byte_order(self):
66 self.assertEqual(binary.deserialize(b'\x10\x80'), -128)
67 self.assertEqual(binary.deserialize(b'\x10\xff'), -1)
68 self.assertEqual(binary.deserialize(b'\x10\x00'), 0)
69 self.assertEqual(binary.deserialize(b'\x10\x01'), 1)
70 self.assertEqual(binary.deserialize(b'\x10\x7f'), 127)
72 def test_deserializes_16_bit_twos_complement_with_network_byte_order(self):
73 self.assertEqual(binary.deserialize(b'\x11\x80\x00'), -32768)
74 self.assertEqual(binary.deserialize(b'\x11\xff\xff'), -1)
75 self.assertEqual(binary.deserialize(b'\x11\x00\x00'), 0)
76 self.assertEqual(binary.deserialize(b'\x11\x00\x01'), 1)
77 self.assertEqual(binary.deserialize(b'\x11\x7f\xff'), 32767)
79 def test_deserializes_32_bit_twos_complement_with_network_byte_order(self):
80 self.assertEqual(binary.deserialize(b'\x12\x80\x00\x00\x00'), -2147483648)
81 self.assertEqual(binary.deserialize(b'\x12\xff\xff\xff\xff'), -1)
82 self.assertEqual(binary.deserialize(b'\x12\x00\x00\x00\x00'), 0)
83 self.assertEqual(binary.deserialize(b'\x12\x00\x00\x00\x01'), 1)
84 self.assertEqual(binary.deserialize(b'\x12\x7f\xff\xff\xff'), 2147483647)
86 def test_deserializes_64_bit_twos_complement_with_network_byte_order(self):
87 self.assertEqual(binary.deserialize(b'\x13\x80\x00\x00\x00\x00\x00\x00\x00'), -9223372036854775808)
88 self.assertEqual(binary.deserialize(b'\x13\xff\xff\xff\xff\xff\xff\xff\xff'), -1)
89 self.assertEqual(binary.deserialize(b'\x13\x00\x00\x00\x00\x00\x00\x00\x00'), 0)
90 self.assertEqual(binary.deserialize(b'\x13\x00\x00\x00\x00\x00\x00\x00\x01'), 1)
91 self.assertEqual(binary.deserialize(b'\x13\x7f\xff\xff\xff\xff\xff\xff\xff'), 9223372036854775807)
93 def test_deserializes_binary64_as_float(self):
94 self.assertEqual(binary.deserialize(b'\x21\x3f\xf0\x00\x00\x00\x00\x00\x00'), 1.0)
95 self.assertEqual(binary.deserialize(b'\x21\x40\x00\x00\x00\x00\x00\x00\x00'), 2.0)
96 self.assertEqual(binary.deserialize(b'\x21\xc0\x00\x00\x00\x00\x00\x00\x00'), -2.0)
97 self.assertEqual(binary.deserialize(b'\x21\x3f\xe0\x00\x00\x00\x00\x00\x00'), 0.5)
98 self.assertEqual(binary.deserialize(b'\x21\x00\x00\x00\x00\x00\x00\x00\x01'), 2.0 ** -1074)
99 self.assertEqual(binary.deserialize(b'\x21\x00\x10\x00\x00\x00\x00\x00\x00'), 2.0 ** -1022)
100 self.assertEqual(binary.deserialize(b'\x21\x00\x00\x00\x00\x00\x00\x00\x00'), 0.0)
102 def test_deserializes_binary(self):
103 self.assertEqual(binary.deserialize(b'\x30\x00\x00\x00\x04\xde\xad\xbe\xef'), b'\xde\xad\xbe\xef')
105 def test_deserializes_utf8(self):
106 self.assertEqual(binary.deserialize(b'\x31\x00\x00\x00\x0cHello, world'), 'Hello, world')
107 self.assertEqual(binary.deserialize(b'\x31\x00\x00\x00\x06\xe4\xb8\x96\xe7\x95\x8c'), '世界')
109 def test_deserializes_lists(self):
110 self.assertEqual(list(binary.deserialize(b'\x40\x12\x00\x00\x00\x00\x00\x00\x00\x00')), [])
111 self.assertEqual(list(binary.deserialize(b'\x40\x12\x00\x00\x00\x0c\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x03')), [1,2,3])
113 def test_deserializes_dictionaries(self):
114 self.assertEqual(binary.deserialize(b'\x41\x00\x00\x00\x00\x00\x00\x00\x00'), collections.OrderedDict([]))
115 self.assertEqual(binary.deserialize(b'\x41\x00\x00\x00\x1b\x00\x00\x00\x02\x00\x00\x00\x03foo\x12\x00\x00\x00\x2a\x00\x00\x00\x03bar\x31\x00\x00\x00\x03baz'), collections.OrderedDict([('foo',42), ('bar','baz')]))
118 class TestStringSerialize(unittest.TestCase):
121 class TestStringDeserialize(unittest.TestCase):