From 15712a56d5194505dfb3bb641f39b572121fc2d7 Mon Sep 17 00:00:00 2001 From: Farbod Ahmadian Date: Thu, 20 Jun 2024 11:01:56 +0200 Subject: [PATCH] tests: add for bound method representation --- src/_pytest/_io/saferepr.py | 8 +------- testing/io/test_saferepr.py | 25 +++++++++++++++++++++++++ 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/src/_pytest/_io/saferepr.py b/src/_pytest/_io/saferepr.py index fda25ff7105..9ea77e62b37 100644 --- a/src/_pytest/_io/saferepr.py +++ b/src/_pytest/_io/saferepr.py @@ -63,13 +63,7 @@ def repr(self, x: object) -> str: # for bound methods, skip redundant information s = x.__name__ else: - # if none of the mro classes have implemented __repr__ - # show class name - mro_classes = x.__class__.mro()[:-1] - if not any("__repr__" in cls.__dict__ for cls in mro_classes): - s = x.__class__.__name__ - else: - s = super().repr(x) + s = super().repr(x) except (KeyboardInterrupt, SystemExit): raise diff --git a/testing/io/test_saferepr.py b/testing/io/test_saferepr.py index f627434c4e9..69b610c2004 100644 --- a/testing/io/test_saferepr.py +++ b/testing/io/test_saferepr.py @@ -190,3 +190,28 @@ def __repr__(self): assert saferepr_unlimited(A()).startswith( "<[ValueError(42) raised in repr()] A object at 0x" ) + + +class TestSafereprUnbounded: + class Help: + def __init__(self, i): + self.i = i + + def bound_method(self): + return self.i + + def test_saferepr_bound_method(self): + """saferepr() of a bound method should show only the method name""" + assert saferepr(self.Help(10).bound_method) == "bound_method" + + def test_saferepr_unbounded(self): + """saferepr() of an unbound method should still show the full information""" + obj = self.Help(10) + assert ( + saferepr(obj) + == f"" + ) + assert ( + saferepr(self.Help) + == f"" + )