def test_message_serializer_deserialize_completion_response(): # TODO should start with a packed message and use msgpack to unpack, for now start with builtin form: unpacked = { '_message': 'CompletionResponse', 'token': 'thetoken', 'start': 11, 'end': 12, 'limitExceeded': True, 'options': [ {'insert': 'insert', 'desc': 'thedescription', 'semantics': 'string', 'extensionId': 'theExtId'}, {'insert': 'insert2', 'desc': 'thedescription2', 'semantics': 'identifier', 'extensionId': 'theExtId2'} ] } packed = umsgpack.packb(unpacked) # and use serializer without unpacker: serializer = MessageSerializer() msg = serializer.deserialize(packed) expected = CompletionResponse(11, 12, True, [CompletionOption('insert', 'thedescription', semantics=SemanticType.string, extensionId='theExtId'), CompletionOption('insert2', 'thedescription2', semantics=SemanticType.identifier, extensionId='theExtId2')], 'thetoken') # avoid implementation of eq in schema classes, so rely on correct serialization for now: assert serializer.serialize(msg) == serializer.serialize(expected)
def test_message_serializer_deserialize_chain(): mock_packer = mock.MagicMock() mock_packer.load = mock.MagicMock(return_value=dict(_message=mock.sentinel.MESSAGE_NAME)) buffer = bytes(b'bytes') with mock.patch('jep_py.protocol.Message.class_by_name', lambda name: Shutdown) as mock_class_by_msgname: serializer = MessageSerializer(mock_packer) assert isinstance(serializer.deserialize(buffer), Shutdown) assert mock_packer.load.called