Chris@0: Chris@0: * Marcello Duarte Chris@0: * Chris@0: * For the full copyright and license information, please view the LICENSE Chris@0: * file that was distributed with this source code. Chris@0: */ Chris@0: Chris@0: namespace Prophecy\Util; Chris@0: Chris@0: use Prophecy\Call\Call; Chris@0: Chris@0: /** Chris@0: * String utility. Chris@0: * Chris@0: * @author Konstantin Kudryashov Chris@0: */ Chris@0: class StringUtil Chris@0: { Chris@17: private $verbose; Chris@17: Chris@17: /** Chris@17: * @param bool $verbose Chris@17: */ Chris@17: public function __construct($verbose = true) Chris@17: { Chris@17: $this->verbose = $verbose; Chris@17: } Chris@17: Chris@0: /** Chris@0: * Stringifies any provided value. Chris@0: * Chris@0: * @param mixed $value Chris@0: * @param boolean $exportObject Chris@0: * Chris@0: * @return string Chris@0: */ Chris@0: public function stringify($value, $exportObject = true) Chris@0: { Chris@0: if (is_array($value)) { Chris@0: if (range(0, count($value) - 1) === array_keys($value)) { Chris@0: return '['.implode(', ', array_map(array($this, __FUNCTION__), $value)).']'; Chris@0: } Chris@0: Chris@0: $stringify = array($this, __FUNCTION__); Chris@0: Chris@0: return '['.implode(', ', array_map(function ($item, $key) use ($stringify) { Chris@0: return (is_integer($key) ? $key : '"'.$key.'"'). Chris@0: ' => '.call_user_func($stringify, $item); Chris@0: }, $value, array_keys($value))).']'; Chris@0: } Chris@0: if (is_resource($value)) { Chris@0: return get_resource_type($value).':'.$value; Chris@0: } Chris@0: if (is_object($value)) { Chris@0: return $exportObject ? ExportUtil::export($value) : sprintf('%s:%s', get_class($value), spl_object_hash($value)); Chris@0: } Chris@0: if (true === $value || false === $value) { Chris@0: return $value ? 'true' : 'false'; Chris@0: } Chris@0: if (is_string($value)) { Chris@0: $str = sprintf('"%s"', str_replace("\n", '\\n', $value)); Chris@0: Chris@17: if (!$this->verbose && 50 <= strlen($str)) { Chris@0: return substr($str, 0, 50).'"...'; Chris@0: } Chris@0: Chris@0: return $str; Chris@0: } Chris@0: if (null === $value) { Chris@0: return 'null'; Chris@0: } Chris@0: Chris@0: return (string) $value; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Stringifies provided array of calls. Chris@0: * Chris@0: * @param Call[] $calls Array of Call instances Chris@0: * Chris@0: * @return string Chris@0: */ Chris@0: public function stringifyCalls(array $calls) Chris@0: { Chris@0: $self = $this; Chris@0: Chris@0: return implode(PHP_EOL, array_map(function (Call $call) use ($self) { Chris@0: return sprintf(' - %s(%s) @ %s', Chris@0: $call->getMethodName(), Chris@0: implode(', ', array_map(array($self, 'stringify'), $call->getArguments())), Chris@0: str_replace(GETCWD().DIRECTORY_SEPARATOR, '', $call->getCallPlace()) Chris@0: ); Chris@0: }, $calls)); Chris@0: } Chris@0: }