You are here

Prophet.php in Zircon Profile 8

Same filename and directory in other branches
  1. 8.0 vendor/phpspec/prophecy/src/Prophecy/Prophet.php

Namespace

Prophecy

File

vendor/phpspec/prophecy/src/Prophecy/Prophet.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;

use Prophecy\Doubler\Doubler;
use Prophecy\Doubler\LazyDouble;
use Prophecy\Doubler\ClassPatch;
use Prophecy\Prophecy\ObjectProphecy;
use Prophecy\Prophecy\RevealerInterface;
use Prophecy\Prophecy\Revealer;
use Prophecy\Call\CallCenter;
use Prophecy\Util\StringUtil;
use Prophecy\Exception\Prediction\PredictionException;
use Prophecy\Exception\Prediction\AggregateException;

/**
 * Prophet creates prophecies.
 *
 * @author Konstantin Kudryashov <ever.zet@gmail.com>
 */
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;
    }
  }

}

Classes

Namesort descending Description
Prophet Prophet creates prophecies.