Merge pull request #7046 from blueyed/k-skip-session-upstream
This commit is contained in:
		
						commit
						0a03217903
					
				|  | @ -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. | ||||
|  | @ -136,7 +136,7 @@ class KeywordMatcher: | |||
|         import pytest | ||||
| 
 | ||||
|         for item in item.listchain(): | ||||
|             if not isinstance(item, pytest.Instance): | ||||
|             if not isinstance(item, (pytest.Instance, pytest.Session)): | ||||
|                 mapped_names.add(item.name) | ||||
| 
 | ||||
|         # Add the names added as extra keywords to current or parent items | ||||
|  |  | |||
|  | @ -571,8 +571,7 @@ class Package(Module): | |||
|         nodes.FSCollector.__init__( | ||||
|             self, fspath, parent=parent, config=config, session=session, nodeid=nodeid | ||||
|         ) | ||||
| 
 | ||||
|         self.name = fspath.dirname | ||||
|         self.name = os.path.basename(str(fspath.dirname)) | ||||
| 
 | ||||
|     def setup(self): | ||||
|         # 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( | ||||
|         [ | ||||
|             "collected 2 items", | ||||
|             "<Package *", | ||||
|             "<Package tests>", | ||||
|             "  <Module __init__.py>", | ||||
|             "    <Function test_init>", | ||||
|             "  <Module test_foo.py>", | ||||
|  | @ -1015,7 +1015,7 @@ def test_collect_init_tests(testdir): | |||
|     result.stdout.fnmatch_lines( | ||||
|         [ | ||||
|             "collected 2 items", | ||||
|             "<Package *", | ||||
|             "<Package tests>", | ||||
|             "  <Module __init__.py>", | ||||
|             "    <Function test_init>", | ||||
|             "  <Module test_foo.py>", | ||||
|  | @ -1027,7 +1027,7 @@ def test_collect_init_tests(testdir): | |||
|     result.stdout.fnmatch_lines( | ||||
|         [ | ||||
|             "collected 2 items", | ||||
|             "<Package */tests>", | ||||
|             "<Package tests>", | ||||
|             "  <Module __init__.py>", | ||||
|             "    <Function test_init>", | ||||
|             "  <Module test_foo.py>", | ||||
|  | @ -1039,7 +1039,7 @@ def test_collect_init_tests(testdir): | |||
|     result.stdout.fnmatch_lines( | ||||
|         [ | ||||
|             "collected 2 items", | ||||
|             "<Package */tests>", | ||||
|             "<Package tests>", | ||||
|             "  <Module __init__.py>", | ||||
|             "    <Function test_init>", | ||||
|             "  <Module test_foo.py>", | ||||
|  | @ -1048,12 +1048,12 @@ def test_collect_init_tests(testdir): | |||
|     ) | ||||
|     result = testdir.runpytest("./tests/test_foo.py", "--collect-only") | ||||
|     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 = testdir.runpytest("./tests/__init__.py", "--collect-only") | ||||
|     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*") | ||||
| 
 | ||||
|  |  | |||
|  | @ -834,6 +834,36 @@ class TestKeywordSelection: | |||
|         deselected_tests = dlist[0].items | ||||
|         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: | ||||
|     @pytest.mark.parametrize( | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue