| # Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0 |
| # For details: https://github.com/nedbat/coveragepy/blob/master/NOTICE.txt |
| |
| """ |
| Pytest auto configuration. |
| |
| This module is run automatically by pytest, to define and enable fixtures. |
| """ |
| |
| import os |
| import sys |
| import warnings |
| |
| import pytest |
| |
| from coverage import env |
| |
| |
| @pytest.fixture(autouse=True) |
| def set_warnings(): |
| """Enable DeprecationWarnings during all tests.""" |
| warnings.simplefilter("default") |
| warnings.simplefilter("once", DeprecationWarning) |
| |
| # A warning to suppress: |
| # setuptools/py33compat.py:54: DeprecationWarning: The value of convert_charrefs will become |
| # True in 3.5. You are encouraged to set the value explicitly. |
| # unescape = getattr(html, 'unescape', html_parser.HTMLParser().unescape) |
| # How come this warning is successfully suppressed here, but not in setup.cfg?? |
| warnings.filterwarnings( |
| "ignore", |
| category=DeprecationWarning, |
| message="The value of convert_charrefs will become True in 3.5.", |
| ) |
| if env.PYPY and env.PY3: |
| # pypy3 warns about unclosed files a lot. |
| # pylint: disable=undefined-variable |
| warnings.filterwarnings("ignore", r".*unclosed file", category=ResourceWarning) |
| |
| |
| @pytest.fixture(autouse=True) |
| def reset_sys_path(): |
| """Clean up sys.path changes around every test.""" |
| sys_path = list(sys.path) |
| yield |
| sys.path[:] = sys_path |
| |
| |
| @pytest.fixture(autouse=True) |
| def fix_xdist_sys_path(): |
| """Prevent xdist from polluting the Python path. |
| |
| We run tests that care a lot about the contents of sys.path. Pytest-xdist |
| changes sys.path, so running with xdist, vs without xdist, sets sys.path |
| differently. With xdist, sys.path[1] is an empty string, without xdist, |
| it's the virtualenv bin directory. We don't want the empty string, so |
| clobber that entry. |
| |
| See: https://github.com/pytest-dev/pytest-xdist/issues/376 |
| |
| """ |
| if os.environ.get('PYTEST_XDIST_WORKER', ''): |
| # We are running in an xdist worker. |
| if sys.path[1] == '': |
| # xdist has set sys.path[1] to ''. Clobber it. |
| del sys.path[1] |
| # Also, don't let it sneak stuff in via PYTHONPATH. |
| try: |
| del os.environ['PYTHONPATH'] |
| except KeyError: |
| pass |