summaryrefslogtreecommitdiff
path: root/test.py
diff options
context:
space:
mode:
authorGustavo Niemeyer <gustavo@niemeyer.net>2007-12-11 21:37:53 -0200
committerGustavo Niemeyer <gustavo@niemeyer.net>2007-12-11 21:37:53 -0200
commitd7c9c348405704cb69e9658df28d6008c5b2df7e (patch)
treeb7f7a6028a07f9347657ca800c87261be87787fb /test.py
parent44bfc93ffda5ece9eeb4e0c725aed23ccd9ed8e3 (diff)
downloadmocker-d7c9c348405704cb69e9658df28d6008c5b2df7e.tar.gz
Fixed patching of objects which define __getattr__.0.10.1
Diffstat (limited to 'test.py')
-rwxr-xr-xtest.py50
1 files changed, 49 insertions, 1 deletions
diff --git a/test.py b/test.py
index 77454e9..173e51e 100755
--- a/test.py
+++ b/test.py
@@ -3825,7 +3825,7 @@ class PatcherTest(TestCase):
self.assertEquals(obj8.attr, 8)
self.assertEquals(obj9.attr, "originalD")
- def test_execute_getattr(self):
+ def test_patched_getattr_execute_getattr(self):
class C(object):
def __getattribute__(self, attr):
if attr == "attr":
@@ -3843,6 +3843,54 @@ class PatcherTest(TestCase):
self.patcher.replay()
self.assertRaises(AttributeError, self.patcher.execute, action, obj)
+ def test_patched_real_getattr_on_different_instances(self):
+ def build_getattr(original):
+ def __getattr__(self, name):
+ if name == "attr":
+ return original
+ return object.__getattr__(self, name)
+ return __getattr__
+ self.C.__getattr__ = build_getattr("originalC")
+ self.D.__getattr__ = build_getattr("originalD")
+
+ class MockStub(object):
+ def __init__(self, id):
+ self.id = id
+ def __mocker_act__(self, kind, args=(), kwargs={}, object=None):
+ return self.id
+
+ obj1, obj2, obj3, obj4, obj5, obj6 = [self.C() for i in range(6)]
+ obj7, obj8, obj9 = [self.D() for i in range(3)]
+
+ obj2.__mocker_mock__ = MockStub(2)
+ self.patcher.monitor(obj2, "getattr")
+ obj5.__mocker_mock__ = MockStub(5)
+ self.patcher.monitor(obj5, "getattr")
+ obj8.__mocker_mock__ = MockStub(8)
+ self.patcher.monitor(obj8, "getattr")
+
+ self.patcher.replay()
+ self.assertEquals(obj1.attr, "originalC")
+ self.assertEquals(obj2.attr, 2)
+ self.assertEquals(obj3.attr, "originalC")
+ self.assertEquals(obj4.attr, "originalC")
+ self.assertEquals(obj5.attr, 5)
+ self.assertEquals(obj6.attr, "originalC")
+ self.assertEquals(obj7.attr, "originalD")
+ self.assertEquals(obj8.attr, 8)
+ self.assertEquals(obj9.attr, "originalD")
+
+ def test_patched_real_getattr_execute_getattr(self):
+ class C(object):
+ def __getattr__(self, attr):
+ if attr == "attr":
+ return "original"
+ action = Action("getattr", ("attr",), {})
+ obj = C()
+ self.patcher.monitor(obj, "getattr")
+ self.patcher.replay()
+ self.assertEquals(self.patcher.execute(action, obj), "original")
+
def test_execute_call(self):
class C(object):
def __call__(self, *args, **kwargs):