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
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)
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)