Version 1
[yaffs-website] / vendor / phpspec / prophecy / src / Prophecy / Prophet.php
diff --git a/vendor/phpspec/prophecy/src/Prophecy/Prophet.php b/vendor/phpspec/prophecy/src/Prophecy/Prophet.php
new file mode 100644 (file)
index 0000000..ac64923
--- /dev/null
@@ -0,0 +1,134 @@
+<?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;
+        }
+    }
+}