bpo-23078: Add support for {class,static}method to mock.create_autos… · python/cpython@9b21856 (original) (raw)

Original file line number Diff line number Diff line change
@@ -5,7 +5,7 @@
5 5
6 6 from unittest.mock import (
7 7 call, _Call, create_autospec, MagicMock,
8 -Mock, ANY, _CallList, patch, PropertyMock
8 +Mock, ANY, _CallList, patch, PropertyMock, _callable
9 9 )
10 10
11 11 from datetime import datetime
@@ -1011,5 +1011,43 @@ def test_propertymock_returnvalue(self):
1011 1011 self.assertNotIsInstance(returned, PropertyMock)
1012 1012
1013 1013
1014 +class TestCallablePredicate(unittest.TestCase):
1015 +
1016 +def test_type(self):
1017 +for obj in [str, bytes, int, list, tuple, SomeClass]:
1018 +self.assertTrue(_callable(obj))
1019 +
1020 +def test_call_magic_method(self):
1021 +class Callable:
1022 +def __call__(self):
1023 +pass
1024 +instance = Callable()
1025 +self.assertTrue(_callable(instance))
1026 +
1027 +def test_staticmethod(self):
1028 +class WithStaticMethod:
1029 +@staticmethod
1030 +def staticfunc():
1031 +pass
1032 +self.assertTrue(_callable(WithStaticMethod.staticfunc))
1033 +
1034 +def test_non_callable_staticmethod(self):
1035 +class BadStaticMethod:
1036 +not_callable = staticmethod(None)
1037 +self.assertFalse(_callable(BadStaticMethod.not_callable))
1038 +
1039 +def test_classmethod(self):
1040 +class WithClassMethod:
1041 +@classmethod
1042 +def classfunc(cls):
1043 +pass
1044 +self.assertTrue(_callable(WithClassMethod.classfunc))
1045 +
1046 +def test_non_callable_classmethod(self):
1047 +class BadClassMethod:
1048 +not_callable = classmethod(None)
1049 +self.assertFalse(_callable(BadClassMethod.not_callable))
1050 +
1051 +
1014 1052 if __name__ == '__main__':
1015 1053 unittest.main()