commit:     75bb6d5fca7fecaa87e51590e0503ee6dd949eea
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Sat May 21 10:47:07 2022 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Sat May 21 11:22:22 2022 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=75bb6d5f

dev-python/testtools: Enable py3.11

Signed-off-by: Michał Górny <mgorny <AT> gentoo.org>

 .../testtools/files/testtools-2.5.0-py311.patch    | 116 +++++++++++++++++++++
 dev-python/testtools/testtools-2.5.0-r1.ebuild     |   9 +-
 2 files changed, 123 insertions(+), 2 deletions(-)

diff --git a/dev-python/testtools/files/testtools-2.5.0-py311.patch 
b/dev-python/testtools/files/testtools-2.5.0-py311.patch
new file mode 100644
index 000000000000..ee457f6119c3
--- /dev/null
+++ b/dev-python/testtools/files/testtools-2.5.0-py311.patch
@@ -0,0 +1,116 @@
+From 77953cf633ecd149b2c29e616f8d9d4e0cf8e5fa Mon Sep 17 00:00:00 2001
+From: Colin Watson <cjwat...@canonical.com>
+Date: Sat, 23 Apr 2022 22:53:48 +0100
+Subject: [PATCH] Fix various test failures with Python 3.11
+
+The changes for https://peps.python.org/pep-0657/ require a number of
+changes in our tests.
+
+Some tests still fail due to
+https://twistedmatrix.com/trac/ticket/10336, so I'm not adding
+3.11 to the test matrix yet.
+
+Fixes #325.
+---
+ testtools/tests/test_run.py        |  4 ++--
+ testtools/tests/test_testresult.py | 23 +++++++++++++----------
+ testtools/tests/test_testsuite.py  |  2 +-
+ 3 files changed, 16 insertions(+), 13 deletions(-)
+
+diff --git a/testtools/tests/test_run.py b/testtools/tests/test_run.py
+index ee96eec9..9808421b 100644
+--- a/testtools/tests/test_run.py
++++ b/testtools/tests/test_run.py
+@@ -202,9 +202,9 @@ def test_run_list_failed_import(self):
+ Failed to import test module: runexample
+ Traceback (most recent call last):
+   File ".../loader.py", line ..., in _find_test_path
+-    package = self._get_module_from_name(name)
++    package = self._get_module_from_name(name)...
+   File ".../loader.py", line ..., in _get_module_from_name
+-    __import__(name)
++    __import__(name)...
+   File ".../runexample/__init__.py", line 1
+     class not in
+ ...^...
+diff --git a/testtools/tests/test_testresult.py 
b/testtools/tests/test_testresult.py
+index 4fbf15d1..7824ff46 100644
+--- a/testtools/tests/test_testresult.py
++++ b/testtools/tests/test_testresult.py
+@@ -1266,11 +1266,11 @@ def 
test_traceback_formatting_without_stack_hidden(self):
+             DocTestMatches(
+                 'Traceback (most recent call last):\n'
+                 '  File "...testtools...runtest.py", line ..., in _run_user\n'
+-                '    return fn(*args, **kwargs)\n'
++                '    return fn(*args, **kwargs)\n...'
+                 '  File "...testtools...testcase.py", line ..., in 
_run_test_method\n'
+-                '    return self._get_test_method()()\n'
++                '    return self._get_test_method()()\n...'
+                 '  File "...testtools...tests...test_testresult.py", line 
..., in error\n'
+-                '    1/0\n'
++                '    1/0\n...'
+                 'ZeroDivisionError: ...\n',
+                 doctest.ELLIPSIS | doctest.REPORT_UDIFF))
+ 
+@@ -1283,7 +1283,7 @@ def test_traceback_formatting_with_stack_hidden(self):
+             DocTestMatches(
+                 'Traceback (most recent call last):\n'
+                 '  File "...testtools...tests...test_testresult.py", line 
..., in error\n'
+-                '    1/0\n'
++                '    1/0\n...'
+                 'ZeroDivisionError: ...\n',
+                 doctest.ELLIPSIS))
+ 
+@@ -1322,17 +1322,17 @@ def test_traceback_with_locals(self):
+             DocTestMatches(
+                 'Traceback (most recent call last):\n'
+                 '  File "...testtools...runtest.py", line ..., in _run_user\n'
+-                '    return fn(*args, **kwargs)\n'
++                '    return fn(*args, **kwargs)\n...'
+                 '    args = ...\n'
+                 '    fn = ...\n'
+                 '    kwargs = ...\n'
+                 '    self = ...\n'
+                 '  File "...testtools...testcase.py", line ..., in 
_run_test_method\n'
+-                '    return self._get_test_method()()\n'
++                '    return self._get_test_method()()\n...'
+                 '    result = ...\n'
+                 '    self = ...\n'
+                 '  File "...testtools...tests...test_testresult.py", line 
..., in error\n'
+-                '    1/0\n'
++                '    1/0\n...'
+                 '    a = 1\n'
+                 '    self = ...\n'
+                 'ZeroDivisionError: ...\n',
+@@ -2645,12 +2645,15 @@ def test_unprintable_exception(self):
+             "        raise RuntimeError\n"
+             "    def __repr__(self):\n"
+             "        raise RuntimeError\n")
++        if sys.version_info >= (3, 11):
++            expected = "UnprintableError: <exception str() failed>\n"
++        else:
++            expected = (
++                "UnprintableError: <unprintable UnprintableError object>\n")
+         textoutput = self._test_external_case(
+             modulelevel=exception_class,
+             testline="raise UnprintableError")
+-        self.assertIn(self._as_output(
+-            "UnprintableError: <unprintable UnprintableError object>\n"),
+-            textoutput)
++        self.assertIn(self._as_output(expected), textoutput)
+ 
+     def test_non_ascii_dirname(self):
+         """Script paths in the traceback can be non-ascii"""
+diff --git a/testtools/tests/test_testsuite.py 
b/testtools/tests/test_testsuite.py
+index 65cb88d7..01abb23c 100644
+--- a/testtools/tests/test_testsuite.py
++++ b/testtools/tests/test_testsuite.py
+@@ -178,7 +178,7 @@ def run(self):
+             "Traceback (most recent call last):\n")
+         self.assertThat(events[2][6].decode('utf8'), DocTestMatches("""\
+   File "...testtools/testsuite.py", line ..., in _run_test
+-    test.run(process_result)
++    test.run(process_result)...
+ """, doctest.ELLIPSIS))
+         self.assertThat(events[3][6].decode('utf8'), DocTestMatches("""\
+ TypeError: ...run() takes ...1 ...argument...2...given...

diff --git a/dev-python/testtools/testtools-2.5.0-r1.ebuild 
b/dev-python/testtools/testtools-2.5.0-r1.ebuild
index 5b4ff96df657..a6fe6fe82954 100644
--- a/dev-python/testtools/testtools-2.5.0-r1.ebuild
+++ b/dev-python/testtools/testtools-2.5.0-r1.ebuild
@@ -4,7 +4,7 @@
 EAPI=8
 
 DISTUTILS_USE_PEP517=setuptools
-PYTHON_COMPAT=( python3_{8..10} pypy3 )
+PYTHON_COMPAT=( python3_{8..11} pypy3 )
 PYTHON_REQ_USE="threads(+)"
 
 inherit distutils-r1
@@ -41,8 +41,13 @@ PDEPEND="
 
 distutils_enable_sphinx doc
 
+PATCHES=(
+       # https://github.com/testing-cabal/testtools/pull/328
+       "${FILESDIR}"/${P}-py311.patch
+)
+
 src_prepare() {
-       # very fragile to formatting changes
+       # very fragile to formatting changes (broken on py3.10 & pypy3)
        sed -i -e 's:test_syntax_error(:_&:' \
                testtools/tests/test_testresult.py || die
 

Reply via email to