summaryrefslogtreecommitdiff
path: root/tests/utils_tests/test_lazyobject.py
diff options
context:
space:
mode:
authorSean <sean@pop-os.home>2025-12-19 00:37:07 +0100
committernessita <124304+nessita@users.noreply.github.com>2025-12-24 14:46:41 -0300
commit8e4b531111ddd3256c45eee601947e475651e8e7 (patch)
tree68b70bfcc0106b0ddebebc550a0cbb763fba0871 /tests/utils_tests/test_lazyobject.py
parent165c3599965e63f88649a46fcc2ff681c52f2f66 (diff)
Fixed #36810 -- Avoided infinite recursion in SimpleLazyObject.__repr__().
Detect when `SimpleLazyObject._setupfunc` is a bound method of the same instance to use a safe representation and avoid infinite recursion.
Diffstat (limited to 'tests/utils_tests/test_lazyobject.py')
-rw-r--r--tests/utils_tests/test_lazyobject.py16
1 files changed, 16 insertions, 0 deletions
diff --git a/tests/utils_tests/test_lazyobject.py b/tests/utils_tests/test_lazyobject.py
index a95335413e..e538c66377 100644
--- a/tests/utils_tests/test_lazyobject.py
+++ b/tests/utils_tests/test_lazyobject.py
@@ -348,6 +348,22 @@ class SimpleLazyObjectTestCase(LazyObjectTestCase):
self.assertIsInstance(obj._wrapped, int)
self.assertEqual(repr(obj), "<SimpleLazyObject: 42>")
+ def test_repr_bound_method(self):
+
+ class MyLazyGenerator(SimpleLazyObject):
+ def __init__(self):
+ super().__init__(self._generate)
+
+ def _generate(self):
+ return "test-generated-value"
+
+ obj = MyLazyGenerator()
+ self.assertEqual(repr(obj), "<MyLazyGenerator: '<bound method _generate>'>")
+ self.assertIs(obj._wrapped, empty) # The evaluation hasn't happened.
+
+ self.assertEqual(str(obj), "test-generated-value") # Evaluate.
+ self.assertEqual(repr(obj), "<MyLazyGenerator: 'test-generated-value'>")
+
def test_add(self):
obj1 = self.lazy_wrap(1)
self.assertEqual(obj1 + 1, 2)