11import os
22import sys
3- import threading
43import time
54import typing
65
@@ -27,44 +26,54 @@ def emissions_channel_fixture(request):
2726 return request .param
2827
2928
29+ timeout = 40
30+
31+
3032@pytest .mark .parametrize ("event_type_registered" , [True , False ])
31- def test_reenter_event_triggers_in_main_thread (
32- qapp , monkeypatch , event_type_registered
33- ):
33+ def test_reenter_event_triggers_in_main_thread (testdir , event_type_registered ):
3434 """Reenter events posted in another thread result in the function being run in the
35- main thread.
35+ main thread. Run in a subprocess so the reenter event type starts out unregistered.
3636 """
37+ if event_type_registered :
38+ preregistration = "qtrio.register_event_type()"
39+ else :
40+ preregistration = ""
41+
42+ test_file = rf"""
43+ import threading
44+
45+ import qtrio
3746 import qtrio.qt
3847
39- # TODO: i don't like monkeypatch... but oh well, let's get rid of it someday and here's some context.
40- # https://github.com/altendky/qtrio/pull/288/changes#r3619087492
41- monkeypatch .setattr (qtrio ._core , "_reenter_event_type" , None )
42- if event_type_registered :
43- qtrio .register_event_type ()
4448
45- result = []
49+ def test(qapp):
50+ { preregistration }
4651
47- reenter = qtrio . qt . Reenter ()
52+ result = []
4853
49- def post ():
50- if qtrio .registered_event_type () is None :
51- qtrio .register_event_type ()
52- event = qtrio .qt .ReenterEvent (fn = handler )
53- qapp .postEvent (reenter , event )
54+ reenter = qtrio.qt.Reenter()
5455
55- def handler ():
56- result .append (threading .get_ident ())
56+ def post():
57+ if qtrio.registered_event_type() is None:
58+ qtrio.register_event_type()
59+ event = qtrio.qt.ReenterEvent(fn=handler)
60+ qapp.postEvent(reenter, event)
5761
58- thread = threading .Thread (target = post )
59- thread .start ()
60- thread .join ()
62+ def handler():
63+ result.append(threading.get_ident())
6164
62- qapp .processEvents ()
65+ thread = threading.Thread(target=post)
66+ thread.start()
67+ thread.join()
6368
64- assert result == [ threading . get_ident ()]
69+ qapp.processEvents()
6570
71+ assert result == [threading.get_ident()]
72+ """
73+ testdir .makepyfile (test_file )
6674
67- timeout = 40
75+ result = testdir .runpytest_subprocess (timeout = timeout )
76+ result .assert_outcomes (passed = 1 )
6877
6978
7079def test_reenter_event_raises_if_type_not_registered (testdir ):
0 commit comments