Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitc2a5cb2

Browse files
tacaswellQuLogic
authored andcommitted
TST: fix ctrl-c tests on windows
1 parent6abb746 commitc2a5cb2

File tree

2 files changed

+32
-17
lines changed

2 files changed

+32
-17
lines changed

‎lib/matplotlib/backends/qt_compat.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -228,8 +228,14 @@ def _maybe_allow_interrupt(qapp):
228228
rsock.fileno(),_enum('QtCore.QSocketNotifier.Type').Read
229229
)
230230

231+
rsock.setblocking(False)
231232
# Clear the socket to re-arm the notifier.
232-
sn.activated.connect(lambda*args:rsock.recv(1))
233+
@sn.activated.connect
234+
def_may_clear_sock(*args):
235+
try:
236+
rsock.recv(1)
237+
exceptBlockingIOError:
238+
pass
233239

234240
defhandle(*args):
235241
nonlocalhandler_args

‎lib/matplotlib/tests/test_backend_qt.py

Lines changed: 25 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -54,14 +54,14 @@ def test_fig_close():
5454
assertinit_figs==Gcf.figs
5555

5656

57-
classInterruptiblePopen(subprocess.Popen):
57+
classWaitForStringPopen(subprocess.Popen):
5858
"""
5959
A Popen that passes flags that allow triggering KeyboardInterrupt.
6060
"""
6161

6262
def__init__(self,*args,**kwargs):
6363
ifsys.platform=='win32':
64-
kwargs['creationflags']=subprocess.CREATE_NEW_PROCESS_GROUP
64+
kwargs['creationflags']=subprocess.CREATE_NEW_CONSOLE
6565
super().__init__(
6666
*args,**kwargs,
6767
# Force Agg so that each test can switch to its desired Qt backend.
@@ -80,25 +80,35 @@ def wait_for(self, terminator):
8080
ifbuf.endswith(terminator):
8181
return
8282

83-
definterrupt(self):
84-
"""Interrupt process in a platform-specific way."""
85-
ifsys.platform=='win32':
86-
self.send_signal(signal.CTRL_C_EVENT)
87-
else:
88-
self.send_signal(signal.SIGINT)
89-
9083

9184
def_test_sigint_impl(backend,target_name,kwargs):
9285
importsys
9386
importmatplotlib.pyplotasplt
87+
importos
88+
importthreading
89+
9490
plt.switch_backend(backend)
9591
frommatplotlib.backends.qt_compatimportQtCore
9692

97-
target=getattr(plt,target_name)
93+
definterupter():
94+
ifsys.platform=='win32':
95+
importwin32api
96+
win32api.GenerateConsoleCtrlEvent(0,0)
97+
else:
98+
importsignal
99+
os.kill(os.getpid(),signal.SIGINT)
98100

101+
target=getattr(plt,target_name)
102+
timer=threading.Timer(1,interupter)
99103
fig=plt.figure()
100-
fig.canvas.mpl_connect('draw_event',
101-
lambda*args:print('DRAW',flush=True))
104+
fig.canvas.mpl_connect(
105+
'draw_event',
106+
lambda*args:print('DRAW',flush=True)
107+
)
108+
fig.canvas.mpl_connect(
109+
'draw_event',
110+
lambda*args:timer.start()
111+
)
102112
try:
103113
target(**kwargs)
104114
exceptKeyboardInterrupt:
@@ -112,13 +122,12 @@ def _test_sigint_impl(backend, target_name, kwargs):
112122
])
113123
deftest_sigint(target,kwargs):
114124
backend=plt.get_backend()
115-
proc=InterruptiblePopen(
125+
proc=WaitForStringPopen(
116126
[sys.executable,"-c",
117127
inspect.getsource(_test_sigint_impl)+
118128
f"\n_test_sigint_impl({backend!r},{target!r},{kwargs!r})"])
119129
try:
120130
proc.wait_for('DRAW')
121-
proc.interrupt()
122131
stdout,_=proc.communicate(timeout=_test_timeout)
123132
except:
124133
proc.kill()
@@ -164,7 +173,7 @@ def custom_signal_handler(signum, frame):
164173
])
165174
deftest_other_signal_before_sigint(target,kwargs):
166175
backend=plt.get_backend()
167-
proc=InterruptiblePopen(
176+
proc=WaitForStringPopen(
168177
[sys.executable,"-c",
169178
inspect.getsource(_test_other_signal_before_sigint_impl)+
170179
"\n_test_other_signal_before_sigint_impl("
@@ -173,7 +182,7 @@ def test_other_signal_before_sigint(target, kwargs):
173182
proc.wait_for('DRAW')
174183
os.kill(proc.pid,signal.SIGUSR1)
175184
proc.wait_for('SIGUSR1')
176-
proc.interrupt()
185+
os.kill(proc.pid,signal.SIGINT)
177186
stdout,_=proc.communicate(timeout=_test_timeout)
178187
except:
179188
proc.kill()

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp