From 0eb8f41aa19d16166c1d31a7d4f7dea522aeba17 Mon Sep 17 00:00:00 2001 From: Eric Snow Date: Thu, 8 Mar 2018 23:39:02 +0000 Subject: [PATCH] Identify pending handlers. --- tests/helpers/protocol.py | 15 ++++++++++----- tests/helpers/pydevd/_fake.py | 7 +++++-- tests/helpers/vsc/_fake.py | 9 +++++++-- 3 files changed, 22 insertions(+), 9 deletions(-) diff --git a/tests/helpers/protocol.py b/tests/helpers/protocol.py index 8a6fc660..198f4f8a 100644 --- a/tests/helpers/protocol.py +++ b/tests/helpers/protocol.py @@ -179,9 +179,13 @@ class Daemon(object): self._closed = True self._close() - def add_handler(self, handler, oneoff=True): + def add_handler(self, handler, handlername=None, oneoff=True): """Add the given handler to the list of possible handlers.""" - entry = (handler, 1 if oneoff else None) + entry = ( + handler, + handlername or repr(handler), + 1 if oneoff else None, + ) self._handlers.append(entry) return handler @@ -230,14 +234,14 @@ class Daemon(object): def _handle_message(self, msg): for i, entry in enumerate(list(self._handlers)): - handle_message, remaining = entry + handle_message, name, remaining = entry handled = handle_message(msg, self._send_message) if handled or handled is None: if remaining is not None: if remaining == 1: self._handlers.pop(i) else: - self._handlers[i] = (handle_message, remaining-1) + self._handlers[i] = (handle_message, name, remaining-1) return handled else: if self._default_handler is not None: @@ -280,5 +284,6 @@ class Daemon(object): if force: self._handlers = [] else: - raise RuntimeError('have pending handlers') + names = ', '.join(name for _, name, _ in self._handlers) + raise RuntimeError('have pending handlers: [{}]'.format(names)) self._received = list(self._protocol.parse_each(initial)) diff --git a/tests/helpers/pydevd/_fake.py b/tests/helpers/pydevd/_fake.py index 1c353628..ce9d7564 100644 --- a/tests/helpers/pydevd/_fake.py +++ b/tests/helpers/pydevd/_fake.py @@ -112,12 +112,15 @@ class FakePyDevd(protocol.Daemon): # XXX Ensure it's a request? return self.send_message(msg) - def add_pending_response(self, cmdid, text, reqid=None): + def add_pending_response(self, cmdid, text, reqid=None, handlername=None): """Add a response for a request.""" if reqid is None: reqid = cmdid respid = cmdid + if handlername is None: + handlername = ''.format(cmdid) + def handle_request(req, send_message): try: cmdid, seq, _ = req @@ -129,4 +132,4 @@ class FakePyDevd(protocol.Daemon): resp = Message(respid, seq, text) send_message(resp) return True - self.add_handler(handle_request) + self.add_handler(handle_request, handlername) diff --git a/tests/helpers/vsc/_fake.py b/tests/helpers/vsc/_fake.py index 4c65bf17..578e4f0c 100644 --- a/tests/helpers/vsc/_fake.py +++ b/tests/helpers/vsc/_fake.py @@ -99,6 +99,8 @@ class FakeVSC(protocol.Daemon): assert(msg.command == command) return True + kwargs.setdefault('handlername', + ''.format(command, reqseq)) return self._wait_for_message(match, req, **kwargs) def wait_for_event(self, event, **kwargs): @@ -112,6 +114,8 @@ class FakeVSC(protocol.Daemon): return False return True + kwargs.setdefault('handlername', + ''.format(event)) return self._wait_for_message(match, req=None, **kwargs) # internal methods @@ -138,7 +142,8 @@ class FakeVSC(protocol.Daemon): super(FakeVSC, self)._close() @contextlib.contextmanager - def _wait_for_message(self, match, req=None, handler=None, timeout=1): + def _wait_for_message(self, match, req=None, handler=None, + handlername=None, timeout=1): lock = threading.Lock() lock.acquire() @@ -149,7 +154,7 @@ class FakeVSC(protocol.Daemon): handler(msg, send_message) else: return False - self.add_handler(handle_message) + self.add_handler(handle_message, handlername) yield req