@@ -46,25 +46,36 @@ def test_builtins(self):
46
46
47
47
# Python class that inherits builtin methods
48
48
class List (list ): "List() doc"
49
+
49
50
# Simulate builtin with no docstring for default tip test
50
51
class SB : __call__ = None
51
52
52
53
def gtest (obj , out ):
53
54
self .assertEqual (signature (obj ), out )
54
55
55
56
if List .__doc__ is not None :
56
- gtest (List , List .__doc__ )
57
+ gtest (List , '(iterable=(), /)\n ' + ct ._argument_positional + '\n ' +
58
+ List .__doc__ )
57
59
gtest (list .__new__ ,
58
- 'Create and return a new object. See help(type) for accurate signature.' )
60
+ '(*args, **kwargs) \n Create and return a new object. See help(type) for accurate signature.' )
59
61
gtest (list .__init__ ,
62
+ '(self, /, *args, **kwargs)\n ' + ct ._argument_positional + '\n ' +
60
63
'Initialize self. See help(type(self)) for accurate signature.' )
61
- append_doc = "Append object to the end of the list."
62
- gtest (list .append , append_doc )
63
- gtest ([] .append , append_doc )
64
- gtest (List .append , append_doc )
64
+ append_doc = ct . _argument_positional + ' \n ' + "Append object to the end of the list."
65
+ gtest (list .append , '(self, object, /) \n ' + append_doc )
66
+ gtest (List .append , '(self, object, /) \n ' + append_doc )
67
+ gtest ([] .append , '(object, /) \n ' + append_doc )
65
68
66
69
gtest (types .MethodType , "method(function, instance)" )
67
70
gtest (SB (), default_tip )
71
+ import re
72
+ p = re .compile ('' )
73
+ gtest (re .sub , '''(pattern, repl, string, count=0, flags=0)\n Return the string obtained by replacing the leftmost
74
+ non-overlapping occurrences of the pattern in string by the
75
+ replacement repl. repl can be either a string or a callable;
76
+ if a string, backslash escapes in it are processed. If it is
77
+ a callable, it's passed the match object and must return''' )
78
+ gtest (p .sub , '''(repl, string, count=0)\n Return the string obtained by replacing the leftmost non-overlapping occurrences o...''' )
68
79
69
80
def test_signature_wrap (self ):
70
81
if textwrap .TextWrapper .__doc__ is not None :
@@ -132,12 +143,20 @@ def test_starred_parameter(self):
132
143
# test that starred first parameter is *not* removed from argspec
133
144
class C :
134
145
def m1 (* args ): pass
135
- def m2 (** kwds ): pass
136
146
c = C ()
137
- for meth , mtip in ((C .m1 , '(*args)' ), (c .m1 , "(*args)" ),
138
- (C .m2 , "(**kwds)" ), (c .m2 , "(**kwds)" ),):
147
+ for meth , mtip in ((C .m1 , '(*args)' ), (c .m1 , "(*args)" ),):
139
148
self .assertEqual (signature (meth ), mtip )
140
149
150
+ def test_invalid_method_signature (self ):
151
+ class C :
152
+ def m2 (** kwargs ): pass
153
+ class Test :
154
+ def __call__ (* , a ): pass
155
+
156
+ mtip = ct ._invalid_method
157
+ self .assertEqual (signature (C ().m2 ), mtip )
158
+ self .assertEqual (signature (Test ()), mtip )
159
+
141
160
def test_non_ascii_name (self ):
142
161
# test that re works to delete a first parameter name that
143
162
# includes non-ascii chars, such as various forms of A.
@@ -156,17 +175,23 @@ def test_attribute_exception(self):
156
175
class NoCall :
157
176
def __getattr__ (self , name ):
158
177
raise BaseException
159
- class Call (NoCall ):
178
+ class CallA (NoCall ):
179
+ def __call__ (oui , a , b , c ):
180
+ pass
181
+ class CallB (NoCall ):
160
182
def __call__ (self , ci ):
161
183
pass
162
- for meth , mtip in ((NoCall , default_tip ), (Call , default_tip ),
163
- (NoCall (), '' ), (Call (), '(ci)' )):
184
+
185
+ for meth , mtip in ((NoCall , default_tip ), (CallA , default_tip ),
186
+ (NoCall (), '' ), (CallA (), '(a, b, c)' ),
187
+ (CallB (), '(ci)' )):
164
188
self .assertEqual (signature (meth ), mtip )
165
189
166
190
def test_non_callables (self ):
167
191
for obj in (0 , 0.0 , '0' , b'0' , [], {}):
168
192
self .assertEqual (signature (obj ), '' )
169
193
194
+
170
195
class Get_entityTest (unittest .TestCase ):
171
196
def test_bad_entity (self ):
172
197
self .assertIsNone (ct .get_entity ('1/0' ))
0 commit comments