summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBerker Peksag <berker.peksag@gmail.com>2016-03-27 21:30:02 (GMT)
committerBerker Peksag <berker.peksag@gmail.com>2016-03-27 21:30:02 (GMT)
commitce913877e42b7fa03434c2e765ace891e0f5c4dc (patch)
tree368cf51d0228cb951d2410a8e62703cc32c11c64
parentfa0f62d6ab3d4acf949bd0160bca16f0f973c323 (diff)
downloadcpython-ce913877e42b7fa03434c2e765ace891e0f5c4dc.zip
cpython-ce913877e42b7fa03434c2e765ace891e0f5c4dc.tar.gz
cpython-ce913877e42b7fa03434c2e765ace891e0f5c4dc.tar.bz2
Issue #25195: Fix a regression in mock.MagicMock
_Call is a subclass of tuple (changeset 3603bae63c13 only works for classes) so we need to implement __ne__ ourselves. Patch by Andrew Plummer.
-rw-r--r--Lib/unittest/mock.py3
-rw-r--r--Lib/unittest/test/testmock/testmock.py17
-rw-r--r--Misc/NEWS4
3 files changed, 24 insertions, 0 deletions
diff --git a/Lib/unittest/mock.py b/Lib/unittest/mock.py
index 976f663..cabae15 100644
--- a/Lib/unittest/mock.py
+++ b/Lib/unittest/mock.py
@@ -2029,6 +2029,9 @@ class _Call(tuple):
return (other_args, other_kwargs) == (self_args, self_kwargs)
+ __ne__ = object.__ne__
+
+
def __call__(self, *args, **kwargs):
if self.name is None:
return _Call(('', args, kwargs), name='()')
diff --git a/Lib/unittest/test/testmock/testmock.py b/Lib/unittest/test/testmock/testmock.py
index 2a6069f..03c95de 100644
--- a/Lib/unittest/test/testmock/testmock.py
+++ b/Lib/unittest/test/testmock/testmock.py
@@ -304,6 +304,17 @@ class MockTest(unittest.TestCase):
# an exception. See issue 24857.
self.assertFalse(mock.call_args == "a long sequence")
+
+ def test_calls_equal_with_any(self):
+ call1 = mock.call(mock.MagicMock())
+ call2 = mock.call(mock.ANY)
+
+ # Check that equality and non-equality is consistent even when
+ # comparing with mock.ANY
+ self.assertTrue(call1 == call2)
+ self.assertFalse(call1 != call2)
+
+
def test_assert_called_with(self):
mock = Mock()
mock()
@@ -319,6 +330,12 @@ class MockTest(unittest.TestCase):
mock.assert_called_with(1, 2, 3, a='fish', b='nothing')
+ def test_assert_called_with_any(self):
+ m = MagicMock()
+ m(MagicMock())
+ m.assert_called_with(mock.ANY)
+
+
def test_assert_called_with_function_spec(self):
def f(a, b, c, d=None):
pass
diff --git a/Misc/NEWS b/Misc/NEWS
index acbaaf7..a855451 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -94,6 +94,10 @@ Core and Builtins
Library
-------
+- Issue #25195: Fix a regression in mock.MagicMock. _Call is a subclass of
+ tuple (changeset 3603bae63c13 only works for classes) so we need to
+ implement __ne__ ourselves. Patch by Andrew Plummer.
+
- Issue #26644: Raise ValueError rather than SystemError when a negative
length is passed to SSLSocket.recv() or read().