Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x
  2. ExpectationException.php

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

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\Exception
View 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 &lt;body /&gt; 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.

API Navigation

  • Drupal Core 11.1.x
  • Topics
  • Classes
  • Functions
  • Constants
  • Globals
  • Files
  • Namespaces
  • Deprecated
  • Services
RSS feed
Powered by Drupal