]> CyberLeo.Net >> Repos - Github/sugarcrm.git/blob - tests/PHPUnit/PHPUnit/Framework/MockObject/Builder/InvocationMocker.php
Add .gitignore
[Github/sugarcrm.git] / tests / PHPUnit / PHPUnit / Framework / MockObject / Builder / InvocationMocker.php
1 <?php
2 /**
3  * PHPUnit
4  *
5  * Copyright (c) 2010-2011, Sebastian Bergmann <sb@sebastian-bergmann.de>.
6  * All rights reserved.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions
10  * are met:
11  *
12  *   * Redistributions of source code must retain the above copyright
13  *     notice, this list of conditions and the following disclaimer.
14  *
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
18  *     distribution.
19  *
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.
23  *
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.
36  *
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
43  */
44
45 /**
46  * Builder for mocked or stubbed invocations.
47  *
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.
52  *
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
60  */
61 class PHPUnit_Framework_MockObject_Builder_InvocationMocker implements PHPUnit_Framework_MockObject_Builder_MethodNameMatch
62 {
63     /**
64      * @var PHPUnit_Framework_MockObject_Stub_MatcherCollection
65      */
66     protected $collection;
67
68     /**
69      * @var PHPUnit_Framework_MockObject_Matcher
70      */
71     protected $matcher;
72
73     /**
74      * @param PHPUnit_Framework_MockObject_Stub_MatcherCollection $collection
75      * @param PHPUnit_Framework_MockObject_Matcher_Invocation $invocationMatcher
76      */
77     public function __construct(PHPUnit_Framework_MockObject_Stub_MatcherCollection $collection, PHPUnit_Framework_MockObject_Matcher_Invocation $invocationMatcher)
78     {
79         $this->collection = $collection;
80         $this->matcher    = new PHPUnit_Framework_MockObject_Matcher(
81           $invocationMatcher
82         );
83
84         $this->collection->addMatcher($this->matcher);
85     }
86
87     /**
88      * @return PHPUnit_Framework_MockObject_Matcher
89      */
90     public function getMatcher()
91     {
92         return $this->matcher;
93     }
94
95     /**
96      * @param  mixed $id
97      * @return PHPUnit_Framework_MockObject_Builder_InvocationMocker
98      */
99     public function id($id)
100     {
101         $this->collection->registerId($id, $this);
102
103         return $this;
104     }
105
106     /**
107      * @param  PHPUnit_Framework_MockObject_Stub $stub
108      * @return PHPUnit_Framework_MockObject_Builder_InvocationMocker
109      */
110     public function will(PHPUnit_Framework_MockObject_Stub $stub)
111     {
112         $this->matcher->stub = $stub;
113
114         return $this;
115     }
116
117     /**
118      * @param  mixed $id
119      * @return PHPUnit_Framework_MockObject_Builder_InvocationMocker
120      */
121     public function after($id)
122     {
123         $this->matcher->afterMatchBuilderId = $id;
124
125         return $this;
126     }
127
128     /**
129      * @param  mixed $argument, ...
130      * @return PHPUnit_Framework_MockObject_Builder_InvocationMocker
131      */
132     public function with()
133     {
134         $args = func_get_args();
135
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'
140             );
141         }
142
143         if ($this->matcher->parametersMatcher !== NULL) {
144             throw new PHPUnit_Framework_Exception(
145               'Parameter matcher is already defined, cannot redefine'
146             );
147         }
148
149         $this->matcher->parametersMatcher = new PHPUnit_Framework_MockObject_Matcher_Parameters($args);
150
151         return $this;
152     }
153
154     /**
155      * @return PHPUnit_Framework_MockObject_Builder_InvocationMocker
156      */
157     public function withAnyParameters()
158     {
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'
163             );
164         }
165
166         if ($this->matcher->parametersMatcher !== NULL) {
167             throw new PHPUnit_Framework_Exception(
168               'Parameter matcher is already defined, cannot redefine'
169             );
170         }
171
172         $this->matcher->parametersMatcher = new PHPUnit_Framework_MockObject_Matcher_AnyParameters;
173
174         return $this;
175     }
176
177     /**
178      * @param  PHPUnit_Framework_Constraint|string $constraint
179      * @return PHPUnit_Framework_MockObject_Builder_InvocationMocker
180      */
181     public function method($constraint)
182     {
183         if ($this->matcher->methodNameMatcher !== NULL) {
184             throw new PHPUnit_Framework_Exception(
185               'Method name matcher is already defined, cannot redefine'
186             );
187         }
188
189         $this->matcher->methodNameMatcher = new PHPUnit_Framework_MockObject_Matcher_MethodName($constraint);
190
191         return $this;
192     }
193 }