From: Michael Foord Date: Wed, 14 Mar 2012 21:40:22 +0000 (-0700) Subject: Remove more Python 2 compatibility cruft from unittest.mock X-Git-Tag: v3.3.0a2~190^2~2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a74b3aa0cce004bfa8a8be04519667a70d5651b0;p=python Remove more Python 2 compatibility cruft from unittest.mock --- diff --git a/Lib/unittest/mock.py b/Lib/unittest/mock.py index 89fe232c2b..f014c511ea 100644 --- a/Lib/unittest/mock.py +++ b/Lib/unittest/mock.py @@ -143,13 +143,10 @@ def _instance_callable(obj): # already an instance return getattr(obj, '__call__', None) is not None - klass = obj - # uses __bases__ instead of __mro__ so that we work with old style classes - if klass.__dict__.get('__call__') is not None: - return True - - for base in klass.__bases__: - if _instance_callable(base): + # *could* be broken by a class overriding __mro__ or __dict__ via + # a metaclass + for base in (obj,) + obj.__mro__: + if base.__dict__.get('__call__') is not None: return True return False @@ -2064,11 +2061,7 @@ def _must_skip(spec, entry, is_type): if entry in getattr(spec, '__dict__', {}): # instance attribute - shouldn't skip return False - # can't use type because of old style classes spec = spec.__class__ - if not hasattr(spec, '__mro__'): - # old style class: can't have descriptors anyway - return is_type for klass in spec.__mro__: result = klass.__dict__.get(entry, DEFAULT) diff --git a/Lib/unittest/test/testmock/testcallable.py b/Lib/unittest/test/testmock/testcallable.py index bdc42fa4cc..7b2dd003ea 100644 --- a/Lib/unittest/test/testmock/testcallable.py +++ b/Lib/unittest/test/testmock/testcallable.py @@ -107,19 +107,9 @@ class TestCallable(unittest.TestCase): class Multi(SomeClass, Sub): pass - class OldStyle: - def __call__(self): - pass - - class OldStyleSub(OldStyle): - pass - for arg in 'spec', 'spec_set': - for Klass in CallableX, Sub, Multi, OldStyle, OldStyleSub: - patcher = patch('%s.X' % __name__, **{arg: Klass}) - mock = patcher.start() - - try: + for Klass in CallableX, Sub, Multi: + with patch('%s.X' % __name__, **{arg: Klass}) as mock: instance = mock() mock.assert_called_once_with() @@ -136,8 +126,6 @@ class TestCallable(unittest.TestCase): result.assert_called_once_with(3, 2, 1) result.foo(3, 2, 1) result.foo.assert_called_once_with(3, 2, 1) - finally: - patcher.stop() def test_create_autopsec(self):