7 sys.stdout.write(a.__str__())
10 sys.stdout.write(a.__doc__)
12 sys.stdout.write('BUG - FIXME')
14 sys.stdout.write('\n')
19 pprint("Mock.__init__")
23 def __getattr__(self, value):
24 pprint("Mock.__getattr__", value)
25 if self._methods.has_key(value):
26 pprint("returning mocked method")
27 return self._methods[value]
30 def __init__(self, method_name):
31 self._method_name = method_name
32 self._recorded_calls = []
35 def __call__(self, *args, **kwargs):
36 pprint("REPLAYING", self.getName(), args, kwargs)
37 self._recorded_calls.append((args, kwargs))
41 return self._method_name
42 def getNumberOfInvocations(self):
43 return len(self._recorded_calls)
44 def verify(self, args, kwargs):
45 if args != self._args or kwargs != self._kwargs:
46 raise Exception("No call for %s with arguments %s - actual: %s" % (value, args, self._args))
49 pprint("returning 'empty' method", value)
51 self.register(value, empty)
53 raise AttributeError("Mock doesn't contain attribute", value)
54 pprint("returning super method")
55 return Object.__getattr__.call(self, value)
58 pprint("Mock.__replay__")
61 def register(self, methodName, mock):
62 pprint("Mock.__register__", methodName)
63 self._methods[methodName] = mock
65 def getMethodMock(self, methodName):
66 pprint("Mock.getMethodMock", methodName)
67 if self._methods.has_key(methodName):
68 return self._methods[methodName]
72 def __init__(self, mock, args, kwargs):
73 pprint("MethodMock.__init__", args, kwargs)
75 self._method_name = args[0]
76 mock.register(self._method_name, self)
79 self._recorded_calls = []
80 self._canned_response = None
81 self._canned_args = None
82 self._canned_args_set = False
84 def willReturn(self, args):
85 pprint(self.getName(), "willReturn", args)
86 self._canned_response = args
88 def verify(self, args, kwargs):
89 pprint("MethodMock.verify", args, kwargs)
90 recorded_args, recorded_kwargs = self._recorded_calls.pop()
91 pprint(" .verify", recorded_args, recorded_kwargs)
92 return args == recorded_args and kwargs == recorded_kwargs
95 return self._method_name
97 def getNumberOfInvocations(self):
98 return len(self._recorded_calls)
100 def __call__(self, *args, **kwargs):
101 if self._canned_args_set: # replay
102 pprint("MethodMock.__call__ REPLAYING", self.getName(), args, kwargs, "returning", self._canned_response)
103 self._recorded_calls.append((args, kwargs))
104 return self._canned_response
106 pprint("MethodMock.__call__ RECORDING", self.getName(), args, kwargs)
107 self._canned_args_set = True
108 self._canned_args = args
112 def __init__(self, mock):
113 pprint("given.__init__")
116 def __getattr__(self, *args, **kwargs):
117 pprint("given.__getattr__", args, kwargs)
118 return MethodMock(self.target, args, kwargs)
121 class MethodCallVerifier():
122 def __init__(self, methodMock, times):
123 self.method = methodMock
125 def __call__(self, *args, **kwargs):
126 pprint("MethodCallVerifier.__call__", self.method, args, kwargs)
127 # FIXME: verify times times
128 calls = self.method.getNumberOfInvocations()
129 min_calls = self.times.getMinimumNumberOfTimes()
130 max_calls = self.times.getMaximumNumberOfTimes()
131 if calls < min_calls:
132 raise Exception("Expected at least %s calls to %s, got %s" % (min_calls, self.method.getName(), calls))
133 if calls > max_calls:
134 raise Exception("Expected at most %s calls to %s, got %s" % (max_calls, self.method.getName(), calls))
138 match = self.method.verify(args, kwargs)
140 pprint("Yes, call for", self.method.getName(), "matched arguments", args, kwargs)
142 pprint("Nope, call for", self.method.getName(), "didn't match arguments", args, kwargs)
143 raise Exception("mock verification failed")
145 def empty(*args, **kwargs):
151 def getMinimumNumberOfTimes(self):
153 def getMaximumNumberOfTimes(self):
159 def getMinimumNumberOfTimes(self):
161 def getMaximumNumberOfTimes(self):
165 def __init__(self, mock, times=None):
166 pprint("verify.__init__")
169 if self.times is None:
172 def __getattr__(self, methodName):
173 pprint("verify.__getattr__", methodName)
174 method_mock = self.target.getMethodMock(methodName)
175 if method_mock is None:
176 if self.times.getMinimumNumberOfTimes() > 0:
177 raise Exception("method " + methodName + " was never called")
179 return MethodCallVerifier(method_mock, self.times)