Enable testing with Python 3.11 (#9511)
This commit is contained in:
parent
6828ec2f9b
commit
b79eff065e
|
@ -37,6 +37,7 @@ jobs:
|
||||||
"windows-py38",
|
"windows-py38",
|
||||||
"windows-py39",
|
"windows-py39",
|
||||||
"windows-py310",
|
"windows-py310",
|
||||||
|
"windows-py311",
|
||||||
|
|
||||||
"ubuntu-py37",
|
"ubuntu-py37",
|
||||||
"ubuntu-py37-pluggy",
|
"ubuntu-py37-pluggy",
|
||||||
|
@ -44,6 +45,7 @@ jobs:
|
||||||
"ubuntu-py38",
|
"ubuntu-py38",
|
||||||
"ubuntu-py39",
|
"ubuntu-py39",
|
||||||
"ubuntu-py310",
|
"ubuntu-py310",
|
||||||
|
"ubuntu-py311",
|
||||||
"ubuntu-pypy3",
|
"ubuntu-pypy3",
|
||||||
|
|
||||||
"macos-py37",
|
"macos-py37",
|
||||||
|
@ -78,6 +80,10 @@ jobs:
|
||||||
python: "3.10"
|
python: "3.10"
|
||||||
os: windows-latest
|
os: windows-latest
|
||||||
tox_env: "py310-xdist"
|
tox_env: "py310-xdist"
|
||||||
|
- name: "windows-py311"
|
||||||
|
python: "3.11-dev"
|
||||||
|
os: windows-latest
|
||||||
|
tox_env: "py311"
|
||||||
|
|
||||||
- name: "ubuntu-py37"
|
- name: "ubuntu-py37"
|
||||||
python: "3.7"
|
python: "3.7"
|
||||||
|
@ -104,6 +110,10 @@ jobs:
|
||||||
python: "3.10"
|
python: "3.10"
|
||||||
os: ubuntu-latest
|
os: ubuntu-latest
|
||||||
tox_env: "py310-xdist"
|
tox_env: "py310-xdist"
|
||||||
|
- name: "ubuntu-py311"
|
||||||
|
python: "3.11-dev"
|
||||||
|
os: ubuntu-latest
|
||||||
|
tox_env: "py311"
|
||||||
- name: "ubuntu-pypy3"
|
- name: "ubuntu-pypy3"
|
||||||
python: "pypy-3.7"
|
python: "pypy-3.7"
|
||||||
os: ubuntu-latest
|
os: ubuntu-latest
|
||||||
|
|
|
@ -1026,7 +1026,7 @@ class TestAssert_reprcompare_attrsclass:
|
||||||
assert lines is None
|
assert lines is None
|
||||||
|
|
||||||
def test_attrs_with_custom_eq(self) -> None:
|
def test_attrs_with_custom_eq(self) -> None:
|
||||||
@attr.define
|
@attr.define(slots=False)
|
||||||
class SimpleDataObject:
|
class SimpleDataObject:
|
||||||
field_a = attr.ib()
|
field_a = attr.ib()
|
||||||
|
|
||||||
|
@ -1648,7 +1648,7 @@ def test_raise_unprintable_assertion_error(pytester: Pytester) -> None:
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def test_raise_assertion_error_raisin_repr(pytester: Pytester) -> None:
|
def test_raise_assertion_error_raising_repr(pytester: Pytester) -> None:
|
||||||
pytester.makepyfile(
|
pytester.makepyfile(
|
||||||
"""
|
"""
|
||||||
class RaisingRepr(object):
|
class RaisingRepr(object):
|
||||||
|
@ -1659,9 +1659,15 @@ def test_raise_assertion_error_raisin_repr(pytester: Pytester) -> None:
|
||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
result = pytester.runpytest()
|
result = pytester.runpytest()
|
||||||
result.stdout.fnmatch_lines(
|
if sys.version_info >= (3, 11):
|
||||||
["E AssertionError: <unprintable AssertionError object>"]
|
# python 3.11 has native support for un-str-able exceptions
|
||||||
)
|
result.stdout.fnmatch_lines(
|
||||||
|
["E AssertionError: <exception str() failed>"]
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
result.stdout.fnmatch_lines(
|
||||||
|
["E AssertionError: <unprintable AssertionError object>"]
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def test_issue_1944(pytester: Pytester) -> None:
|
def test_issue_1944(pytester: Pytester) -> None:
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
import enum
|
import enum
|
||||||
|
import sys
|
||||||
from functools import partial
|
from functools import partial
|
||||||
from functools import wraps
|
from functools import wraps
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING
|
||||||
|
@ -91,6 +92,7 @@ def test_get_real_func_partial() -> None:
|
||||||
assert get_real_func(partial(foo)) is foo
|
assert get_real_func(partial(foo)) is foo
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.skipif(sys.version_info >= (3, 11), reason="couroutine removed")
|
||||||
def test_is_generator_asyncio(pytester: Pytester) -> None:
|
def test_is_generator_asyncio(pytester: Pytester) -> None:
|
||||||
pytester.makepyfile(
|
pytester.makepyfile(
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
import inspect
|
import inspect
|
||||||
|
import sys
|
||||||
import textwrap
|
import textwrap
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Callable
|
from typing import Callable
|
||||||
|
@ -200,6 +201,7 @@ class TestDoctests:
|
||||||
"Traceback (most recent call last):",
|
"Traceback (most recent call last):",
|
||||||
' File "*/doctest.py", line *, in __run',
|
' File "*/doctest.py", line *, in __run',
|
||||||
" *",
|
" *",
|
||||||
|
*((" *^^^^*",) if sys.version_info >= (3, 11) else ()),
|
||||||
' File "<doctest test_doctest_unexpected_exception.txt[1]>", line 1, in <module>',
|
' File "<doctest test_doctest_unexpected_exception.txt[1]>", line 1, in <module>',
|
||||||
"ZeroDivisionError: division by zero",
|
"ZeroDivisionError: division by zero",
|
||||||
"*/test_doctest_unexpected_exception.txt:2: UnexpectedException",
|
"*/test_doctest_unexpected_exception.txt:2: UnexpectedException",
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import argparse
|
import argparse
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
|
import sys
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
|
@ -44,16 +45,32 @@ def test_wrap_session_notify_exception(ret_exc, pytester: Pytester) -> None:
|
||||||
assert result.ret == ExitCode.INTERNAL_ERROR
|
assert result.ret == ExitCode.INTERNAL_ERROR
|
||||||
assert result.stdout.lines[0] == "INTERNALERROR> Traceback (most recent call last):"
|
assert result.stdout.lines[0] == "INTERNALERROR> Traceback (most recent call last):"
|
||||||
|
|
||||||
|
end_lines = (
|
||||||
|
result.stdout.lines[-4:]
|
||||||
|
if sys.version_info >= (3, 11)
|
||||||
|
else result.stdout.lines[-3:]
|
||||||
|
)
|
||||||
|
|
||||||
if exc == SystemExit:
|
if exc == SystemExit:
|
||||||
assert result.stdout.lines[-3:] == [
|
assert end_lines == [
|
||||||
f'INTERNALERROR> File "{c1}", line 4, in pytest_sessionstart',
|
f'INTERNALERROR> File "{c1}", line 4, in pytest_sessionstart',
|
||||||
'INTERNALERROR> raise SystemExit("boom")',
|
'INTERNALERROR> raise SystemExit("boom")',
|
||||||
|
*(
|
||||||
|
("INTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^",)
|
||||||
|
if sys.version_info >= (3, 11)
|
||||||
|
else ()
|
||||||
|
),
|
||||||
"INTERNALERROR> SystemExit: boom",
|
"INTERNALERROR> SystemExit: boom",
|
||||||
]
|
]
|
||||||
else:
|
else:
|
||||||
assert result.stdout.lines[-3:] == [
|
assert end_lines == [
|
||||||
f'INTERNALERROR> File "{c1}", line 4, in pytest_sessionstart',
|
f'INTERNALERROR> File "{c1}", line 4, in pytest_sessionstart',
|
||||||
'INTERNALERROR> raise ValueError("boom")',
|
'INTERNALERROR> raise ValueError("boom")',
|
||||||
|
*(
|
||||||
|
("INTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^",)
|
||||||
|
if sys.version_info >= (3, 11)
|
||||||
|
else ()
|
||||||
|
),
|
||||||
"INTERNALERROR> ValueError: boom",
|
"INTERNALERROR> ValueError: boom",
|
||||||
]
|
]
|
||||||
if returncode is False:
|
if returncode is False:
|
||||||
|
|
|
@ -743,8 +743,8 @@ def test_run_result_repr() -> None:
|
||||||
|
|
||||||
# known exit code
|
# known exit code
|
||||||
r = pytester_mod.RunResult(1, outlines, errlines, duration=0.5)
|
r = pytester_mod.RunResult(1, outlines, errlines, duration=0.5)
|
||||||
assert (
|
assert repr(r) == (
|
||||||
repr(r) == "<RunResult ret=ExitCode.TESTS_FAILED len(stdout.lines)=3"
|
f"<RunResult ret={str(pytest.ExitCode.TESTS_FAILED)} len(stdout.lines)=3"
|
||||||
" len(stderr.lines)=4 duration=0.50s>"
|
" len(stderr.lines)=4 duration=0.50s>"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue