Skip to content

Commit

Permalink
Fix collection of direct symlinked files not in python_files
Browse files Browse the repository at this point in the history
  • Loading branch information
blueyed committed Nov 8, 2018
1 parent 64762d2 commit 6213b31
Show file tree
Hide file tree
Showing 4 changed files with 25 additions and 2 deletions.
1 change: 1 addition & 0 deletions changelog/4321.bugfix.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Fix ``item.nodeid`` with resolved symlinks.
1 change: 1 addition & 0 deletions changelog/4325.bugfix.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Fix collection of direct symlinked files, where the target does not match ``python_files``.
4 changes: 2 additions & 2 deletions src/_pytest/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -488,7 +488,7 @@ def _collect(self, arg):
from _pytest.python import Package

names = self._parsearg(arg)
argpath = names.pop(0).realpath()
argpath = names.pop(0)

# Start with a Session root, and delve to argpath item (dir or file)
# and stack all Packages found on the way.
Expand Down Expand Up @@ -636,7 +636,7 @@ def _parsearg(self, arg):
"file or package not found: " + arg + " (missing __init__.py?)"
)
raise UsageError("file not found: " + arg)
parts[0] = path
parts[0] = path.realpath()
return parts

def matchnodes(self, matching, names):
Expand Down
21 changes: 21 additions & 0 deletions testing/test_collection.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
import sys
import textwrap

import py

import pytest
from _pytest.main import _in_venv
from _pytest.main import EXIT_NOTESTSCOLLECTED
Expand Down Expand Up @@ -1051,3 +1053,22 @@ def test_1():
result = testdir.runpytest()
assert result.ret == 0
result.stdout.fnmatch_lines(["*1 passed in*"])


@pytest.mark.skipif(
not hasattr(py.path.local, "mksymlinkto"),
reason="symlink not available on this platform",
)
def test_collect_symlink_file_arg(testdir):
"""Test that collecting a direct symlink, where the target does not match python_files works (#4325)."""
p = testdir.makepyfile(
hello="""
def test_nodeid(request):
print(request.node.nodeid)
assert not request.node.nodeid.startswith('::')
"""
)
testdir.tmpdir.join("symlink.py").mksymlinkto(p)
result = testdir.runpytest("-v", "symlink.py")
result.stdout.fnmatch_lines(["hello.py::test_nodeid PASSED*", "*1 passed in*"])
assert result.ret == 0

0 comments on commit 6213b31

Please sign in to comment.