~ballot/wordpress/openstack-objectstorage-breaking-insight

« back to all changes in this revision

Viewing changes to vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Builder/InvocationMocker.php

  • Committer: Jacek Nykis
  • Date: 2015-02-11 15:35:31 UTC
  • Revision ID: jacek.nykis@canonical.com-20150211153531-hmy6zi0ov2qfkl0b
Initial commit

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
<?php
 
2
/**
 
3
 * PHPUnit
 
4
 *
 
5
 * Copyright (c) 2010-2014, Sebastian Bergmann <sebastian@phpunit.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 <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
 
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 <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
 
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                                                 $value
 
119
     * @return PHPUnit_Framework_MockObject_Builder_InvocationMocker
 
120
     */
 
121
    public function willReturn($value)
 
122
    {
 
123
        $stub = new PHPUnit_Framework_MockObject_Stub_Return(
 
124
          $value
 
125
        );
 
126
 
 
127
        return $this->will($stub);
 
128
    }
 
129
 
 
130
    /**
 
131
     * @param  array                                                 $valueMap
 
132
     * @return PHPUnit_Framework_MockObject_Builder_InvocationMocker
 
133
     */
 
134
    public function willReturnMap(array $valueMap)
 
135
    {
 
136
        $stub = new PHPUnit_Framework_MockObject_Stub_ReturnValueMap(
 
137
          $valueMap
 
138
        );
 
139
 
 
140
        return $this->will($stub);
 
141
    }
 
142
 
 
143
    /**
 
144
     * @param  mixed                                                 $argumentIndex
 
145
     * @return PHPUnit_Framework_MockObject_Builder_InvocationMocker
 
146
     */
 
147
    public function willReturnArgument($argumentIndex)
 
148
    {
 
149
        $stub = new PHPUnit_Framework_MockObject_Stub_ReturnArgument(
 
150
          $argumentIndex
 
151
        );
 
152
 
 
153
        return $this->will($stub);
 
154
    }
 
155
 
 
156
    /**
 
157
     * @param  callable                                              $callback
 
158
     * @return PHPUnit_Framework_MockObject_Builder_InvocationMocker
 
159
     */
 
160
    public function willReturnCallback($callback)
 
161
    {
 
162
        $stub = new PHPUnit_Framework_MockObject_Stub_ReturnCallback(
 
163
          $callback
 
164
        );
 
165
 
 
166
        return $this->will($stub);
 
167
    }
 
168
 
 
169
    /**
 
170
     * @return PHPUnit_Framework_MockObject_Builder_InvocationMocker
 
171
     */
 
172
    public function willReturnSelf()
 
173
    {
 
174
        $stub = new PHPUnit_Framework_MockObject_Stub_ReturnSelf();
 
175
 
 
176
        return $this->will($stub);
 
177
    }
 
178
 
 
179
    /**
 
180
     * @param  mixed                                                 $value, ...
 
181
     * @return PHPUnit_Framework_MockObject_Builder_InvocationMocker
 
182
     */
 
183
    public function willReturnOnConsecutiveCalls()
 
184
    {
 
185
        $args = func_get_args();
 
186
 
 
187
        $stub = new PHPUnit_Framework_MockObject_Stub_ConsecutiveCalls($args);
 
188
 
 
189
        return $this->will($stub);
 
190
    }
 
191
 
 
192
    /**
 
193
     * @param  Exception                                             $exception
 
194
     * @return PHPUnit_Framework_MockObject_Builder_InvocationMocker
 
195
     */
 
196
    public function willThrowException(Exception $exception)
 
197
    {
 
198
        $stub = new PHPUnit_Framework_MockObject_Stub_Exception($exception);
 
199
 
 
200
        return $this->will($stub);
 
201
    }
 
202
 
 
203
    /**
 
204
     * @param  mixed                                                 $id
 
205
     * @return PHPUnit_Framework_MockObject_Builder_InvocationMocker
 
206
     */
 
207
    public function after($id)
 
208
    {
 
209
        $this->matcher->afterMatchBuilderId = $id;
 
210
 
 
211
        return $this;
 
212
    }
 
213
 
 
214
    /**
 
215
     * Validate that a parameters matcher can be defined, throw exceptions otherwise.
 
216
     *
 
217
     * @throws PHPUnit_Framework_Exception
 
218
     */
 
219
    private function canDefineParameters()
 
220
    {
 
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'
 
225
            );
 
226
        }
 
227
 
 
228
        if ($this->matcher->parametersMatcher !== NULL) {
 
229
            throw new PHPUnit_Framework_Exception(
 
230
              'Parameter matcher is already defined, cannot redefine'
 
231
            );
 
232
        }
 
233
    }
 
234
 
 
235
    /**
 
236
     * @param  mixed                                                 $argument, ...
 
237
     * @return PHPUnit_Framework_MockObject_Builder_InvocationMocker
 
238
     */
 
239
    public function with()
 
240
    {
 
241
        $args = func_get_args();
 
242
 
 
243
        $this->canDefineParameters();
 
244
 
 
245
        $this->matcher->parametersMatcher = new PHPUnit_Framework_MockObject_Matcher_Parameters($args);
 
246
 
 
247
        return $this;
 
248
    }
 
249
 
 
250
    /**
 
251
     * @param  mixed ...$argument
 
252
     * @return PHPUnit_Framework_MockObject_Builder_InvocationMocker
 
253
     */
 
254
    public function withConsecutive() {
 
255
 
 
256
        $args = func_get_args();
 
257
 
 
258
        $this->canDefineParameters();
 
259
 
 
260
        $this->matcher->parametersMatcher =
 
261
          new PHPUnit_Framework_MockObject_Matcher_ConsecutiveParameters($args);
 
262
 
 
263
        return $this;
 
264
    }
 
265
 
 
266
    /**
 
267
     * @return PHPUnit_Framework_MockObject_Builder_InvocationMocker
 
268
     */
 
269
    public function withAnyParameters()
 
270
    {
 
271
        $this->canDefineParameters();
 
272
 
 
273
        $this->matcher->parametersMatcher = new PHPUnit_Framework_MockObject_Matcher_AnyParameters;
 
274
 
 
275
        return $this;
 
276
    }
 
277
 
 
278
    /**
 
279
     * @param  PHPUnit_Framework_Constraint|string                   $constraint
 
280
     * @return PHPUnit_Framework_MockObject_Builder_InvocationMocker
 
281
     */
 
282
    public function method($constraint)
 
283
    {
 
284
        if ($this->matcher->methodNameMatcher !== NULL) {
 
285
            throw new PHPUnit_Framework_Exception(
 
286
              'Method name matcher is already defined, cannot redefine'
 
287
            );
 
288
        }
 
289
 
 
290
        $this->matcher->methodNameMatcher = new PHPUnit_Framework_MockObject_Matcher_MethodName($constraint);
 
291
 
 
292
        return $this;
 
293
    }
 
294
}