4 from don import string, tags
6 class TestStringSerialize(unittest.TestCase):
7 def test_serializes_null(self):
8 self.assertEqual(string.serialize(None), 'null')
10 def test_serializes_true(self):
11 self.assertEqual(string.serialize(True), 'true')
13 def test_serializes_false(self):
14 self.assertEqual(string.serialize(False), 'false')
16 def test_serializes_int8(self):
17 self.assertEqual(string.serialize(tags.TaggedObject(tags.INT8, 1)), '1i8')
18 self.assertEqual(string.serialize(tags.TaggedObject(tags.INT8, -1)), '-1i8')
19 self.assertEqual(string.serialize(tags.TaggedObject(tags.INT8, 42)), '42i8')
21 def test_serializes_int16(self):
22 self.assertEqual(string.serialize(tags.TaggedObject(tags.INT16, 1)), '1i16')
23 self.assertEqual(string.serialize(tags.TaggedObject(tags.INT16, -1)), '-1i16')
24 self.assertEqual(string.serialize(tags.TaggedObject(tags.INT16, 42)), '42i16')
26 def test_serializes_int32(self):
27 self.assertEqual(string.serialize(tags.TaggedObject(tags.INT32, 1)), '1i32')
28 self.assertEqual(string.serialize(tags.TaggedObject(tags.INT32, -1)), '-1i32')
29 self.assertEqual(string.serialize(tags.TaggedObject(tags.INT32, 42)), '42i32')
31 def test_serializes_int64(self):
32 self.assertEqual(string.serialize(tags.TaggedObject(tags.INT64, 1)), '1i64')
33 self.assertEqual(string.serialize(tags.TaggedObject(tags.INT64, -1)), '-1i64')
34 self.assertEqual(string.serialize(tags.TaggedObject(tags.INT64, 42)), '42i64')
36 def test_serializes_float(self):
37 self.assertEqual(string.serialize(tags.TaggedObject(tags.FLOAT, 1.0)), '1.0f')
39 def test_serializes_double(self):
40 self.assertEqual(string.serialize(tags.TaggedObject(tags.DOUBLE, 1.0)), '1.0d')
42 def test_serializes_binary(self):
43 self.assertEqual(string.serialize(tags.TaggedObject(tags.BINARY, b'\xde\xad\xbe\xef')), '"deadbeef"b')
45 def test_serializes_utf8(self):
46 self.assertEqual(string.serialize(tags.TaggedObject(tags.UTF8, 'Hello, world')), '"Hello, world"utf8')
48 def test_serializes_utf16(self):
49 self.assertEqual(string.serialize(tags.TaggedObject(tags.UTF16, 'Hello, world')), '"Hello, world"utf16')
51 def test_serializes_utf32(self):
52 self.assertEqual(string.serialize(tags.TaggedObject(tags.UTF32, 'Hello, world')), '"Hello, world"utf32')
54 def test_serializes_list(self):
55 self.assertEqual(string.serialize(tags.TaggedObject(tags.LIST, [1,2,3])), '[1i32, 2i32, 3i32]')
57 def test_serializes_dictionary(self):
59 string.serialize(tags.TaggedObject(tags.DICTIONARY, collections.OrderedDict([
63 '{ "foo"utf8: 1i32, "bar"utf8: "baz"utf8 }'
66 class TestStringDeserialize(unittest.TestCase):
67 def test_deserializes_null(self):
70 string.deserialize('null'),
73 def test_deserializes_null_with_leading_whitespace(self):
76 string.deserialize(' \t\nnull'),
79 def test_deserializes_true(self):
82 string.deserialize('true'),
85 def test_deserializes_true_with_leading_whitespace(self):
88 string.deserialize(' \t\ntrue'),
91 def test_deserializes_false(self):
94 string.deserialize('false'),
97 def test_deserializes_false_with_leading_whitespace(self):
100 string.deserialize(' \t\nfalse'),
103 def test_deserializes_int8(self):
104 self.assertEqual(10, string.deserialize('10i8'))
105 self.assertEqual(-1, string.deserialize('-1i8'))
107 def test_deserializes_int8_with_leading_whitespace(self):
108 self.assertEqual(10, string.deserialize(' \t\n10i8'))
109 self.assertEqual(-1, string.deserialize(' \t\n-1i8'))
111 def test_deserializes_int16(self):
112 self.assertEqual(10, string.deserialize('10i16'))
113 self.assertEqual(-1, string.deserialize('-1i16'))
115 def test_deserializes_int16_with_leading_whitespace(self):
116 self.assertEqual(10, string.deserialize(' \t\n10i16'))
117 self.assertEqual(-1, string.deserialize(' \t\n-1i16'))
119 def test_deserializes_int32(self):
120 self.assertEqual(10, string.deserialize('10i32'))
121 self.assertEqual(-1, string.deserialize('-1i32'))
123 def test_deserializes_int32_with_leading_whitespace(self):
124 self.assertEqual(10, string.deserialize(' \t\n10i32'))
125 self.assertEqual(-1, string.deserialize(' \t\n-1i32'))
127 def test_deserializes_int64(self):
128 self.assertEqual(10, string.deserialize('10i64'))
129 self.assertEqual(-1, string.deserialize('-1i64'))
131 def test_deserializes_int64_with_leading_whitespace(self):
132 self.assertEqual(10, string.deserialize(' \t\n10i64'))
133 self.assertEqual(-1, string.deserialize(' \t\n-1i64'))
135 def test_deserializes_float(self):
136 self.assertEqual(1.0, string.deserialize('1.0f'))
138 def test_deserializes_float_with_leading_whitspace(self):
139 self.assertEqual(1.0, string.deserialize(' \t\n1.0f'))
141 def test_deserializes_double(self):
142 self.assertEqual(1.0, string.deserialize('1.0d'))
144 def test_deserializes_double_with_leading_whitespace(self):
145 self.assertEqual(1.0, string.deserialize(' \t\n1.0d'))
147 def test_deserializes_binary(self):
150 string.deserialize('"deadbeef"b'),
153 def test_deserializes_binary_with_leading_whitespace(self):
156 string.deserialize(' \t\n"deadbeef"b'),
159 def test_deserializes_utf8(self):
162 string.deserialize('"Hello, world"utf8'),
165 def test_deserializes_utf16(self):
168 string.deserialize('"Hello, world"utf16'),
171 def test_deserializes_utf32(self):
174 string.deserialize('"Hello, world"utf32'),
177 def test_deserializes_utf8_with_leading_whitespace(self):
180 string.deserialize(' \t\n"Hello, world"utf8'),
183 def test_deserializes_utf16_with_leading_whitespace(self):
186 string.deserialize(' \t\n"Hello, world"utf16'),
189 def test_deserializes_utf32_with_leading_whitespace(self):
192 string.deserialize(' \t\n"Hello, world"utf32'),
195 def test_deserializes_list(self):
198 string.deserialize("[1i8,2i8,3i8,4i8,5i8]"),
201 def test_deserializes_list_with_leading_whitespace(self):
204 string.deserialize(" \t\n[ \t\n1i8 \t\n, \t\n2i8 \t\n, \t\n3i8 \t\n, \t\n4i8 \t\n, \t\n5i8 \t\n]"),
207 def test_deserializes_dictionary(self):
209 collections.OrderedDict([
213 string.deserialize('{"foo"utf8:1i32,"bar"utf8:"baz"utf8}'),
216 def test_deserializes_dictionary_with_leading_whitespace(self):
218 collections.OrderedDict([
222 string.deserialize(' \t\n{ \t\n"foo"utf8 \t\n: \t\n1i32 \t\n, \t\n"bar"utf8 \t\n: \t\n"baz"utf8 \t\n}'),