def test_staticmethod(self): class WithStaticMethod: @staticmethod def staticfunc(): pass self.assertTrue(_callable(WithStaticMethod.staticfunc))
def test_classmethod(self): class WithClassMethod: @classmethod def classfunc(cls): pass self.assertTrue(_callable(WithClassMethod.classfunc))
def test_call_magic_method(self): class Callable: def __call__(self): pass instance = Callable() self.assertTrue(_callable(instance))
def _patch_mock_callable(obj): if isinstance(obj, type): return True if getattr(obj, '__call__', None) is not None: return True if (isinstance(obj, (staticmethod, classmethod)) and mock._callable(obj.__func__)): return True return False
def _patched_callable(obj): "Monkey patched version of mock._callable." # See https://code.google.com/p/mock/issues/detail?id=241 and # http://bugs.python.org/issue23078 for the relevant bugs this # monkeypatch fixes if isinstance(obj, type): return True if getattr(obj, '__call__', None) is not None: return True if (isinstance(obj, (staticmethod, classmethod)) and mock._callable(obj.__func__)): #pylint: disable=W0212 return True return False
def test_non_callable_classmethod(self): class BadClassMethod: not_callable = classmethod(None) self.assertFalse(_callable(BadClassMethod.not_callable))
def test_non_callable_staticmethod(self): class BadStaticMethod: not_callable = staticmethod(None) self.assertFalse(_callable(BadStaticMethod.not_callable))
def test_type(self): for obj in [str, bytes, int, list, tuple, SomeClass]: self.assertTrue(_callable(obj))