/vendor/phpspec/prophecy/src/Prophecy/Promise/ThrowPromise.php
https://bitbucket.org/alan_cordova/api-sb-map · PHP · 99 lines · 49 code · 13 blank · 37 comment · 10 complexity · cb16ee4e1d47678f92b6588dcded4f03 MD5 · raw file
- <?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|\Throwable $exception Exception class name or instance
- *
- * @throws \Prophecy\Exception\InvalidArgumentException
- */
- public function __construct($exception)
- {
- if (is_string($exception)) {
- if (!class_exists($exception) || !$this->isAValidThrowable($exception)) {
- throw new InvalidArgumentException(sprintf(
- 'Exception / Throwable class or instance expected as argument to ThrowPromise, but got %s.',
- $exception
- ));
- }
- } elseif (!$exception instanceof \Exception && !$exception instanceof \Throwable) {
- throw new InvalidArgumentException(sprintf(
- 'Exception / Throwable class or instance expected as argument to ThrowPromise, but got %s.',
- is_object($exception) ? get_class($exception) : 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;
- }
- /**
- * @param string $exception
- *
- * @return bool
- */
- private function isAValidThrowable($exception)
- {
- return is_a($exception, 'Exception', true) || is_subclass_of($exception, 'Throwable', true);
- }
- }