dev-python/makefun: Fix tests, enable py3.13

Signed-off-by: Michał Górny <mgorny@gentoo.org>
This commit is contained in:
Michał Górny
2024-06-28 19:32:22 +02:00
parent 4d47b27e10
commit 9ef577a37d
2 changed files with 108 additions and 3 deletions

View File

@@ -0,0 +1,98 @@
diff --git a/tests/test_partial_and_macros.py b/tests/test_partial_and_macros.py
index 6fd4503..3ce0a33 100644
--- a/tests/test_partial_and_macros.py
+++ b/tests/test_partial_and_macros.py
@@ -1,5 +1,6 @@
import functools
import pytest
+import re
import sys
import makefun
@@ -11,6 +12,11 @@ except ImportError:
PY2 = sys.version_info < (3, )
+# Python 3.13 dedents docstrings, earlier versions just strip initial
+# whitespace. Use a regexp to get a consistently dedented docstring
+# for comparison across Python versions.
+DOCSTRING_NORMALIZE_RE = re.compile(r"^ +", re.MULTILINE)
+
def test_doc():
def foo(x, y):
@@ -41,15 +47,15 @@ def test_doc():
sig_actual_call = ref_sig_str.replace("*, ", "")
- assert bar.__doc__ \
+ assert DOCSTRING_NORMALIZE_RE.sub("", bar.__doc__) \
== """<This function is equivalent to 'foo%s', see original 'foo' doc below.>
- a `foo` function
+a `foo` function
- :param x:
- :param y:
- :return:
- """ % sig_actual_call
+:param x:
+:param y:
+:return:
+""" % sig_actual_call
def test_partial():
@@ -78,16 +84,16 @@ def test_partial():
sig_actual_call = "(x, y='hello', a)" # if PY2 else "(x, *, y='hello', a)"
- assert foo.__doc__.replace("=KW_ONLY_ARG!", "") \
+ assert DOCSTRING_NORMALIZE_RE.sub("", foo.__doc__.replace("=KW_ONLY_ARG!", "")) \
== """<This function is equivalent to 'foo%s', see original 'foo' doc below.>
- a `foo` function
+a `foo` function
- :param x:
- :param y:
- :param a:
- :return:
- """ % sig_actual_call
+:param x:
+:param y:
+:param a:
+:return:
+""" % sig_actual_call
def test_issue_57():
@@ -127,9 +133,7 @@ def test_create_with_partial():
assert m() == -1
assert m.i == 1
# the doc remains untouched in create_function as opposed to wraps, this is normal
- assert m.__doc__ == """partial(func, *args, **keywords) - new function with partial application
- of the given arguments and keywords.
-"""
+ assert m.__doc__ == functools.partial.__doc__
def test_args_order_and_kind():
@@ -161,11 +165,12 @@ def test_args_order_and_kind():
# it is possible to keyword-partialize a positional-only argument...
fp_ref = functools.partial(f, b=0)
- # but 'signature' does not support it !
- with pytest.raises(ValueError):
- signature(fp_ref)
-
- # assert str(signature(fp_ref)) == "(c, /, *, d, **e)"
+ # but 'signature' does not support it before Python 3.12.4 !
+ if sys.version_info < (3, 12, 4):
+ with pytest.raises(ValueError):
+ signature(fp_ref)
+ else:
+ assert str(signature(fp_ref)) == "(a, c, /, *, d, **e)"
# so we do not support it
with pytest.raises(NotImplementedError):

View File

@@ -1,10 +1,10 @@
# Copyright 1999-2023 Gentoo Authors
# Copyright 1999-2024 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
DISTUTILS_USE_PEP517=setuptools
PYTHON_COMPAT=( python3_{10..12} )
PYTHON_COMPAT=( python3_{10..13} )
inherit distutils-r1 pypi
@@ -25,6 +25,13 @@ BDEPEND="
distutils_enable_tests pytest
src_prepare() {
sed -e '/pytest-runner/d' -i setup.cfg || die
local PATCHES=(
# https://github.com/smarie/python-makefun/pull/103
# https://github.com/smarie/python-makefun/pull/104
"${FILESDIR}/${P}-test.patch"
)
distutils-r1_src_prepare
sed -e '/pytest-runner/d' -i setup.cfg || die
}