summaryrefslogtreecommitdiffstats
path: root/Lib/test
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2014-09-24 10:29:27 (GMT)
committerSerhiy Storchaka <storchaka@gmail.com>2014-09-24 10:29:27 (GMT)
commite9a086bf010626d0e0af54693db776ccda76b5c4 (patch)
treeddf028fb988807e8c612681d7d608ac82a1f51ba /Lib/test
parent43705d76aa39a9517ffa5fa124f9333a7874fbd9 (diff)
parent5e193ac0bd6bd4d4a122fd9aa2446ee70e5f2bf1 (diff)
downloadcpython-e9a086bf010626d0e0af54693db776ccda76b5c4.zip
cpython-e9a086bf010626d0e0af54693db776ccda76b5c4.tar.gz
cpython-e9a086bf010626d0e0af54693db776ccda76b5c4.tar.bz2
Issue #22427: TemporaryDirectory no longer attempts to clean up twice when
used in the with statement in generator.
Diffstat (limited to 'Lib/test')
-rw-r--r--Lib/test/test_tempfile.py24
1 files changed, 24 insertions, 0 deletions
diff --git a/Lib/test/test_tempfile.py b/Lib/test/test_tempfile.py
index ec975f8..2e10fdd 100644
--- a/Lib/test/test_tempfile.py
+++ b/Lib/test/test_tempfile.py
@@ -1211,6 +1211,30 @@ class TestTemporaryDirectory(BaseTestCase):
self.assertNotIn("Exception ", err)
self.assertIn("ResourceWarning: Implicitly cleaning up", err)
+ def test_exit_on_shutdown(self):
+ # Issue #22427
+ with self.do_create() as dir:
+ code = """if True:
+ import sys
+ import tempfile
+ import warnings
+
+ def generator():
+ with tempfile.TemporaryDirectory(dir={dir!r}) as tmp:
+ yield tmp
+ g = generator()
+ sys.stdout.buffer.write(next(g).encode())
+
+ warnings.filterwarnings("always", category=ResourceWarning)
+ """.format(dir=dir)
+ rc, out, err = script_helper.assert_python_ok("-c", code)
+ tmp_name = out.decode().strip()
+ self.assertFalse(os.path.exists(tmp_name),
+ "TemporaryDirectory %s exists after cleanup" % tmp_name)
+ err = err.decode('utf-8', 'backslashreplace')
+ self.assertNotIn("Exception ", err)
+ self.assertIn("ResourceWarning: Implicitly cleaning up", err)
+
def test_warnings_on_cleanup(self):
# ResourceWarning will be triggered by __del__
with self.do_create() as dir: