diff options
-rw-r--r-- | .github/workflows/coverage.yml | 1 | ||||
-rw-r--r-- | .github/workflows/kit.yml | 13 | ||||
-rw-r--r-- | .github/workflows/testsuite.yml | 1 | ||||
-rw-r--r-- | CHANGES.rst | 4 | ||||
-rw-r--r-- | README.rst | 2 | ||||
-rw-r--r-- | coverage/ctracer/util.h | 8 | ||||
-rw-r--r-- | doc/index.rst | 2 | ||||
-rw-r--r-- | setup.py | 1 | ||||
-rw-r--r-- | tests/test_arcs.py | 2 | ||||
-rw-r--r-- | tests/test_process.py | 2 | ||||
-rw-r--r-- | tox.ini | 5 |
11 files changed, 35 insertions, 6 deletions
diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml index cbfd44ec..3e12f01b 100644 --- a/.github/workflows/coverage.yml +++ b/.github/workflows/coverage.yml @@ -38,6 +38,7 @@ jobs: - "3.8" - "3.9" - "3.10" + - "3.11.0-alpha.2" - "pypy3" exclude: # Windows PyPy doesn't seem to work? diff --git a/.github/workflows/kit.yml b/.github/workflows/kit.yml index fc454858..3aa67dde 100644 --- a/.github/workflows/kit.yml +++ b/.github/workflows/kit.yml @@ -4,6 +4,15 @@ # Based on: # https://github.com/joerick/cibuildwheel/blob/master/examples/github-deploy.yml +# To test installing wheels without uploading them to PyPI: +# +# $ mkdir /tmp/pypi +# $ cp dist/* /tmp/pypi +# $ python -m pip install piprepo +# $ piprepo build /tmp/pypi +# $ python -m pip install -v coverage --index-url=file:///tmp/pypi/simple +# + name: "Kits" on: @@ -197,7 +206,7 @@ jobs: prerel: name: "Build pre-rel ${{ matrix.os }} ${{ matrix.py }} wheels" - if: ${{ false }} # disable for now, since there are no pre-rel Python versions. + if: ${{ true }} # true when there are pre-rel, false when not. runs-on: "${{ matrix.os }}-latest" strategy: matrix: @@ -206,7 +215,7 @@ jobs: - windows - macos py: - - "3.10.0-rc.2" + - "3.11.0-alpha.2" fail-fast: false steps: diff --git a/.github/workflows/testsuite.yml b/.github/workflows/testsuite.yml index d4299074..6f31f48f 100644 --- a/.github/workflows/testsuite.yml +++ b/.github/workflows/testsuite.yml @@ -37,6 +37,7 @@ jobs: - "3.8" - "3.9" - "3.10" + - "3.11.0-alpha.2" - "pypy3" exclude: # Windows PyPy doesn't seem to work? diff --git a/CHANGES.rst b/CHANGES.rst index 015f7db8..8855bcc6 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -22,6 +22,9 @@ This list is detailed and covers changes in each pre-release version. Unreleased ---------- +- Python 3.11 is supported (tested with 3.11.0a2). One still-open issue has to + do with `exits through with-statements <issue 1270_>`_. + - Fix: When remapping file paths through the ``[paths]`` setting while combining, the ``[run] relative_files`` setting was ignored, resulting in absolute paths for remapped file names (`issue 1147`_). This is now fixed. @@ -44,6 +47,7 @@ Unreleased .. _django_coverage_plugin issue 78: https://github.com/nedbat/django_coverage_plugin/issues/78 .. _issue 1147: https://github.com/nedbat/coveragepy/issues/1147 +.. _issue 1270: https://github.com/nedbat/coveragepy/issues/1270 .. _issue 1271: https://github.com/nedbat/coveragepy/issues/1271 .. _issue 1273: https://github.com/nedbat/coveragepy/issues/1273 @@ -19,7 +19,7 @@ library to determine which lines are executable, and which have been executed. Coverage.py runs on these versions of Python: -* CPython 3.6 through 3.10. +* CPython 3.6 through 3.11. * PyPy3 7.3.7. Documentation is on `Read the Docs`_. Code repository and issue tracker are on diff --git a/coverage/ctracer/util.h b/coverage/ctracer/util.h index ff139329..58fa1d49 100644 --- a/coverage/ctracer/util.h +++ b/coverage/ctracer/util.h @@ -12,9 +12,15 @@ #undef COLLECT_STATS /* Collect counters: stats are printed when tracer is stopped. */ #undef DO_NOTHING /* Define this to make the tracer do nothing. */ +#if PY_VERSION_HEX >= 0x030B00A0 +// 3.11 moved f_lasti into an internal structure. This is totally the wrong way +// to make this work, but it's all I've got until https://bugs.python.org/issue40421 +// is resolved. +#include <internal/pycore_frame.h> +#define MyFrame_lasti(f) ((f)->f_frame->f_lasti * 2) +#elif PY_VERSION_HEX >= 0x030A00A7 // The f_lasti field changed meaning in 3.10.0a7. It had been bytes, but // now is instructions, so we need to adjust it to use it as a byte index. -#if PY_VERSION_HEX >= 0x030A00A7 #define MyFrame_lasti(f) ((f)->f_lasti * 2) #else #define MyFrame_lasti(f) ((f)->f_lasti) diff --git a/doc/index.rst b/doc/index.rst index 37fe33ee..6bc00750 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -16,7 +16,7 @@ not. The latest version is coverage.py |release|, released |release_date|. It is supported on: -* Python versions 3.6 through 3.10. +* Python versions 3.6 through 3.11. * PyPy3 7.3.7. @@ -44,6 +44,7 @@ Programming Language :: Python :: 3.7 Programming Language :: Python :: 3.8 Programming Language :: Python :: 3.9 Programming Language :: Python :: 3.10 +Programming Language :: Python :: 3.11 Programming Language :: Python :: Implementation :: CPython Programming Language :: Python :: Implementation :: PyPy Topic :: Software Development :: Quality Assurance diff --git a/tests/test_arcs.py b/tests/test_arcs.py index 6a65d4fe..349a560f 100644 --- a/tests/test_arcs.py +++ b/tests/test_arcs.py @@ -279,6 +279,8 @@ class WithTest(CoverageTest): arcz=arcz, ) + @pytest.mark.skipif(env.PYVERSION[:2] >= (3, 11), reason="avoid a 3.11 bug: 45709") + # https://github.com/nedbat/coveragepy/issues/1270 def test_raise_through_with(self): if env.PYBEHAVIOR.exit_through_with: arcz = ".1 12 27 78 8. 9A A. -23 34 45 53 6-2" diff --git a/tests/test_process.py b/tests/test_process.py index 1e644864..83ca1feb 100644 --- a/tests/test_process.py +++ b/tests/test_process.py @@ -748,6 +748,8 @@ class ProcessTest(CoverageTest): @pytest.mark.expensive @pytest.mark.skipif(env.METACOV, reason="Can't test fullcoverage when measuring ourselves") @pytest.mark.skipif(not env.C_TRACER, reason="fullcoverage only works with the C tracer.") + @pytest.mark.skipif(env.PYVERSION[:2] >= (3, 11), reason="this test needs work on 3.11") + # https://github.com/nedbat/coveragepy/issues/1278 def test_fullcoverage(self): # fullcoverage is a trick to get stdlib modules measured from # the very beginning of the process. Here we import os and @@ -3,7 +3,7 @@ [tox] # When changing this list, be sure to check the [gh-actions] list below. -envlist = py{36,37,38,39,310}, pypy3, doc, lint +envlist = py{36,37,38,39,310,311}, pypy3, doc, lint skip_missing_interpreters = {env:COVERAGE_SKIP_MISSING_INTERPRETERS:True} toxworkdir = {env:TOXWORKDIR:.tox} @@ -32,6 +32,8 @@ setenv = # For some tests, we need .pyc files written in the current directory, # so override any local setting. PYTHONPYCACHEPREFIX= + # PyContracts can't do 3.11. + py311: COVERAGE_NO_CONTRACTS=1 commands = # Create tests/zipmods.zip @@ -95,4 +97,5 @@ python = 3.8: py38 3.9: py39 3.10: py310 + 3.11: py311 pypy3: pypy3 |