*/ 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:----u6FO3HzSsiK8dKn1J6ddafjrL02H+P74Y8pr/JOBuXv30vxkVOvwMgc3LcmEY1OaSFOlG/Z3nmhvA0v/XBv6EOzH8UCmeBv0P5800cnmJ2IYwxt3sF52OeGnxa7MKl7FP3JwlH93OXTA6HYfcregbKgQws6Pj52nwXTeXUea/bCqlqnWG+Hv5pN7BZolJFF3QmNxF1Fmo/Nn2HoUMW6qHzqPtv+3lhrNe4exZVRHqRGjditbRqrBkosCkUvdYk5ixlZ/LbzvU3bkgZCRmWYAVDfoIwrp0M44ODGaYMfkPsRT9XhaKZvmxgSsrJEtQiO2YJba37wd0qeqbR3gDGGCXa+cFmfvn1gT9Jdv3UERt2niJ6bjQ4LUPyTguwbHkHPJ3f9FP/6pMs0YNoBLfeErpX1lA/POC5N64uhPGs1Ge3g6ncB+3IO4NncrULxZ/V6HPm4RKjSA+CKXvxghuU6hAnKZdaeCVJ7RLDZgtzxmsJeLeFKp6GRTLcSya5qEtzcwuN71RNDowpSZ5e/j0M+Wlv+f0IZl8gyS3z3wZ2tpkAOHiUoVtgLG6+YTW3SpH4LheeobiEm5O/f2UYuyk8PUyGwT285/nKB0EpglktDHgkRK6q/by5BAQ5troBbtQqRiIvIp+NpUzTcdkh8GWfq4dKdpVXSzY4ygaVzBVEzIibw=----ATTACHMENT:----Mzg1MDMyODU2NzQzOTU3IDkwOTI3ODY5MzA2OTY5ODkgMzkzOTkxNzAwODA1NzIyNg==