support.gc_collect()
self.assertIsNone(r())
+ def test_signatures(self):
+ @functools.singledispatch
+ def func(item, arg: int) -> str:
+ return str(item)
+ @func.register
+ def _(item: int, arg: bytes) -> str:
+ return str(item)
+
+ self.assertEqual(str(Signature.from_callable(func)),
+ '(item, arg: int) -> str')
+
+ def test_method_signatures(self):
+ class A:
+ def m(self, item, arg: int) -> str:
+ return str(item)
+ @classmethod
+ def cm(cls, item, arg: int) -> str:
+ return str(item)
+ @functools.singledispatchmethod
+ def func(self, item, arg: int) -> str:
+ return str(item)
+ @func.register
+ def _(self, item, arg: bytes) -> str:
+ return str(item)
+
+ @functools.singledispatchmethod
+ @classmethod
+ def cls_func(cls, item, arg: int) -> str:
+ return str(arg)
+ @func.register
+ @classmethod
+ def _(cls, item, arg: bytes) -> str:
+ return str(item)
+
+ @functools.singledispatchmethod
+ @staticmethod
+ def static_func(item, arg: int) -> str:
+ return str(arg)
+ @func.register
+ @staticmethod
+ def _(item, arg: bytes) -> str:
+ return str(item)
+
+ self.assertEqual(str(Signature.from_callable(A.func)),
+ '(self, item, arg: int) -> str')
+ self.assertEqual(str(Signature.from_callable(A().func)),
+ '(self, item, arg: int) -> str')
+ self.assertEqual(str(Signature.from_callable(A.cls_func)),
+ '(cls, item, arg: int) -> str')
+ self.assertEqual(str(Signature.from_callable(A.static_func)),
+ '(item, arg: int) -> str')
+
class CachedCostItem:
_cost = 1
# partial
self.assertTrue(inspect.isroutine(functools.partial(mod.spam)))
+ def test_isroutine_singledispatch(self):
+ self.assertTrue(inspect.isroutine(functools.singledispatch(mod.spam)))
+
+ class A:
+ @functools.singledispatchmethod
+ def method(self, arg):
+ pass
+ @functools.singledispatchmethod
+ @classmethod
+ def class_method(cls, arg):
+ pass
+ @functools.singledispatchmethod
+ @staticmethod
+ def static_method(arg):
+ pass
+
+ self.assertTrue(inspect.isroutine(A.method))
+ self.assertTrue(inspect.isroutine(A().method))
+ self.assertTrue(inspect.isroutine(A.static_method))
+ self.assertTrue(inspect.isroutine(A.class_method))
+
def test_isclass(self):
self.istest(inspect.isclass, 'mod.StupidGit')
self.assertTrue(inspect.isclass(list))