def test_loop_run_forever_after_toggle_set_is_running(loop: GLibEventLoop): loop.set_is_running(True) loop.set_is_running(False) idle_add(loop.context, loop.stop) loop.run_forever()
def test_loop_run_forever_and_stop(loop: GLibEventLoop): running_loop_check = True always_running_check = True num = 10 def countdown(): nonlocal num, running_loop_check, always_running_check num -= 1 if asyncio.get_running_loop() is not loop: running_loop_check = False always_running_check = loop.is_running() and always_running_check if num > 0: return True else: loop.stop() return False # Iterate through context `num` times. context = loop.context source = idle_add(context, countdown) loop.run_forever() assert running_loop_check assert always_running_check assert source.is_destroyed() assert not context.pending()
def test_loop_run_forever_when_not_owner(): from aioglib._loop import GLibEventLoop context = MockMainContext(is_owner=False) loop = GLibEventLoop(context) with raises(RuntimeError): loop.run_forever()
def test_loop_run_forever_releases_context(): from gi.repository.GLib import MainLoop as MockMainLoop mock_context = MockMainContext() loop = GLibEventLoop(mock_context) MockMainLoop().run.side_effect = loop.stop MockMainLoop().is_running.return_value = False loop.run_forever() assert mock_context.acquire_count == 0
def test_loop_run_forever_when_set_is_running(loop: GLibEventLoop): loop.set_is_running(True) with raises(RuntimeError): loop.run_forever()