bpo-17185: Add __signature__ to mock that can be used by inspect for signature (GH11048)

* Fix partial and partial method signatures in mock

* Add more calls

* Add NEWS entry

* Use assertEquals and fix markup in NEWS

* Refactor branching and add markup reference for functools

* Revert partial object related changes and fix pr comments
This commit is contained in:
Xtreak 2018-12-12 13:24:54 +05:30 committed by Chris Withers
parent 5344501ad1
commit f7fa62ef44
3 changed files with 36 additions and 2 deletions

View file

@ -1,3 +1,4 @@
import inspect
import time
import types
import unittest
@ -901,6 +902,35 @@ class SpecSignatureTest(unittest.TestCase):
self.assertFalse(hasattr(autospec, '__name__'))
def test_spec_inspect_signature(self):
def myfunc(x, y):
pass
mock = create_autospec(myfunc)
mock(1, 2)
mock(x=1, y=2)
self.assertEqual(inspect.getfullargspec(mock), inspect.getfullargspec(myfunc))
self.assertEqual(mock.mock_calls, [call(1, 2), call(x=1, y=2)])
self.assertRaises(TypeError, mock, 1)
def test_spec_inspect_signature_annotations(self):
def foo(a: int, b: int=10, *, c:int) -> int:
return a + b + c
mock = create_autospec(foo)
mock(1, 2, c=3)
mock(1, c=3)
self.assertEqual(inspect.getfullargspec(mock), inspect.getfullargspec(foo))
self.assertEqual(mock.mock_calls, [call(1, 2, c=3), call(1, c=3)])
self.assertRaises(TypeError, mock, 1)
self.assertRaises(TypeError, mock, 1, 2, 3, c=4)
class TestCallList(unittest.TestCase):
def test_args_list_contains_call_list(self):