Merge pull request #6015 from blueyed/merge-master-into-features
Merge master into features
This commit is contained in:
		
						commit
						978c7ae1b7
					
				
							
								
								
									
										1
									
								
								AUTHORS
								
								
								
								
							
							
						
						
									
										1
									
								
								AUTHORS
								
								
								
								
							| 
						 | 
					@ -267,5 +267,6 @@ Wouter van Ackooy
 | 
				
			||||||
Xixi Zhao
 | 
					Xixi Zhao
 | 
				
			||||||
Xuan Luong
 | 
					Xuan Luong
 | 
				
			||||||
Xuecong Liao
 | 
					Xuecong Liao
 | 
				
			||||||
 | 
					Yoav Caspi
 | 
				
			||||||
Zac Hatfield-Dodds
 | 
					Zac Hatfield-Dodds
 | 
				
			||||||
Zoltán Máté
 | 
					Zoltán Máté
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1 @@
 | 
				
			||||||
 | 
					Fix crash with ``KeyboardInterrupt`` during ``--setup-show``.
 | 
				
			||||||
| 
						 | 
					@ -678,4 +678,4 @@ Or, if desired, you can ``pip install contextlib2`` and use:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.. code-block:: python
 | 
					.. code-block:: python
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    from contextlib2 import ExitStack as does_not_raise
 | 
					    from contextlib2 import nullcontext as does_not_raise
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -135,7 +135,7 @@ class Cache:
 | 
				
			||||||
        readme_path.write_text(README_CONTENT)
 | 
					        readme_path.write_text(README_CONTENT)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        gitignore_path = self._cachedir.joinpath(".gitignore")
 | 
					        gitignore_path = self._cachedir.joinpath(".gitignore")
 | 
				
			||||||
        msg = "# Created by pytest automatically.\n*"
 | 
					        msg = "# Created by pytest automatically.\n*\n"
 | 
				
			||||||
        gitignore_path.write_text(msg, encoding="UTF-8")
 | 
					        gitignore_path.write_text(msg, encoding="UTF-8")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        cachedir_tag_path = self._cachedir.joinpath("CACHEDIR.TAG")
 | 
					        cachedir_tag_path = self._cachedir.joinpath("CACHEDIR.TAG")
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -195,7 +195,6 @@ def get_plugin_manager():
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def _prepareconfig(args=None, plugins=None):
 | 
					def _prepareconfig(args=None, plugins=None):
 | 
				
			||||||
    warning = None
 | 
					 | 
				
			||||||
    if args is None:
 | 
					    if args is None:
 | 
				
			||||||
        args = sys.argv[1:]
 | 
					        args = sys.argv[1:]
 | 
				
			||||||
    elif isinstance(args, py.path.local):
 | 
					    elif isinstance(args, py.path.local):
 | 
				
			||||||
