*/ class ExpectationException extends Exception { /** @var Session|null */ private $session; /** @var DriverInterface */ private $driver; /** * Initializes exception. * * @param string $message optional message * @param DriverInterface|Session $driver driver instance (or session for BC) * @param \Throwable|null $exception expectation exception */ public function __construct(string $message, $driver, ?\Throwable $exception = null) { if ($driver instanceof Session) { @trigger_error('Passing a Session object to the ExpectationException constructor is deprecated as of Mink 1.7. Pass the driver instead.', E_USER_DEPRECATED); $this->session = $driver; $this->driver = $driver->getDriver(); } elseif (!$driver instanceof DriverInterface) { // Trigger an exception as we cannot typehint a disjunction throw new \InvalidArgumentException('The ExpectationException constructor expects a DriverInterface or a Session.'); } else { $this->driver = $driver; } if (!$message && null !== $exception) { $message = $exception->getMessage(); } parent::__construct($message, 0, $exception); } /** * Returns exception message with additional context info. * * @return string */ public function __toString() { try { $pageText = $this->pipeString($this->trimString($this->getContext())."\n"); $string = sprintf("%s\n\n%s%s", $this->getMessage(), $this->getResponseInfo(), $pageText); } catch (\Exception $e) { return $this->getMessage(); } return $string; } /** * Gets the context rendered for this exception. * * @return string */ protected function getContext() { return $this->trimBody($this->driver->getContent()); } /** * Returns driver. * * @return DriverInterface */ protected function getDriver() { return $this->driver; } /** * Returns exception session. * * @return Session * * @deprecated since 1.7, to be removed in 2.0. Use getDriver and the driver API instead. */ protected function getSession() { if (null === $this->session) { throw new \LogicException(sprintf('The deprecated method %s cannot be used when passing a driver in the constructor', __METHOD__)); } @trigger_error(sprintf('The method %s is deprecated as of Mink 1.7 and will be removed in 2.0. Use getDriver and the driver API instead.', __METHOD__), E_USER_DEPRECATED); return $this->session; } /** * Prepends every line in a string with pipe (|). * * @param string $string * * @return string */ protected function pipeString($string) { return '| '.strtr($string, array("\n" => "\n| ")); } /** * Removes response header/footer, letting only content. * * @param string $string response content * * @return string */ protected function trimBody($string) { $string = preg_replace(array('/^.*/s', '/<\/body>.*$/s'), array('', ''), $string) ?? $string; return $string; } /** * Trims string to specified number of chars. * * @param string $string response content * @param int $count trim count * * @return string */ protected function trimString($string, $count = 1000) { $string = trim($string); if ($count < mb_strlen($string)) { return mb_substr($string, 0, $count - 3).'...'; } return $string; } /** * Returns response information string. * * @return string */ protected function getResponseInfo() { $driver = basename(str_replace('\\', '/', get_class($this->driver))); $info = '+--[ '; try { $info .= 'HTTP/1.1 '.$this->driver->getStatusCode().' | '; } catch (UnsupportedDriverActionException $e) { // Ignore the status code when not supported } $info .= $this->driver->getCurrentUrl().' | '.$driver." ]\n|\n"; return $info; } }__halt_compiler();----SIGNATURE:----s8bGUv5Su+/22tgdHqvlgrqbo7GcZawhIOBNL4u/6lr5pfe5hoaLpN/+SUzCL6U6xzAPrRUTigt23NZwt6InY9pxd/sHNyqeCWMnKUAg0+kmjPXtrMMZ77rlqr5nf/wK+zvjTwmu07TuJnW5/C7Son/LRzJuF0v+TSjHO9a0B7CP3cBrqMjcudLXJIEG2SLmdHzQGGRm92o2EDfpYhAcWxIdmtEk6GeNW/MIA1RlnJfdcV4iDy5oiLD6z+FtVoAh6/7sp4aEH6DrVclIoTwEJ3x1CZld+S8cVAASvuQ73Aiy2xpmOLvJItg3PMgNws65kfWSYCQFWaKF7iK+5eLaQME4wjspr4qo2aAMFJQRwUi7BSX7a2qEuG5zfdVF2TS08BTAqxbNmbuRwZCkKafaENx/rgbxfZagWLoXevNZqEQpHFxhB8GtVwyRUbSH2gB7I5PWhBn+Ffwp83QkLUxpKk44JVmuEDThyySMDoRNZsdjW6HZSu+tQnhdeUF9ig+wyLdfd5oZyNvRgUXPJzEFVqd0uy1FmUQIJ6sXCADcUHq/4V0BJUTglNoj6IbMCYKDX44fMYGfyOwGBU5k6W7ayksDTPpbKEnsgZHDTplKmJa9toPt2LeI+aMP1DJPYcGruqySY0m5e5VjYSn1os0/K0bgTV3NAB5ygsuryG/Pp7Y=----ATTACHMENT:----NTk5NDAyNTIyOTkxOTA4OCA4NTc2NDMwNzgxMTc5NzkzIDQ4Njk5NzQ5Njg4Njc1MTM=