Mercurial > hg > isophonics-drupal-site
comparison vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:4c8ae668cc8c |
---|---|
1 <?php | |
2 /* | |
3 * This file is part of the PHPUnit_MockObject package. | |
4 * | |
5 * (c) Sebastian Bergmann <sebastian@phpunit.de> | |
6 * | |
7 * For the full copyright and license information, please view the LICENSE | |
8 * file that was distributed with this source code. | |
9 */ | |
10 | |
11 /** | |
12 * Main matcher which defines a full expectation using method, parameter and | |
13 * invocation matchers. | |
14 * This matcher encapsulates all the other matchers and allows the builder to | |
15 * set the specific matchers when the appropriate methods are called (once(), | |
16 * where() etc.). | |
17 * | |
18 * All properties are public so that they can easily be accessed by the builder. | |
19 * | |
20 * @since Class available since Release 1.0.0 | |
21 */ | |
22 class PHPUnit_Framework_MockObject_Matcher implements PHPUnit_Framework_MockObject_Matcher_Invocation | |
23 { | |
24 /** | |
25 * @var PHPUnit_Framework_MockObject_Matcher_Invocation | |
26 */ | |
27 public $invocationMatcher; | |
28 | |
29 /** | |
30 * @var mixed | |
31 */ | |
32 public $afterMatchBuilderId = null; | |
33 | |
34 /** | |
35 * @var bool | |
36 */ | |
37 public $afterMatchBuilderIsInvoked = false; | |
38 | |
39 /** | |
40 * @var PHPUnit_Framework_MockObject_Matcher_MethodName | |
41 */ | |
42 public $methodNameMatcher = null; | |
43 | |
44 /** | |
45 * @var PHPUnit_Framework_MockObject_Matcher_Parameters | |
46 */ | |
47 public $parametersMatcher = null; | |
48 | |
49 /** | |
50 * @var PHPUnit_Framework_MockObject_Stub | |
51 */ | |
52 public $stub = null; | |
53 | |
54 /** | |
55 * @param PHPUnit_Framework_MockObject_Matcher_Invocation $invocationMatcher | |
56 */ | |
57 public function __construct(PHPUnit_Framework_MockObject_Matcher_Invocation $invocationMatcher) | |
58 { | |
59 $this->invocationMatcher = $invocationMatcher; | |
60 } | |
61 | |
62 /** | |
63 * @return string | |
64 */ | |
65 public function toString() | |
66 { | |
67 $list = array(); | |
68 | |
69 if ($this->invocationMatcher !== null) { | |
70 $list[] = $this->invocationMatcher->toString(); | |
71 } | |
72 | |
73 if ($this->methodNameMatcher !== null) { | |
74 $list[] = 'where ' . $this->methodNameMatcher->toString(); | |
75 } | |
76 | |
77 if ($this->parametersMatcher !== null) { | |
78 $list[] = 'and ' . $this->parametersMatcher->toString(); | |
79 } | |
80 | |
81 if ($this->afterMatchBuilderId !== null) { | |
82 $list[] = 'after ' . $this->afterMatchBuilderId; | |
83 } | |
84 | |
85 if ($this->stub !== null) { | |
86 $list[] = 'will ' . $this->stub->toString(); | |
87 } | |
88 | |
89 return implode(' ', $list); | |
90 } | |
91 | |
92 /** | |
93 * @param PHPUnit_Framework_MockObject_Invocation $invocation | |
94 * @return mixed | |
95 */ | |
96 public function invoked(PHPUnit_Framework_MockObject_Invocation $invocation) | |
97 { | |
98 if ($this->invocationMatcher === null) { | |
99 throw new PHPUnit_Framework_Exception( | |
100 'No invocation matcher is set' | |
101 ); | |
102 } | |
103 | |
104 if ($this->methodNameMatcher === null) { | |
105 throw new PHPUnit_Framework_Exception('No method matcher is set'); | |
106 } | |
107 | |
108 if ($this->afterMatchBuilderId !== null) { | |
109 $builder = $invocation->object | |
110 ->__phpunit_getInvocationMocker() | |
111 ->lookupId($this->afterMatchBuilderId); | |
112 | |
113 if (!$builder) { | |
114 throw new PHPUnit_Framework_Exception( | |
115 sprintf( | |
116 'No builder found for match builder identification <%s>', | |
117 $this->afterMatchBuilderId | |
118 ) | |
119 ); | |
120 } | |
121 | |
122 $matcher = $builder->getMatcher(); | |
123 | |
124 if ($matcher && $matcher->invocationMatcher->hasBeenInvoked()) { | |
125 $this->afterMatchBuilderIsInvoked = true; | |
126 } | |
127 } | |
128 | |
129 $this->invocationMatcher->invoked($invocation); | |
130 | |
131 try { | |
132 if ($this->parametersMatcher !== null && | |
133 !$this->parametersMatcher->matches($invocation)) { | |
134 $this->parametersMatcher->verify(); | |
135 } | |
136 } catch (PHPUnit_Framework_ExpectationFailedException $e) { | |
137 throw new PHPUnit_Framework_ExpectationFailedException( | |
138 sprintf( | |
139 "Expectation failed for %s when %s\n%s", | |
140 $this->methodNameMatcher->toString(), | |
141 $this->invocationMatcher->toString(), | |
142 $e->getMessage() | |
143 ), | |
144 $e->getComparisonFailure() | |
145 ); | |
146 } | |
147 | |
148 if ($this->stub) { | |
149 return $this->stub->invoke($invocation); | |
150 } | |
151 | |
152 return; | |
153 } | |
154 | |
155 /** | |
156 * @param PHPUnit_Framework_MockObject_Invocation $invocation | |
157 * @return bool | |
158 */ | |
159 public function matches(PHPUnit_Framework_MockObject_Invocation $invocation) | |
160 { | |
161 if ($this->afterMatchBuilderId !== null) { | |
162 $builder = $invocation->object | |
163 ->__phpunit_getInvocationMocker() | |
164 ->lookupId($this->afterMatchBuilderId); | |
165 | |
166 if (!$builder) { | |
167 throw new PHPUnit_Framework_Exception( | |
168 sprintf( | |
169 'No builder found for match builder identification <%s>', | |
170 $this->afterMatchBuilderId | |
171 ) | |
172 ); | |
173 } | |
174 | |
175 $matcher = $builder->getMatcher(); | |
176 | |
177 if (!$matcher) { | |
178 return false; | |
179 } | |
180 | |
181 if (!$matcher->invocationMatcher->hasBeenInvoked()) { | |
182 return false; | |
183 } | |
184 } | |
185 | |
186 if ($this->invocationMatcher === null) { | |
187 throw new PHPUnit_Framework_Exception( | |
188 'No invocation matcher is set' | |
189 ); | |
190 } | |
191 | |
192 if ($this->methodNameMatcher === null) { | |
193 throw new PHPUnit_Framework_Exception('No method matcher is set'); | |
194 } | |
195 | |
196 if (!$this->invocationMatcher->matches($invocation)) { | |
197 return false; | |
198 } | |
199 | |
200 try { | |
201 if (!$this->methodNameMatcher->matches($invocation)) { | |
202 return false; | |
203 } | |
204 } catch (PHPUnit_Framework_ExpectationFailedException $e) { | |
205 throw new PHPUnit_Framework_ExpectationFailedException( | |
206 sprintf( | |
207 "Expectation failed for %s when %s\n%s", | |
208 $this->methodNameMatcher->toString(), | |
209 $this->invocationMatcher->toString(), | |
210 $e->getMessage() | |
211 ), | |
212 $e->getComparisonFailure() | |
213 ); | |
214 } | |
215 | |
216 return true; | |
217 } | |
218 | |
219 /** | |
220 * @throws PHPUnit_Framework_Exception | |
221 * @throws PHPUnit_Framework_ExpectationFailedException | |
222 */ | |
223 public function verify() | |
224 { | |
225 if ($this->invocationMatcher === null) { | |
226 throw new PHPUnit_Framework_Exception( | |
227 'No invocation matcher is set' | |
228 ); | |
229 } | |
230 | |
231 if ($this->methodNameMatcher === null) { | |
232 throw new PHPUnit_Framework_Exception('No method matcher is set'); | |
233 } | |
234 | |
235 try { | |
236 $this->invocationMatcher->verify(); | |
237 | |
238 if ($this->parametersMatcher === null) { | |
239 $this->parametersMatcher = new PHPUnit_Framework_MockObject_Matcher_AnyParameters; | |
240 } | |
241 | |
242 $invocationIsAny = get_class($this->invocationMatcher) === 'PHPUnit_Framework_MockObject_Matcher_AnyInvokedCount'; | |
243 $invocationIsNever = get_class($this->invocationMatcher) === 'PHPUnit_Framework_MockObject_Matcher_InvokedCount' && $this->invocationMatcher->isNever(); | |
244 if (!$invocationIsAny && !$invocationIsNever) { | |
245 $this->parametersMatcher->verify(); | |
246 } | |
247 } catch (PHPUnit_Framework_ExpectationFailedException $e) { | |
248 throw new PHPUnit_Framework_ExpectationFailedException( | |
249 sprintf( | |
250 "Expectation failed for %s when %s.\n%s", | |
251 $this->methodNameMatcher->toString(), | |
252 $this->invocationMatcher->toString(), | |
253 PHPUnit_Framework_TestFailure::exceptionToString($e) | |
254 ) | |
255 ); | |
256 } | |
257 } | |
258 | |
259 /** | |
260 * @since Method available since Release 1.2.4 | |
261 */ | |
262 public function hasMatchers() | |
263 { | |
264 if ($this->invocationMatcher !== null && | |
265 !$this->invocationMatcher instanceof PHPUnit_Framework_MockObject_Matcher_AnyInvokedCount) { | |
266 return true; | |
267 } | |
268 | |
269 return false; | |
270 } | |
271 } |