class ExpectationException
Exception thrown for failed expectations.
Some specialized child classes are available to customize the error rendering.
@author Konstantin Kudryashov <ever.zet@gmail.com>
Hierarchy
- class \Behat\Mink\Exception\Exception extends \Behat\Mink\Exception\Exception
- class \Behat\Mink\Exception\Exception extends \Behat\Mink\Exception\Exception
- class \Behat\Mink\Exception\ExpectationException extends \Behat\Mink\Exception\Exception
- class \Behat\Mink\Exception\Exception extends \Behat\Mink\Exception\Exception
Expanded class hierarchy of ExpectationException
1 file declares its use of ExpectationException
- WebAssert.php in vendor/
behat/ mink/ src/ WebAssert.php
File
-
vendor/
behat/ mink/ src/ Exception/ ExpectationException.php, line 23
Namespace
Behat\Mink\ExceptionView source
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 <body /> content.
*
* @param string $string response content
*
* @return string
*/
protected function trimBody($string) {
$string = preg_replace(array(
'/^.*<body>/s',
'/<\\/body>.*$/s',
), array(
'<body>',
'</body>',
), $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;
}
}
Members
Title Sort descending | Deprecated | Modifiers | Object type | Summary | Overrides |
---|---|---|---|---|---|
ExpectationException::$driver | private | property | |||
ExpectationException::$session | private | property | |||
ExpectationException::getContext | protected | function | Gets the context rendered for this exception. | 2 | |
ExpectationException::getDriver | protected | function | Returns driver. | ||
ExpectationException::getResponseInfo | protected | function | Returns response information string. | ||
ExpectationException::getSession | Deprecated | protected | function | Returns exception session. | |
ExpectationException::pipeString | protected | function | Prepends every line in a string with pipe (|). | ||
ExpectationException::trimBody | protected | function | Removes response header/footer, letting only <body /> content. | ||
ExpectationException::trimString | protected | function | Trims string to specified number of chars. | ||
ExpectationException::__construct | public | function | Initializes exception. | 2 | |
ExpectationException::__toString | public | function | Returns exception message with additional context info. |