]> CyberLeo.Net >> Repos - Github/sugarcrm.git/blob - tests/PHPUnit/PHPUnit/Framework/Constraint/IsType.php
Release 6.2.0
[Github/sugarcrm.git] / tests / PHPUnit / PHPUnit / Framework / Constraint / IsType.php
1 <?php
2 /**
3  * PHPUnit
4  *
5  * Copyright (c) 2002-2011, 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
38  * @subpackage Framework_Constraint
39  * @author     Sebastian Bergmann <sebastian@phpunit.de>
40  * @copyright  2002-2011 Sebastian Bergmann <sebastian@phpunit.de>
41  * @license    http://www.opensource.org/licenses/bsd-license.php  BSD License
42  * @link       http://www.phpunit.de/
43  * @since      File available since Release 3.0.0
44  */
45
46 /**
47  * Constraint that asserts that the value it is evaluated for is of a
48  * specified type.
49  *
50  * The expected value is passed in the constructor.
51  *
52  * @package    PHPUnit
53  * @subpackage Framework_Constraint
54  * @author     Sebastian Bergmann <sebastian@phpunit.de>
55  * @copyright  2002-2011 Sebastian Bergmann <sebastian@phpunit.de>
56  * @license    http://www.opensource.org/licenses/bsd-license.php  BSD License
57  * @version    Release: 3.5.13
58  * @link       http://www.phpunit.de/
59  * @since      Class available since Release 3.0.0
60  */
61 class PHPUnit_Framework_Constraint_IsType extends PHPUnit_Framework_Constraint
62 {
63     const TYPE_ARRAY    = 'array';
64     const TYPE_BOOL     = 'bool';
65     const TYPE_FLOAT    = 'float';
66     const TYPE_INT      = 'int';
67     const TYPE_NULL     = 'null';
68     const TYPE_NUMERIC  = 'numeric';
69     const TYPE_OBJECT   = 'object';
70     const TYPE_RESOURCE = 'resource';
71     const TYPE_STRING   = 'string';
72     const TYPE_SCALAR   = 'scalar';
73
74     /**
75      * @var array
76      */
77     protected $types = array(
78       'array' => TRUE,
79       'boolean' => TRUE,
80       'bool' => TRUE,
81       'float' => TRUE,
82       'integer' => TRUE,
83       'int' => TRUE,
84       'null' => TRUE,
85       'numeric' => TRUE,
86       'object' => TRUE,
87       'resource' => TRUE,
88       'string' => TRUE,
89       'scalar' => TRUE
90     );
91
92     /**
93      * @var string
94      */
95     protected $type;
96
97     /**
98      * @param  string $type
99      * @throws InvalidArgumentException
100      */
101     public function __construct($type)
102     {
103         if (!isset($this->types[$type])) {
104             throw new InvalidArgumentException(
105               sprintf(
106                 'Type specified for PHPUnit_Framework_Constraint_IsType <%s> ' .
107                 'is not a valid type.',
108                 $type
109               )
110             );
111         }
112
113         $this->type = $type;
114     }
115
116     /**
117      * Evaluates the constraint for parameter $other. Returns TRUE if the
118      * constraint is met, FALSE otherwise.
119      *
120      * @param mixed $other Value or object to evaluate.
121      * @return bool
122      */
123     public function evaluate($other)
124     {
125         switch ($this->type) {
126             case 'numeric': {
127                 return is_numeric($other);
128             }
129
130             case 'integer':
131             case 'int': {
132                 return is_integer($other);
133             }
134
135             case 'float': {
136                 return is_float($other);
137             }
138
139             case 'string': {
140                 return is_string($other);
141             }
142
143             case 'boolean':
144             case 'bool': {
145                 return is_bool($other);
146             }
147
148             case 'null': {
149                 return is_null($other);
150             }
151
152             case 'array': {
153                 return is_array($other);
154             }
155
156             case 'object': {
157                 return is_object($other);
158             }
159
160             case 'resource': {
161                 return is_resource($other);
162             }
163
164             case 'scalar': {
165                 return is_scalar($other);
166             }
167         }
168     }
169
170     /**
171      * Returns a string representation of the constraint.
172      *
173      * @return string
174      */
175     public function toString()
176     {
177         return sprintf(
178           'is of type "%s"',
179
180           $this->type
181         );
182     }
183 }