Merged in fix_initial_parsing (pull request #186)
Fix issue544 and fix another issue with parsing ``::``
This commit is contained in:
commit
8ff8dd3ae9
|
@ -11,6 +11,11 @@ NEXT
|
||||||
- fix integration of pytest with unittest.mock.patch decorator when
|
- fix integration of pytest with unittest.mock.patch decorator when
|
||||||
it uses the "new" argument. Thanks Nicolas Delaby for test and PR.
|
it uses the "new" argument. Thanks Nicolas Delaby for test and PR.
|
||||||
|
|
||||||
|
- fix issue with detecting conftest files if the arguments contain
|
||||||
|
"::" node id specifications (copy pasted from "-v" output)
|
||||||
|
|
||||||
|
- fix issue544 by only removing "@NUM" at the end of "::" separated parts
|
||||||
|
and if the part has an ".py" extension
|
||||||
|
|
||||||
2.6
|
2.6
|
||||||
-----------------------------------
|
-----------------------------------
|
||||||
|
|
|
@ -485,6 +485,11 @@ class Conftest(object):
|
||||||
testpaths = namespace.file_or_dir
|
testpaths = namespace.file_or_dir
|
||||||
foundanchor = False
|
foundanchor = False
|
||||||
for path in testpaths:
|
for path in testpaths:
|
||||||
|
path = str(path)
|
||||||
|
# remove node-id syntax
|
||||||
|
i = path.find("::")
|
||||||
|
if i != -1:
|
||||||
|
path = path[:i]
|
||||||
anchor = current.join(path, abs=1)
|
anchor = current.join(path, abs=1)
|
||||||
if exists(anchor): # we found some file object
|
if exists(anchor): # we found some file object
|
||||||
self._try_load_conftest(anchor)
|
self._try_load_conftest(anchor)
|
||||||
|
@ -857,10 +862,11 @@ def getcfg(args, inibasenames):
|
||||||
return {}
|
return {}
|
||||||
|
|
||||||
|
|
||||||
|
rex_pyat = re.compile(r'(.*\.py)@\d+$')
|
||||||
|
|
||||||
def node_with_line_number(string):
|
def node_with_line_number(string):
|
||||||
split = string.split('[')
|
return "::".join(rex_pyat.sub(lambda m: m.group(1), part)
|
||||||
split[0] = re.sub(r'@\d+', '', split[0])
|
for part in string.split("::"))
|
||||||
return '['.join(split)
|
|
||||||
|
|
||||||
|
|
||||||
def setns(obj, dic):
|
def setns(obj, dic):
|
||||||
|
|
|
@ -237,3 +237,21 @@ def test_fixture_dependency(testdir, monkeypatch):
|
||||||
"""))
|
"""))
|
||||||
result = testdir.runpytest("sub")
|
result = testdir.runpytest("sub")
|
||||||
result.stdout.fnmatch_lines(["*1 passed*"])
|
result.stdout.fnmatch_lines(["*1 passed*"])
|
||||||
|
|
||||||
|
|
||||||
|
def test_conftest_found_with_double_dash(testdir):
|
||||||
|
sub = testdir.mkdir("sub")
|
||||||
|
sub.join("conftest.py").write(py.std.textwrap.dedent("""
|
||||||
|
def pytest_addoption(parser):
|
||||||
|
parser.addoption("--hello-world", action="store_true")
|
||||||
|
"""))
|
||||||
|
p = sub.join("test_hello.py")
|
||||||
|
p.write(py.std.textwrap.dedent("""
|
||||||
|
import pytest
|
||||||
|
def test_hello(found):
|
||||||
|
assert found == 1
|
||||||
|
"""))
|
||||||
|
result = testdir.runpytest(str(p) + "@2::test_hello", "-h")
|
||||||
|
result.stdout.fnmatch_lines("""
|
||||||
|
*--hello-world*
|
||||||
|
""")
|
||||||
|
|
|
@ -146,8 +146,19 @@ class TestParser:
|
||||||
assert args.S == False
|
assert args.S == False
|
||||||
|
|
||||||
def test_parse_removes_line_number_from_positional_arguments(self, parser):
|
def test_parse_removes_line_number_from_positional_arguments(self, parser):
|
||||||
args = parser.parse(['path@2::func', 'path2@5::func2[param with @]'])
|
args = parser.parse(['path.txt@2::item',
|
||||||
assert getattr(args, parseopt.FILE_OR_DIR) == ['path::func', 'path2::func2[param with @]']
|
'path2.py::func2[param with .py@123]',
|
||||||
|
'path.py@123',
|
||||||
|
'hello/path.py@123',
|
||||||
|
])
|
||||||
|
# we only remove "@NUM" syntax for .py files which are currently
|
||||||
|
# the only ones which can produce it.
|
||||||
|
assert getattr(args, parseopt.FILE_OR_DIR) == [
|
||||||
|
'path.txt@2::item',
|
||||||
|
'path2.py::func2[param with .py@123]',
|
||||||
|
'path.py',
|
||||||
|
'hello/path.py',
|
||||||
|
]
|
||||||
|
|
||||||
def test_parse_defaultgetter(self):
|
def test_parse_defaultgetter(self):
|
||||||
def defaultget(option):
|
def defaultget(option):
|
||||||
|
|
Loading…
Reference in New Issue