You are here

class Prophet in Zircon Profile 8

Same name and namespace in other branches
  1. 8.0 vendor/phpspec/prophecy/src/Prophecy/Prophet.php \Prophecy\Prophet

Prophet creates prophecies.

@author Konstantin Kudryashov <ever.zet@gmail.com>

Hierarchy

Expanded class hierarchy of Prophet

2 files declare their use of Prophet
MethodProphecy.php in vendor/phpspec/prophecy/src/Prophecy/Prophecy/MethodProphecy.php
TestCase.php in vendor/phpunit/phpunit/src/Framework/TestCase.php

File

vendor/phpspec/prophecy/src/Prophecy/Prophet.php, line 30

Namespace

Prophecy
View source
class Prophet {
  private $doubler;
  private $revealer;
  private $util;

  /**
   * @var ObjectProphecy[]
   */
  private $prophecies = array();

  /**
   * Initializes Prophet.
   *
   * @param null|Doubler           $doubler
   * @param null|RevealerInterface $revealer
   * @param null|StringUtil        $util
   */
  public function __construct(Doubler $doubler = null, RevealerInterface $revealer = null, StringUtil $util = null) {
    if (null === $doubler) {
      $doubler = new Doubler();
      $doubler
        ->registerClassPatch(new ClassPatch\SplFileInfoPatch());
      $doubler
        ->registerClassPatch(new ClassPatch\TraversablePatch());
      $doubler
        ->registerClassPatch(new ClassPatch\DisableConstructorPatch());
      $doubler
        ->registerClassPatch(new ClassPatch\ProphecySubjectPatch());
      $doubler
        ->registerClassPatch(new ClassPatch\ReflectionClassNewInstancePatch());
      $doubler
        ->registerClassPatch(new ClassPatch\HhvmExceptionPatch());
      $doubler
        ->registerClassPatch(new ClassPatch\MagicCallPatch());
      $doubler
        ->registerClassPatch(new ClassPatch\KeywordPatch());
    }
    $this->doubler = $doubler;
    $this->revealer = $revealer ?: new Revealer();
    $this->util = $util ?: new StringUtil();
  }

  /**
   * Creates new object prophecy.
   *
   * @param null|string $classOrInterface Class or interface name
   *
   * @return ObjectProphecy
   */
  public function prophesize($classOrInterface = null) {
    $this->prophecies[] = $prophecy = new ObjectProphecy(new LazyDouble($this->doubler), new CallCenter($this->util), $this->revealer);
    if ($classOrInterface && class_exists($classOrInterface)) {
      return $prophecy
        ->willExtend($classOrInterface);
    }
    if ($classOrInterface && interface_exists($classOrInterface)) {
      return $prophecy
        ->willImplement($classOrInterface);
    }
    return $prophecy;
  }

  /**
   * Returns all created object prophecies.
   *
   * @return ObjectProphecy[]
   */
  public function getProphecies() {
    return $this->prophecies;
  }

  /**
   * Returns Doubler instance assigned to this Prophet.
   *
   * @return Doubler
   */
  public function getDoubler() {
    return $this->doubler;
  }

  /**
   * Checks all predictions defined by prophecies of this Prophet.
   *
   * @throws Exception\Prediction\AggregateException If any prediction fails
   */
  public function checkPredictions() {
    $exception = new AggregateException("Some predictions failed:\n");
    foreach ($this->prophecies as $prophecy) {
      try {
        $prophecy
          ->checkProphecyMethodsPredictions();
      } catch (PredictionException $e) {
        $exception
          ->append($e);
      }
    }
    if (count($exception
      ->getExceptions())) {
      throw $exception;
    }
  }

}

Members

Namesort descending Modifiers Type Description Overrides
Prophet::$doubler private property
Prophet::$prophecies private property
Prophet::$revealer private property
Prophet::$util private property
Prophet::checkPredictions public function Checks all predictions defined by prophecies of this Prophet.
Prophet::getDoubler public function Returns Doubler instance assigned to this Prophet.
Prophet::getProphecies public function Returns all created object prophecies.
Prophet::prophesize public function Creates new object prophecy.
Prophet::__construct public function Initializes Prophet.