Issue #20144: Argument Clinic now supports simple constants as parameter

default values.  inspect.Signature correspondingly supports them in
__text_signature__ fields for builtins.
This commit is contained in:
Larry Hastings 2014-01-07 11:53:01 -08:00
parent 0bce6e7462
commit 16c5191ab3
6 changed files with 152 additions and 31 deletions

View file

@ -15,6 +15,7 @@ try:
from concurrent.futures import ThreadPoolExecutor
except ImportError:
ThreadPoolExecutor = None
import _testcapi
from test.support import run_unittest, TESTFN, DirsOnSysPath
from test.support import MISSING_C_DOCSTRINGS
@ -1593,9 +1594,19 @@ class TestSignatureObject(unittest.TestCase):
@unittest.skipIf(MISSING_C_DOCSTRINGS,
"Signature information for builtins requires docstrings")
def test_signature_on_builtins(self):
# min doesn't have a signature (yet)
self.assertEqual(inspect.signature(min), None)
signature = inspect.signature(os.stat)
signature = inspect.signature(_testcapi.docstring_with_signature_with_defaults)
self.assertTrue(isinstance(signature, inspect.Signature))
def p(name): return signature.parameters[name].default
self.assertEqual(p('s'), 'avocado')
self.assertEqual(p('d'), 3.14)
self.assertEqual(p('i'), 35)
self.assertEqual(p('c'), sys.maxsize)
self.assertEqual(p('n'), None)
self.assertEqual(p('t'), True)
self.assertEqual(p('f'), False)
def test_signature_on_non_function(self):
with self.assertRaisesRegex(TypeError, 'is not a callable object'):