@@ -265,6 +265,30 @@ def test_testpaths_ini(self, pytester: Pytester, monkeypatch: MonkeyPatch) -> No
265
265
items , reprec = pytester .inline_genitems ()
266
266
assert [x .name for x in items ] == ["test_%s" % dirname ]
267
267
268
+ @pytest .mark .parametrize ("absolute" , [True , False ])
269
+ def test_recursive_symlinks (self , pytester , absolute ):
270
+ """Make sure recursive symlinks won't cause multiple collection of the same file."""
271
+ directory = pytester .mkdir ("dir" )
272
+ ensure_file (directory / "test_recursive.py" ).write_text (
273
+ "def test_recursive(): pass"
274
+ )
275
+ symlink_or_skip (str (directory ) if absolute else "." , "dir/link" )
276
+
277
+ items , _ = pytester .inline_genitems ()
278
+ assert len (items ) == 1
279
+
280
+ def test_multiple_recursive_symlinks (self , pytester ):
281
+ """Symlink points to recursive symlink. Should be resolved to the very end."""
282
+ directory = pytester .mkdir ("dir" )
283
+ ensure_file (directory / "test_recursive.py" ).write_text (
284
+ "def test_recursive(): pass"
285
+ )
286
+ symlink_or_skip ("." , "dir/link" )
287
+ symlink_or_skip ("link" , "dir/link2" )
288
+
289
+ items , _ = pytester .inline_genitems ()
290
+ assert len (items ) == 1
291
+
268
292
269
293
class TestCollectPluginHookRelay :
270
294
def test_pytest_collect_file (self , pytester : Pytester ) -> None :
0 commit comments