def testpacktag(self): field_number = 0xabc tag_type = 2 self.assertequal((field_number << 3) | tag_type, wire_format.packtag(field_number, tag_type)) packtag = wire_format.packtag # number too high. self.assertraises(message.encodeerror, packtag, field_number, 6) # number too low. self.assertraises(message.encodeerror, packtag, field_number, -1)
def testunpacktag(self): # test field numbers that will require various varint sizes. for expected_field_number in (1, 15, 16, 2047, 2048): for expected_wire_type in range(6): # highest-numbered wiretype is 5. field_number, wire_type = wire_format.unpacktag( wire_format.packtag(expected_field_number, expected_wire_type)) self.assertequal(expected_field_number, field_number) self.assertequal(expected_wire_type, wire_type) self.assertraises(typeerror, wire_format.unpacktag, none) self.assertraises(typeerror, wire_format.unpacktag, 'abc') self.assertraises(typeerror, wire_format.unpacktag, 0.0) self.assertraises(typeerror, wire_format.unpacktag, object())
def tagbytes(field_number, wire_type): """encode the given tag and return the bytes. only called at startup.""" return _varintbytes(wire_format.packtag(field_number, wire_type))
def _tagsize(field_number): """returns the number of bytes required to serialize a tag with this field number.""" # just pass in type 0, since the type won't affect the tag+type size. return _varintsize(wire_format.packtag(field_number, 0))