bpo-39966: Revert "bpo-25597: Ensure wraps' return value is used for magic methods in MagicMock" (GH-19734)
* Revert "bpo-25597: Ensure wraps' return value is used for magic methods in MagicMock (#16029)"
This reverts commit 72b1004657
.
This commit is contained in:
parent
d9a43e20fa
commit
521c8d6806
|
@ -2012,12 +2012,6 @@ _side_effect_methods = {
|
||||||
|
|
||||||
|
|
||||||
def _set_return_value(mock, method, name):
|
def _set_return_value(mock, method, name):
|
||||||
# If _mock_wraps is present then attach it so that wrapped object
|
|
||||||
# is used for return value is used when called.
|
|
||||||
if mock._mock_wraps is not None:
|
|
||||||
method._mock_wraps = getattr(mock._mock_wraps, name)
|
|
||||||
return
|
|
||||||
|
|
||||||
fixed = _return_values.get(name, DEFAULT)
|
fixed = _return_values.get(name, DEFAULT)
|
||||||
if fixed is not DEFAULT:
|
if fixed is not DEFAULT:
|
||||||
method.return_value = fixed
|
method.return_value = fixed
|
||||||
|
|
|
@ -716,12 +716,16 @@ class MockTest(unittest.TestCase):
|
||||||
|
|
||||||
|
|
||||||
def test_magic_method_wraps_dict(self):
|
def test_magic_method_wraps_dict(self):
|
||||||
|
# bpo-25597: MagicMock with wrap doesn't call wrapped object's
|
||||||
|
# method for magic methods with default values.
|
||||||
data = {'foo': 'bar'}
|
data = {'foo': 'bar'}
|
||||||
|
|
||||||
wrapped_dict = MagicMock(wraps=data)
|
wrapped_dict = MagicMock(wraps=data)
|
||||||
self.assertEqual(wrapped_dict.get('foo'), 'bar')
|
self.assertEqual(wrapped_dict.get('foo'), 'bar')
|
||||||
self.assertEqual(wrapped_dict['foo'], 'bar')
|
# Accessing key gives a MagicMock
|
||||||
self.assertTrue('foo' in wrapped_dict)
|
self.assertIsInstance(wrapped_dict['foo'], MagicMock)
|
||||||
|
# __contains__ method has a default value of False
|
||||||
|
self.assertFalse('foo' in wrapped_dict)
|
||||||
|
|
||||||
# return_value is non-sentinel and takes precedence over wrapped value.
|
# return_value is non-sentinel and takes precedence over wrapped value.
|
||||||
wrapped_dict.get.return_value = 'return_value'
|
wrapped_dict.get.return_value = 'return_value'
|
||||||
|
@ -732,14 +736,13 @@ class MockTest(unittest.TestCase):
|
||||||
self.assertEqual(wrapped_dict.get('foo'), 'bar')
|
self.assertEqual(wrapped_dict.get('foo'), 'bar')
|
||||||
|
|
||||||
self.assertEqual(wrapped_dict.get('baz'), None)
|
self.assertEqual(wrapped_dict.get('baz'), None)
|
||||||
with self.assertRaises(KeyError):
|
self.assertIsInstance(wrapped_dict['baz'], MagicMock)
|
||||||
wrapped_dict['baz']
|
|
||||||
self.assertFalse('bar' in wrapped_dict)
|
self.assertFalse('bar' in wrapped_dict)
|
||||||
|
|
||||||
data['baz'] = 'spam'
|
data['baz'] = 'spam'
|
||||||
self.assertEqual(wrapped_dict.get('baz'), 'spam')
|
self.assertEqual(wrapped_dict.get('baz'), 'spam')
|
||||||
self.assertEqual(wrapped_dict['baz'], 'spam')
|
self.assertIsInstance(wrapped_dict['baz'], MagicMock)
|
||||||
self.assertTrue('baz' in wrapped_dict)
|
self.assertFalse('bar' in wrapped_dict)
|
||||||
|
|
||||||
del data['baz']
|
del data['baz']
|
||||||
self.assertEqual(wrapped_dict.get('baz'), None)
|
self.assertEqual(wrapped_dict.get('baz'), None)
|
||||||
|
@ -759,6 +762,7 @@ class MockTest(unittest.TestCase):
|
||||||
klass = MagicMock(wraps=Foo)
|
klass = MagicMock(wraps=Foo)
|
||||||
obj = klass()
|
obj = klass()
|
||||||
self.assertEqual(obj.__getitem__(2), 2)
|
self.assertEqual(obj.__getitem__(2), 2)
|
||||||
|
self.assertEqual(obj[2], 2)
|
||||||
self.assertEqual(obj.__custom_method__(), "foo")
|
self.assertEqual(obj.__custom_method__(), "foo")
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
Revert bpo-25597. :class:`unittest.mock.MagicMock` with wraps' set uses
|
||||||
|
default return values for magic methods.
|
Loading…
Reference in New Issue