]> CyberLeo.Net >> Repos - Github/sugarcrm.git/blob - tests/PHPUnit/Util/Type.php
Added unit tests.
[Github/sugarcrm.git] / tests / PHPUnit / Util / Type.php
1 <?php
2 /**
3  * PHPUnit
4  *
5  * Copyright (c) 2002-2009, 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  * @category   Testing
38  * @package    PHPUnit
39  * @author     Sebastian Bergmann <sb@sebastian-bergmann.de>
40  * @copyright  2002-2009 Sebastian Bergmann <sb@sebastian-bergmann.de>
41  * @license    http://www.opensource.org/licenses/bsd-license.php  BSD License
42
43  * @link       http://www.phpunit.de/
44  * @since      File available since Release 3.0.0
45  */
46
47 require_once 'PHPUnit/Util/Filter.php';
48
49 PHPUnit_Util_Filter::addFileToFilter(__FILE__, 'PHPUNIT');
50
51 /**
52  * Utility class for textual type (and value) representation.
53  *
54  * @category   Testing
55  * @package    PHPUnit
56  * @author     Sebastian Bergmann <sb@sebastian-bergmann.de>
57  * @copyright  2002-2009 Sebastian Bergmann <sb@sebastian-bergmann.de>
58  * @license    http://www.opensource.org/licenses/bsd-license.php  BSD License
59  * @version    Release: 3.3.17
60  * @link       http://www.phpunit.de/
61  * @since      Class available since Release 3.0.0
62  */
63 class PHPUnit_Util_Type
64 {
65     public static function isType($type)
66     {
67         return in_array(
68           $type,
69           array(
70             'numeric',
71             'integer',
72             'int',
73             'float',
74             'string',
75             'boolean',
76             'bool',
77             'null',
78             'array',
79             'object',
80             'resource'
81           )
82         );
83     }
84
85     public static function shortenedExport($value)
86     {
87         if (is_string($value)) {
88             return self::shortenedString($value);
89         }
90
91         elseif (is_array($value)) {
92             if (count($value) == 0) {
93                 return 'array()';
94             }
95
96             $a1 = array_slice($value, 0, 1, TRUE);
97             $k1 = key($a1);
98             $v1 = $a1[$k1];
99
100             if (is_string($v1)) {
101                 $v1 = self::shortenedString($v1);
102             }
103
104             elseif (is_array($v1)) {
105                 $v1 = 'array(...)';
106             } else {
107                 $v1 = self::toString($v1);
108             }
109
110             $a2 = FALSE;
111
112             if (count($value) > 1) {
113                 $a2 = array_slice($value, -1, 1, TRUE);
114                 $k2 = key($a2);
115                 $v2 = $a2[$k2];
116
117                 if (is_string($v2)) {
118                     $v2 = self::shortenedString($v2);
119                 }
120
121                 elseif (is_array($v2)) {
122                     $v2 = 'array(...)';
123                 } else {
124                     $v2 = self::toString($v2);
125                 }
126             }
127
128             $text = 'array( ' . self::toString($k1) . ' => ' . $v1;
129
130             if ($a2 !== FALSE) {
131                 $text .= ', ..., ' . self::toString($k2) . ' => ' . $v2 . ' )';
132             } else {
133                 $text .= ' )';
134             }
135
136             return $text;
137         }
138
139         elseif (is_object($value)) {
140             return get_class($value) . '(...)';
141         }
142
143         return self::toString($value);
144     }
145
146     public static function shortenedString($string)
147     {
148         $string = preg_replace('#\n|\r\n|\r#', ' ', $string);
149
150         if (strlen($string) > 14) {
151             return PHPUnit_Util_Type::toString(
152               substr($string, 0, 7) . '...' . substr($string, -7)
153             );
154         } else {
155             return PHPUnit_Util_Type::toString($string);
156         }
157     }
158
159     public static function toString($value, $short = FALSE)
160     {
161         if (is_array($value) || is_object($value)) {
162             if (!$short) {
163                 return "\n" . print_r($value, TRUE);
164             } else {
165                 if (is_array($value)) {
166                     return '<array>';
167                 } else {
168                     return '<' . get_class($value) . '>';
169                 }
170             }
171         }
172
173         if (is_string($value) && strpos($value, "\n") !== FALSE) {
174             return '<text>';
175         }
176
177         if (!is_null($value)) {
178             $type = gettype($value) . ':';
179         } else {
180             $type  = '';
181             $value = 'null';
182         }
183
184         if (is_bool($value)) {
185             if ($value === TRUE) {
186                 $value = 'true';
187             }
188
189             else if ($value === FALSE) {
190                 $value = 'false';
191             }
192         }
193
194         return '<' . $type . $value . '>';
195     }
196 }
197 ?>