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 |         import pytest | ||||||
| 
 | 
 | ||||||
|         for item in item.listchain(): |         for item in item.listchain(): | ||||||
|             if not isinstance(item, pytest.Instance): |             if not isinstance(item, (pytest.Instance, pytest.Session)): | ||||||
|                 mapped_names.add(item.name) |                 mapped_names.add(item.name) | ||||||
| 
 | 
 | ||||||
|         # Add the names added as extra keywords to current or parent items |         # Add the names added as extra keywords to current or parent items | ||||||
|  |  | ||||||
|  | @ -571,8 +571,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