cacheprovider: make file-skipping work with any File, not just Modules
No reason for `--lf`'s whole-file-skipping feature to not for for non-Python files. Fix #11068.
This commit is contained in:
		
							parent
							
								
									4b823a42ce
								
							
						
					
					
						commit
						fda8024622
					
				|  | @ -0,0 +1 @@ | ||||||
|  | Fixed the ``--last-failed`` whole-file skipping functionality ("skipped N files") for :ref:`non-python test files <non-python tests>`. | ||||||
|  | @ -27,7 +27,7 @@ from _pytest.deprecated import check_ispytest | ||||||
| from _pytest.fixtures import fixture | from _pytest.fixtures import fixture | ||||||
| from _pytest.fixtures import FixtureRequest | from _pytest.fixtures import FixtureRequest | ||||||
| from _pytest.main import Session | from _pytest.main import Session | ||||||
| from _pytest.python import Module | from _pytest.nodes import File | ||||||
| from _pytest.python import Package | from _pytest.python import Package | ||||||
| from _pytest.reports import TestReport | from _pytest.reports import TestReport | ||||||
| 
 | 
 | ||||||
|  | @ -242,7 +242,7 @@ class LFPluginCollWrapper: | ||||||
|             ) |             ) | ||||||
|             return |             return | ||||||
| 
 | 
 | ||||||
|         elif isinstance(collector, Module): |         elif isinstance(collector, File): | ||||||
|             if collector.path in self.lfplugin._last_failed_paths: |             if collector.path in self.lfplugin._last_failed_paths: | ||||||
|                 out = yield |                 out = yield | ||||||
|                 res = out.get_result() |                 res = out.get_result() | ||||||
|  | @ -280,9 +280,9 @@ class LFPluginCollSkipfiles: | ||||||
|     def pytest_make_collect_report( |     def pytest_make_collect_report( | ||||||
|         self, collector: nodes.Collector |         self, collector: nodes.Collector | ||||||
|     ) -> Optional[CollectReport]: |     ) -> Optional[CollectReport]: | ||||||
|         # Packages are Modules, but we only want to skip test-bearing Modules, |         # Packages are Files, but we only want to skip test-bearing Files, | ||||||
|         # so don't filter Packages. |         # so don't filter Packages. | ||||||
|         if isinstance(collector, Module) and not isinstance(collector, Package): |         if isinstance(collector, File) and not isinstance(collector, Package): | ||||||
|             if collector.path not in self.lfplugin._last_failed_paths: |             if collector.path not in self.lfplugin._last_failed_paths: | ||||||
|                 self.lfplugin._skipped_files += 1 |                 self.lfplugin._skipped_files += 1 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -105,7 +105,7 @@ def tw_mock(): | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @pytest.fixture | @pytest.fixture | ||||||
| def dummy_yaml_custom_test(pytester: Pytester): | def dummy_yaml_custom_test(pytester: Pytester) -> None: | ||||||
|     """Writes a conftest file that collects and executes a dummy yaml test. |     """Writes a conftest file that collects and executes a dummy yaml test. | ||||||
| 
 | 
 | ||||||
|     Taken from the docs, but stripped down to the bare minimum, useful for |     Taken from the docs, but stripped down to the bare minimum, useful for | ||||||
|  |  | ||||||
|  | @ -1085,6 +1085,28 @@ class TestLastFailed: | ||||||
|         result = pytester.runpytest("--lf") |         result = pytester.runpytest("--lf") | ||||||
|         result.assert_outcomes(failed=3) |         result.assert_outcomes(failed=3) | ||||||
| 
 | 
 | ||||||
|  |     def test_non_python_file_skipped( | ||||||
|  |         self, | ||||||
|  |         pytester: Pytester, | ||||||
|  |         dummy_yaml_custom_test: None, | ||||||
|  |     ) -> None: | ||||||
|  |         pytester.makepyfile( | ||||||
|  |             **{ | ||||||
|  |                 "test_bad.py": """def test_bad(): assert False""", | ||||||
|  |             }, | ||||||
|  |         ) | ||||||
|  |         result = pytester.runpytest() | ||||||
|  |         result.stdout.fnmatch_lines(["collected 2 items", "* 1 failed, 1 passed in *"]) | ||||||
|  | 
 | ||||||
|  |         result = pytester.runpytest("--lf") | ||||||
|  |         result.stdout.fnmatch_lines( | ||||||
|  |             [ | ||||||
|  |                 "collected 1 item", | ||||||
|  |                 "run-last-failure: rerun previous 1 failure (skipped 1 file)", | ||||||
|  |                 "* 1 failed in *", | ||||||
|  |             ] | ||||||
|  |         ) | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| class TestNewFirst: | class TestNewFirst: | ||||||
|     def test_newfirst_usecase(self, pytester: Pytester) -> None: |     def test_newfirst_usecase(self, pytester: Pytester) -> None: | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue