@@ -46,25 +46,37 @@ def test_builtins(self):
4646
4747 # Python class that inherits builtin methods
4848 class List (list ): "List() doc"
49+
4950 # Simulate builtin with no docstring for default tip test
5051 class SB : __call__ = None
5152
5253 def gtest (obj , out ):
5354 self .assertEqual (signature (obj ), out )
5455
5556 if List .__doc__ is not None :
56- gtest (List , List .__doc__ )
57+ gtest (List , List .__doc__ ) # This and append_doc changed in 3.7.
5758 gtest (list .__new__ ,
58- 'Create and return a new object. See help(type) for accurate signature.' )
59+ '(*args, **kwargs)\n Create and return a new object.'
60+ ' See help(type) for accurate signature.' )
5961 gtest (list .__init__ ,
62+ '(self, /, *args, **kwargs)' + ct ._argument_positional + '\n ' +
6063 'Initialize self. See help(type(self)) for accurate signature.' )
61- append_doc = "L.append(object) -> None -- append object to end" #see3.7
64+
65+ append_doc = "L.append(object) -> None -- append object to end"
6266 gtest (list .append , append_doc )
6367 gtest ([].append , append_doc )
6468 gtest (List .append , append_doc )
6569
6670 gtest (types .MethodType , "method(function, instance)" )
6771 gtest (SB (), default_tip )
72+ import re
73+ p = re .compile ('' )
74+ gtest (re .sub , '''(pattern, repl, string, count=0, flags=0)\n Return the string obtained by replacing the leftmost
75+ non-overlapping occurrences of the pattern in string by the
76+ replacement repl. repl can be either a string or a callable;
77+ if a string, backslash escapes in it are processed. If it is
78+ a callable, it's passed the match object and must return''' )
79+ gtest (p .sub , '''(repl, string, count=0)\n Return the string obtained by replacing the leftmost non-overlapping occurrences o...''' )
6880
6981 def test_signature_wrap (self ):
7082 if textwrap .TextWrapper .__doc__ is not None :
@@ -132,12 +144,20 @@ def test_starred_parameter(self):
132144 # test that starred first parameter is *not* removed from argspec
133145 class C :
134146 def m1 (* args ): pass
135- def m2 (** kwds ): pass
136147 c = C ()
137- for meth , mtip in ((C .m1 , '(*args)' ), (c .m1 , "(*args)" ),
138- (C .m2 , "(**kwds)" ), (c .m2 , "(**kwds)" ),):
148+ for meth , mtip in ((C .m1 , '(*args)' ), (c .m1 , "(*args)" ),):
139149 self .assertEqual (signature (meth ), mtip )
140150
151+ def test_invalid_method_signature (self ):
152+ class C :
153+ def m2 (** kwargs ): pass
154+ class Test :
155+ def __call__ (* , a ): pass
156+
157+ mtip = ct ._invalid_method
158+ self .assertEqual (signature (C ().m2 ), mtip )
159+ self .assertEqual (signature (Test ()), mtip )
160+
141161 def test_non_ascii_name (self ):
142162 # test that re works to delete a first parameter name that
143163 # includes non-ascii chars, such as various forms of A.
@@ -156,17 +176,23 @@ def test_attribute_exception(self):
156176 class NoCall :
157177 def __getattr__ (self , name ):
158178 raise BaseException
159- class Call (NoCall ):
179+ class CallA (NoCall ):
180+ def __call__ (oui , a , b , c ):
181+ pass
182+ class CallB (NoCall ):
160183 def __call__ (self , ci ):
161184 pass
162- for meth , mtip in ((NoCall , default_tip ), (Call , default_tip ),
163- (NoCall (), '' ), (Call (), '(ci)' )):
185+
186+ for meth , mtip in ((NoCall , default_tip ), (CallA , default_tip ),
187+ (NoCall (), '' ), (CallA (), '(a, b, c)' ),
188+ (CallB (), '(ci)' )):
164189 self .assertEqual (signature (meth ), mtip )
165190
166191 def test_non_callables (self ):
167192 for obj in (0 , 0.0 , '0' , b'0' , [], {}):
168193 self .assertEqual (signature (obj ), '' )
169194
195+
170196class Get_entityTest (unittest .TestCase ):
171197 def test_bad_entity (self ):
172198 self .assertIsNone (ct .get_entity ('1/0' ))
0 commit comments