diff options
| author | Sean <sean@pop-os.home> | 2025-12-19 00:37:07 +0100 |
|---|---|---|
| committer | nessita <124304+nessita@users.noreply.github.com> | 2025-12-24 14:46:41 -0300 |
| commit | 8e4b531111ddd3256c45eee601947e475651e8e7 (patch) | |
| tree | 68b70bfcc0106b0ddebebc550a0cbb763fba0871 /tests/utils_tests/test_lazyobject.py | |
| parent | 165c3599965e63f88649a46fcc2ff681c52f2f66 (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.py | 16 |
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) |
