]> granicus.if.org Git - python/commitdiff
Rewrite asyncio test to be more meaningful (#4363)
authorYury Selivanov <yury@magic.io>
Fri, 10 Nov 2017 20:34:17 +0000 (15:34 -0500)
committerGitHub <noreply@github.com>
Fri, 10 Nov 2017 20:34:17 +0000 (15:34 -0500)
Lib/test/test_asyncio/test_base_events.py

index 6fdb593da6ed048fa324c48ee12899b3be699e22..a25069efb5cdcbadadcdf8b828188cd770f89b01 100644 (file)
@@ -530,20 +530,25 @@ class BaseEventLoopTests(test_utils.TestCase):
             other_loop.run_until_complete, task)
 
     def test_run_until_complete_loop_orphan_future_close_loop(self):
-        async def foo(sec=0):
-            await asyncio.sleep(sec)
+        class ShowStopper(BaseException):
+            pass
 
-        self.loop.close()
-        loop = asyncio.new_event_loop()
-        asyncio.set_event_loop(loop)
+        async def foo(delay):
+            await asyncio.sleep(delay, loop=self.loop)
+
+        def throw():
+            raise ShowStopper
+
+        self.loop._process_events = mock.Mock()
+        self.loop.call_soon(throw)
         try:
-            with mock.patch('asyncio.base_events.BaseEventLoop.run_forever', 
-                            side_effect=Exception):
-                loop.run_until_complete(foo())
-        except:
+            self.loop.run_until_complete(foo(0.1))
+        except ShowStopper:
             pass
-        loop.run_until_complete(foo(0.1))
-        loop.close()
+
+        # This call fails if run_until_complete does not clean up
+        # done-callback for the previous future.
+        self.loop.run_until_complete(foo(0.2))
 
     def test_subprocess_exec_invalid_args(self):
         args = [sys.executable, '-c', 'pass']