]> granicus.if.org Git - python/commitdiff
Remove more Python 2 compatibility cruft from unittest.mock
authorMichael Foord <michael@voidspace.org.uk>
Wed, 14 Mar 2012 21:40:22 +0000 (14:40 -0700)
committerMichael Foord <michael@voidspace.org.uk>
Wed, 14 Mar 2012 21:40:22 +0000 (14:40 -0700)
Lib/unittest/mock.py
Lib/unittest/test/testmock/testcallable.py

index 89fe232c2bf8b7aa33cdc963ef89814e924655c9..f014c511eafe2251d8215b1e369f02af6145cdf2 100644 (file)
@@ -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)
index bdc42fa4ccd99e84333ba80859ee583550baf742..7b2dd003ea22a933451a646145126d8f6334b31c 100644 (file)
@@ -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):