Skip to content

Commit eea3ba9

Browse files
committed
Add and fix tests.
1 parent 025cc17 commit eea3ba9

2 files changed

Lines changed: 59 additions & 3 deletions

File tree

Lib/test/test_interpreters/test_api.py

Lines changed: 54 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -647,6 +647,55 @@ def test_created_with_capi(self):
647647
self.interp_exists(interpid))
648648

649649

650+
def test_remaining_threads(self):
651+
r_interp, w_interp = self.pipe()
652+
653+
FINISHED = b'F'
654+
655+
interp = interpreters.create()
656+
interp.exec(f"""if True:
657+
import os
658+
import threading
659+
import time
660+
661+
def task():
662+
time.sleep(1)
663+
os.write({w_interp}, {FINISHED!r})
664+
665+
threads = [threading.Thread(target=task) for _ in range(3)]
666+
for t in threads:
667+
t.start()
668+
""")
669+
interp.close()
670+
671+
self.assertEqual(os.read(r_interp, 1), FINISHED)
672+
673+
def test_remaining_daemon_threads(self):
674+
interp = _interpreters.create(
675+
types.SimpleNamespace(
676+
use_main_obmalloc=False,
677+
allow_fork=False,
678+
allow_exec=False,
679+
allow_threads=True,
680+
allow_daemon_threads=True,
681+
check_multi_interp_extensions=True,
682+
gil='own',
683+
)
684+
)
685+
_interpreters.exec(interp, f"""if True:
686+
import threading
687+
import time
688+
689+
def task():
690+
time.sleep(100)
691+
692+
threads = [threading.Thread(target=task, daemon=True) for _ in range(3)]
693+
for t in threads:
694+
t.start()
695+
""")
696+
_interpreters.destroy(interp)
697+
698+
650699
class TestInterpreterPrepareMain(TestBase):
651700

652701
def test_empty(self):
@@ -756,7 +805,10 @@ def script():
756805
spam.eggs()
757806
758807
interp = interpreters.create()
759-
interp.exec(script)
808+
try:
809+
interp.exec(script)
810+
finally:
811+
interp.close()
760812
""")
761813

762814
stdout, stderr = self.assert_python_failure(scriptfile)
@@ -765,7 +817,7 @@ def script():
765817
# File "{interpreters.__file__}", line 179, in exec
766818
self.assertEqual(stderr, dedent(f"""\
767819
Traceback (most recent call last):
768-
File "{scriptfile}", line 9, in <module>
820+
File "{scriptfile}", line 10, in <module>
769821
interp.exec(script)
770822
~~~~~~~~~~~^^^^^^^^
771823
{interpmod_line.strip()}

Lib/test/test_interpreters/test_lifecycle.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,7 @@ def test_sys_path_0(self):
132132
'sub': sys.path[0],
133133
}}, indent=4), flush=True)
134134
""")
135+
interp.close()
135136
'''
136137
# <tmp>/
137138
# pkg/
@@ -172,7 +173,10 @@ def test_gh_109793(self):
172173
argv = [sys.executable, '-c', '''if True:
173174
from test.support import interpreters
174175
interp = interpreters.create()
175-
raise Exception
176+
try:
177+
raise Exception
178+
finally:
179+
interp.close()
176180
''']
177181
proc = subprocess.run(argv, capture_output=True, text=True)
178182
self.assertIn('Traceback', proc.stderr)

0 commit comments

Comments
 (0)