You are here

ThrowPromise.php in Zircon Profile 8.0

Same filename and directory in other branches
  1. 8 vendor/phpspec/prophecy/src/Prophecy/Promise/ThrowPromise.php

Namespace

Prophecy\Promise

File

vendor/phpspec/prophecy/src/Prophecy/Promise/ThrowPromise.php
View source
<?php

/*
 * This file is part of the Prophecy.
 * (c) Konstantin Kudryashov <ever.zet@gmail.com>
 *     Marcello Duarte <marcello.duarte@gmail.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */
namespace Prophecy\Promise;

use Doctrine\Instantiator\Instantiator;
use Prophecy\Prophecy\ObjectProphecy;
use Prophecy\Prophecy\MethodProphecy;
use Prophecy\Exception\InvalidArgumentException;
use ReflectionClass;

/**
 * Throw promise.
 *
 * @author Konstantin Kudryashov <ever.zet@gmail.com>
 */
class ThrowPromise implements PromiseInterface {
  private $exception;

  /**
   * @var \Doctrine\Instantiator\Instantiator
   */
  private $instantiator;

  /**
   * Initializes promise.
   *
   * @param string|\Exception $exception Exception class name or instance
   *
   * @throws \Prophecy\Exception\InvalidArgumentException
   */
  public function __construct($exception) {
    if (is_string($exception)) {
      if (!class_exists($exception) && 'Exception' !== $exception && !is_subclass_of($exception, 'Exception')) {
        throw new InvalidArgumentException(sprintf('Exception class or instance expected as argument to ThrowPromise, but got %s.', gettype($exception)));
      }
    }
    elseif (!$exception instanceof \Exception) {
      throw new InvalidArgumentException(sprintf('Exception class or instance expected as argument to ThrowPromise, but got %s.', gettype($exception)));
    }
    $this->exception = $exception;
  }

  /**
   * Throws predefined exception.
   *
   * @param array          $args
   * @param ObjectProphecy $object
   * @param MethodProphecy $method
   *
   * @throws object
   */
  public function execute(array $args, ObjectProphecy $object, MethodProphecy $method) {
    if (is_string($this->exception)) {
      $classname = $this->exception;
      $reflection = new ReflectionClass($classname);
      $constructor = $reflection
        ->getConstructor();
      if ($constructor
        ->isPublic() && 0 == $constructor
        ->getNumberOfRequiredParameters()) {
        throw $reflection
          ->newInstance();
      }
      if (!$this->instantiator) {
        $this->instantiator = new Instantiator();
      }
      throw $this->instantiator
        ->instantiate($classname);
    }
    throw $this->exception;
  }

}

Classes

Namesort descending Description
ThrowPromise Throw promise.