![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/vendor/allure-framework/allure-codeception/src/Internal/ |
<?php declare(strict_types=1); namespace Qameta\Allure\Codeception\Internal; use InvalidArgumentException; use Stringable; use function array_map; use function class_exists; use function is_a; use function is_array; use function is_object; use function is_resource; use function is_string; use function json_encode; use function method_exists; use function strtr; use function trim; /** * @internal */ final class ArgumentAsString implements Stringable { public function __construct( private mixed $argument, ) { } public static function get(mixed $argument): string { return (string) new self($argument); } private function prepareArgument(mixed $argument): mixed { return match (true) { is_string($argument) => $this->prepareString($argument), is_resource($argument) => $this->prepareResource($argument), is_array($argument) => $this->prepareArray($argument), is_object($argument) => $this->prepareObject($argument), default => $argument, }; } private function prepareString(string $argument): string { return strtr($argument, ["\n" => '\n', "\r" => '\r', "\t" => ' ']); } /** * @param resource $argument * @return string */ private function prepareResource($argument): string { return (string) $argument; } private function prepareArray(array $argument): array { return array_map( fn(mixed $element): mixed => $this->prepareArgument($element), $argument, ); } private function isClosure(object $argument): bool { return $argument instanceof \Closure; } private function prepareObject(object $argument): string { if (!$this->isClosure($argument) && isset($argument->__mocked) && is_object($argument->__mocked)) { $argument = $argument->__mocked; } if ($argument instanceof Stringable) { return (string) $argument; } $webdriverByClass = '\Facebook\WebDriver\WebDriverBy'; if (class_exists($webdriverByClass) && is_a($argument, $webdriverByClass)) { return $this->webDriverByAsString($argument); } return trim($argument::class, "\\"); } public function __toString(): string { return json_encode( $this->prepareArgument($this->argument), JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES, ); } private function webDriverByAsString(object $selector): string { $type = method_exists($selector, 'getMechanism') ? (string) $selector->getMechanism() : null; $locator = method_exists($selector, 'getValue') ? (string) $selector->getValue() : null; if (!isset($type, $locator)) { throw new InvalidArgumentException("Unrecognized selector"); } return "$type '$locator'"; } }