@@ -22,6 +22,71 @@ async def run_in_thread(func, /, *args):
2222
2323
2424class RunTests (unittest .TestCase ):
25+ def test_install_makes_asyncio_create_rsloop_loops (self ) -> None :
26+ original_policy = asyncio .get_event_loop_policy ()
27+ try :
28+ asyncio .set_event_loop_policy (asyncio .DefaultEventLoopPolicy ())
29+
30+ rsloop .install ()
31+ self .assertIsInstance (
32+ asyncio .get_event_loop_policy (),
33+ rsloop .EventLoopPolicy ,
34+ )
35+
36+ loop = asyncio .new_event_loop ()
37+ try :
38+ self .assertIsInstance (loop , rsloop .Loop )
39+ finally :
40+ loop .close ()
41+ finally :
42+ rsloop .uninstall ()
43+ asyncio .set_event_loop_policy (original_policy )
44+
45+ def test_installed_policy_affects_asyncio_run (self ) -> None :
46+ original_policy = asyncio .get_event_loop_policy ()
47+ try :
48+ asyncio .set_event_loop_policy (asyncio .DefaultEventLoopPolicy ())
49+ rsloop .install ()
50+
51+ async def main () -> bool :
52+ return isinstance (asyncio .get_running_loop (), rsloop .Loop )
53+
54+ self .assertTrue (asyncio .run (main ()))
55+ finally :
56+ rsloop .uninstall ()
57+ asyncio .set_event_loop_policy (original_policy )
58+
59+ def test_uninstall_restores_previous_event_loop_policy (self ) -> None :
60+ original_policy = asyncio .get_event_loop_policy ()
61+ previous_policy = asyncio .DefaultEventLoopPolicy ()
62+ try :
63+ asyncio .set_event_loop_policy (previous_policy )
64+ rsloop .install ()
65+ rsloop .uninstall ()
66+
67+ self .assertIs (asyncio .get_event_loop_policy (), previous_policy )
68+ loop = asyncio .new_event_loop ()
69+ try :
70+ self .assertNotIsInstance (loop , rsloop .Loop )
71+ finally :
72+ loop .close ()
73+ finally :
74+ rsloop .uninstall ()
75+ asyncio .set_event_loop_policy (original_policy )
76+
77+ def test_uninstall_does_not_replace_newly_installed_policy (self ) -> None :
78+ original_policy = asyncio .get_event_loop_policy ()
79+ other_policy = asyncio .DefaultEventLoopPolicy ()
80+ try :
81+ rsloop .install ()
82+ asyncio .set_event_loop_policy (other_policy )
83+ rsloop .uninstall ()
84+
85+ self .assertIs (asyncio .get_event_loop_policy (), other_policy )
86+ finally :
87+ rsloop .uninstall ()
88+ asyncio .set_event_loop_policy (original_policy )
89+
2590 def test_set_event_loop_accepts_rsloop_loop (self ) -> None :
2691 loop = rsloop .new_event_loop ()
2792 try :
0 commit comments