pythonPackages.funcsigs: fix tests on pypy3

This package has a spurious test failure on PyPy3, which was reported
upstream a while ago:

     https://github.com/testing-cabal/funcsigs/issues/10

This is fixed thanks to the included patch, which was authored and is
also used by the Gentoo Python team.

With this, packages like 'pytest' and 'click' now work under PyPy3.

Signed-off-by: Austin Seipp <aseipp@pobox.com>
This commit is contained in:
Austin Seipp 2019-05-14 21:56:38 -05:00
parent 8c5ee6b4f4
commit dd79d605de
No known key found for this signature in database
GPG Key ID: 25D2038DEB08021D
2 changed files with 99 additions and 1 deletions

View File

@ -1,5 +1,6 @@
{ stdenv, buildPythonPackage, fetchPypi
, unittest2 }:
, isPyPy, isPy3k, unittest2
}:
buildPythonPackage rec {
pname = "funcsigs";
@ -12,6 +13,9 @@ buildPythonPackage rec {
buildInputs = [ unittest2 ];
# https://github.com/testing-cabal/funcsigs/issues/10
patches = stdenv.lib.optional (isPyPy && isPy3k) [ ./fix-pypy3-tests.patch ];
meta = with stdenv.lib; {
description = "Python function signatures from PEP362 for Python 2.6, 2.7 and 3.2+";
homepage = https://github.com/aliles/funcsigs;

View File

@ -0,0 +1,94 @@
diff --git a/tests/test_inspect.py b/tests/test_inspect.py
index 98d6592..3a2a1f2 100644
--- a/tests/test_inspect.py
+++ b/tests/test_inspect.py
@@ -8,6 +8,7 @@ import unittest2 as unittest
import funcsigs as inspect
+import platform
class TestSignatureObject(unittest.TestCase):
@staticmethod
@@ -409,7 +410,7 @@ def test_signature_on_decorated(self):
Ellipsis))
""")
- if sys.version_info[0] > 2:
+ if sys.version_info[0] > 2 and platform.python_implementation() != "PyPy":
exec("""
def test_signature_on_class(self):
class C:
@@ -493,41 +494,44 @@ def test_signature_on_class(self):
Ellipsis))
""")
- def test_signature_on_callable_objects(self):
- class Foo(object):
- def __call__(self, a):
- pass
+ if platform.python_implementation() != "PyPy":
+ exec("""
+def test_signature_on_callable_objects(self):
+ class Foo(object):
+ def __call__(self, a):
+ pass
- self.assertEqual(self.signature(Foo()),
- ((('a', Ellipsis, Ellipsis, "positional_or_keyword"),),
- Ellipsis))
+ self.assertEqual(self.signature(Foo()),
+ ((('a', Ellipsis, Ellipsis, "positional_or_keyword"),),
+ Ellipsis))
- class Spam(object):
- pass
- with self.assertRaisesRegex(TypeError, "is not a callable object"):
- inspect.signature(Spam())
+ class Spam(object):
+ pass
+ with self.assertRaisesRegex(TypeError, "is not a callable object"):
+ inspect.signature(Spam())
- class Bar(Spam, Foo):
- pass
+ class Bar(Spam, Foo):
+ pass
- self.assertEqual(self.signature(Bar()),
- ((('a', Ellipsis, Ellipsis, "positional_or_keyword"),),
- Ellipsis))
+ self.assertEqual(self.signature(Bar()),
+ ((('a', Ellipsis, Ellipsis, "positional_or_keyword"),),
+ Ellipsis))
- class ToFail(object):
- __call__ = type
- with self.assertRaisesRegex(ValueError, "not supported by signature"):
- inspect.signature(ToFail())
+ class ToFail(object):
+ __call__ = type
+ with self.assertRaisesRegex(ValueError, "not supported by signature"):
+ inspect.signature(ToFail())
- if sys.version_info[0] < 3:
- return
+ if sys.version_info[0] < 3:
+ return
- class Wrapped(object):
- pass
- Wrapped.__wrapped__ = lambda a: None
- self.assertEqual(self.signature(Wrapped),
- ((('a', Ellipsis, Ellipsis, "positional_or_keyword"),),
- Ellipsis))
+ class Wrapped(object):
+ pass
+ Wrapped.__wrapped__ = lambda a: None
+ self.assertEqual(self.signature(Wrapped),
+ ((('a', Ellipsis, Ellipsis, "positional_or_keyword"),),
+ Ellipsis))
+""")
def test_signature_on_lambdas(self):
self.assertEqual(self.signature((lambda a=10: a)),