From: Kushal Das Date: Tue, 16 Sep 2014 13:03:37 +0000 (+0530) Subject: Closes #21270 : We now override tuple methods in mock.call objects. X-Git-Tag: v3.5.0a1~915 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a37b958d6540be7bb3cf181e448f1267c0e2824c;p=python Closes #21270 : We now override tuple methods in mock.call objects. --- diff --git a/Lib/unittest/mock.py b/Lib/unittest/mock.py index d00197688a..1c2dd1c1e2 100644 --- a/Lib/unittest/mock.py +++ b/Lib/unittest/mock.py @@ -2035,6 +2035,12 @@ class _Call(tuple): return _Call(name=name, parent=self, from_kall=False) + def count(self, *args, **kwargs): + return self.__getattr__('count')(*args, **kwargs) + + def index(self, *args, **kwargs): + return self.__getattr__('index')(*args, **kwargs) + def __repr__(self): if not self.from_kall: name = self.name or 'call' diff --git a/Lib/unittest/test/testmock/testmock.py b/Lib/unittest/test/testmock/testmock.py index a5499732c2..3a104cb2b9 100644 --- a/Lib/unittest/test/testmock/testmock.py +++ b/Lib/unittest/test/testmock/testmock.py @@ -1213,6 +1213,16 @@ class MockTest(unittest.TestCase): text = "call(daddy='hero', name='hello')" self.assertEqual(repr(m.hello.call_args), text) + #Issue21270 overrides tuple methods for mock.call objects + def test_override_tuple_methods(self): + c = call.count() + i = call.index(132,'hello') + m = Mock() + m.count() + m.index(132,"hello") + self.assertEqual(m.method_calls[0], c) + self.assertEqual(m.method_calls[1], i) + def test_mock_add_spec(self): class _One(object): one = 1 diff --git a/Misc/NEWS b/Misc/NEWS index d9bac60624..f4d1056eb8 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -157,6 +157,9 @@ Library - Issue #12410: imaplib.IMAP4 now supports the context management protocol. Original patch by Tarek Ziadé. +- Issue #21270: We now override tuple methods in mock.call objects so that + they can be used as normal call attributes. + - Issue #16662: load_tests() is now unconditionally run when it is present in a package's __init__.py. TestLoader.loadTestsFromModule() still accepts use_load_tests, but it is deprecated and ignored. A new keyword-only