Issue 20968. unittest.mock.MagicMock now supports division

This commit is contained in:
Michael Foord 2014-04-14 11:23:48 -04:00
parent 604453c9ce
commit d2623d7786
3 changed files with 31 additions and 1 deletions

View File

@ -1634,7 +1634,9 @@ magic_methods = (
"bool next " "bool next "
) )
numerics = "add sub mul div floordiv mod lshift rshift and xor or pow " numerics = (
"add sub mul div floordiv mod lshift rshift and xor or pow truediv"
)
inplace = ' '.join('i%s' % n for n in numerics.split()) inplace = ' '.join('i%s' % n for n in numerics.split())
right = ' '.join('r%s' % n for n in numerics.split()) right = ' '.join('r%s' % n for n in numerics.split())

View File

@ -126,6 +126,31 @@ class TestMockingMagicMethods(unittest.TestCase):
self.assertEqual(7 + mock, mock) self.assertEqual(7 + mock, mock)
self.assertEqual(mock.value, 16) self.assertEqual(mock.value, 16)
def test_division(self):
original = mock = Mock()
mock.value = 32
self.assertRaises(TypeError, lambda: mock / 2)
def truediv(self, other):
mock.value /= other
return self
mock.__truediv__ = truediv
self.assertEqual(mock / 2, mock)
self.assertEqual(mock.value, 16)
del mock.__truediv__
def itruediv(mock):
mock /= 4
self.assertRaises(TypeError, itruediv, mock)
mock.__itruediv__ = truediv
mock /= 8
self.assertEqual(mock, original)
self.assertEqual(mock.value, 2)
self.assertRaises(TypeError, lambda: 8 / mock)
mock.__rtruediv__ = truediv
self.assertEqual(0.5 / mock, mock)
self.assertEqual(mock.value, 4)
def test_hash(self): def test_hash(self):
mock = Mock() mock = Mock()

View File

@ -30,6 +30,9 @@ Core and Builtins
Library Library
------- -------
- Issue #20968: unittest.mock.MagicMock now supports division.
Patch by Johannes Baiter.
- Fix arbitrary memory access in JSONDecoder.raw_decode with a negative second - Fix arbitrary memory access in JSONDecoder.raw_decode with a negative second
parameter. Bug reported by Guido Vranken. parameter. Bug reported by Guido Vranken.