def test_wrongTypeForMessage(self): """ If a non-L{Message} is passed as the second argument to L{PbLiteSerializer.deserialize}, it raises L{AttributeError}. """ serializer = pbliteserializer.PbLiteSerializer() for messageDecoded in [None, 3, 4L, 0.5, {}, set()]: self.assertRaises( AttributeError, lambda: serializer.deserialize(messageDecoded, []))
def test_wrongTypeForData(self): """ If a non-indexable object is passed as the second argument to L{PbLiteSerializer.deserialize}, it raises L{TypeError}. """ serializer = pbliteserializer.PbLiteSerializer() for pblite in [None, 3, 4L, 0.5]: messageDecoded = alltypes_pb2.TestAllTypes() self.assertRaises( TypeError, lambda: serializer.deserialize(messageDecoded, pblite))
def test_deserializeSerializeRepeatedMessage(self): """ Deserializing a repeated Message works. When serialized, it matches the original serialized data. """ serializer = pbliteserializer.PbLiteSerializer() pblite = _getExpectedDefaults() # Set the repeated_nested_message pblite[48] = [[None, 100], [None, 200]] messageDecoded = alltypes_pb2.TestAllTypes() serializer.deserialize(messageDecoded, pblite) pbliteReencoded = serializer.serialize(messageDecoded) self.assertEqual([[None, 100], [None, 200]], pbliteReencoded[48])
def test_serializeDeserialize(self): """ This is a port of Closure Library's closure/goog/proto2/pbserializer_test.html testSerializationAndDeserialization. """ message = alltypes_pb2.TestAllTypes() # Set the fields. # Singular. message.optional_int32 = 101 message.optional_int64 = 102 message.optional_uint32 = 103 message.optional_uint64 = 104 message.optional_sint32 = 105 message.optional_sint64 = 106 message.optional_fixed32 = 107 message.optional_fixed64 = 108 message.optional_sfixed32 = 109 message.optional_sfixed64 = 110 message.optional_float = 111.5 message.optional_double = 112.5 message.optional_bool = True message.optional_string = 'test' message.optional_bytes = 'abcd' # Note: setting OptionGroup.a is wrong and leads to disaster. message.optionalgroup.a = 111 message.optional_nested_message.b = 112 message.optional_nested_enum = alltypes_pb2.TestAllTypes.FOO # Repeated. message.repeated_int32.append(201) message.repeated_int32.append(202) # Skip a few repeated fields so we can test how null array values are # handled. message.repeated_string.append('foo') message.repeated_string.append('bar') message.required_int32 = 1 # Serialize. serializer = pbliteserializer.PbLiteSerializer() pblite = serializer.serialize(message) self.assertTrue(isinstance(pblite, list)) # Assert that everything serialized properly. self.assertEqual(101, pblite[1]) self.assertEqual(102, pblite[2]) self.assertEqual(103, pblite[3]) self.assertEqual(104, pblite[4]) self.assertEqual(105, pblite[5]) self.assertEqual(106, pblite[6]) self.assertEqual(107, pblite[7]) self.assertEqual(108, pblite[8]) self.assertEqual(109, pblite[9]) self.assertEqual(110, pblite[10]) self.assertEqual(111.5, pblite[11]) self.assertEqual(112.5, pblite[12]) self.assertEqual(1, pblite[13]) # True is serialized as 1 self.assertEqual('test', pblite[14]) self.assertEqual('abcd', pblite[15]) self.assertEqual(111, pblite[16][17]) self.assertEqual(112, pblite[18][1]) self.assertEqual(None, pblite[19]) self.assertEqual(None, pblite[20]) self.assertEqual(alltypes_pb2.TestAllTypes.FOO, pblite[21]) self.assertEqual(201, pblite[31][0]) self.assertEqual(202, pblite[31][1]) self.assertEqual('foo', pblite[44][0]) self.assertEqual('bar', pblite[44][1]) self.assertEqual(1, pblite[50]) messageDecoded = alltypes_pb2.TestAllTypes() serializer.deserialize(messageDecoded, pblite) ##print "\n\n", message ##print "\n\n", messageDecoded self.assertEqual( messageDecoded, message, "Messages do not match:\n" + str(messageDecoded) + "\n!=\n\n" + str(message))
def test_defaults(self): message = alltypes_pb2.TestAllTypes() serializer = pbliteserializer.PbLiteSerializer() ser = serializer.serialize(message) self.assertEqual(_getExpectedDefaults(), ser)
def setUp(self): self.serializer = pbliteserializer.PbLiteSerializer()