@@ -87,8 +87,8 @@ class BaseTaskTests:
8787 Task = None
8888 Future = None
8989
90- def new_task (self , loop , coro ):
91- return self .__class__ .Task (coro , loop = loop )
90+ def new_task (self , loop , coro , name = 'TestTask' ):
91+ return self .__class__ .Task (coro , loop = loop , name = name )
9292
9393 def new_future (self , loop ):
9494 return self .__class__ .Future (loop = loop )
@@ -295,28 +295,57 @@ def notmuch():
295295 coro = format_coroutine (coro_qualname , 'running' , src ,
296296 t ._source_traceback , generator = True )
297297 self .assertEqual (repr (t ),
298- ' <Task pending %s cb=[<Dummy>()]>' % coro )
298+ " <Task pending name='TestTask' %s cb=[<Dummy>()]>" % coro )
299299
300300 # test cancelling Task
301301 t .cancel () # Does not take immediate effect!
302302 self .assertEqual (repr (t ),
303- ' <Task cancelling %s cb=[<Dummy>()]>' % coro )
303+ " <Task cancelling name='TestTask' %s cb=[<Dummy>()]>" % coro )
304304
305305 # test cancelled Task
306306 self .assertRaises (asyncio .CancelledError ,
307307 self .loop .run_until_complete , t )
308308 coro = format_coroutine (coro_qualname , 'done' , src ,
309309 t ._source_traceback )
310310 self .assertEqual (repr (t ),
311- ' <Task cancelled %s>' % coro )
311+ " <Task cancelled name='TestTask' %s>" % coro )
312312
313313 # test finished Task
314314 t = self .new_task (self .loop , notmuch ())
315315 self .loop .run_until_complete (t )
316316 coro = format_coroutine (coro_qualname , 'done' , src ,
317317 t ._source_traceback )
318318 self .assertEqual (repr (t ),
319- "<Task finished %s result='abc'>" % coro )
319+ "<Task finished name='TestTask' %s result='abc'>" % coro )
320+
321+ def test_task_repr_autogenerated (self ):
322+ @asyncio .coroutine
323+ def notmuch ():
324+ return 123
325+
326+ t1 = self .new_task (self .loop , notmuch (), None )
327+ t2 = self .new_task (self .loop , notmuch (), None )
328+ self .assertNotEqual (repr (t1 ), repr (t2 ))
329+
330+ match1 = re .match ("^<Task pending name='Task-(\d+)'" , repr (t1 ))
331+ self .assertIsNotNone (match1 )
332+ match2 = re .match ("^<Task pending name='Task-(\d+)'" , repr (t2 ))
333+ self .assertIsNotNone (match2 )
334+
335+ # Autogenerated task names should have monotonically increasing numbers
336+ self .assertLess (int (match1 .group (1 )), int (match2 .group (1 )))
337+ self .loop .run_until_complete (t1 )
338+ self .loop .run_until_complete (t2 )
339+
340+ def test_task_repr_name_not_str (self ):
341+ @asyncio .coroutine
342+ def notmuch ():
343+ return 123
344+
345+ t = self .new_task (self .loop , notmuch ())
346+ t .set_name ({6 })
347+ self .assertEqual (t .get_name (), '{6}' )
348+ self .loop .run_until_complete (t )
320349
321350 def test_task_repr_coro_decorator (self ):
322351 self .loop .set_debug (False )
@@ -376,7 +405,7 @@ def notmuch():
376405 t ._source_traceback ,
377406 generator = not coroutines ._DEBUG )
378407 self .assertEqual (repr (t ),
379- ' <Task pending %s cb=[<Dummy>()]>' % coro )
408+ " <Task pending name='TestTask' %s cb=[<Dummy>()]>" % coro )
380409 self .loop .run_until_complete (t )
381410
382411 def test_task_repr_wait_for (self ):
@@ -2260,6 +2289,18 @@ async def coro():
22602289
22612290 self .loop .run_until_complete (coro ())
22622291
2292+ def test_bare_create_named_task (self ):
2293+
2294+ async def coro_noop ():
2295+ pass
2296+
2297+ async def coro ():
2298+ task = asyncio .create_task (coro_noop (), name = 'No-op' )
2299+ self .assertEqual (task .get_name (), 'No-op' )
2300+ await task
2301+
2302+ self .loop .run_until_complete (coro ())
2303+
22632304 def test_context_1 (self ):
22642305 cvar = contextvars .ContextVar ('cvar' , default = 'nope' )
22652306
0 commit comments