33 """Test for google.protobuf.internal.wire_format."""
35 __author__ =
'robinson@google.com (Will Robinson)'
38 import unittest2
as unittest
51 self.assertEqual((field_number << 3) | tag_type,
52 wire_format.PackTag(field_number, tag_type))
53 PackTag = wire_format.PackTag
55 self.assertRaises(message.EncodeError, PackTag, field_number, 6)
57 self.assertRaises(message.EncodeError, PackTag, field_number, -1)
61 for expected_field_number
in (1, 15, 16, 2047, 2048):
62 for expected_wire_type
in range(6):
63 field_number, wire_type = wire_format.UnpackTag(
64 wire_format.PackTag(expected_field_number, expected_wire_type))
65 self.assertEqual(expected_field_number, field_number)
66 self.assertEqual(expected_wire_type, wire_type)
68 self.assertRaises(TypeError, wire_format.UnpackTag,
None)
69 self.assertRaises(TypeError, wire_format.UnpackTag,
'abc')
70 self.assertRaises(TypeError, wire_format.UnpackTag, 0.0)
71 self.assertRaises(TypeError, wire_format.UnpackTag, object())
74 Z = wire_format.ZigZagEncode
75 self.assertEqual(0, Z(0))
76 self.assertEqual(1, Z(-1))
77 self.assertEqual(2, Z(1))
78 self.assertEqual(3, Z(-2))
79 self.assertEqual(4, Z(2))
80 self.assertEqual(0xfffffffe, Z(0x7fffffff))
81 self.assertEqual(0xffffffff, Z(-0x80000000))
82 self.assertEqual(0xfffffffffffffffe, Z(0x7fffffffffffffff))
83 self.assertEqual(0xffffffffffffffff, Z(-0x8000000000000000))
85 self.assertRaises(TypeError, Z,
None)
86 self.assertRaises(TypeError, Z,
'abcd')
87 self.assertRaises(TypeError, Z, 0.0)
88 self.assertRaises(TypeError, Z, object())
91 Z = wire_format.ZigZagDecode
92 self.assertEqual(0, Z(0))
93 self.assertEqual(-1, Z(1))
94 self.assertEqual(1, Z(2))
95 self.assertEqual(-2, Z(3))
96 self.assertEqual(2, Z(4))
97 self.assertEqual(0x7fffffff, Z(0xfffffffe))
98 self.assertEqual(-0x80000000, Z(0xffffffff))
99 self.assertEqual(0x7fffffffffffffff, Z(0xfffffffffffffffe))
100 self.assertEqual(-0x8000000000000000, Z(0xffffffffffffffff))
102 self.assertRaises(TypeError, Z,
None)
103 self.assertRaises(TypeError, Z,
'abcd')
104 self.assertRaises(TypeError, Z, 0.0)
105 self.assertRaises(TypeError, Z, object())
109 for field_number, tag_bytes
in ((15, 1), (16, 2), (2047, 2), (2048, 3)):
110 expected_size = expected_value_size + tag_bytes
111 actual_size = byte_size_fn(field_number, value)
112 self.assertEqual(expected_size, actual_size,
113 'byte_size_fn: %s, field_number: %d, value: %r\n'
114 'Expected: %d, Actual: %d'% (
115 byte_size_fn, field_number, value, expected_size, actual_size))
121 [wire_format.Int32ByteSize, 0, 1],
122 [wire_format.Int32ByteSize, 127, 1],
123 [wire_format.Int32ByteSize, 128, 2],
124 [wire_format.Int32ByteSize, -1, 10],
126 [wire_format.Int64ByteSize, 0, 1],
127 [wire_format.Int64ByteSize, 127, 1],
128 [wire_format.Int64ByteSize, 128, 2],
129 [wire_format.Int64ByteSize, -1, 10],
131 [wire_format.UInt32ByteSize, 0, 1],
132 [wire_format.UInt32ByteSize, 127, 1],
133 [wire_format.UInt32ByteSize, 128, 2],
134 [wire_format.UInt32ByteSize, wire_format.UINT32_MAX, 5],
136 [wire_format.UInt64ByteSize, 0, 1],
137 [wire_format.UInt64ByteSize, 127, 1],
138 [wire_format.UInt64ByteSize, 128, 2],
139 [wire_format.UInt64ByteSize, wire_format.UINT64_MAX, 10],
141 [wire_format.SInt32ByteSize, 0, 1],
142 [wire_format.SInt32ByteSize, -1, 1],
143 [wire_format.SInt32ByteSize, 1, 1],
144 [wire_format.SInt32ByteSize, -63, 1],
145 [wire_format.SInt32ByteSize, 63, 1],
146 [wire_format.SInt32ByteSize, -64, 1],
147 [wire_format.SInt32ByteSize, 64, 2],
149 [wire_format.SInt64ByteSize, 0, 1],
150 [wire_format.SInt64ByteSize, -1, 1],
151 [wire_format.SInt64ByteSize, 1, 1],
152 [wire_format.SInt64ByteSize, -63, 1],
153 [wire_format.SInt64ByteSize, 63, 1],
154 [wire_format.SInt64ByteSize, -64, 1],
155 [wire_format.SInt64ByteSize, 64, 2],
157 [wire_format.Fixed32ByteSize, 0, 4],
158 [wire_format.Fixed32ByteSize, wire_format.UINT32_MAX, 4],
160 [wire_format.Fixed64ByteSize, 0, 8],
161 [wire_format.Fixed64ByteSize, wire_format.UINT64_MAX, 8],
163 [wire_format.SFixed32ByteSize, 0, 4],
164 [wire_format.SFixed32ByteSize, wire_format.INT32_MIN, 4],
165 [wire_format.SFixed32ByteSize, wire_format.INT32_MAX, 4],
167 [wire_format.SFixed64ByteSize, 0, 8],
168 [wire_format.SFixed64ByteSize, wire_format.INT64_MIN, 8],
169 [wire_format.SFixed64ByteSize, wire_format.INT64_MAX, 8],
171 [wire_format.FloatByteSize, 0.0, 4],
172 [wire_format.FloatByteSize, 1000000000.0, 4],
173 [wire_format.FloatByteSize, -1000000000.0, 4],
175 [wire_format.DoubleByteSize, 0.0, 8],
176 [wire_format.DoubleByteSize, 1000000000.0, 8],
177 [wire_format.DoubleByteSize, -1000000000.0, 8],
179 [wire_format.BoolByteSize,
False, 1],
180 [wire_format.BoolByteSize,
True, 1],
182 [wire_format.EnumByteSize, 0, 1],
183 [wire_format.EnumByteSize, 127, 1],
184 [wire_format.EnumByteSize, 128, 2],
185 [wire_format.EnumByteSize, wire_format.UINT32_MAX, 5],
187 for args
in NUMERIC_ARGS:
191 for byte_size_fn
in (wire_format.StringByteSize, wire_format.BytesByteSize):
193 self.assertEqual(5, byte_size_fn(10,
'abc'))
195 self.assertEqual(6, byte_size_fn(16,
'abc'))
197 self.assertEqual(132, byte_size_fn(16,
'a' * 128))
201 self.assertEqual(10, wire_format.StringByteSize(
202 5, b
'\xd0\xa2\xd0\xb5\xd1\x81\xd1\x82'.decode(
'utf-8')))
204 class MockMessage(object):
210 message_byte_size = 10
211 mock_message = MockMessage(byte_size=message_byte_size)
214 self.assertEqual(2 + message_byte_size,
215 wire_format.GroupByteSize(1, mock_message))
217 self.assertEqual(4 + message_byte_size,
218 wire_format.GroupByteSize(16, mock_message))
222 self.assertEqual(2 + mock_message.byte_size,
223 wire_format.MessageByteSize(1, mock_message))
225 self.assertEqual(3 + mock_message.byte_size,
226 wire_format.MessageByteSize(16, mock_message))
228 mock_message.byte_size = 128
229 self.assertEqual(4 + mock_message.byte_size,
230 wire_format.MessageByteSize(16, mock_message))
236 mock_message.byte_size = 10
237 self.assertEqual(mock_message.byte_size + 6,
238 wire_format.MessageSetItemByteSize(1, mock_message))
242 mock_message.byte_size = 128
243 self.assertEqual(mock_message.byte_size + 7,
244 wire_format.MessageSetItemByteSize(1, mock_message))
248 self.assertEqual(mock_message.byte_size + 8,
249 wire_format.MessageSetItemByteSize(128, mock_message))
252 self.assertRaises(message.EncodeError,
253 wire_format.UInt64ByteSize, 1, 1 << 128)
256 if __name__ ==
'__main__':