Skip to content

Commit

Permalink
pythonGH-113528: Remove a couple of expensive pathlib ABC tests (pyth…
Browse files Browse the repository at this point in the history
…on#113534)

Run expensive tests for walking and globbing from `test_pathlib` but not
`test_pathlib_abc`. The ABCs are not as tightly optimised as the classes
in top-level `pathlib`, and so these tests are taking rather a long time on
some buildbots. Coverage of the main `pathlib` classes should suffice.
  • Loading branch information
barneygale authored Dec 28, 2023
1 parent b664d91 commit 6ca0e67
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 42 deletions.
43 changes: 43 additions & 0 deletions Lib/test/test_pathlib/test_pathlib.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@

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
Expand Down Expand Up @@ -1660,6 +1661,48 @@ def test_walk_many_open_files(self):
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):
Expand Down
42 changes: 0 additions & 42 deletions Lib/test/test_pathlib/test_pathlib_abc.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
from pathlib._abc import UnsupportedOperation, PurePathBase, PathBase
import posixpath

from test.support import set_recursion_limit
from test.support.os_helper import TESTFN


Expand Down Expand Up @@ -1224,25 +1223,6 @@ def test_rglob_symlink_loop(self):
}
self.assertEqual(given, {p / x for x in expect})

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_dotdot(self):
# ".." is not special in globs.
P = self.cls
Expand Down Expand Up @@ -1286,17 +1266,6 @@ def test_glob_long_symlink(self):
bad_link.symlink_to("bad" * 200)
self.assertEqual(sorted(base.glob('**/*')), [bad_link])

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('**/'))

def test_glob_recursive_no_trailing_slash(self):
P = self.cls
p = P(self.base)
Expand Down Expand Up @@ -1825,17 +1794,6 @@ def test_walk_symlink_location(self):
else:
self.fail("symlink not found")

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

class DummyPathWithSymlinks(DummyPath):
def readlink(self):
Expand Down

0 comments on commit 6ca0e67

Please sign in to comment.