asyncio, Tulip issue 137: In debug mode, add the traceback where the coroutine

object was created to the "coroutine ... was never yield from" log
This commit is contained in:
Victor Stinner 2014-06-27 12:28:41 +02:00
parent c4cca45baf
commit bbd96c6f47
2 changed files with 42 additions and 7 deletions

View file

@ -1,6 +1,7 @@
"""Tests for tasks.py."""
import os.path
import re
import sys
import types
import unittest
@ -1572,6 +1573,37 @@ class TaskTests(test_utils.TestCase):
})
mock_handler.reset_mock()
@mock.patch('asyncio.tasks.logger')
def test_coroutine_never_yielded(self, m_log):
debug = asyncio.tasks._DEBUG
try:
asyncio.tasks._DEBUG = True
@asyncio.coroutine
def coro_noop():
pass
finally:
asyncio.tasks._DEBUG = debug
tb_filename = __file__
tb_lineno = sys._getframe().f_lineno + 1
coro = coro_noop()
coro = None
support.gc_collect()
self.assertTrue(m_log.error.called)
message = m_log.error.call_args[0][0]
func_filename, func_lineno = test_utils.get_function_source(coro_noop)
regex = (r'^Coroutine %s\(\) at %s:%s was never yielded from\n'
r'Coroutine object created at \(most recent call last\):\n'
r'.*\n'
r' File "%s", line %s, in test_coroutine_never_yielded\n'
r' coro = coro_noop\(\)$'
% (re.escape(coro_noop.__qualname__),
func_filename, func_lineno,
tb_filename, tb_lineno))
self.assertRegex(message, re.compile(regex, re.DOTALL))
class GatherTestsBase: