Remove support code for unittest 2
Also moved a pytest_runtest_makereport hook implemented in nose.py, but nowadays makes more sense to be implemented in unittest.py
This commit is contained in:
		
							parent
							
								
									666acc9b7a
								
							
						
					
					
						commit
						24a66db8d3
					
				|  | @ -0,0 +1,13 @@ | ||||||
|  | Removed unused support code for `unittest2 <https://pypi.org/project/unittest2/>`__. | ||||||
|  | 
 | ||||||
|  | The ``unittest2`` backport module is no longer | ||||||
|  | necessary since Python 3.3+, and the small amount of code in pytest to support it also doesn't seem | ||||||
|  | to be used: after removed, all tests still pass unchanged. | ||||||
|  | 
 | ||||||
|  | Although our policy is to introduce a deprecation period before removing any features or support | ||||||
|  | for third party libraries, because this code is apparently not used | ||||||
|  | at all (even if ``unittest2`` is used by a test suite executed by pytest), it was decided to | ||||||
|  | remove it in this release. | ||||||
|  | 
 | ||||||
|  | If you experience a regression because of this, please | ||||||
|  | `file an issue <https://github.com/pytest-dev/pytest/issues/new>`__. | ||||||
|  | @ -1,31 +1,9 @@ | ||||||
| """ run test suites written for nose. """ | """ run test suites written for nose. """ | ||||||
| import sys |  | ||||||
| 
 |  | ||||||
| import pytest |  | ||||||
| from _pytest import python | from _pytest import python | ||||||
| from _pytest import runner |  | ||||||
| from _pytest import unittest | from _pytest import unittest | ||||||
| from _pytest.config import hookimpl | from _pytest.config import hookimpl | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| def get_skip_exceptions(): |  | ||||||
|     skip_classes = set() |  | ||||||
|     for module_name in ("unittest", "unittest2", "nose"): |  | ||||||
|         mod = sys.modules.get(module_name) |  | ||||||
|         if hasattr(mod, "SkipTest"): |  | ||||||
|             skip_classes.add(mod.SkipTest) |  | ||||||
|     return tuple(skip_classes) |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| def pytest_runtest_makereport(item, call): |  | ||||||
|     if call.excinfo and call.excinfo.errisinstance(get_skip_exceptions()): |  | ||||||
|         # let's substitute the excinfo with a pytest.skip one |  | ||||||
|         call2 = runner.CallInfo.from_call( |  | ||||||
|             lambda: pytest.skip(str(call.excinfo.value)), call.when |  | ||||||
|         ) |  | ||||||
|         call.excinfo = call2.excinfo |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| @hookimpl(trylast=True) | @hookimpl(trylast=True) | ||||||
| def pytest_runtest_setup(item): | def pytest_runtest_setup(item): | ||||||
|     if is_potential_nosetest(item): |     if is_potential_nosetest(item): | ||||||
|  | @ -40,9 +18,6 @@ def teardown_nose(item): | ||||||
|     if is_potential_nosetest(item): |     if is_potential_nosetest(item): | ||||||
|         if not call_optional(item.obj, "teardown"): |         if not call_optional(item.obj, "teardown"): | ||||||
|             call_optional(item.parent.obj, "teardown") |             call_optional(item.parent.obj, "teardown") | ||||||
|         # if hasattr(item.parent, '_nosegensetup'): |  | ||||||
|         #    #call_optional(item._nosegensetup, 'teardown') |  | ||||||
|         #    del item.parent._nosegensetup |  | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| def is_potential_nosetest(item): | def is_potential_nosetest(item): | ||||||
|  |  | ||||||
|  | @ -249,10 +249,11 @@ def pytest_make_collect_report(collector): | ||||||
|     if not call.excinfo: |     if not call.excinfo: | ||||||
|         outcome = "passed" |         outcome = "passed" | ||||||
|     else: |     else: | ||||||
|         from _pytest import nose |         skip_exceptions = [Skipped] | ||||||
| 
 |         unittest = sys.modules.get("unittest") | ||||||
|         skip_exceptions = (Skipped,) + nose.get_skip_exceptions() |         if unittest is not None: | ||||||
|         if call.excinfo.errisinstance(skip_exceptions): |             skip_exceptions.append(unittest.SkipTest) | ||||||
|  |         if call.excinfo.errisinstance(tuple(skip_exceptions)): | ||||||
|             outcome = "skipped" |             outcome = "skipped" | ||||||
|             r = collector._repr_failure_py(call.excinfo, "line").reprcrash |             r = collector._repr_failure_py(call.excinfo, "line").reprcrash | ||||||
|             longrepr = (str(r.path), r.lineno, r.message) |             longrepr = (str(r.path), r.lineno, r.message) | ||||||
|  |  | ||||||
|  | @ -11,6 +11,7 @@ from _pytest.outcomes import skip | ||||||
| from _pytest.outcomes import xfail | from _pytest.outcomes import xfail | ||||||
| from _pytest.python import Class | from _pytest.python import Class | ||||||
| from _pytest.python import Function | from _pytest.python import Function | ||||||
|  | from _pytest.runner import CallInfo | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| def pytest_pycollect_makeitem(collector, name, obj): | def pytest_pycollect_makeitem(collector, name, obj): | ||||||
|  | @ -223,6 +224,14 @@ def pytest_runtest_makereport(item, call): | ||||||
|             except AttributeError: |             except AttributeError: | ||||||
|                 pass |                 pass | ||||||
| 
 | 
 | ||||||
|  |     unittest = sys.modules.get("unittest") | ||||||
|  |     if unittest and call.excinfo and call.excinfo.errisinstance(unittest.SkipTest): | ||||||
|  |         # let's substitute the excinfo with a pytest.skip one | ||||||
|  |         call2 = CallInfo.from_call( | ||||||
|  |             lambda: pytest.skip(str(call.excinfo.value)), call.when | ||||||
|  |         ) | ||||||
|  |         call.excinfo = call2.excinfo | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| # twisted trial support | # twisted trial support | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -939,9 +939,7 @@ def test_class_method_containing_test_issue1558(testdir): | ||||||
|     reprec.assertoutcome(passed=1) |     reprec.assertoutcome(passed=1) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @pytest.mark.parametrize( | @pytest.mark.parametrize("base", ["builtins.object", "unittest.TestCase"]) | ||||||
|     "base", ["builtins.object", "unittest.TestCase", "unittest2.TestCase"] |  | ||||||
| ) |  | ||||||
| def test_usefixtures_marker_on_unittest(base, testdir): | def test_usefixtures_marker_on_unittest(base, testdir): | ||||||
|     """#3498""" |     """#3498""" | ||||||
|     module = base.rsplit(".", 1)[0] |     module = base.rsplit(".", 1)[0] | ||||||
|  |  | ||||||
							
								
								
									
										1
									
								
								tox.ini
								
								
								
								
							
							
						
						
									
										1
									
								
								tox.ini
								
								
								
								
							|  | @ -45,7 +45,6 @@ deps = | ||||||
|     pexpect: pexpect |     pexpect: pexpect | ||||||
|     pluggymaster: git+https://github.com/pytest-dev/pluggy.git@master |     pluggymaster: git+https://github.com/pytest-dev/pluggy.git@master | ||||||
|     twisted: twisted |     twisted: twisted | ||||||
|     twisted: unittest2 |  | ||||||
|     xdist: pytest-xdist>=1.13 |     xdist: pytest-xdist>=1.13 | ||||||
|     {env:_PYTEST_TOX_EXTRA_DEP:} |     {env:_PYTEST_TOX_EXTRA_DEP:} | ||||||
| platform = {env:_PYTEST_TOX_PLATFORM:.*} | platform = {env:_PYTEST_TOX_PLATFORM:.*} | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue