@@ -46,25 +46,37 @@ 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 , List .__doc__ ) # This and append_doc changed in 3.7.
57
58
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.' )
59
61
gtest (list .__init__ ,
62
+ '(self, /, *args, **kwargs)' + ct ._argument_positional + '\n ' +
60
63
'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"
62
66
gtest (list .append , append_doc )
63
67
gtest ([].append , append_doc )
64
68
gtest (List .append , append_doc )
65
69
66
70
gtest (types .MethodType , "method(function, instance)" )
67
71
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...''' )
68
80
69
81
def test_signature_wrap (self ):
70
82
if textwrap .TextWrapper .__doc__ is not None :
@@ -132,12 +144,20 @@ def test_starred_parameter(self):
132
144
# test that starred first parameter is *not* removed from argspec
133
145
class C :
134
146
def m1 (* args ): pass
135
- def m2 (** kwds ): pass
136
147
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)" ),):
139
149
self .assertEqual (signature (meth ), mtip )
140
150
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
+
141
161
def test_non_ascii_name (self ):
142
162
# test that re works to delete a first parameter name that
143
163
# includes non-ascii chars, such as various forms of A.
@@ -156,17 +176,23 @@ def test_attribute_exception(self):
156
176
class NoCall :
157
177
def __getattr__ (self , name ):
158
178
raise BaseException
159
- class Call (NoCall ):
179
+ class CallA (NoCall ):
180
+ def __call__ (oui , a , b , c ):
181
+ pass
182
+ class CallB (NoCall ):
160
183
def __call__ (self , ci ):
161
184
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)' )):
164
189
self .assertEqual (signature (meth ), mtip )
165
190
166
191
def test_non_callables (self ):
167
192
for obj in (0 , 0.0 , '0' , b'0' , [], {}):
168
193
self .assertEqual (signature (obj ), '' )
169
194
195
+
170
196
class Get_entityTest (unittest .TestCase ):
171
197
def test_bad_entity (self ):
172
198
self .assertIsNone (ct .get_entity ('1/0' ))
0 commit comments