~tcuthbert/wordpress/openstack-objectstorage

« back to all changes in this revision

Viewing changes to vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/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
 * Mocker for invocations which are sent from
 
47
 * PHPUnit_Framework_MockObject_MockObject objects.
 
48
 *
 
49
 * Keeps track of all expectations and stubs as well as registering
 
50
 * identifications for builders.
 
51
 *
 
52
 * @package    PHPUnit_MockObject
 
53
 * @author     Sebastian Bergmann <sebastian@phpunit.de>
 
54
 * @copyright  2010-2014 Sebastian Bergmann <sebastian@phpunit.de>
 
55
 * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
 
56
 * @version    Release: @package_version@
 
57
 * @link       http://github.com/sebastianbergmann/phpunit-mock-objects
 
58
 * @since      Class available since Release 1.0.0
 
59
 */
 
60
class PHPUnit_Framework_MockObject_InvocationMocker implements PHPUnit_Framework_MockObject_Stub_MatcherCollection, PHPUnit_Framework_MockObject_Invokable, PHPUnit_Framework_MockObject_Builder_Namespace
 
61
{
 
62
    /**
 
63
     * @var PHPUnit_Framework_MockObject_Matcher_Invocation[]
 
64
     */
 
65
    protected $matchers = array();
 
66
 
 
67
    /**
 
68
     * @var PHPUnit_Framework_MockObject_Builder_Match[]
 
69
     */
 
70
    protected $builderMap = array();
 
71
 
 
72
    /**
 
73
     * @param PHPUnit_Framework_MockObject_Matcher_Invocation $matcher
 
74
     */
 
75
    public function addMatcher(PHPUnit_Framework_MockObject_Matcher_Invocation $matcher)
 
76
    {
 
77
        $this->matchers[] = $matcher;
 
78
    }
 
79
 
 
80
    /**
 
81
     * @since Method available since Release 1.1.0
 
82
     */
 
83
    public function hasMatchers()
 
84
    {
 
85
        foreach ($this->matchers as $matcher) {
 
86
            if ($matcher->hasMatchers()) {
 
87
                return TRUE;
 
88
            }
 
89
        }
 
90
 
 
91
        return FALSE;
 
92
    }
 
93
 
 
94
    /**
 
95
     * @param  mixed        $id
 
96
     * @return boolean|null
 
97
     */
 
98
    public function lookupId($id)
 
99
    {
 
100
        if (isset($this->builderMap[$id])) {
 
101
            return $this->builderMap[$id];
 
102
        }
 
103
 
 
104
        return NULL;
 
105
    }
 
106
 
 
107
    /**
 
108
     * @param  mixed                                      $id
 
109
     * @param  PHPUnit_Framework_MockObject_Builder_Match $builder
 
110
     * @throws PHPUnit_Framework_Exception
 
111
     */
 
112
    public function registerId($id, PHPUnit_Framework_MockObject_Builder_Match $builder)
 
113
    {
 
114
        if (isset($this->builderMap[$id])) {
 
115
            throw new PHPUnit_Framework_Exception(
 
116
              'Match builder with id <' . $id . '> is already registered.'
 
117
            );
 
118
        }
 
119
 
 
120
        $this->builderMap[$id] = $builder;
 
121
    }
 
122
 
 
123
    /**
 
124
     * @param  PHPUnit_Framework_MockObject_Matcher_Invocation       $matcher
 
125
     * @return PHPUnit_Framework_MockObject_Builder_InvocationMocker
 
126
     */
 
127
    public function expects(PHPUnit_Framework_MockObject_Matcher_Invocation $matcher)
 
128
    {
 
129
        return new PHPUnit_Framework_MockObject_Builder_InvocationMocker(
 
130
          $this, $matcher
 
131
        );
 
132
    }
 
133
 
 
134
    /**
 
135
     * @param  PHPUnit_Framework_MockObject_Invocation $invocation
 
136
     * @return mixed
 
137
     */
 
138
    public function invoke(PHPUnit_Framework_MockObject_Invocation $invocation)
 
139
    {
 
140
        $exception      = NULL;
 
141
        $hasReturnValue = FALSE;
 
142
 
 
143
        if (strtolower($invocation->methodName) == '__tostring') {
 
144
            $returnValue = '';
 
145
        } else {
 
146
            $returnValue = NULL;
 
147
        }
 
148
 
 
149
        foreach ($this->matchers as $match) {
 
150
            try {
 
151
                if ($match->matches($invocation)) {
 
152
                    $value = $match->invoked($invocation);
 
153
 
 
154
                    if (!$hasReturnValue) {
 
155
                        $returnValue    = $value;
 
156
                        $hasReturnValue = TRUE;
 
157
                    }
 
158
                }
 
159
            } catch (Exception $e) {
 
160
                $exception = $e;
 
161
            }
 
162
        }
 
163
 
 
164
        if ($exception !== NULL) {
 
165
            throw $exception;
 
166
        }
 
167
 
 
168
        return $returnValue;
 
169
    }
 
170
 
 
171
    /**
 
172
     * @param  PHPUnit_Framework_MockObject_Invocation $invocation
 
173
     * @return boolean
 
174
     */
 
175
    public function matches(PHPUnit_Framework_MockObject_Invocation $invocation)
 
176
    {
 
177
        foreach ($this->matchers as $matcher) {
 
178
            if (!$matcher->matches($invocation)) {
 
179
                return FALSE;
 
180
            }
 
181
        }
 
182
 
 
183
        return TRUE;
 
184
    }
 
185
 
 
186
    /**
 
187
     * @return boolean
 
188
     */
 
189
    public function verify()
 
190
    {
 
191
        foreach ($this->matchers as $matcher) {
 
192
            $matcher->verify();
 
193
        }
 
194
    }
 
195
}