@@ -2109,6 +2109,8 @@ def test_shield_cancel_outer(self):
21092109 test_utils .run_briefly (self .loop )
21102110 self .assertTrue (outer .cancelled ())
21112111 self .assertEqual (0 , 0 if outer ._callbacks is None else len (outer ._callbacks ))
2112+ self .assertFalse (inner ._asyncio_awaited_by )
2113+ self .assertTrue ({f for f , _ctx in inner ._callbacks or []} <= {asyncio .tasks ._log_on_exception })
21122114
21132115 def test_shield_cancel_outer_result (self ):
21142116 mock_handler = mock .Mock ()
@@ -2134,6 +2136,21 @@ def test_shield_cancel_outer_exception(self):
21342136 test_utils .run_briefly (self .loop )
21352137 mock_handler .assert_called_once ()
21362138
2139+ def test_shield_cancel_outer_in_task (self ):
2140+ inner = self .new_future (self .loop )
2141+
2142+ async def coro ():
2143+ outer = asyncio .shield (inner )
2144+ self .assertNotEqual (0 , len (inner ._callbacks ))
2145+ outer .cancel ()
2146+ await asyncio .sleep (0 )
2147+ self .assertTrue (outer .cancelled ())
2148+
2149+ task = self .new_task (self .loop , coro ())
2150+ self .loop .run_until_complete (task )
2151+ self .assertFalse (inner ._asyncio_awaited_by )
2152+ self .assertTrue ({f for f , _ctx in inner ._callbacks or []} <= {asyncio .tasks ._log_on_exception })
2153+
21372154 def test_shield_duplicate_log_once (self ):
21382155 mock_handler = mock .Mock ()
21392156 self .loop .set_exception_handler (mock_handler )
0 commit comments