| 
						 | 
					@ -213,10 +212,6 @@ def _prepareconfig(args=None, plugins=None):
 | 
				
			||||||
                    pluginmanager.consider_pluginarg(plugin)
 | 
					                    pluginmanager.consider_pluginarg(plugin)
 | 
				
			||||||
                else:
 | 
					                else:
 | 
				
			||||||
                    pluginmanager.register(plugin)
 | 
					                    pluginmanager.register(plugin)
 | 
				
			||||||
        if warning:
 | 
					 | 
				
			||||||
            from _pytest.warnings import _issue_warning_captured
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            _issue_warning_captured(warning, hook=config.hook, stacklevel=4)
 | 
					 | 
				
			||||||
        return pluginmanager.hook.pytest_cmdline_parse(
 | 
					        return pluginmanager.hook.pytest_cmdline_parse(
 | 
				
			||||||
            pluginmanager=pluginmanager, args=args
 | 
					            pluginmanager=pluginmanager, args=args
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,3 @@
 | 
				
			||||||
import sys
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import pytest
 | 
					import pytest
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -51,7 +49,6 @@ def _show_fixture_action(fixturedef, msg):
 | 
				
			||||||
    capman = config.pluginmanager.getplugin("capturemanager")
 | 
					    capman = config.pluginmanager.getplugin("capturemanager")
 | 
				
			||||||
    if capman:
 | 
					    if capman:
 | 
				
			||||||
        capman.suspend_global_capture()
 | 
					        capman.suspend_global_capture()
 | 
				
			||||||
        out, err = capman.read_global_capture()
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    tw = config.get_terminal_writer()
 | 
					    tw = config.get_terminal_writer()
 | 
				
			||||||
    tw.line()
 | 
					    tw.line()
 | 
				
			||||||
| 
						 | 
					@ -74,8 +71,6 @@ def _show_fixture_action(fixturedef, msg):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if capman:
 | 
					    if capman:
 | 
				
			||||||
        capman.resume_global_capture()
 | 
					        capman.resume_global_capture()
 | 
				
			||||||
        sys.stdout.write(out)
 | 
					 | 
				
			||||||
        sys.stderr.write(err)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@pytest.hookimpl(tryfirst=True)
 | 
					@pytest.hookimpl(tryfirst=True)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1029,7 +1029,7 @@ def test_gitignore(testdir):
 | 
				
			||||||
    config = testdir.parseconfig()
 | 
					    config = testdir.parseconfig()
 | 
				
			||||||
    cache = Cache.for_config(config)
 | 
					    cache = Cache.for_config(config)
 | 
				
			||||||
    cache.set("foo", "bar")
 | 
					    cache.set("foo", "bar")
 | 
				
			||||||
    msg = "# Created by pytest automatically.\n*"
 | 
					    msg = "# Created by pytest automatically.\n*\n"
 | 
				
			||||||
    gitignore_path = cache._cachedir.joinpath(".gitignore")
 | 
					    gitignore_path = cache._cachedir.joinpath(".gitignore")
 | 
				
			||||||
    assert gitignore_path.read_text(encoding="UTF-8") == msg
 | 
					    assert gitignore_path.read_text(encoding="UTF-8") == msg
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,4 +1,5 @@
 | 
				
			||||||
import pytest
 | 
					import pytest
 | 
				
			||||||
 | 
					from _pytest.main import ExitCode
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@pytest.fixture(params=["--setup-only", "--setup-plan", "--setup-show"], scope="module")
 | 
					@pytest.fixture(params=["--setup-only", "--setup-plan", "--setup-show"], scope="module")
 | 
				
			||||||
| 
						 | 
					@ -267,3 +268,27 @@ def test_show_fixtures_and_execute_test(testdir):
 | 
				
			||||||
    result.stdout.fnmatch_lines(
 | 
					    result.stdout.fnmatch_lines(
 | 
				
			||||||
        ["*SETUP    F arg*", "*test_arg (fixtures used: arg)F*", "*TEARDOWN F arg*"]
 | 
					        ["*SETUP    F arg*", "*test_arg (fixtures used: arg)F*", "*TEARDOWN F arg*"]
 | 
				
			||||||
    )
 | 
					    )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def test_setup_show_with_KeyboardInterrupt_in_test(testdir):
 | 
				
			||||||
 | 
					    p = testdir.makepyfile(
 | 
				
			||||||
 | 
					        """
 | 
				
			||||||
 | 
					        import pytest
 | 
				
			||||||
 | 
					        @pytest.fixture
 | 
				
			||||||
 | 
					        def arg():
 | 
				
			||||||
 | 
					            pass
 | 
				
			||||||
 | 
					        def test_arg(arg):
 | 
				
			||||||
 | 
					            raise KeyboardInterrupt()
 | 
				
			||||||
 | 
					    """
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					    result = testdir.runpytest("--setup-show", p, no_reraise_ctrlc=True)
 | 
				
			||||||
 | 
					    result.stdout.fnmatch_lines(
 | 
				
			||||||
 | 
					        [
 | 
				
			||||||
 | 
					            "*SETUP    F arg*",
 | 
				
			||||||
 | 
					            "*test_arg (fixtures used: arg)*",
 | 
				
			||||||
 | 
					            "*TEARDOWN F arg*",
 | 
				
			||||||
 | 
					            "*! KeyboardInterrupt !*",
 | 
				
			||||||
 | 
					            "*= no tests ran in *",
 | 
				
			||||||
 | 
					        ]
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					    assert result.ret == ExitCode.INTERRUPTED
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue