Merge remote-tracking branch 'upstream/master' into merge-master-into-features
This commit is contained in:
@@ -666,11 +666,11 @@ class TestInvocationVariants(object):
|
||||
assert result.ret == 0
|
||||
result.stdout.fnmatch_lines(
|
||||
[
|
||||
"*test_hello.py::test_hello*PASSED*",
|
||||
"*test_hello.py::test_other*PASSED*",
|
||||
"*test_world.py::test_world*PASSED*",
|
||||
"*test_world.py::test_other*PASSED*",
|
||||
"*4 passed*",
|
||||
"test_hello.py::test_hello*PASSED*",
|
||||
"test_hello.py::test_other*PASSED*",
|
||||
"ns_pkg/world/test_world.py::test_world*PASSED*",
|
||||
"ns_pkg/world/test_world.py::test_other*PASSED*",
|
||||
"*4 passed in*",
|
||||
]
|
||||
)
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@ def equal_with_bash(prefix, ffc, fc, out=None):
|
||||
res_bash = set(fc(prefix))
|
||||
retval = set(res) == res_bash
|
||||
if out:
|
||||
out.write("equal_with_bash {} {}\n".format(retval, res))
|
||||
out.write("equal_with_bash({}) {} {}\n".format(prefix, retval, res))
|
||||
if not retval:
|
||||
out.write(" python - bash: %s\n" % (set(res) - res_bash))
|
||||
out.write(" bash - python: %s\n" % (res_bash - set(res)))
|
||||
@@ -91,13 +91,19 @@ class FilesCompleter(object):
|
||||
|
||||
class TestArgComplete(object):
|
||||
@pytest.mark.skipif("sys.platform in ('win32', 'darwin')")
|
||||
def test_compare_with_compgen(self):
|
||||
def test_compare_with_compgen(self, tmpdir):
|
||||
from _pytest._argcomplete import FastFilesCompleter
|
||||
|
||||
ffc = FastFilesCompleter()
|
||||
fc = FilesCompleter()
|
||||
for x in ["/", "/d", "/data", "qqq", ""]:
|
||||
assert equal_with_bash(x, ffc, fc, out=sys.stdout)
|
||||
|
||||
with tmpdir.as_cwd():
|
||||
assert equal_with_bash("", ffc, fc, out=sys.stdout)
|
||||
|
||||
tmpdir.ensure("data")
|
||||
|
||||
for x in ["d", "data", "doesnotexist", ""]:
|
||||
assert equal_with_bash(x, ffc, fc, out=sys.stdout)
|
||||
|
||||
@pytest.mark.skipif("sys.platform in ('win32', 'darwin')")
|
||||
def test_remove_dir_prefix(self):
|
||||
|
||||
@@ -6,6 +6,8 @@ import pprint
|
||||
import sys
|
||||
import textwrap
|
||||
|
||||
import py
|
||||
|
||||
import pytest
|
||||
from _pytest.main import _in_venv
|
||||
from _pytest.main import EXIT_NOTESTSCOLLECTED
|
||||
@@ -1082,4 +1084,55 @@ def test_collect_with_chdir_during_import(testdir):
|
||||
with testdir.tmpdir.as_cwd():
|
||||
result = testdir.runpytest("--collect-only")
|
||||
result.stdout.fnmatch_lines(["collected 1 item"])
|
||||
|
||||
|
||||
@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)."""
|
||||
real = testdir.makepyfile(
|
||||
real="""
|
||||
def test_nodeid(request):
|
||||
assert request.node.nodeid == "real.py::test_nodeid"
|
||||
"""
|
||||
)
|
||||
symlink = testdir.tmpdir.join("symlink.py")
|
||||
symlink.mksymlinkto(real)
|
||||
result = testdir.runpytest("-v", symlink)
|
||||
result.stdout.fnmatch_lines(["real.py::test_nodeid PASSED*", "*1 passed in*"])
|
||||
assert result.ret == 0
|
||||
|
||||
|
||||
@pytest.mark.skipif(
|
||||
not hasattr(py.path.local, "mksymlinkto"),
|
||||
reason="symlink not available on this platform",
|
||||
)
|
||||
def test_collect_symlink_out_of_tree(testdir):
|
||||
"""Test collection of symlink via out-of-tree rootdir."""
|
||||
sub = testdir.tmpdir.join("sub")
|
||||
real = sub.join("test_real.py")
|
||||
real.write(
|
||||
textwrap.dedent(
|
||||
"""
|
||||
def test_nodeid(request):
|
||||
# Should not contain sub/ prefix.
|
||||
assert request.node.nodeid == "test_real.py::test_nodeid"
|
||||
"""
|
||||
),
|
||||
ensure=True,
|
||||
)
|
||||
|
||||
out_of_tree = testdir.tmpdir.join("out_of_tree").ensure(dir=True)
|
||||
symlink_to_sub = out_of_tree.join("symlink_to_sub")
|
||||
symlink_to_sub.mksymlinkto(sub)
|
||||
sub.chdir()
|
||||
result = testdir.runpytest("-vs", "--rootdir=%s" % sub, symlink_to_sub)
|
||||
result.stdout.fnmatch_lines(
|
||||
[
|
||||
# Should not contain "sub/"!
|
||||
"test_real.py::test_nodeid PASSED"
|
||||
]
|
||||
)
|
||||
assert result.ret == 0
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
import py
|
||||
|
||||
import pytest
|
||||
from _pytest import nodes
|
||||
|
||||
@@ -29,3 +31,23 @@ def test_std_warn_not_pytestwarning(testdir):
|
||||
)
|
||||
with pytest.raises(ValueError, match=".*instance of PytestWarning.*"):
|
||||
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
|
||||
|
||||
@@ -333,7 +333,11 @@ def test_rootdir_option_arg(testdir, monkeypatch, path):
|
||||
|
||||
result = testdir.runpytest("--rootdir={}".format(path))
|
||||
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*",
|
||||
]
|
||||
)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user