infinite recursion when patching class that implements __nonzero__
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
Mocker |
New
|
Undecided
|
Unassigned |
Bug Description
Version: mocker-1.1
Reproducer:
-------
import mocker
class O(object):
def __init__(self, o):
self._o = o
def __nonzero__(self):
return bool(self._o)
@staticmethod
def foo():
return 'x'
m = mocker.Mocker()
mO = m.patch(O)
mO.foo()
m.result('bar')
m.replay()
x = O(1)
assert x.foo() == 'bar'
----------------
Result:
Traceback (most recent call last):
File "break_mocker.py", line 23, in <module>
assert x.foo() == 'bar'
File "/usr/lib/
object = obj or cls
File "break_mocker.py", line 8, in __nonzero__
return bool(self._o)
File "/usr/lib/
object = obj or cls
File "break_mocker.py", line 8, in __nonzero__
return bool(self._o)
File "/usr/lib/
object = obj or cls
File "break_mocker.py", line 8, in __nonzero__
return bool(self._o)
File "/usr/lib/
object = obj or cls
[...]
File "break_mocker.py", line 8, in __nonzero__
return bool(self._o)
File "/usr/lib/
object = obj or cls
RuntimeError: maximum recursion depth exceeded
If the __nonzero__ method is removed from class 'O', the code works as expected.
Same with `__len__()` method