5 * Copyright (c) 2010-2011, Sebastian Bergmann <sb@sebastian-bergmann.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 <sb@sebastian-bergmann.de>
39 * @copyright 2010-2011 Sebastian Bergmann <sb@sebastian-bergmann.de>
40 * @license http://www.opensource.org/licenses/bsd-license.php BSD 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 <sb@sebastian-bergmann.de>
55 * @copyright 2010-2011 Sebastian Bergmann <sb@sebastian-bergmann.de>
56 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
57 * @version Release: 1.0.8
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;
119 * @return PHPUnit_Framework_MockObject_Builder_InvocationMocker
121 public function after($id)
123 $this->matcher->afterMatchBuilderId = $id;
129 * @param mixed $argument, ...
130 * @return PHPUnit_Framework_MockObject_Builder_InvocationMocker
132 public function with()
134 $args = func_get_args();
136 if ($this->matcher->methodNameMatcher === NULL) {
137 throw new PHPUnit_Framework_Exception(
138 'Method name matcher is not defined, cannot define parameter ' .
139 ' matcher without one'
143 if ($this->matcher->parametersMatcher !== NULL) {
144 throw new PHPUnit_Framework_Exception(
145 'Parameter matcher is already defined, cannot redefine'
149 $this->matcher->parametersMatcher = new PHPUnit_Framework_MockObject_Matcher_Parameters($args);
155 * @return PHPUnit_Framework_MockObject_Builder_InvocationMocker
157 public function withAnyParameters()
159 if ($this->matcher->methodNameMatcher === NULL) {
160 throw new PHPUnit_Framework_Exception(
161 'Method name matcher is not defined, cannot define parameter ' .
162 'matcher without one'
166 if ($this->matcher->parametersMatcher !== NULL) {
167 throw new PHPUnit_Framework_Exception(
168 'Parameter matcher is already defined, cannot redefine'
172 $this->matcher->parametersMatcher = new PHPUnit_Framework_MockObject_Matcher_AnyParameters;
178 * @param PHPUnit_Framework_Constraint|string $constraint
179 * @return PHPUnit_Framework_MockObject_Builder_InvocationMocker
181 public function method($constraint)
183 if ($this->matcher->methodNameMatcher !== NULL) {
184 throw new PHPUnit_Framework_Exception(
185 'Method name matcher is already defined, cannot redefine'
189 $this->matcher->methodNameMatcher = new PHPUnit_Framework_MockObject_Matcher_MethodName($constraint);