5
* Copyright (c) 2010-2014, Sebastian Bergmann <sebastian@phpunit.de>.
8
* Redistribution and use in source and binary forms, with or without
9
* modification, are permitted provided that the following conditions
12
* * Redistributions of source code must retain the above copyright
13
* notice, this list of conditions and the following disclaimer.
15
* * Redistributions in binary form must reproduce the above copyright
16
* notice, this list of conditions and the following disclaimer in
17
* the documentation and/or other materials provided with the
20
* * Neither the name of Sebastian Bergmann nor the names of his
21
* contributors may be used to endorse or promote products derived
22
* from this software without specific prior written permission.
24
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
25
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
26
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
27
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
28
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
29
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
30
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
31
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
32
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
33
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
34
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
35
* POSSIBILITY OF SUCH DAMAGE.
37
* @package PHPUnit_MockObject
38
* @author Sebastian Bergmann <sebastian@phpunit.de>
39
* @copyright 2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
40
* @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License
41
* @link http://github.com/sebastianbergmann/phpunit-mock-objects
42
* @since File available since Release 1.0.0
46
* Builder for mocked or stubbed invocations.
48
* Provides methods for building expectations without having to resort to
49
* instantiating the various matchers manually. These methods also form a
50
* more natural way of reading the expectation. This class should be together
51
* with the test case PHPUnit_Framework_MockObject_TestCase.
53
* @package PHPUnit_MockObject
54
* @author Sebastian Bergmann <sebastian@phpunit.de>
55
* @copyright 2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
56
* @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License
57
* @version Release: @package_version@
58
* @link http://github.com/sebastianbergmann/phpunit-mock-objects
59
* @since Class available since Release 1.0.0
61
class PHPUnit_Framework_MockObject_Builder_InvocationMocker implements PHPUnit_Framework_MockObject_Builder_MethodNameMatch
64
* @var PHPUnit_Framework_MockObject_Stub_MatcherCollection
66
protected $collection;
69
* @var PHPUnit_Framework_MockObject_Matcher
74
* @param PHPUnit_Framework_MockObject_Stub_MatcherCollection $collection
75
* @param PHPUnit_Framework_MockObject_Matcher_Invocation $invocationMatcher
77
public function __construct(PHPUnit_Framework_MockObject_Stub_MatcherCollection $collection, PHPUnit_Framework_MockObject_Matcher_Invocation $invocationMatcher)
79
$this->collection = $collection;
80
$this->matcher = new PHPUnit_Framework_MockObject_Matcher(
84
$this->collection->addMatcher($this->matcher);
88
* @return PHPUnit_Framework_MockObject_Matcher
90
public function getMatcher()
92
return $this->matcher;
97
* @return PHPUnit_Framework_MockObject_Builder_InvocationMocker
99
public function id($id)
101
$this->collection->registerId($id, $this);
107
* @param PHPUnit_Framework_MockObject_Stub $stub
108
* @return PHPUnit_Framework_MockObject_Builder_InvocationMocker
110
public function will(PHPUnit_Framework_MockObject_Stub $stub)
112
$this->matcher->stub = $stub;
118
* @param mixed $value
119
* @return PHPUnit_Framework_MockObject_Builder_InvocationMocker
121
public function willReturn($value)
123
$stub = new PHPUnit_Framework_MockObject_Stub_Return(
127
return $this->will($stub);
131
* @param array $valueMap
132
* @return PHPUnit_Framework_MockObject_Builder_InvocationMocker
134
public function willReturnMap(array $valueMap)
136
$stub = new PHPUnit_Framework_MockObject_Stub_ReturnValueMap(
140
return $this->will($stub);
144
* @param mixed $argumentIndex
145
* @return PHPUnit_Framework_MockObject_Builder_InvocationMocker
147
public function willReturnArgument($argumentIndex)
149
$stub = new PHPUnit_Framework_MockObject_Stub_ReturnArgument(
153
return $this->will($stub);
157
* @param callable $callback
158
* @return PHPUnit_Framework_MockObject_Builder_InvocationMocker
160
public function willReturnCallback($callback)
162
$stub = new PHPUnit_Framework_MockObject_Stub_ReturnCallback(
166
return $this->will($stub);
170
* @return PHPUnit_Framework_MockObject_Builder_InvocationMocker
172
public function willReturnSelf()
174
$stub = new PHPUnit_Framework_MockObject_Stub_ReturnSelf();
176
return $this->will($stub);
180
* @param mixed $value, ...
181
* @return PHPUnit_Framework_MockObject_Builder_InvocationMocker
183
public function willReturnOnConsecutiveCalls()
185
$args = func_get_args();
187
$stub = new PHPUnit_Framework_MockObject_Stub_ConsecutiveCalls($args);
189
return $this->will($stub);
193
* @param Exception $exception
194
* @return PHPUnit_Framework_MockObject_Builder_InvocationMocker
196
public function willThrowException(Exception $exception)
198
$stub = new PHPUnit_Framework_MockObject_Stub_Exception($exception);
200
return $this->will($stub);
205
* @return PHPUnit_Framework_MockObject_Builder_InvocationMocker
207
public function after($id)
209
$this->matcher->afterMatchBuilderId = $id;
215
* Validate that a parameters matcher can be defined, throw exceptions otherwise.
217
* @throws PHPUnit_Framework_Exception
219
private function canDefineParameters()
221
if ($this->matcher->methodNameMatcher === NULL) {
222
throw new PHPUnit_Framework_Exception(
223
'Method name matcher is not defined, cannot define parameter ' .
224
' matcher without one'
228
if ($this->matcher->parametersMatcher !== NULL) {
229
throw new PHPUnit_Framework_Exception(
230
'Parameter matcher is already defined, cannot redefine'
236
* @param mixed $argument, ...
237
* @return PHPUnit_Framework_MockObject_Builder_InvocationMocker
239
public function with()
241
$args = func_get_args();
243
$this->canDefineParameters();
245
$this->matcher->parametersMatcher = new PHPUnit_Framework_MockObject_Matcher_Parameters($args);
251
* @param mixed ...$argument
252
* @return PHPUnit_Framework_MockObject_Builder_InvocationMocker
254
public function withConsecutive() {
256
$args = func_get_args();
258
$this->canDefineParameters();
260
$this->matcher->parametersMatcher =
261
new PHPUnit_Framework_MockObject_Matcher_ConsecutiveParameters($args);
267
* @return PHPUnit_Framework_MockObject_Builder_InvocationMocker
269
public function withAnyParameters()
271
$this->canDefineParameters();
273
$this->matcher->parametersMatcher = new PHPUnit_Framework_MockObject_Matcher_AnyParameters;
279
* @param PHPUnit_Framework_Constraint|string $constraint
280
* @return PHPUnit_Framework_MockObject_Builder_InvocationMocker
282
public function method($constraint)
284
if ($this->matcher->methodNameMatcher !== NULL) {
285
throw new PHPUnit_Framework_Exception(
286
'Method name matcher is already defined, cannot redefine'
290
$this->matcher->methodNameMatcher = new PHPUnit_Framework_MockObject_Matcher_MethodName($constraint);