@@ -2364,6 +2364,7 @@ def test_set___main___attrs(self):
23642364 )
23652365 self .assertEqual (rc , 0 )
23662366
2367+ @support .requires_subprocess ()
23672368 def test_interpreter_handles_signals (self ):
23682369 import subprocess
23692370 import sys
@@ -2389,10 +2390,45 @@ def test_interpreter_handles_signals(self):
23892390 stderr = subprocess .PIPE , close_fds = True )
23902391 self .assertEqual (proc .stdout .read (1 ), b'x' )
23912392 proc .send_signal (signal .SIGINT )
2392- stdout , stderr = proc .communicate ()
2393+ stdout , stderr = proc .communicate (timeout = 5 )
23932394 self .assertEqual (stdout , b"" )
23942395 self .assertIn (b"KeyboardInterrupt" , stderr )
23952396
2397+ @support .requires_subprocess ()
2398+ def test_legacy_interpreter_does_not_handle_signals (self ):
2399+ import subprocess
2400+ import sys
2401+ import signal
2402+
2403+ interp_source = """if True:
2404+ import time
2405+
2406+ print('x', end='', flush=True)
2407+ time.sleep(1)
2408+ print('inquisition', end='', flush=True)
2409+ """
2410+
2411+ source = f"""if True:
2412+ import _interpreters
2413+
2414+ config = _interpreters.new_config("legacy")
2415+ interp = _interpreters.create(config)
2416+ res = _interpreters.run_string(interp, '''{ interp_source } ''')
2417+ assert res is None
2418+ """
2419+
2420+ proc = subprocess .Popen ([sys .executable , '-c' , source ],
2421+ stdin = subprocess .PIPE , stdout = subprocess .PIPE ,
2422+ stderr = subprocess .PIPE , close_fds = True )
2423+ self .assertEqual (proc .stdout .read (1 ), b'x' )
2424+ proc .send_signal (signal .SIGINT )
2425+ with self .assertRaises (subprocess .TimeoutExpired ):
2426+ stdout , stderr = proc .communicate (timeout = 0.5 )
2427+ stdout , stderr = proc .communicate ()
2428+ self .assertEqual (stdout , b"inquisition" )
2429+ self .assertIn (b"KeyboardInterrupt" , stderr )
2430+ self .assertNotIn (b"AssertionError" , stderr )
2431+
23962432
23972433if __name__ == '__main__' :
23982434 # Test needs to be a package, so we can do relative imports.
0 commit comments