Version 1
[yaffs-website] / vendor / phpunit / phpunit-mock-objects / src / Framework / MockObject / Matcher.php
diff --git a/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher.php b/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher.php
new file mode 100644 (file)
index 0000000..da3bcde
--- /dev/null
@@ -0,0 +1,271 @@
+<?php
+/*
+ * This file is part of the PHPUnit_MockObject package.
+ *
+ * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Main matcher which defines a full expectation using method, parameter and
+ * invocation matchers.
+ * This matcher encapsulates all the other matchers and allows the builder to
+ * set the specific matchers when the appropriate methods are called (once(),
+ * where() etc.).
+ *
+ * All properties are public so that they can easily be accessed by the builder.
+ *
+ * @since Class available since Release 1.0.0
+ */
+class PHPUnit_Framework_MockObject_Matcher implements PHPUnit_Framework_MockObject_Matcher_Invocation
+{
+    /**
+     * @var PHPUnit_Framework_MockObject_Matcher_Invocation
+     */
+    public $invocationMatcher;
+
+    /**
+     * @var mixed
+     */
+    public $afterMatchBuilderId = null;
+
+    /**
+     * @var bool
+     */
+    public $afterMatchBuilderIsInvoked = false;
+
+    /**
+     * @var PHPUnit_Framework_MockObject_Matcher_MethodName
+     */
+    public $methodNameMatcher = null;
+
+    /**
+     * @var PHPUnit_Framework_MockObject_Matcher_Parameters
+     */
+    public $parametersMatcher = null;
+
+    /**
+     * @var PHPUnit_Framework_MockObject_Stub
+     */
+    public $stub = null;
+
+    /**
+     * @param PHPUnit_Framework_MockObject_Matcher_Invocation $invocationMatcher
+     */
+    public function __construct(PHPUnit_Framework_MockObject_Matcher_Invocation $invocationMatcher)
+    {
+        $this->invocationMatcher = $invocationMatcher;
+    }
+
+    /**
+     * @return string
+     */
+    public function toString()
+    {
+        $list = array();
+
+        if ($this->invocationMatcher !== null) {
+            $list[] = $this->invocationMatcher->toString();
+        }
+
+        if ($this->methodNameMatcher !== null) {
+            $list[] = 'where ' . $this->methodNameMatcher->toString();
+        }
+
+        if ($this->parametersMatcher !== null) {
+            $list[] = 'and ' . $this->parametersMatcher->toString();
+        }
+
+        if ($this->afterMatchBuilderId !== null) {
+            $list[] = 'after ' . $this->afterMatchBuilderId;
+        }
+
+        if ($this->stub !== null) {
+            $list[] = 'will ' . $this->stub->toString();
+        }
+
+        return implode(' ', $list);
+    }
+
+    /**
+     * @param  PHPUnit_Framework_MockObject_Invocation $invocation
+     * @return mixed
+     */
+    public function invoked(PHPUnit_Framework_MockObject_Invocation $invocation)
+    {
+        if ($this->invocationMatcher === null) {
+            throw new PHPUnit_Framework_Exception(
+                'No invocation matcher is set'
+            );
+        }
+
+        if ($this->methodNameMatcher === null) {
+            throw new PHPUnit_Framework_Exception('No method matcher is set');
+        }
+
+        if ($this->afterMatchBuilderId !== null) {
+            $builder = $invocation->object
+                                  ->__phpunit_getInvocationMocker()
+                                  ->lookupId($this->afterMatchBuilderId);
+
+            if (!$builder) {
+                throw new PHPUnit_Framework_Exception(
+                    sprintf(
+                        'No builder found for match builder identification <%s>',
+                        $this->afterMatchBuilderId
+                    )
+                );
+            }
+
+            $matcher = $builder->getMatcher();
+
+            if ($matcher && $matcher->invocationMatcher->hasBeenInvoked()) {
+                $this->afterMatchBuilderIsInvoked = true;
+            }
+        }
+
+        $this->invocationMatcher->invoked($invocation);
+
+        try {
+            if ($this->parametersMatcher !== null &&
+                !$this->parametersMatcher->matches($invocation)) {
+                $this->parametersMatcher->verify();
+            }
+        } catch (PHPUnit_Framework_ExpectationFailedException $e) {
+            throw new PHPUnit_Framework_ExpectationFailedException(
+                sprintf(
+                    "Expectation failed for %s when %s\n%s",
+                    $this->methodNameMatcher->toString(),
+                    $this->invocationMatcher->toString(),
+                    $e->getMessage()
+                ),
+                $e->getComparisonFailure()
+            );
+        }
+
+        if ($this->stub) {
+            return $this->stub->invoke($invocation);
+        }
+
+        return;
+    }
+
+    /**
+     * @param  PHPUnit_Framework_MockObject_Invocation $invocation
+     * @return bool
+     */
+    public function matches(PHPUnit_Framework_MockObject_Invocation $invocation)
+    {
+        if ($this->afterMatchBuilderId !== null) {
+            $builder = $invocation->object
+                                  ->__phpunit_getInvocationMocker()
+                                  ->lookupId($this->afterMatchBuilderId);
+
+            if (!$builder) {
+                throw new PHPUnit_Framework_Exception(
+                    sprintf(
+                        'No builder found for match builder identification <%s>',
+                        $this->afterMatchBuilderId
+                    )
+                );
+            }
+
+            $matcher = $builder->getMatcher();
+
+            if (!$matcher) {
+                return false;
+            }
+
+            if (!$matcher->invocationMatcher->hasBeenInvoked()) {
+                return false;
+            }
+        }
+
+        if ($this->invocationMatcher === null) {
+            throw new PHPUnit_Framework_Exception(
+                'No invocation matcher is set'
+            );
+        }
+
+        if ($this->methodNameMatcher === null) {
+            throw new PHPUnit_Framework_Exception('No method matcher is set');
+        }
+
+        if (!$this->invocationMatcher->matches($invocation)) {
+            return false;
+        }
+
+        try {
+            if (!$this->methodNameMatcher->matches($invocation)) {
+                return false;
+            }
+        } catch (PHPUnit_Framework_ExpectationFailedException $e) {
+            throw new PHPUnit_Framework_ExpectationFailedException(
+                sprintf(
+                    "Expectation failed for %s when %s\n%s",
+                    $this->methodNameMatcher->toString(),
+                    $this->invocationMatcher->toString(),
+                    $e->getMessage()
+                ),
+                $e->getComparisonFailure()
+            );
+        }
+
+        return true;
+    }
+
+    /**
+     * @throws PHPUnit_Framework_Exception
+     * @throws PHPUnit_Framework_ExpectationFailedException
+     */
+    public function verify()
+    {
+        if ($this->invocationMatcher === null) {
+            throw new PHPUnit_Framework_Exception(
+                'No invocation matcher is set'
+            );
+        }
+
+        if ($this->methodNameMatcher === null) {
+            throw new PHPUnit_Framework_Exception('No method matcher is set');
+        }
+
+        try {
+            $this->invocationMatcher->verify();
+
+            if ($this->parametersMatcher === null) {
+                $this->parametersMatcher = new PHPUnit_Framework_MockObject_Matcher_AnyParameters;
+            }
+
+            $invocationIsAny   = get_class($this->invocationMatcher) === 'PHPUnit_Framework_MockObject_Matcher_AnyInvokedCount';
+            $invocationIsNever = get_class($this->invocationMatcher) === 'PHPUnit_Framework_MockObject_Matcher_InvokedCount' && $this->invocationMatcher->isNever();
+            if (!$invocationIsAny && !$invocationIsNever) {
+                $this->parametersMatcher->verify();
+            }
+        } catch (PHPUnit_Framework_ExpectationFailedException $e) {
+            throw new PHPUnit_Framework_ExpectationFailedException(
+                sprintf(
+                    "Expectation failed for %s when %s.\n%s",
+                    $this->methodNameMatcher->toString(),
+                    $this->invocationMatcher->toString(),
+                    PHPUnit_Framework_TestFailure::exceptionToString($e)
+                )
+            );
+        }
+    }
+
+    /**
+     * @since Method available since Release 1.2.4
+     */
+    public function hasMatchers()
+    {
+        if ($this->invocationMatcher !== null &&
+            !$this->invocationMatcher instanceof PHPUnit_Framework_MockObject_Matcher_AnyInvokedCount) {
+            return true;
+        }
+
+        return false;
+    }
+}