@@ -2128,6 +2128,8 @@ def test_shield_cancel_outer(self):
21282128 test_utils .run_briefly (self .loop )
21292129 self .assertTrue (outer .cancelled ())
21302130 self .assertEqual (0 , 0 if outer ._callbacks is None else len (outer ._callbacks ))
2131+ self .assertFalse (inner ._asyncio_awaited_by )
2132+ self .assertTrue ({f for f , _ctx in inner ._callbacks or []} <= {asyncio .tasks ._log_on_exception })
21312133
21322134 def test_shield_cancel_outer_result (self ):
21332135 mock_handler = mock .Mock ()
@@ -2153,6 +2155,21 @@ def test_shield_cancel_outer_exception(self):
21532155 test_utils .run_briefly (self .loop )
21542156 mock_handler .assert_called_once ()
21552157
2158+ def test_shield_cancel_outer_in_task (self ):
2159+ inner = self .new_future (self .loop )
2160+
2161+ async def coro ():
2162+ outer = asyncio .shield (inner )
2163+ self .assertNotEqual (0 , len (inner ._callbacks ))
2164+ outer .cancel ()
2165+ await asyncio .sleep (0 )
2166+ self .assertTrue (outer .cancelled ())
2167+
2168+ task = self .new_task (self .loop , coro ())
2169+ self .loop .run_until_complete (task )
2170+ self .assertFalse (inner ._asyncio_awaited_by )
2171+ self .assertTrue ({f for f , _ctx in inner ._callbacks or []} <= {asyncio .tasks ._log_on_exception })
2172+
21562173 def test_shield_duplicate_log_once (self ):
21572174 mock_handler = mock .Mock ()
21582175 self .loop .set_exception_handler (mock_handler )
0 commit comments