Skip to content

Commit 354721b

Browse files
committed
Add tests
1 parent 9dac097 commit 354721b

File tree

1 file changed

+50
-0
lines changed

1 file changed

+50
-0
lines changed

Lib/test/test_functools.py

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3005,6 +3005,56 @@ def static_func(arg: int) -> str:
30053005
self.assertEqual(A.static_func.__name__, 'static_func')
30063006
self.assertEqual(A().static_func.__name__, 'static_func')
30073007

3008+
def test_method_classlevel_calls(self):
3009+
"""Regression test for GH-144615."""
3010+
class C:
3011+
@functools.singledispatchmethod
3012+
def generic(self, x: object):
3013+
return "generic"
3014+
3015+
@generic.register
3016+
def special1(self, x: int):
3017+
return "special1"
3018+
3019+
@generic.register
3020+
@classmethod
3021+
def special2(self, x: float):
3022+
return "special2"
3023+
3024+
@generic.register
3025+
@staticmethod
3026+
def special3(self, x: complex):
3027+
return "special3"
3028+
3029+
def special4(self, x):
3030+
return "special4"
3031+
3032+
class D1:
3033+
def __get__(self, _, owner):
3034+
return lambda inst, x: owner.special4(inst, x)
3035+
3036+
generic.register(D1, D1())
3037+
3038+
def special5(self, x):
3039+
return "special5"
3040+
3041+
class D2:
3042+
def __get__(self, inst, owner):
3043+
# Different instance bound to the returned method
3044+
# doesn't cause it to receive the original instance
3045+
# as a separate argument. Return a partial() to workaround.
3046+
return C().special5
3047+
3048+
generic.register(D2, D2())
3049+
3050+
3051+
self.assertEqual(C.generic(C(), "foo"), "generic")
3052+
self.assertEqual(C.generic(C(), 1), "special1")
3053+
self.assertEqual(C.generic(C(), 2.0), "special2")
3054+
self.assertEqual(C.generic(C(), 3j), "special3")
3055+
self.assertEqual(C.generic(C(), C.D1()), "special4")
3056+
self.assertEqual(C.generic(C(), C.D2()), "special5")
3057+
30083058
def test_method_repr(self):
30093059
class Callable:
30103060
def __call__(self, *args):

0 commit comments

Comments
 (0)