Chris@0
|
1 <?php
|
Chris@0
|
2
|
Chris@0
|
3 /*
|
Chris@0
|
4 * This file is part of the Prophecy.
|
Chris@0
|
5 * (c) Konstantin Kudryashov <ever.zet@gmail.com>
|
Chris@0
|
6 * Marcello Duarte <marcello.duarte@gmail.com>
|
Chris@0
|
7 *
|
Chris@0
|
8 * For the full copyright and license information, please view the LICENSE
|
Chris@0
|
9 * file that was distributed with this source code.
|
Chris@0
|
10 */
|
Chris@0
|
11
|
Chris@0
|
12 namespace Prophecy\Util;
|
Chris@0
|
13
|
Chris@0
|
14 use Prophecy\Call\Call;
|
Chris@0
|
15
|
Chris@0
|
16 /**
|
Chris@0
|
17 * String utility.
|
Chris@0
|
18 *
|
Chris@0
|
19 * @author Konstantin Kudryashov <ever.zet@gmail.com>
|
Chris@0
|
20 */
|
Chris@0
|
21 class StringUtil
|
Chris@0
|
22 {
|
Chris@17
|
23 private $verbose;
|
Chris@17
|
24
|
Chris@17
|
25 /**
|
Chris@17
|
26 * @param bool $verbose
|
Chris@17
|
27 */
|
Chris@17
|
28 public function __construct($verbose = true)
|
Chris@17
|
29 {
|
Chris@17
|
30 $this->verbose = $verbose;
|
Chris@17
|
31 }
|
Chris@17
|
32
|
Chris@0
|
33 /**
|
Chris@0
|
34 * Stringifies any provided value.
|
Chris@0
|
35 *
|
Chris@0
|
36 * @param mixed $value
|
Chris@0
|
37 * @param boolean $exportObject
|
Chris@0
|
38 *
|
Chris@0
|
39 * @return string
|
Chris@0
|
40 */
|
Chris@0
|
41 public function stringify($value, $exportObject = true)
|
Chris@0
|
42 {
|
Chris@0
|
43 if (is_array($value)) {
|
Chris@0
|
44 if (range(0, count($value) - 1) === array_keys($value)) {
|
Chris@0
|
45 return '['.implode(', ', array_map(array($this, __FUNCTION__), $value)).']';
|
Chris@0
|
46 }
|
Chris@0
|
47
|
Chris@0
|
48 $stringify = array($this, __FUNCTION__);
|
Chris@0
|
49
|
Chris@0
|
50 return '['.implode(', ', array_map(function ($item, $key) use ($stringify) {
|
Chris@0
|
51 return (is_integer($key) ? $key : '"'.$key.'"').
|
Chris@0
|
52 ' => '.call_user_func($stringify, $item);
|
Chris@0
|
53 }, $value, array_keys($value))).']';
|
Chris@0
|
54 }
|
Chris@0
|
55 if (is_resource($value)) {
|
Chris@0
|
56 return get_resource_type($value).':'.$value;
|
Chris@0
|
57 }
|
Chris@0
|
58 if (is_object($value)) {
|
Chris@0
|
59 return $exportObject ? ExportUtil::export($value) : sprintf('%s:%s', get_class($value), spl_object_hash($value));
|
Chris@0
|
60 }
|
Chris@0
|
61 if (true === $value || false === $value) {
|
Chris@0
|
62 return $value ? 'true' : 'false';
|
Chris@0
|
63 }
|
Chris@0
|
64 if (is_string($value)) {
|
Chris@0
|
65 $str = sprintf('"%s"', str_replace("\n", '\\n', $value));
|
Chris@0
|
66
|
Chris@17
|
67 if (!$this->verbose && 50 <= strlen($str)) {
|
Chris@0
|
68 return substr($str, 0, 50).'"...';
|
Chris@0
|
69 }
|
Chris@0
|
70
|
Chris@0
|
71 return $str;
|
Chris@0
|
72 }
|
Chris@0
|
73 if (null === $value) {
|
Chris@0
|
74 return 'null';
|
Chris@0
|
75 }
|
Chris@0
|
76
|
Chris@0
|
77 return (string) $value;
|
Chris@0
|
78 }
|
Chris@0
|
79
|
Chris@0
|
80 /**
|
Chris@0
|
81 * Stringifies provided array of calls.
|
Chris@0
|
82 *
|
Chris@0
|
83 * @param Call[] $calls Array of Call instances
|
Chris@0
|
84 *
|
Chris@0
|
85 * @return string
|
Chris@0
|
86 */
|
Chris@0
|
87 public function stringifyCalls(array $calls)
|
Chris@0
|
88 {
|
Chris@0
|
89 $self = $this;
|
Chris@0
|
90
|
Chris@0
|
91 return implode(PHP_EOL, array_map(function (Call $call) use ($self) {
|
Chris@0
|
92 return sprintf(' - %s(%s) @ %s',
|
Chris@0
|
93 $call->getMethodName(),
|
Chris@0
|
94 implode(', ', array_map(array($self, 'stringify'), $call->getArguments())),
|
Chris@0
|
95 str_replace(GETCWD().DIRECTORY_SEPARATOR, '', $call->getCallPlace())
|
Chris@0
|
96 );
|
Chris@0
|
97 }, $calls));
|
Chris@0
|
98 }
|
Chris@0
|
99 }
|