Fix nodes._check_initialpaths_for_relpath for dirs

Ref: https://github.com/pytest-dev/pytest/issues/4321#issuecomment-436951894

Hardens some of the not many tests affected by this:

1. `testing/test_session.py::test_rootdir_option_arg` displayed:

> root/test_rootdir_option_arg2/test_rootdir_option_arg.py

2. `test_cmdline_python_namespace_package` displayed "hello/" prefix for:

> hello/test_hello.py::test_hello
> hello/test_hello.py::test_other
This commit is contained in:
Daniel Hahler 2018-11-08 20:35:53 +01:00
parent e00f3a2fb7
commit bee72a6622
4 changed files with 33 additions and 7 deletions

View File

@ -447,7 +447,7 @@ class Collector(Node):
def _check_initialpaths_for_relpath(session, fspath): def _check_initialpaths_for_relpath(session, fspath):
for initial_path in session._initialpaths: for initial_path in session._initialpaths:
if fspath.common(initial_path) == initial_path: if fspath.common(initial_path) == initial_path:
return fspath.relto(initial_path.dirname) return fspath.relto(initial_path)
class FSCollector(Collector): class FSCollector(Collector):

View File

@ -663,11 +663,11 @@ class TestInvocationVariants(object):
assert result.ret == 0 assert result.ret == 0
result.stdout.fnmatch_lines( result.stdout.fnmatch_lines(
[ [
"*test_hello.py::test_hello*PASSED*", "test_hello.py::test_hello*PASSED*",
"*test_hello.py::test_other*PASSED*", "test_hello.py::test_other*PASSED*",
"*test_world.py::test_world*PASSED*", "ns_pkg/world/test_world.py::test_world*PASSED*",
"*test_world.py::test_other*PASSED*", "ns_pkg/world/test_world.py::test_other*PASSED*",
"*4 passed*", "*4 passed in*",
] ]
) )

View File

@ -1,3 +1,5 @@
import py
import pytest import pytest
from _pytest import nodes from _pytest import nodes
@ -29,3 +31,23 @@ def test_std_warn_not_pytestwarning(testdir):
) )
with pytest.raises(ValueError, match=".*instance of PytestWarning.*"): with pytest.raises(ValueError, match=".*instance of PytestWarning.*"):
items[0].warn(UserWarning("some warning")) items[0].warn(UserWarning("some warning"))
def test__check_initialpaths_for_relpath():
"""Ensure that it handles dirs, and does not always use dirname."""
cwd = py.path.local()
class FakeSession:
_initialpaths = [cwd]
assert nodes._check_initialpaths_for_relpath(FakeSession, cwd) == ""
sub = cwd.join("file")
class FakeSession:
_initialpaths = [cwd]
assert nodes._check_initialpaths_for_relpath(FakeSession, sub) == "file"
outside = py.path.local("/outside")
assert nodes._check_initialpaths_for_relpath(FakeSession, outside) is None

View File

@ -323,7 +323,11 @@ def test_rootdir_option_arg(testdir, monkeypatch, path):
result = testdir.runpytest("--rootdir={}".format(path)) result = testdir.runpytest("--rootdir={}".format(path))
result.stdout.fnmatch_lines( result.stdout.fnmatch_lines(
["*rootdir: {}/root, inifile:*".format(testdir.tmpdir), "*1 passed*"] [
"*rootdir: {}/root, inifile:*".format(testdir.tmpdir),
"root/test_rootdir_option_arg.py *",
"*1 passed*",
]
) )