Commit a468db9b authored by Łukasz Langa's avatar Łukasz Langa

Issue #23310: Fix MagicMock's initializer to work with __methods__.

Behavior equivalent to m.configure_mock().  Patch by Kasia Jachim.
parent cd1aa915
...@@ -1789,14 +1789,15 @@ def _set_return_value(mock, method, name): ...@@ -1789,14 +1789,15 @@ def _set_return_value(mock, method, name):
class MagicMixin(object): class MagicMixin(object):
def __init__(self, *args, **kw): def __init__(self, *args, **kw):
self._mock_set_magics() # make magic work for kwargs in init
_safe_super(MagicMixin, self).__init__(*args, **kw) _safe_super(MagicMixin, self).__init__(*args, **kw)
self._mock_set_magics() self._mock_set_magics() # fix magic broken by upper level init
def _mock_set_magics(self): def _mock_set_magics(self):
these_magics = _magics these_magics = _magics
if self._mock_methods is not None: if getattr(self, "_mock_methods", None) is not None:
these_magics = _magics.intersection(self._mock_methods) these_magics = _magics.intersection(self._mock_methods)
remove_magics = set() remove_magics = set()
......
...@@ -450,5 +450,20 @@ class TestMockingMagicMethods(unittest.TestCase): ...@@ -450,5 +450,20 @@ class TestMockingMagicMethods(unittest.TestCase):
bar_direct = m.__rdivmod__(2) bar_direct = m.__rdivmod__(2)
self.assertIsInstance(bar_direct, MagicMock) self.assertIsInstance(bar_direct, MagicMock)
# http://bugs.python.org/issue23310
# Check if you can change behaviour of magic methds in MagicMock init
def test_magic_in_initialization(self):
m = MagicMock(**{'__str__.return_value': "12"})
self.assertEqual(str(m), "12")
def test_changing_magic_set_in_initialization(self):
m = MagicMock(**{'__str__.return_value': "12"})
m.__str__.return_value = "13"
self.assertEqual(str(m), "13")
m = MagicMock(**{'__str__.return_value': "12"})
m.configure_mock(**{'__str__.return_value': "14"})
self.assertEqual(str(m), "14")
if __name__ == '__main__': if __name__ == '__main__':
unittest.main() unittest.main()
...@@ -849,6 +849,7 @@ Hugo Lopes Tavares ...@@ -849,6 +849,7 @@ Hugo Lopes Tavares
Anne Lord Anne Lord
Tom Loredo Tom Loredo
Justin Love Justin Love
Kasia Jachim
Ned Jackson Lovely Ned Jackson Lovely
Chalmer Lowe Chalmer Lowe
Jason Lowe Jason Lowe
......
...@@ -136,6 +136,9 @@ Library ...@@ -136,6 +136,9 @@ Library
- Issue #22117: Fix os.utime(), it now rounds the timestamp towards minus - Issue #22117: Fix os.utime(), it now rounds the timestamp towards minus
infinity (-inf) instead of rounding towards zero. infinity (-inf) instead of rounding towards zero.
- Issue #23310: Fix MagicMock's initializer to work with __methods__, just
like configure_mock(). Patch by Kasia Jachim.
Build Build
----- -----
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment