summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--NEWS9
-rw-r--r--mocker.py7
-rwxr-xr-xtest.py24
3 files changed, 33 insertions, 7 deletions
diff --git a/NEWS b/NEWS
index d55e49c..1a45ebc 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,12 @@
+0.9.2 (2007-11-22)
+==================
+
+- In recording mode, mock.__class__ will now return Mock, and not
+ record the action. This allows Mocker to be used in interactive
+ environments which inspect the result's type, such as in iPython
+ (reported by Alex Dante).
+
+
0.9.1 (2007-11-18)
==================
diff --git a/mocker.py b/mocker.py
index e06ae64..c18f204 100644
--- a/mocker.py
+++ b/mocker.py
@@ -965,9 +965,6 @@ class Mock(object):
try:
return self.__mocker__.act(path)
except MatchError, exception:
- if (self.__mocker_type__ is not None and
- kind == "getattr" and args == ("__class__",)):
- return self.__mocker_type__
root_mock = path.root_mock
if (path.root_object is not None and
root_mock.__mocker_passthrough__):
@@ -986,6 +983,10 @@ class Mock(object):
def __getattribute__(self, name):
if name.startswith("__mocker_"):
return super(Mock, self).__getattribute__(name)
+ if name == "__class__":
+ if self.__mocker__.is_recording() or self.__mocker_type__ is None:
+ return type(self)
+ return self.__mocker_type__
return self.__mocker_act__("getattr", (name,))
def __setattr__(self, name, value):
diff --git a/test.py b/test.py
index dd499f7..ce984b1 100755
--- a/test.py
+++ b/test.py
@@ -2042,6 +2042,11 @@ class MockTest(unittest.TestCase):
def setUp(self):
self.paths = []
class StubMocker(object):
+ _recording = True
+ def is_recording(self):
+ return self._recording
+ def replay(self):
+ self._recording = False
@staticmethod
def act(path):
self.paths.append(path)
@@ -2079,13 +2084,24 @@ class MockTest(unittest.TestCase):
C = object()
self.assertEquals(Mock(self.mocker, spec=C).__mocker_spec__, C)
- def test_type(self):
- def raise_exception(self, path):
- raise MatchError
- self.StubMocker.act = raise_exception
+ def test_class_without_type(self):
+ mock = Mock(self.mocker)
+ self.assertEquals(mock.__class__, Mock)
+ self.mocker.replay()
+ self.assertEquals(mock.__class__, Mock)
+
+ def test_class_with_type_when_recording(self):
class C(object): pass
mock = Mock(self.mocker, type=C)
self.assertEquals(mock.__mocker_type__, C)
+ self.assertEquals(mock.__class__, Mock)
+ self.assertEquals(isinstance(mock, Mock), True)
+
+ def test_class_with_type_when_replaying(self):
+ class C(object): pass
+ mock = Mock(self.mocker, type=C)
+ self.mocker.replay()
+ self.assertEquals(mock.__mocker_type__, C)
self.assertEquals(mock.__class__, C)
self.assertEquals(isinstance(mock, C), True)