diff --git a/changelog/378.bugfix.rst b/changelog/378.bugfix.rst new file mode 100644 index 0000000..ceb0af8 --- /dev/null +++ b/changelog/378.bugfix.rst @@ -0,0 +1 @@ +Fix support for gevent monkeypatching diff --git a/changelog/384.bugfix.rst b/changelog/384.bugfix.rst new file mode 100644 index 0000000..2ea011e --- /dev/null +++ b/changelog/384.bugfix.rst @@ -0,0 +1 @@ +Add support for pytest 4.1. diff --git a/testing/acceptance_test.py b/testing/acceptance_test.py index e4bccaf..2c026d4 100644 --- a/testing/acceptance_test.py +++ b/testing/acceptance_test.py @@ -541,16 +541,15 @@ def test_session_testscollected(testdir): assert collected_file.read() == "collected = 3" -def test_funcarg_teardown_failure(testdir): +def test_fixture_teardown_failure(testdir): p = testdir.makepyfile( """ import pytest - @pytest.fixture + @pytest.fixture(scope="module") def myarg(request): - def teardown(val): - raise ValueError(val) - return request.cached_setup(setup=lambda: 42, teardown=teardown, - scope="module") + yield 42 + raise ValueError(42) + def test_hello(myarg): pass """ @@ -636,6 +635,11 @@ def test_skipping(testdir): def test_issue34_pluginloading_in_subprocess(testdir): + import _pytest.hookspec + + if not hasattr(_pytest.hookspec, "pytest_namespace"): + pytest.skip("this pytest version no longer supports pytest_namespace()") + testdir.tmpdir.join("plugin123.py").write( textwrap.dedent( """ diff --git a/xdist/looponfail.py b/xdist/looponfail.py index d49a05b..ef68c6e 100644 --- a/xdist/looponfail.py +++ b/xdist/looponfail.py @@ -32,7 +32,7 @@ def pytest_cmdline_main(config): if config.getoption("looponfail"): usepdb = config.getoption("usepdb") # a core option if usepdb: - raise pytest.UsageError("--pdb incompatible with --looponfail.") + raise pytest.UsageError("--pdb is incompatible with --looponfail.") looponfail_main(config) return 2 # looponfail only can get stop with ctrl-C anyway diff --git a/xdist/plugin.py b/xdist/plugin.py index ce8f643..3cff561 100644 --- a/xdist/plugin.py +++ b/xdist/plugin.py @@ -126,12 +126,12 @@ def pytest_addoption(parser): ) parser.addini( "rsyncdirs", - "list of (relative) paths to be rsynced for" " remote distributed testing.", + "list of (relative) paths to be rsynced for remote distributed testing.", type="pathlist", ) parser.addini( "rsyncignore", - "list of (relative) glob-style paths to be ignored " "for rsyncing.", + "list of (relative) glob-style paths to be ignored for rsyncing.", type="pathlist", ) parser.addini( diff --git a/xdist/scheduler/loadscope.py b/xdist/scheduler/loadscope.py index 2917fc0..426d340 100644 --- a/xdist/scheduler/loadscope.py +++ b/xdist/scheduler/loadscope.py @@ -187,7 +187,7 @@ class LoadScopeScheduling(object): break else: raise RuntimeError( - "Unable to identify crashitem on a workload with " "pending items" + "Unable to identify crashitem on a workload with pending items" ) # Made uncompleted work unit available again diff --git a/xdist/workermanage.py b/xdist/workermanage.py index 3b35c14..418a66c 100644 --- a/xdist/workermanage.py +++ b/xdist/workermanage.py @@ -268,7 +268,7 @@ class WorkerController(object): if not self._down: try: self.sendcommand("shutdown") - except IOError: + except (IOError, OSError): pass self._shutdown_sent = True @@ -345,7 +345,11 @@ class WorkerController(object): except: # noqa from _pytest._code import ExceptionInfo - excinfo = ExceptionInfo() + # ExceptionInfo API changed in pytest 4.1 + if hasattr(ExceptionInfo, "from_current"): + excinfo = ExceptionInfo.from_current() + else: + excinfo = ExceptionInfo() print("!" * 20, excinfo) self.config.notify_exception(excinfo) self.shutdown()