|
44 | 44 | # isbuiltin, isroutine, isgenerator, isgeneratorfunction, getmembers, |
45 | 45 | # getdoc, getfile, getmodule, getsourcefile, getcomments, getsource, |
46 | 46 | # getclasstree, getargvalues, formatargvalues, |
47 | | -# currentframe, stack, trace, isdatadescriptor |
| 47 | +# currentframe, stack, trace, isdatadescriptor, |
| 48 | +# ismethodwrapper |
48 | 49 |
|
49 | 50 | # NOTE: There are some additional tests relating to interaction with |
50 | 51 | # zipimport in the test_zipimport_support test module. |
@@ -93,7 +94,8 @@ class IsTestBase(unittest.TestCase): |
93 | 94 | inspect.ismodule, inspect.istraceback, |
94 | 95 | inspect.isgenerator, inspect.isgeneratorfunction, |
95 | 96 | inspect.iscoroutine, inspect.iscoroutinefunction, |
96 | | - inspect.isasyncgen, inspect.isasyncgenfunction]) |
| 97 | + inspect.isasyncgen, inspect.isasyncgenfunction, |
| 98 | + inspect.ismethodwrapper]) |
97 | 99 |
|
98 | 100 | def istest(self, predicate, exp): |
99 | 101 | obj = eval(exp) |
@@ -169,6 +171,14 @@ def test_excluding_predicates(self): |
169 | 171 | self.istest(inspect.ismemberdescriptor, 'datetime.timedelta.days') |
170 | 172 | else: |
171 | 173 | self.assertFalse(inspect.ismemberdescriptor(datetime.timedelta.days)) |
| 174 | + self.istest(inspect.ismethodwrapper, "object().__str__") |
| 175 | + self.istest(inspect.ismethodwrapper, "object().__eq__") |
| 176 | + self.istest(inspect.ismethodwrapper, "object().__repr__") |
| 177 | + self.assertFalse(inspect.ismethodwrapper(type)) |
| 178 | + self.assertFalse(inspect.ismethodwrapper(int)) |
| 179 | + self.assertFalse(inspect.ismethodwrapper(type("AnyClass", (), {}))) |
| 180 | + |
| 181 | + |
172 | 182 |
|
173 | 183 | def test_iscoroutine(self): |
174 | 184 | async_gen_coro = async_generator_function_example(1) |
@@ -241,8 +251,38 @@ class NotFuture: pass |
241 | 251 | coro.close(); gen_coro.close() # silence warnings |
242 | 252 |
|
243 | 253 | def test_isroutine(self): |
244 | | - self.assertTrue(inspect.isroutine(mod.spam)) |
| 254 | + # method |
| 255 | + self.assertTrue(inspect.isroutine(git.argue)) |
| 256 | + self.assertTrue(inspect.isroutine(mod.custom_method)) |
245 | 257 | self.assertTrue(inspect.isroutine([].count)) |
| 258 | + # function |
| 259 | + self.assertTrue(inspect.isroutine(mod.spam)) |
| 260 | + self.assertTrue(inspect.isroutine(mod.StupidGit.abuse)) |
| 261 | + # slot-wrapper |
| 262 | + self.assertTrue(inspect.isroutine(object.__init__)) |
| 263 | + self.assertTrue(inspect.isroutine(object.__str__)) |
| 264 | + self.assertTrue(inspect.isroutine(object.__lt__)) |
| 265 | + self.assertTrue(inspect.isroutine(int.__lt__)) |
| 266 | + # method-wrapper |
| 267 | + self.assertTrue(inspect.isroutine(object().__init__)) |
| 268 | + self.assertTrue(inspect.isroutine(object().__str__)) |
| 269 | + self.assertTrue(inspect.isroutine(object().__lt__)) |
| 270 | + self.assertTrue(inspect.isroutine((42).__lt__)) |
| 271 | + # method-descriptor |
| 272 | + self.assertTrue(inspect.isroutine(str.join)) |
| 273 | + self.assertTrue(inspect.isroutine(list.append)) |
| 274 | + self.assertTrue(inspect.isroutine(''.join)) |
| 275 | + self.assertTrue(inspect.isroutine([].append)) |
| 276 | + # object |
| 277 | + self.assertFalse(inspect.isroutine(object)) |
| 278 | + self.assertFalse(inspect.isroutine(object())) |
| 279 | + self.assertFalse(inspect.isroutine(str())) |
| 280 | + # module |
| 281 | + self.assertFalse(inspect.isroutine(mod)) |
| 282 | + # type |
| 283 | + self.assertFalse(inspect.isroutine(type)) |
| 284 | + self.assertFalse(inspect.isroutine(int)) |
| 285 | + self.assertFalse(inspect.isroutine(type('some_class', (), {}))) |
246 | 286 |
|
247 | 287 | def test_isclass(self): |
248 | 288 | self.istest(inspect.isclass, 'mod.StupidGit') |
|
0 commit comments