mirror of
https://github.com/python/cpython.git
synced 2025-08-31 05:58:33 +00:00
Issue #25994: Added the close() method and the support of the context manager
protocol for the os.scandir() iterator.
This commit is contained in:
parent
2feb642585
commit
ffe96ae10b
6 changed files with 212 additions and 50 deletions
|
@ -2808,6 +2808,8 @@ class ExportsTests(unittest.TestCase):
|
|||
|
||||
|
||||
class TestScandir(unittest.TestCase):
|
||||
check_no_resource_warning = support.check_no_resource_warning
|
||||
|
||||
def setUp(self):
|
||||
self.path = os.path.realpath(support.TESTFN)
|
||||
self.addCleanup(support.rmtree, self.path)
|
||||
|
@ -3030,6 +3032,56 @@ class TestScandir(unittest.TestCase):
|
|||
for obj in [1234, 1.234, {}, []]:
|
||||
self.assertRaises(TypeError, os.scandir, obj)
|
||||
|
||||
def test_close(self):
|
||||
self.create_file("file.txt")
|
||||
self.create_file("file2.txt")
|
||||
iterator = os.scandir(self.path)
|
||||
next(iterator)
|
||||
iterator.close()
|
||||
# multiple closes
|
||||
iterator.close()
|
||||
with self.check_no_resource_warning():
|
||||
del iterator
|
||||
|
||||
def test_context_manager(self):
|
||||
self.create_file("file.txt")
|
||||
self.create_file("file2.txt")
|
||||
with os.scandir(self.path) as iterator:
|
||||
next(iterator)
|
||||
with self.check_no_resource_warning():
|
||||
del iterator
|
||||
|
||||
def test_context_manager_close(self):
|
||||
self.create_file("file.txt")
|
||||
self.create_file("file2.txt")
|
||||
with os.scandir(self.path) as iterator:
|
||||
next(iterator)
|
||||
iterator.close()
|
||||
|
||||
def test_context_manager_exception(self):
|
||||
self.create_file("file.txt")
|
||||
self.create_file("file2.txt")
|
||||
with self.assertRaises(ZeroDivisionError):
|
||||
with os.scandir(self.path) as iterator:
|
||||
next(iterator)
|
||||
1/0
|
||||
with self.check_no_resource_warning():
|
||||
del iterator
|
||||
|
||||
def test_resource_warning(self):
|
||||
self.create_file("file.txt")
|
||||
self.create_file("file2.txt")
|
||||
iterator = os.scandir(self.path)
|
||||
next(iterator)
|
||||
with self.assertWarns(ResourceWarning):
|
||||
del iterator
|
||||
support.gc_collect()
|
||||
# exhausted iterator
|
||||
iterator = os.scandir(self.path)
|
||||
list(iterator)
|
||||
with self.check_no_resource_warning():
|
||||
del iterator
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue