Skip to content

Commit d353638

Browse files
committed
Add a test for legacy subinterpreters.
1 parent 3d15931 commit d353638

File tree

1 file changed

+37
-1
lines changed

1 file changed

+37
-1
lines changed

Lib/test/test_interpreters/test_api.py

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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

23972433
if __name__ == '__main__':
23982434
# Test needs to be a package, so we can do relative imports.

0 commit comments

Comments
 (0)