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

Commit97bd32e

Browse files
committed
TST: fix ctrl-c tests on windows
1 parentb3e4dfa commit97bd32e

File tree

1 file changed

+24
-17
lines changed

1 file changed

+24
-17
lines changed

‎lib/matplotlib/tests/test_backend_qt.py‎

Lines changed: 24 additions & 17 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,33 @@ 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-
90-
9183
def_test_sigint_impl(backend,target_name,kwargs):
9284
importsys
9385
importmatplotlib.pyplotasplt
86+
importos
87+
importthreading
88+
9489
plt.switch_backend(backend)
9590
frommatplotlib.backends.qt_compatimportQtCore
9691

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

99+
target=getattr(plt,target_name)
100+
timer=threading.Timer(1,interupter)
99101
fig=plt.figure()
100-
fig.canvas.mpl_connect('draw_event',
101-
lambda*args:print('DRAW',flush=True))
102+
fig.canvas.mpl_connect(
103+
'draw_event',
104+
lambda*args:print('DRAW',flush=True)
105+
)
106+
fig.canvas.mpl_connect(
107+
'draw_event',
108+
lambda*args:timer.start()
109+
)
102110
try:
103111
target(**kwargs)
104112
exceptKeyboardInterrupt:
@@ -112,13 +120,12 @@ def _test_sigint_impl(backend, target_name, kwargs):
112120
])
113121
deftest_sigint(target,kwargs):
114122
backend=plt.get_backend()
115-
proc=InterruptiblePopen(
123+
proc=WaitForStringPopen(
116124
[sys.executable,"-c",
117125
inspect.getsource(_test_sigint_impl)+
118126
f"\n_test_sigint_impl({backend!r},{target!r},{kwargs!r})"])
119127
try:
120128
proc.wait_for('DRAW')
121-
proc.interrupt()
122129
stdout,_=proc.communicate(timeout=_test_timeout)
123130
except:
124131
proc.kill()
@@ -164,7 +171,7 @@ def custom_signal_handler(signum, frame):
164171
])
165172
deftest_other_signal_before_sigint(target,kwargs):
166173
backend=plt.get_backend()
167-
proc=InterruptiblePopen(
174+
proc=WaitForStringPopen(
168175
[sys.executable,"-c",
169176
inspect.getsource(_test_other_signal_before_sigint_impl)+
170177
"\n_test_other_signal_before_sigint_impl("
@@ -173,7 +180,7 @@ def test_other_signal_before_sigint(target, kwargs):
173180
proc.wait_for('DRAW')
174181
os.kill(proc.pid,signal.SIGUSR1)
175182
proc.wait_for('SIGUSR1')
176-
proc.interrupt()
183+
os.kill(proc.pid,signal.SIGINT)
177184
stdout,_=proc.communicate(timeout=_test_timeout)
178185
except:
179186
proc.kill()

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp