◐ Shell
clean mode source ↗

bpo-42639: Cleanup atexitmodule.c by vstinner · Pull Request #23770 · python/cpython

@@ -1,8 +1,9 @@ import sys import unittest import io import atexit import io import os import sys import textwrap import unittest from test import support from test.support import script_helper
Expand Down Expand Up @@ -156,15 +157,15 @@ def test_bound_methods(self):
def test_shutdown(self): # Actually test the shutdown mechanism in a subprocess code = """if 1: code = textwrap.dedent(""" import atexit
def f(msg): print(msg)
atexit.register(f, "one") atexit.register(f, "two") """ """) res = script_helper.assert_python_ok("-c", code) self.assertEqual(res.out.decode().splitlines(), ["two", "one"]) self.assertFalse(res.err) Expand All @@ -178,13 +179,13 @@ def test_callbacks_leak(self): # take care to free callbacks in its per-subinterpreter module # state. n = atexit._ncallbacks() code = r"""if 1: code = textwrap.dedent(r""" import atexit def f(): pass atexit.register(f) del atexit """ """) ret = support.run_in_subinterp(code) self.assertEqual(ret, 0) self.assertEqual(atexit._ncallbacks(), n) Expand All @@ -193,13 +194,13 @@ def test_callbacks_leak_refcycle(self): # Similar to the above, but with a refcycle through the atexit # module. n = atexit._ncallbacks() code = r"""if 1: code = textwrap.dedent(r""" import atexit def f(): pass atexit.register(f) atexit.__atexit = atexit """ """) ret = support.run_in_subinterp(code) self.assertEqual(ret, 0) self.assertEqual(atexit._ncallbacks(), n) Expand All @@ -210,13 +211,13 @@ def test_callback_on_subinterpreter_teardown(self): expected = b"The test has passed!" r, w = os.pipe()
code = r"""if 1: code = textwrap.dedent(r""" import os import atexit def callback(): os.write({:d}, b"The test has passed!") atexit.register(callback) """.format(w) """.format(w)) ret = support.run_in_subinterp(code) os.close(w) self.assertEqual(os.read(r, len(expected)), expected) Expand Down