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