summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_pathlib/test_pathlib.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/test/test_pathlib/test_pathlib.py')
-rw-r--r--Lib/test/test_pathlib/test_pathlib.py43
1 files changed, 43 insertions, 0 deletions
diff --git a/Lib/test/test_pathlib/test_pathlib.py b/Lib/test/test_pathlib/test_pathlib.py
index db5f3b2..8f95c80 100644
--- a/Lib/test/test_pathlib/test_pathlib.py
+++ b/Lib/test/test_pathlib/test_pathlib.py
@@ -15,6 +15,7 @@ from urllib.request import pathname2url
from test.support import import_helper
from test.support import is_emscripten, is_wasi
+from test.support import set_recursion_limit
from test.support import os_helper
from test.support.os_helper import TESTFN, FakePath
from test.test_pathlib import test_pathlib_abc
@@ -1660,6 +1661,48 @@ class PathTest(test_pathlib_abc.DummyPathTest, PurePathTest):
self.assertEqual(next(it), expected)
path = path / 'd'
+ def test_walk_above_recursion_limit(self):
+ recursion_limit = 40
+ # directory_depth > recursion_limit
+ directory_depth = recursion_limit + 10
+ base = self.cls(self.base, 'deep')
+ path = base.joinpath(*(['d'] * directory_depth))
+ path.mkdir(parents=True)
+
+ with set_recursion_limit(recursion_limit):
+ list(base.walk())
+ list(base.walk(top_down=False))
+
+ def test_glob_many_open_files(self):
+ depth = 30
+ P = self.cls
+ p = base = P(self.base) / 'deep'
+ p.mkdir()
+ for _ in range(depth):
+ p /= 'd'
+ p.mkdir()
+ pattern = '/'.join(['*'] * depth)
+ iters = [base.glob(pattern) for j in range(100)]
+ for it in iters:
+ self.assertEqual(next(it), p)
+ iters = [base.rglob('d') for j in range(100)]
+ p = base
+ for i in range(depth):
+ p = p / 'd'
+ for it in iters:
+ self.assertEqual(next(it), p)
+
+ def test_glob_above_recursion_limit(self):
+ recursion_limit = 50
+ # directory_depth > recursion_limit
+ directory_depth = recursion_limit + 10
+ base = self.cls(self.base, 'deep')
+ path = base.joinpath(*(['d'] * directory_depth))
+ path.mkdir(parents=True)
+
+ with set_recursion_limit(recursion_limit):
+ list(base.glob('**/'))
+
@only_posix
class PosixPathTest(PathTest, PurePosixPathTest):