pytest 8.4.1__tar.gz → 8.4.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pytest-8.4.1 → pytest-8.4.2}/.github/workflows/deploy.yml +5 -5
- {pytest-8.4.1 → pytest-8.4.2}/AUTHORS +1 -0
- {pytest-8.4.1/src/pytest.egg-info → pytest-8.4.2}/PKG-INFO +1 -1
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/index.rst +1 -0
- pytest-8.4.2/doc/en/announce/release-8.4.2.rst +27 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/builtin.rst +1 -1
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/changelog.rst +43 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/example/parametrize.rst +3 -3
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/example/pythoncollection.rst +2 -2
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/getting-started.rst +1 -1
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/how-to/fixtures.rst +1 -1
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/how-to/parametrize.rst +7 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/how-to/writing_hook_functions.rst +6 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/index.rst +1 -1
- {pytest-8.4.1 → pytest-8.4.2}/pyproject.toml +3 -0
- {pytest-8.4.1 → pytest-8.4.2}/scripts/prepare-release-pr.py +1 -0
- {pytest-8.4.1 → pytest-8.4.2}/src/_pytest/_version.py +16 -3
- {pytest-8.4.1 → pytest-8.4.2}/src/_pytest/compat.py +12 -1
- {pytest-8.4.1 → pytest-8.4.2}/src/_pytest/config/argparsing.py +3 -1
- {pytest-8.4.1 → pytest-8.4.2}/src/_pytest/fixtures.py +3 -2
- {pytest-8.4.1 → pytest-8.4.2}/src/_pytest/nodes.py +1 -1
- {pytest-8.4.1 → pytest-8.4.2}/src/_pytest/python_api.py +21 -5
- {pytest-8.4.1 → pytest-8.4.2}/src/_pytest/raises.py +2 -2
- {pytest-8.4.1 → pytest-8.4.2}/src/_pytest/terminal.py +3 -1
- {pytest-8.4.1 → pytest-8.4.2/src/pytest.egg-info}/PKG-INFO +1 -1
- {pytest-8.4.1 → pytest-8.4.2}/src/pytest.egg-info/SOURCES.txt +1 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/conftest.py +12 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/python/approx.py +8 -2
- {pytest-8.4.1 → pytest-8.4.2}/testing/python/raises_group.py +1 -1
- {pytest-8.4.1 → pytest-8.4.2}/testing/test_collection.py +40 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/test_doctest.py +6 -3
- {pytest-8.4.1 → pytest-8.4.2}/testing/test_faulthandler.py +1 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/test_terminal.py +25 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/test_threadexception.py +1 -1
- {pytest-8.4.1 → pytest-8.4.2}/testing/test_warnings.py +1 -0
- {pytest-8.4.1 → pytest-8.4.2}/tox.ini +1 -0
- {pytest-8.4.1 → pytest-8.4.2}/.coveragerc +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/.git-blame-ignore-revs +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/.gitattributes +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/.github/FUNDING.yml +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/.github/ISSUE_TEMPLATE/1_bug_report.md +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/.github/ISSUE_TEMPLATE/2_feature_request.md +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/.github/chronographer.yml +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/.github/config.yml +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/.github/dependabot.yml +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/.github/labels.toml +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/.github/patchback.yml +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/.github/workflows/prepare-release-pr.yml +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/.github/workflows/stale.yml +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/.github/workflows/test.yml +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/.github/workflows/update-plugin-list.yml +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/.gitignore +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/.pre-commit-config.yaml +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/.readthedocs.yaml +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/CHANGELOG.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/CITATION +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/CODE_OF_CONDUCT.md +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/CONTRIBUTING.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/LICENSE +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/OPENCOLLECTIVE.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/README.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/RELEASING.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/TIDELIFT.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/bench/bench.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/bench/bench_argcomplete.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/bench/empty.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/bench/manyparam.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/bench/skip.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/bench/unit_test.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/bench/xunit.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/changelog/.gitignore +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/changelog/README.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/changelog/_template.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/codecov.yml +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/Makefile +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/_static/pytest-custom.css +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/_static/pytest1.png +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/_templates/links.html +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/adopt.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-2.0.0.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-2.0.1.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-2.0.2.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-2.0.3.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-2.1.0.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-2.1.1.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-2.1.2.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-2.1.3.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-2.2.0.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-2.2.1.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-2.2.2.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-2.2.4.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-2.3.0.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-2.3.1.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-2.3.2.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-2.3.3.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-2.3.4.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-2.3.5.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-2.4.0.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-2.4.1.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-2.4.2.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-2.5.0.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-2.5.1.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-2.5.2.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-2.6.0.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-2.6.1.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-2.6.2.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-2.6.3.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-2.7.0.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-2.7.1.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-2.7.2.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-2.8.2.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-2.8.3.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-2.8.4.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-2.8.5.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-2.8.6.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-2.8.7.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-2.9.0.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-2.9.1.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-2.9.2.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-3.0.0.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-3.0.1.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-3.0.2.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-3.0.3.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-3.0.4.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-3.0.5.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-3.0.6.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-3.0.7.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-3.1.0.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-3.1.1.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-3.1.2.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-3.1.3.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-3.10.0.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-3.10.1.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-3.2.0.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-3.2.1.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-3.2.2.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-3.2.3.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-3.2.4.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-3.2.5.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-3.3.0.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-3.3.1.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-3.3.2.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-3.4.0.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-3.4.1.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-3.4.2.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-3.5.0.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-3.5.1.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-3.6.0.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-3.6.1.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-3.6.2.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-3.6.3.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-3.6.4.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-3.7.0.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-3.7.1.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-3.7.2.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-3.7.3.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-3.7.4.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-3.8.0.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-3.8.1.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-3.8.2.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-3.9.0.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-3.9.1.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-3.9.2.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-3.9.3.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-4.0.0.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-4.0.1.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-4.0.2.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-4.1.0.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-4.1.1.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-4.2.0.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-4.2.1.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-4.3.0.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-4.3.1.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-4.4.0.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-4.4.1.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-4.4.2.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-4.5.0.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-4.6.0.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-4.6.1.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-4.6.2.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-4.6.3.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-4.6.4.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-4.6.5.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-4.6.6.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-4.6.7.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-4.6.8.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-4.6.9.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-5.0.0.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-5.0.1.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-5.1.0.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-5.1.1.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-5.1.2.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-5.1.3.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-5.2.0.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-5.2.1.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-5.2.2.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-5.2.3.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-5.2.4.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-5.3.0.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-5.3.1.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-5.3.2.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-5.3.3.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-5.3.4.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-5.3.5.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-5.4.0.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-5.4.1.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-5.4.2.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-5.4.3.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-6.0.0.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-6.0.0rc1.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-6.0.1.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-6.0.2.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-6.1.0.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-6.1.1.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-6.1.2.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-6.2.0.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-6.2.1.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-6.2.2.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-6.2.3.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-6.2.4.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-6.2.5.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-7.0.0.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-7.0.0rc1.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-7.0.1.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-7.1.0.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-7.1.1.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-7.1.2.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-7.1.3.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-7.2.0.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-7.2.1.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-7.2.2.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-7.3.0.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-7.3.1.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-7.3.2.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-7.4.0.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-7.4.1.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-7.4.2.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-7.4.3.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-7.4.4.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-8.0.0.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-8.0.0rc1.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-8.0.0rc2.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-8.0.1.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-8.0.2.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-8.1.0.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-8.1.1.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-8.1.2.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-8.2.0.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-8.2.1.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-8.2.2.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-8.3.0.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-8.3.1.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-8.3.2.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-8.3.3.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-8.3.4.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-8.3.5.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-8.4.0.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/release-8.4.1.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/announce/sprint2016.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/backwards-compatibility.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/broken-dep-constraints.txt +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/conf.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/conftest.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/contact.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/contents.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/contributing.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/deprecations.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/development_guide.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/example/assertion/failure_demo.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/example/assertion/global_testmodule_config/conftest.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/example/assertion/global_testmodule_config/test_hello_world.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/example/assertion/test_failures.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/example/assertion/test_setup_flow_example.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/example/attic.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/example/conftest.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/example/customdirectory/conftest.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/example/customdirectory/pytest.ini +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/example/customdirectory/tests/manifest.json +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/example/customdirectory/tests/test_first.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/example/customdirectory/tests/test_second.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/example/customdirectory/tests/test_third.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/example/customdirectory.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/example/fixtures/fixture_availability.svg +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/example/fixtures/fixture_availability_plugins.svg +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/example/fixtures/test_fixtures_order_autouse.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/example/fixtures/test_fixtures_order_autouse.svg +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/example/fixtures/test_fixtures_order_autouse_flat.svg +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/example/fixtures/test_fixtures_order_autouse_multiple_scopes.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/example/fixtures/test_fixtures_order_autouse_multiple_scopes.svg +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/example/fixtures/test_fixtures_order_autouse_temp_effects.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/example/fixtures/test_fixtures_order_autouse_temp_effects.svg +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/example/fixtures/test_fixtures_order_dependencies.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/example/fixtures/test_fixtures_order_dependencies.svg +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/example/fixtures/test_fixtures_order_dependencies_flat.svg +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/example/fixtures/test_fixtures_order_dependencies_unclear.svg +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/example/fixtures/test_fixtures_order_scope.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/example/fixtures/test_fixtures_order_scope.svg +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/example/fixtures/test_fixtures_request_different_scope.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/example/fixtures/test_fixtures_request_different_scope.svg +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/example/index.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/example/markers.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/example/multipython.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/example/nonpython/__init__.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/example/nonpython/conftest.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/example/nonpython/test_simple.yaml +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/example/nonpython.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/example/pythoncollection.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/example/reportingdemo.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/example/simple.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/example/special.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/example/xfail_demo.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/explanation/anatomy.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/explanation/ci.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/explanation/fixtures.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/explanation/flaky.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/explanation/goodpractices.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/explanation/index.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/explanation/pythonpath.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/explanation/types.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/funcarg_compare.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/funcargs.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/historical-notes.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/history.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/how-to/assert.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/how-to/bash-completion.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/how-to/cache.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/how-to/capture-stdout-stderr.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/how-to/capture-warnings.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/how-to/doctest.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/how-to/existingtestsuite.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/how-to/failures.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/how-to/index.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/how-to/logging.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/how-to/mark.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/how-to/monkeypatch.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/how-to/output.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/how-to/plugins.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/how-to/skipping.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/how-to/tmp_path.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/how-to/unittest.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/how-to/usage.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/how-to/writing_plugins.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/how-to/xunit_setup.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/img/cramer2.png +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/img/favicon.png +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/img/freiburg2.jpg +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/img/gaynor3.png +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/img/keleshev.png +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/img/pullrequest.png +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/img/pylib.png +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/img/pytest_logo_curves.svg +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/img/theuni.png +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/license.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/naming20.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/proposals/parametrize_with_fixtures.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/pytest.ini +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/recwarn.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/reference/customize.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/reference/exit-codes.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/reference/fixtures.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/reference/index.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/reference/plugin_list.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/reference/reference.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/requirements.txt +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/sponsor.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/talks.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/tidelift.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/doc/en/yieldfixture.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/extra/get_issues.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/scripts/.gitignore +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/scripts/generate-gh-release-notes.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/scripts/release.major.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/scripts/release.minor.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/scripts/release.patch.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/scripts/release.pre.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/scripts/release.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/scripts/update-plugin-list.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/setup.cfg +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/src/_pytest/__init__.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/src/_pytest/_argcomplete.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/src/_pytest/_code/__init__.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/src/_pytest/_code/code.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/src/_pytest/_code/source.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/src/_pytest/_io/__init__.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/src/_pytest/_io/pprint.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/src/_pytest/_io/saferepr.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/src/_pytest/_io/terminalwriter.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/src/_pytest/_io/wcwidth.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/src/_pytest/_py/__init__.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/src/_pytest/_py/error.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/src/_pytest/_py/path.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/src/_pytest/assertion/__init__.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/src/_pytest/assertion/rewrite.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/src/_pytest/assertion/truncate.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/src/_pytest/assertion/util.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/src/_pytest/cacheprovider.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/src/_pytest/capture.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/src/_pytest/config/__init__.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/src/_pytest/config/compat.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/src/_pytest/config/exceptions.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/src/_pytest/config/findpaths.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/src/_pytest/debugging.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/src/_pytest/deprecated.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/src/_pytest/doctest.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/src/_pytest/faulthandler.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/src/_pytest/freeze_support.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/src/_pytest/helpconfig.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/src/_pytest/hookspec.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/src/_pytest/junitxml.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/src/_pytest/legacypath.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/src/_pytest/logging.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/src/_pytest/main.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/src/_pytest/mark/__init__.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/src/_pytest/mark/expression.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/src/_pytest/mark/structures.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/src/_pytest/monkeypatch.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/src/_pytest/outcomes.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/src/_pytest/pastebin.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/src/_pytest/pathlib.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/src/_pytest/py.typed +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/src/_pytest/pytester.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/src/_pytest/pytester_assertions.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/src/_pytest/python.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/src/_pytest/recwarn.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/src/_pytest/reports.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/src/_pytest/runner.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/src/_pytest/scope.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/src/_pytest/setuponly.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/src/_pytest/setupplan.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/src/_pytest/skipping.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/src/_pytest/stash.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/src/_pytest/stepwise.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/src/_pytest/threadexception.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/src/_pytest/timing.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/src/_pytest/tmpdir.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/src/_pytest/tracemalloc.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/src/_pytest/unittest.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/src/_pytest/unraisableexception.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/src/_pytest/warning_types.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/src/_pytest/warnings.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/src/py.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/src/pytest/__init__.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/src/pytest/__main__.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/src/pytest/py.typed +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/src/pytest.egg-info/dependency_links.txt +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/src/pytest.egg-info/entry_points.txt +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/src/pytest.egg-info/requires.txt +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/src/pytest.egg-info/top_level.txt +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/_py/test_local.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/acceptance_test.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/code/test_code.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/code/test_excinfo.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/code/test_source.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/deprecated_test.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/README.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/__init__.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/acceptance/fixture_mock_integration.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/collect/collect_init_tests/pytest.ini +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/collect/collect_init_tests/tests/__init__.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/collect/collect_init_tests/tests/test_foo.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/collect/package_infinite_recursion/__init__.pyi +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/collect/package_infinite_recursion/conftest.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/collect/package_infinite_recursion/tests/__init__.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/collect/package_infinite_recursion/tests/test_basic.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/collect/package_init_given_as_arg/pkg/__init__.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/collect/package_init_given_as_arg/pkg/test_foo.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/config/collect_pytest_prefix/__init__.pyi +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/config/collect_pytest_prefix/conftest.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/config/collect_pytest_prefix/test_foo.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/conftest_usageerror/__init__.pyi +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/conftest_usageerror/conftest.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/customdirectory/conftest.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/customdirectory/pytest.ini +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/customdirectory/tests/manifest.json +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/customdirectory/tests/test_first.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/customdirectory/tests/test_second.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/customdirectory/tests/test_third.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/dataclasses/test_compare_dataclasses.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/dataclasses/test_compare_dataclasses_field_comparison_off.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/dataclasses/test_compare_dataclasses_verbose.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/dataclasses/test_compare_dataclasses_with_custom_eq.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/dataclasses/test_compare_initvar.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/dataclasses/test_compare_recursive_dataclasses.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/dataclasses/test_compare_two_different_dataclasses.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/doctest/main_py/__main__.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/doctest/main_py/test_normal_module.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/fixtures/custom_item/__init__.pyi +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/fixtures/custom_item/conftest.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/fixtures/custom_item/foo/__init__.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/fixtures/custom_item/foo/test_foo.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/fixtures/fill_fixtures/test_conftest_funcargs_only_available_in_subdir/sub1/__init__.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/fixtures/fill_fixtures/test_conftest_funcargs_only_available_in_subdir/sub1/conftest.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/fixtures/fill_fixtures/test_conftest_funcargs_only_available_in_subdir/sub1/test_in_sub1.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/fixtures/fill_fixtures/test_conftest_funcargs_only_available_in_subdir/sub2/__init__.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/fixtures/fill_fixtures/test_conftest_funcargs_only_available_in_subdir/sub2/conftest.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/fixtures/fill_fixtures/test_conftest_funcargs_only_available_in_subdir/sub2/test_in_sub2.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/fixtures/fill_fixtures/test_detect_recursive_dependency_error.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/fixtures/fill_fixtures/test_extend_fixture_conftest_conftest/__init__.pyi +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/fixtures/fill_fixtures/test_extend_fixture_conftest_conftest/conftest.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/fixtures/fill_fixtures/test_extend_fixture_conftest_conftest/pkg/__init__.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/fixtures/fill_fixtures/test_extend_fixture_conftest_conftest/pkg/conftest.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/fixtures/fill_fixtures/test_extend_fixture_conftest_conftest/pkg/test_spam.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/fixtures/fill_fixtures/test_extend_fixture_conftest_module/__init__.pyi +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/fixtures/fill_fixtures/test_extend_fixture_conftest_module/conftest.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/fixtures/fill_fixtures/test_extend_fixture_conftest_module/test_extend_fixture_conftest_module.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/fixtures/fill_fixtures/test_extend_fixture_module_class.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/fixtures/fill_fixtures/test_funcarg_basic.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/fixtures/fill_fixtures/test_funcarg_lookup_classlevel.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/fixtures/fill_fixtures/test_funcarg_lookup_modulelevel.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/fixtures/fill_fixtures/test_funcarg_lookupfails.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/fixtures/test_fixture_named_request.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/fixtures/test_getfixturevalue_dynamic.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/issue88_initial_file_multinodes/__init__.pyi +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/issue88_initial_file_multinodes/conftest.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/issue88_initial_file_multinodes/test_hello.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/issue_519.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/junit-10.xsd +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/marks/marks_considered_keywords/__init__.pyi +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/marks/marks_considered_keywords/conftest.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/marks/marks_considered_keywords/test_marks_as_keywords.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/perf_examples/collect_stats/.gitignore +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/perf_examples/collect_stats/generate_folders.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/perf_examples/collect_stats/template_test.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/pytest.ini +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/tmpdir/tmp_path_fixture.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/unittest/test_parametrized_fixture_error_message.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/unittest/test_setup_skip.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/unittest/test_setup_skip_class.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/unittest/test_setup_skip_module.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/unittest/test_unittest_asyncio.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/unittest/test_unittest_asynctest.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/unittest/test_unittest_plain_async.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/warnings/test_group_warnings_by_message.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/warnings/test_group_warnings_by_message_summary/test_1.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/example_scripts/warnings/test_group_warnings_by_message_summary/test_2.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/examples/test_issue519.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/freeze/.gitignore +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/freeze/create_executable.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/freeze/runtests_script.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/freeze/tests/test_doctest.txt +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/freeze/tests/test_trivial.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/freeze/tox_run.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/io/test_pprint.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/io/test_saferepr.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/io/test_terminalwriter.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/io/test_wcwidth.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/logging/test_fixture.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/logging/test_formatter.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/logging/test_reporting.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/plugins_integration/.gitignore +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/plugins_integration/README.rst +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/plugins_integration/bdd_wallet.feature +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/plugins_integration/bdd_wallet.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/plugins_integration/django_settings.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/plugins_integration/pytest.ini +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/plugins_integration/pytest_anyio_integration.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/plugins_integration/pytest_asyncio_integration.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/plugins_integration/pytest_mock_integration.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/plugins_integration/pytest_rerunfailures_integration.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/plugins_integration/pytest_trio_integration.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/plugins_integration/pytest_twisted_integration.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/plugins_integration/requirements.txt +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/plugins_integration/simple_integration.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/python/collect.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/python/fixtures.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/python/integration.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/python/metafunc.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/python/raises.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/python/show_fixtures_per_test.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/test_argcomplete.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/test_assertion.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/test_assertrewrite.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/test_cacheprovider.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/test_capture.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/test_collect_imported_tests.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/test_compat.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/test_config.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/test_conftest.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/test_debugging.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/test_entry_points.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/test_error_diffs.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/test_findpaths.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/test_helpconfig.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/test_junitxml.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/test_legacypath.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/test_link_resolve.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/test_main.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/test_mark.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/test_mark_expression.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/test_meta.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/test_monkeypatch.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/test_nodes.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/test_parseopt.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/test_pastebin.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/test_pathlib.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/test_pluginmanager.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/test_pytester.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/test_python_path.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/test_recwarn.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/test_reports.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/test_runner.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/test_runner_xunit.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/test_scope.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/test_session.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/test_setuponly.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/test_setupplan.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/test_skipping.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/test_stash.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/test_stepwise.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/test_tmpdir.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/test_unittest.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/test_unraisableexception.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/test_warning_types.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/typing_checks.py +0 -0
- {pytest-8.4.1 → pytest-8.4.2}/testing/typing_raises_group.py +0 -0
|
@@ -109,8 +109,8 @@ jobs:
|
|
|
109
109
|
tox -e generate-gh-release-notes -- "$VERSION" scripts/latest-release-notes.md
|
|
110
110
|
|
|
111
111
|
- name: Publish GitHub Release
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
112
|
+
env:
|
|
113
|
+
VERSION: ${{ github.event.inputs.version }}
|
|
114
|
+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
115
|
+
run: |
|
|
116
|
+
gh release create --notes-file scripts/latest-release-notes.md --verify-tag "$VERSION" dist/*
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pytest
|
|
3
|
-
Version: 8.4.
|
|
3
|
+
Version: 8.4.2
|
|
4
4
|
Summary: pytest: simple powerful testing with Python
|
|
5
5
|
Author: Holger Krekel, Bruno Oliveira, Ronny Pfannschmidt, Floris Bruynooghe, Brianna Laugher, Florian Bruhin, Others (See AUTHORS)
|
|
6
6
|
License: MIT
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
pytest-8.4.2
|
|
2
|
+
=======================================
|
|
3
|
+
|
|
4
|
+
pytest 8.4.2 has just been released to PyPI.
|
|
5
|
+
|
|
6
|
+
This is a bug-fix release, being a drop-in replacement.
|
|
7
|
+
|
|
8
|
+
The full changelog is available at https://docs.pytest.org/en/stable/changelog.html.
|
|
9
|
+
|
|
10
|
+
Thanks to all of the contributors to this release:
|
|
11
|
+
|
|
12
|
+
* AD
|
|
13
|
+
* Aditi De
|
|
14
|
+
* Bruno Oliveira
|
|
15
|
+
* Florian Bruhin
|
|
16
|
+
* John Litborn
|
|
17
|
+
* Liam DeVoe
|
|
18
|
+
* Marc Mueller
|
|
19
|
+
* NayeemJohn
|
|
20
|
+
* Olivier Grisel
|
|
21
|
+
* Ran Benita
|
|
22
|
+
* bengartner
|
|
23
|
+
* 🇺🇦 Sviatoslav Sydorenko (Святослав Сидоренко)
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
Happy testing,
|
|
27
|
+
The pytest Development Team
|
|
@@ -142,7 +142,7 @@ For information about fixtures, see :ref:`fixtures`. To see a complete list of a
|
|
|
142
142
|
|
|
143
143
|
For more details: :ref:`doctest_namespace`.
|
|
144
144
|
|
|
145
|
-
pytestconfig [session scope] -- .../_pytest/fixtures.py:
|
|
145
|
+
pytestconfig [session scope] -- .../_pytest/fixtures.py:1425
|
|
146
146
|
Session-scoped fixture that returns the session's :class:`pytest.Config`
|
|
147
147
|
object.
|
|
148
148
|
|
|
@@ -31,6 +31,49 @@ with advance notice in the **Deprecations** section of releases.
|
|
|
31
31
|
|
|
32
32
|
.. towncrier release notes start
|
|
33
33
|
|
|
34
|
+
pytest 8.4.2 (2025-09-03)
|
|
35
|
+
=========================
|
|
36
|
+
|
|
37
|
+
Bug fixes
|
|
38
|
+
---------
|
|
39
|
+
|
|
40
|
+
- `#13478 <https://github.com/pytest-dev/pytest/issues/13478>`_: Fixed a crash when using :confval:`console_output_style` with ``times`` and a module is skipped.
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
- `#13530 <https://github.com/pytest-dev/pytest/issues/13530>`_: Fixed a crash when using :func:`pytest.approx` and :class:`decimal.Decimal` instances with the :class:`decimal.FloatOperation` trap set.
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
- `#13549 <https://github.com/pytest-dev/pytest/issues/13549>`_: No longer evaluate type annotations in Python ``3.14`` when inspecting function signatures.
|
|
47
|
+
|
|
48
|
+
This prevents crashes during module collection when modules do not explicitly use ``from __future__ import annotations`` and import types for annotations within a ``if TYPE_CHECKING:`` block.
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
- `#13559 <https://github.com/pytest-dev/pytest/issues/13559>`_: Added missing `int` and `float` variants to the `Literal` type annotation of the `type` parameter in :meth:`pytest.Parser.addini`.
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
- `#13563 <https://github.com/pytest-dev/pytest/issues/13563>`_: :func:`pytest.approx` now only imports ``numpy`` if NumPy is already in ``sys.modules``. This fixes unconditional import behavior introduced in `8.4.0`.
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
Improved documentation
|
|
59
|
+
----------------------
|
|
60
|
+
|
|
61
|
+
- `#13577 <https://github.com/pytest-dev/pytest/issues/13577>`_: Clarify that ``pytest_generate_tests`` is discovered in test modules/classes; other hooks must be in ``conftest.py`` or plugins.
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
Contributor-facing changes
|
|
66
|
+
--------------------------
|
|
67
|
+
|
|
68
|
+
- `#13480 <https://github.com/pytest-dev/pytest/issues/13480>`_: Self-testing: fixed a few test failures when run with ``-Wdefault`` or a similar override.
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
- `#13547 <https://github.com/pytest-dev/pytest/issues/13547>`_: Self-testing: corrected expected message for ``test_doctest_unexpected_exception`` in Python ``3.14``.
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
- `#13684 <https://github.com/pytest-dev/pytest/issues/13684>`_: Make pytest's own testsuite insensitive to the presence of the ``CI`` environment variable -- by :user:`ogrisel`.
|
|
75
|
+
|
|
76
|
+
|
|
34
77
|
pytest 8.4.1 (2025-06-17)
|
|
35
78
|
=========================
|
|
36
79
|
|
|
@@ -162,7 +162,7 @@ objects, they are still using the default pytest representation:
|
|
|
162
162
|
rootdir: /home/sweet/project
|
|
163
163
|
collected 8 items
|
|
164
164
|
|
|
165
|
-
<Dir parametrize.rst-
|
|
165
|
+
<Dir parametrize.rst-209>
|
|
166
166
|
<Module test_time.py>
|
|
167
167
|
<Function test_timedistance_v0[a0-b0-expected0]>
|
|
168
168
|
<Function test_timedistance_v0[a1-b1-expected1]>
|
|
@@ -239,7 +239,7 @@ If you just collect tests you'll also nicely see 'advanced' and 'basic' as varia
|
|
|
239
239
|
rootdir: /home/sweet/project
|
|
240
240
|
collected 4 items
|
|
241
241
|
|
|
242
|
-
<Dir parametrize.rst-
|
|
242
|
+
<Dir parametrize.rst-209>
|
|
243
243
|
<Module test_scenarios.py>
|
|
244
244
|
<Class TestSampleWithScenarios>
|
|
245
245
|
<Function test_demo1[basic]>
|
|
@@ -318,7 +318,7 @@ Let's first see how it looks like at collection time:
|
|
|
318
318
|
rootdir: /home/sweet/project
|
|
319
319
|
collected 2 items
|
|
320
320
|
|
|
321
|
-
<Dir parametrize.rst-
|
|
321
|
+
<Dir parametrize.rst-209>
|
|
322
322
|
<Module test_backends.py>
|
|
323
323
|
<Function test_db_initialized[d1]>
|
|
324
324
|
<Function test_db_initialized[d2]>
|
|
@@ -152,7 +152,7 @@ The test collection would look like this:
|
|
|
152
152
|
configfile: pytest.ini
|
|
153
153
|
collected 2 items
|
|
154
154
|
|
|
155
|
-
<Dir pythoncollection.rst-
|
|
155
|
+
<Dir pythoncollection.rst-210>
|
|
156
156
|
<Module check_myapp.py>
|
|
157
157
|
<Class CheckMyApp>
|
|
158
158
|
<Function simple_check>
|
|
@@ -215,7 +215,7 @@ You can always peek at the collection tree without running tests like this:
|
|
|
215
215
|
configfile: pytest.ini
|
|
216
216
|
collected 3 items
|
|
217
217
|
|
|
218
|
-
<Dir pythoncollection.rst-
|
|
218
|
+
<Dir pythoncollection.rst-210>
|
|
219
219
|
<Dir CWD>
|
|
220
220
|
<Module pythoncollection.py>
|
|
221
221
|
<Function test_function>
|
|
@@ -1423,7 +1423,7 @@ Running the above tests results in the following test IDs being used:
|
|
|
1423
1423
|
rootdir: /home/sweet/project
|
|
1424
1424
|
collected 12 items
|
|
1425
1425
|
|
|
1426
|
-
<Dir fixtures.rst-
|
|
1426
|
+
<Dir fixtures.rst-230>
|
|
1427
1427
|
<Module test_anothersmtp.py>
|
|
1428
1428
|
<Function test_showhelo[smtp.gmail.com]>
|
|
1429
1429
|
<Function test_showhelo[mail.python.org]>
|
|
@@ -240,6 +240,13 @@ command line option and the parametrization of our test function:
|
|
|
240
240
|
if "stringinput" in metafunc.fixturenames:
|
|
241
241
|
metafunc.parametrize("stringinput", metafunc.config.getoption("stringinput"))
|
|
242
242
|
|
|
243
|
+
.. note::
|
|
244
|
+
|
|
245
|
+
The :hook:`pytest_generate_tests` hook can also be implemented directly in a test
|
|
246
|
+
module or inside a test class; unlike other hooks, pytest will discover it there
|
|
247
|
+
as well. Other hooks must live in a :ref:`conftest.py <localplugin>` or a plugin.
|
|
248
|
+
See :ref:`writinghooks`.
|
|
249
|
+
|
|
243
250
|
If we now pass two stringinput values, our test will run twice:
|
|
244
251
|
|
|
245
252
|
.. code-block:: pytest
|
|
@@ -235,6 +235,12 @@ Example:
|
|
|
235
235
|
"""
|
|
236
236
|
print(config.hook)
|
|
237
237
|
|
|
238
|
+
.. note::
|
|
239
|
+
|
|
240
|
+
Unlike other hooks, the :hook:`pytest_generate_tests` hook is also discovered when
|
|
241
|
+
defined inside a test module or test class. Other hooks must live in
|
|
242
|
+
:ref:`conftest.py plugins <localplugin>` or external plugins.
|
|
243
|
+
See :ref:`parametrize-basics` and the :ref:`hook-reference`.
|
|
238
244
|
|
|
239
245
|
.. _`addoptionhooks`:
|
|
240
246
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
.. sidebar:: **Next Open Trainings and Events**
|
|
4
4
|
|
|
5
|
-
- `
|
|
5
|
+
- `Testen mit pytest <https://www.letsboot.ch/kurs/pytest>`_ (German), via `Letsboot <https://www.letsboot.ch/>`_ (3 day in-depth training), **October 29th -- 31st**, Zurich (CH)
|
|
6
6
|
- `Professional Testing with Python <https://python-academy.com/courses/python_course_testing.html>`_, via `Python Academy <https://www.python-academy.com/>`_ (3 day in-depth training), **March 3th -- 5th 2026**, Leipzig (DE) / Remote
|
|
7
7
|
|
|
8
8
|
Also see :doc:`previous talks and blogposts <talks>`
|
|
@@ -426,6 +426,9 @@ markers = [
|
|
|
426
426
|
"slow",
|
|
427
427
|
# experimental mark for all tests using pexpect
|
|
428
428
|
"uses_pexpect",
|
|
429
|
+
# Disables the `remove_ci_env_var` autouse fixture on a given test that
|
|
430
|
+
# actually inspects whether the CI environment variable is set.
|
|
431
|
+
"keep_ci_var",
|
|
429
432
|
]
|
|
430
433
|
|
|
431
434
|
[tool.towncrier]
|
|
@@ -1,7 +1,14 @@
|
|
|
1
1
|
# file generated by setuptools-scm
|
|
2
2
|
# don't change, don't track in version control
|
|
3
3
|
|
|
4
|
-
__all__ = [
|
|
4
|
+
__all__ = [
|
|
5
|
+
"__version__",
|
|
6
|
+
"__version_tuple__",
|
|
7
|
+
"version",
|
|
8
|
+
"version_tuple",
|
|
9
|
+
"__commit_id__",
|
|
10
|
+
"commit_id",
|
|
11
|
+
]
|
|
5
12
|
|
|
6
13
|
TYPE_CHECKING = False
|
|
7
14
|
if TYPE_CHECKING:
|
|
@@ -9,13 +16,19 @@ if TYPE_CHECKING:
|
|
|
9
16
|
from typing import Union
|
|
10
17
|
|
|
11
18
|
VERSION_TUPLE = Tuple[Union[int, str], ...]
|
|
19
|
+
COMMIT_ID = Union[str, None]
|
|
12
20
|
else:
|
|
13
21
|
VERSION_TUPLE = object
|
|
22
|
+
COMMIT_ID = object
|
|
14
23
|
|
|
15
24
|
version: str
|
|
16
25
|
__version__: str
|
|
17
26
|
__version_tuple__: VERSION_TUPLE
|
|
18
27
|
version_tuple: VERSION_TUPLE
|
|
28
|
+
commit_id: COMMIT_ID
|
|
29
|
+
__commit_id__: COMMIT_ID
|
|
19
30
|
|
|
20
|
-
__version__ = version = '8.4.
|
|
21
|
-
__version_tuple__ = version_tuple = (8, 4,
|
|
31
|
+
__version__ = version = '8.4.2'
|
|
32
|
+
__version_tuple__ = version_tuple = (8, 4, 2)
|
|
33
|
+
|
|
34
|
+
__commit_id__ = commit_id = None
|
|
@@ -8,7 +8,7 @@ import enum
|
|
|
8
8
|
import functools
|
|
9
9
|
import inspect
|
|
10
10
|
from inspect import Parameter
|
|
11
|
-
from inspect import
|
|
11
|
+
from inspect import Signature
|
|
12
12
|
import os
|
|
13
13
|
from pathlib import Path
|
|
14
14
|
import sys
|
|
@@ -19,6 +19,10 @@ from typing import NoReturn
|
|
|
19
19
|
import py
|
|
20
20
|
|
|
21
21
|
|
|
22
|
+
if sys.version_info >= (3, 14):
|
|
23
|
+
from annotationlib import Format
|
|
24
|
+
|
|
25
|
+
|
|
22
26
|
#: constant to prepare valuing pylib path replacements/lazy proxies later on
|
|
23
27
|
# intended for removal in pytest 8.0 or 9.0
|
|
24
28
|
|
|
@@ -60,6 +64,13 @@ def is_async_function(func: object) -> bool:
|
|
|
60
64
|
return iscoroutinefunction(func) or inspect.isasyncgenfunction(func)
|
|
61
65
|
|
|
62
66
|
|
|
67
|
+
def signature(obj: Callable[..., Any]) -> Signature:
|
|
68
|
+
"""Return signature without evaluating annotations."""
|
|
69
|
+
if sys.version_info >= (3, 14):
|
|
70
|
+
return inspect.signature(obj, annotation_format=Format.STRING)
|
|
71
|
+
return inspect.signature(obj)
|
|
72
|
+
|
|
73
|
+
|
|
63
74
|
def getlocation(function, curdir: str | os.PathLike[str] | None = None) -> str:
|
|
64
75
|
function = get_real_func(function)
|
|
65
76
|
fn = Path(inspect.getfile(function))
|
|
@@ -174,7 +174,9 @@ class Parser:
|
|
|
174
174
|
self,
|
|
175
175
|
name: str,
|
|
176
176
|
help: str,
|
|
177
|
-
type: Literal[
|
|
177
|
+
type: Literal[
|
|
178
|
+
"string", "paths", "pathlist", "args", "linelist", "bool", "int", "float"
|
|
179
|
+
]
|
|
178
180
|
| None = None,
|
|
179
181
|
default: Any = NOT_SET,
|
|
180
182
|
) -> None:
|
|
@@ -49,6 +49,7 @@ from _pytest.compat import NOTSET
|
|
|
49
49
|
from _pytest.compat import NotSetType
|
|
50
50
|
from _pytest.compat import safe_getattr
|
|
51
51
|
from _pytest.compat import safe_isclass
|
|
52
|
+
from _pytest.compat import signature
|
|
52
53
|
from _pytest.config import _PluggyPlugin
|
|
53
54
|
from _pytest.config import Config
|
|
54
55
|
from _pytest.config import ExitCode
|
|
@@ -804,8 +805,8 @@ class SubRequest(FixtureRequest):
|
|
|
804
805
|
path, lineno = getfslineno(factory)
|
|
805
806
|
if isinstance(path, Path):
|
|
806
807
|
path = bestrelpath(self._pyfuncitem.session.path, path)
|
|
807
|
-
|
|
808
|
-
return f"{path}:{lineno + 1}: def {factory.__name__}{
|
|
808
|
+
sig = signature(factory)
|
|
809
|
+
return f"{path}:{lineno + 1}: def {factory.__name__}{sig}"
|
|
809
810
|
|
|
810
811
|
def addfinalizer(self, finalizer: Callable[[], object]) -> None:
|
|
811
812
|
self._fixturedef.addfinalizer(finalizer)
|
|
@@ -8,7 +8,6 @@ from collections.abc import Iterator
|
|
|
8
8
|
from collections.abc import MutableMapping
|
|
9
9
|
from functools import cached_property
|
|
10
10
|
from functools import lru_cache
|
|
11
|
-
from inspect import signature
|
|
12
11
|
import os
|
|
13
12
|
import pathlib
|
|
14
13
|
from pathlib import Path
|
|
@@ -29,6 +28,7 @@ from _pytest._code.code import TerminalRepr
|
|
|
29
28
|
from _pytest._code.code import Traceback
|
|
30
29
|
from _pytest._code.code import TracebackStyle
|
|
31
30
|
from _pytest.compat import LEGACY_PATH
|
|
31
|
+
from _pytest.compat import signature
|
|
32
32
|
from _pytest.config import Config
|
|
33
33
|
from _pytest.config import ConftestImportFailure
|
|
34
34
|
from _pytest.config.compat import _check_path
|
|
@@ -426,12 +426,9 @@ class ApproxScalar(ApproxBase):
|
|
|
426
426
|
# Check if `val` is a native bool or numpy bool.
|
|
427
427
|
if isinstance(val, bool):
|
|
428
428
|
return True
|
|
429
|
-
|
|
430
|
-
import numpy as np
|
|
431
|
-
|
|
429
|
+
if np := sys.modules.get("numpy"):
|
|
432
430
|
return isinstance(val, np.bool_)
|
|
433
|
-
|
|
434
|
-
return False
|
|
431
|
+
return False
|
|
435
432
|
|
|
436
433
|
asarray = _as_numpy_array(actual)
|
|
437
434
|
if asarray is not None:
|
|
@@ -531,6 +528,25 @@ class ApproxDecimal(ApproxScalar):
|
|
|
531
528
|
DEFAULT_ABSOLUTE_TOLERANCE = Decimal("1e-12")
|
|
532
529
|
DEFAULT_RELATIVE_TOLERANCE = Decimal("1e-6")
|
|
533
530
|
|
|
531
|
+
def __repr__(self) -> str:
|
|
532
|
+
if isinstance(self.rel, float):
|
|
533
|
+
rel = Decimal.from_float(self.rel)
|
|
534
|
+
else:
|
|
535
|
+
rel = self.rel
|
|
536
|
+
|
|
537
|
+
if isinstance(self.abs, float):
|
|
538
|
+
abs_ = Decimal.from_float(self.abs)
|
|
539
|
+
else:
|
|
540
|
+
abs_ = self.abs
|
|
541
|
+
|
|
542
|
+
tol_str = "???"
|
|
543
|
+
if rel is not None and Decimal("1e-3") <= rel <= Decimal("1e3"):
|
|
544
|
+
tol_str = f"{rel:.1e}"
|
|
545
|
+
elif abs_ is not None:
|
|
546
|
+
tol_str = f"{abs_:.1e}"
|
|
547
|
+
|
|
548
|
+
return f"{self.expected} ± {tol_str}"
|
|
549
|
+
|
|
534
550
|
|
|
535
551
|
def approx(expected, rel=None, abs=None, nan_ok: bool = False) -> ApproxBase:
|
|
536
552
|
"""Assert that two numbers (or two ordered sequences of numbers) are equal to each other
|
|
@@ -457,7 +457,7 @@ class AbstractRaises(ABC, Generic[BaseExcT_co]):
|
|
|
457
457
|
return cast(type[BaseExcT_1], origin_exc)
|
|
458
458
|
else:
|
|
459
459
|
raise ValueError(
|
|
460
|
-
f"Only `ExceptionGroup[Exception]` or `BaseExceptionGroup[
|
|
460
|
+
f"Only `ExceptionGroup[Exception]` or `BaseExceptionGroup[BaseException]` "
|
|
461
461
|
f"are accepted as generic types but got `{exc}`. "
|
|
462
462
|
f"As `raises` will catch all instances of the specified group regardless of the "
|
|
463
463
|
f"generic argument specific nested exceptions has to be checked "
|
|
@@ -559,7 +559,7 @@ class RaisesExc(AbstractRaises[BaseExcT_co_default]):
|
|
|
559
559
|
The type is checked with :func:`isinstance`, and does not need to be an exact match.
|
|
560
560
|
If that is wanted you can use the ``check`` parameter.
|
|
561
561
|
|
|
562
|
-
:kwparam str | Pattern[str] match
|
|
562
|
+
:kwparam str | Pattern[str] match:
|
|
563
563
|
A regex to match.
|
|
564
564
|
|
|
565
565
|
:kwparam Callable[[BaseException], bool] check:
|
|
@@ -734,7 +734,9 @@ class TerminalReporter:
|
|
|
734
734
|
last_in_module = tests_completed == tests_in_module
|
|
735
735
|
if self.showlongtestinfo or last_in_module:
|
|
736
736
|
self._timing_nodeids_reported.update(r.nodeid for r in not_reported)
|
|
737
|
-
return format_node_duration(
|
|
737
|
+
return format_node_duration(
|
|
738
|
+
sum(r.duration for r in not_reported if isinstance(r, TestReport))
|
|
739
|
+
)
|
|
738
740
|
return ""
|
|
739
741
|
if collected:
|
|
740
742
|
return f" [{len(self._progress_nodeids_reported) * 100 // collected:3d}%]"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pytest
|
|
3
|
-
Version: 8.4.
|
|
3
|
+
Version: 8.4.2
|
|
4
4
|
Summary: pytest: simple powerful testing with Python
|
|
5
5
|
Author: Holger Krekel, Bruno Oliveira, Ronny Pfannschmidt, Floris Bruynooghe, Brianna Laugher, Florian Bruhin, Others (See AUTHORS)
|
|
6
6
|
License: MIT
|
|
@@ -253,6 +253,7 @@ doc/en/announce/release-8.3.4.rst
|
|
|
253
253
|
doc/en/announce/release-8.3.5.rst
|
|
254
254
|
doc/en/announce/release-8.4.0.rst
|
|
255
255
|
doc/en/announce/release-8.4.1.rst
|
|
256
|
+
doc/en/announce/release-8.4.2.rst
|
|
256
257
|
doc/en/announce/sprint2016.rst
|
|
257
258
|
doc/en/example/attic.rst
|
|
258
259
|
doc/en/example/conftest.py
|
|
@@ -237,3 +237,15 @@ def mock_timing(monkeypatch: MonkeyPatch):
|
|
|
237
237
|
result = MockTiming()
|
|
238
238
|
result.patch(monkeypatch)
|
|
239
239
|
return result
|
|
240
|
+
|
|
241
|
+
|
|
242
|
+
@pytest.fixture(autouse=True)
|
|
243
|
+
def remove_ci_env_var(monkeypatch: MonkeyPatch, request: pytest.FixtureRequest) -> None:
|
|
244
|
+
"""Make the test insensitive if it is running in CI or not.
|
|
245
|
+
|
|
246
|
+
Use `@pytest.mark.keep_ci_var` in a test to avoid applying this fixture, letting the test
|
|
247
|
+
see the real `CI` variable (if present).
|
|
248
|
+
"""
|
|
249
|
+
has_keep_ci_mark = request.node.get_closest_marker("keep_ci_var") is not None
|
|
250
|
+
if not has_keep_ci_mark:
|
|
251
|
+
monkeypatch.delenv("CI", raising=False)
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
from __future__ import annotations
|
|
3
3
|
|
|
4
4
|
from contextlib import contextmanager
|
|
5
|
+
import decimal
|
|
5
6
|
from decimal import Decimal
|
|
6
7
|
from fractions import Fraction
|
|
7
8
|
from math import sqrt
|
|
@@ -1015,6 +1016,11 @@ class TestApprox:
|
|
|
1015
1016
|
expected_repr = "approx([1 ± 1.0e-06, 2 ± 2.0e-06, 3 ± 3.0e-06, 4 ± 4.0e-06])"
|
|
1016
1017
|
assert repr(approx(expected)) == expected_repr
|
|
1017
1018
|
|
|
1019
|
+
def test_decimal_approx_repr(self, monkeypatch) -> None:
|
|
1020
|
+
monkeypatch.setitem(decimal.getcontext().traps, decimal.FloatOperation, True)
|
|
1021
|
+
approx_obj = pytest.approx(decimal.Decimal("2.60"))
|
|
1022
|
+
assert decimal.Decimal("2.600001") == approx_obj
|
|
1023
|
+
|
|
1018
1024
|
def test_allow_ordered_sequences_only(self) -> None:
|
|
1019
1025
|
"""pytest.approx() should raise an error on unordered sequences (#9692)."""
|
|
1020
1026
|
with pytest.raises(TypeError, match="only supports ordered sequences"):
|
|
@@ -1079,10 +1085,10 @@ class TestRecursiveSequenceMap:
|
|
|
1079
1085
|
]
|
|
1080
1086
|
|
|
1081
1087
|
def test_map_over_mixed_sequence(self):
|
|
1082
|
-
assert _recursive_sequence_map(sqrt, [4, (25, 64), [
|
|
1088
|
+
assert _recursive_sequence_map(sqrt, [4, (25, 64), [49]]) == [
|
|
1083
1089
|
2,
|
|
1084
1090
|
(5, 8),
|
|
1085
|
-
[
|
|
1091
|
+
[7],
|
|
1086
1092
|
]
|
|
1087
1093
|
|
|
1088
1094
|
def test_map_over_sequence_like(self):
|
|
@@ -1304,7 +1304,7 @@ def test_parametrizing_conditional_raisesgroup(
|
|
|
1304
1304
|
def test_annotated_group() -> None:
|
|
1305
1305
|
# repr depends on if exceptiongroup backport is being used or not
|
|
1306
1306
|
t = repr(ExceptionGroup[ValueError])
|
|
1307
|
-
msg = "Only `ExceptionGroup[Exception]` or `BaseExceptionGroup[
|
|
1307
|
+
msg = "Only `ExceptionGroup[Exception]` or `BaseExceptionGroup[BaseException]` are accepted as generic types but got `{}`. As `raises` will catch all instances of the specified group regardless of the generic argument specific nested exceptions has to be checked with `RaisesGroup`."
|
|
1308
1308
|
|
|
1309
1309
|
fail_msg = wrap_escape(msg.format(t))
|
|
1310
1310
|
with pytest.raises(ValueError, match=fail_msg):
|
|
@@ -1895,3 +1895,43 @@ def test_yield_disallowed_in_tests(pytester: Pytester):
|
|
|
1895
1895
|
)
|
|
1896
1896
|
# Assert that no tests were collected
|
|
1897
1897
|
result.stdout.fnmatch_lines(["*collected 0 items*"])
|
|
1898
|
+
|
|
1899
|
+
|
|
1900
|
+
def test_annotations_deferred_future(pytester: Pytester):
|
|
1901
|
+
"""Ensure stringified annotations don't raise any errors."""
|
|
1902
|
+
pytester.makepyfile(
|
|
1903
|
+
"""
|
|
1904
|
+
from __future__ import annotations
|
|
1905
|
+
import pytest
|
|
1906
|
+
|
|
1907
|
+
@pytest.fixture
|
|
1908
|
+
def func() -> X: ... # X is undefined
|
|
1909
|
+
|
|
1910
|
+
def test_func():
|
|
1911
|
+
assert True
|
|
1912
|
+
"""
|
|
1913
|
+
)
|
|
1914
|
+
result = pytester.runpytest()
|
|
1915
|
+
assert result.ret == 0
|
|
1916
|
+
result.stdout.fnmatch_lines(["*1 passed*"])
|
|
1917
|
+
|
|
1918
|
+
|
|
1919
|
+
@pytest.mark.skipif(
|
|
1920
|
+
sys.version_info < (3, 14), reason="Annotations are only skipped on 3.14+"
|
|
1921
|
+
)
|
|
1922
|
+
def test_annotations_deferred_314(pytester: Pytester):
|
|
1923
|
+
"""Ensure annotation eval is deferred."""
|
|
1924
|
+
pytester.makepyfile(
|
|
1925
|
+
"""
|
|
1926
|
+
import pytest
|
|
1927
|
+
|
|
1928
|
+
@pytest.fixture
|
|
1929
|
+
def func() -> X: ... # X is undefined
|
|
1930
|
+
|
|
1931
|
+
def test_func():
|
|
1932
|
+
assert True
|
|
1933
|
+
"""
|
|
1934
|
+
)
|
|
1935
|
+
result = pytester.runpytest()
|
|
1936
|
+
assert result.ret == 0
|
|
1937
|
+
result.stdout.fnmatch_lines(["*1 passed*"])
|
|
@@ -223,9 +223,12 @@ class TestDoctests:
|
|
|
223
223
|
"002 >>> 0 / i",
|
|
224
224
|
"UNEXPECTED EXCEPTION: ZeroDivisionError*",
|
|
225
225
|
"Traceback (most recent call last):",
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
226
|
+
*(
|
|
227
|
+
(' File "*/doctest.py", line *, in __run', " *")
|
|
228
|
+
if sys.version_info <= (3, 14)
|
|
229
|
+
else ()
|
|
230
|
+
),
|
|
231
|
+
*((" *^^^^*", " *", " *") if sys.version_info[:2] == (3, 13) else ()),
|
|
229
232
|
' File "<doctest test_doctest_unexpected_exception.txt[1]>", line 1, in <module>',
|
|
230
233
|
"ZeroDivisionError: division by zero",
|
|
231
234
|
"*/test_doctest_unexpected_exception.txt:2: UnexpectedException",
|
|
@@ -112,6 +112,31 @@ class TestTerminal:
|
|
|
112
112
|
[" def test_func():", "> assert 0", "E assert 0"]
|
|
113
113
|
)
|
|
114
114
|
|
|
115
|
+
def test_console_output_style_times_with_skipped_and_passed(
|
|
116
|
+
self, pytester: Pytester
|
|
117
|
+
) -> None:
|
|
118
|
+
pytester.makepyfile(
|
|
119
|
+
test_repro="""
|
|
120
|
+
def test_hello():
|
|
121
|
+
pass
|
|
122
|
+
""",
|
|
123
|
+
test_repro_skip="""
|
|
124
|
+
import pytest
|
|
125
|
+
pytest.importorskip("fakepackage_does_not_exist")
|
|
126
|
+
""",
|
|
127
|
+
)
|
|
128
|
+
result = pytester.runpytest(
|
|
129
|
+
"test_repro.py",
|
|
130
|
+
"test_repro_skip.py",
|
|
131
|
+
"-o",
|
|
132
|
+
"console_output_style=times",
|
|
133
|
+
)
|
|
134
|
+
|
|
135
|
+
result.stdout.fnmatch_lines("* 1 passed, 1 skipped in *")
|
|
136
|
+
|
|
137
|
+
combined = "\n".join(result.stdout.lines + result.stderr.lines)
|
|
138
|
+
assert "INTERNALERROR" not in combined
|
|
139
|
+
|
|
115
140
|
def test_internalerror(self, pytester: Pytester, linecomp) -> None:
|
|
116
141
|
modcol = pytester.getmodulecol("def test_one(): pass")
|
|
117
142
|
rep = TerminalReporter(modcol.config, file=linecomp.stringio)
|
|
@@ -211,7 +211,7 @@ def test_unhandled_thread_exception_after_teardown(pytester: Pytester) -> None:
|
|
|
211
211
|
"""
|
|
212
212
|
)
|
|
213
213
|
|
|
214
|
-
result = pytester.runpytest()
|
|
214
|
+
result = pytester.runpytest("-Werror")
|
|
215
215
|
|
|
216
216
|
# TODO: should be a test failure or error
|
|
217
217
|
assert result.ret == pytest.ExitCode.INTERNAL_ERROR
|
|
@@ -149,6 +149,7 @@ def test_unicode(pytester: Pytester) -> None:
|
|
|
149
149
|
)
|
|
150
150
|
|
|
151
151
|
|
|
152
|
+
@pytest.mark.skip("issue #13485")
|
|
152
153
|
def test_works_with_filterwarnings(pytester: Pytester) -> None:
|
|
153
154
|
"""Ensure our warnings capture does not mess with pre-installed filters (#2430)."""
|
|
154
155
|
pytester.makepyfile(
|