Package.name now contains only basname of the package
Previously it contained the entire path, which made '-k' match against any name in the full path of the package. Fix #7040
This commit is contained in:
parent
3d3b9511fd
commit
c5b367b4f4
|
@ -0,0 +1,6 @@
|
||||||
|
``-k`` no longer matches against the names of the directories outside the test session root.
|
||||||
|
|
||||||
|
Also, ``pytest.Package.name`` is now just the name of the directory containing the package's
|
||||||
|
``__init__.py`` file, instead of the full path. This is consistent with how the other nodes
|
||||||
|
are named, and also one of the reasons why ``-k`` would match against any directory containing
|
||||||
|
the test suite.
|
|
@ -1 +0,0 @@
|
||||||
``-k`` no longer matches against the directory containing the test suite.
|
|
|
@ -568,8 +568,7 @@ class Package(Module):
|
||||||
nodes.FSCollector.__init__(
|
nodes.FSCollector.__init__(
|
||||||
self, fspath, parent=parent, config=config, session=session, nodeid=nodeid
|
self, fspath, parent=parent, config=config, session=session, nodeid=nodeid
|
||||||
)
|
)
|
||||||
|
self.name = os.path.basename(str(fspath.dirname))
|
||||||
self.name = fspath.dirname
|
|
||||||
|
|
||||||
def setup(self):
|
def setup(self):
|
||||||
# not using fixtures to call setup_module here because autouse fixtures
|
# not using fixtures to call setup_module here because autouse fixtures
|
||||||
|
|
|
@ -1004,7 +1004,7 @@ def test_collect_init_tests(testdir):
|
||||||
result.stdout.fnmatch_lines(
|
result.stdout.fnmatch_lines(
|
||||||
[
|
[
|
||||||
"collected 2 items",
|
"collected 2 items",
|
||||||
"<Package *",
|
"<Package tests>",
|
||||||
" <Module __init__.py>",
|
" <Module __init__.py>",
|
||||||
" <Function test_init>",
|
" <Function test_init>",
|
||||||
" <Module test_foo.py>",
|
" <Module test_foo.py>",
|
||||||
|
@ -1015,7 +1015,7 @@ def test_collect_init_tests(testdir):
|
||||||
result.stdout.fnmatch_lines(
|
result.stdout.fnmatch_lines(
|
||||||
[
|
[
|
||||||
"collected 2 items",
|
"collected 2 items",
|
||||||
"<Package *",
|
"<Package tests>",
|
||||||
" <Module __init__.py>",
|
" <Module __init__.py>",
|
||||||
" <Function test_init>",
|
" <Function test_init>",
|
||||||
" <Module test_foo.py>",
|
" <Module test_foo.py>",
|
||||||
|
@ -1027,7 +1027,7 @@ def test_collect_init_tests(testdir):
|
||||||
result.stdout.fnmatch_lines(
|
result.stdout.fnmatch_lines(
|
||||||
[
|
[
|
||||||
"collected 2 items",
|
"collected 2 items",
|
||||||
"<Package */tests>",
|
"<Package tests>",
|
||||||
" <Module __init__.py>",
|
" <Module __init__.py>",
|
||||||
" <Function test_init>",
|
" <Function test_init>",
|
||||||
" <Module test_foo.py>",
|
" <Module test_foo.py>",
|
||||||
|
@ -1039,7 +1039,7 @@ def test_collect_init_tests(testdir):
|
||||||
result.stdout.fnmatch_lines(
|
result.stdout.fnmatch_lines(
|
||||||
[
|
[
|
||||||
"collected 2 items",
|
"collected 2 items",
|
||||||
"<Package */tests>",
|
"<Package tests>",
|
||||||
" <Module __init__.py>",
|
" <Module __init__.py>",
|
||||||
" <Function test_init>",
|
" <Function test_init>",
|
||||||
" <Module test_foo.py>",
|
" <Module test_foo.py>",
|
||||||
|
@ -1048,12 +1048,12 @@ def test_collect_init_tests(testdir):
|
||||||
)
|
)
|
||||||
result = testdir.runpytest("./tests/test_foo.py", "--collect-only")
|
result = testdir.runpytest("./tests/test_foo.py", "--collect-only")
|
||||||
result.stdout.fnmatch_lines(
|
result.stdout.fnmatch_lines(
|
||||||
["<Package */tests>", " <Module test_foo.py>", " <Function test_foo>"]
|
["<Package tests>", " <Module test_foo.py>", " <Function test_foo>"]
|
||||||
)
|
)
|
||||||
result.stdout.no_fnmatch_line("*test_init*")
|
result.stdout.no_fnmatch_line("*test_init*")
|
||||||
result = testdir.runpytest("./tests/__init__.py", "--collect-only")
|
result = testdir.runpytest("./tests/__init__.py", "--collect-only")
|
||||||
result.stdout.fnmatch_lines(
|
result.stdout.fnmatch_lines(
|
||||||
["<Package */tests>", " <Module __init__.py>", " <Function test_init>"]
|
["<Package tests>", " <Module __init__.py>", " <Function test_init>"]
|
||||||
)
|
)
|
||||||
result.stdout.no_fnmatch_line("*test_foo*")
|
result.stdout.no_fnmatch_line("*test_foo*")
|
||||||
|
|
||||||
|
|
|
@ -834,6 +834,36 @@ class TestKeywordSelection:
|
||||||
deselected_tests = dlist[0].items
|
deselected_tests = dlist[0].items
|
||||||
assert len(deselected_tests) == 1
|
assert len(deselected_tests) == 1
|
||||||
|
|
||||||
|
def test_no_match_directories_outside_the_suite(self, testdir):
|
||||||
|
"""
|
||||||
|
-k should not match against directories containing the test suite (#7040).
|
||||||
|
"""
|
||||||
|
test_contents = """
|
||||||
|
def test_aaa(): pass
|
||||||
|
def test_ddd(): pass
|
||||||
|
"""
|
||||||
|
testdir.makepyfile(
|
||||||
|
**{"ddd/tests/__init__.py": "", "ddd/tests/test_foo.py": test_contents}
|
||||||
|
)
|
||||||
|
|
||||||
|
def get_collected_names(*args):
|
||||||
|
_, rec = testdir.inline_genitems(*args)
|
||||||
|
calls = rec.getcalls("pytest_collection_finish")
|
||||||
|
assert len(calls) == 1
|
||||||
|
return [x.name for x in calls[0].session.items]
|
||||||
|
|
||||||
|
# sanity check: collect both tests in normal runs
|
||||||
|
assert get_collected_names() == ["test_aaa", "test_ddd"]
|
||||||
|
|
||||||
|
# do not collect anything based on names outside the collection tree
|
||||||
|
assert get_collected_names("-k", testdir.tmpdir.basename) == []
|
||||||
|
|
||||||
|
# "-k ddd" should only collect "test_ddd", but not
|
||||||
|
# 'test_aaa' just because one of its parent directories is named "ddd";
|
||||||
|
# this was matched previously because Package.name would contain the full path
|
||||||
|
# to the package
|
||||||
|
assert get_collected_names("-k", "ddd") == ["test_ddd"]
|
||||||
|
|
||||||
|
|
||||||
class TestMarkDecorator:
|
class TestMarkDecorator:
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
|
|
Loading…
Reference in New Issue