Permalink
Browse files

initial work on function mocks

  • Loading branch information...
1 parent 05d0043 commit 0af7c54ce74255003270a8f1359d354b46df6d14 @mikey179 committed Jan 22, 2012
@@ -48,15 +48,18 @@ function phpunit_mockobject_autoload($class = NULL) {
if ($classes === NULL) {
$classes = array(
+ 'phpunit_framework_mockobject_builder_functioninvocationmocker' => '/Framework/MockObject/Builder/FunctionInvocationMocker.php',
'phpunit_framework_mockobject_builder_identity' => '/Framework/MockObject/Builder/Identity.php',
'phpunit_framework_mockobject_builder_invocationmocker' => '/Framework/MockObject/Builder/InvocationMocker.php',
'phpunit_framework_mockobject_builder_match' => '/Framework/MockObject/Builder/Match.php',
'phpunit_framework_mockobject_builder_methodnamematch' => '/Framework/MockObject/Builder/MethodNameMatch.php',
'phpunit_framework_mockobject_builder_namespace' => '/Framework/MockObject/Builder/Namespace.php',
'phpunit_framework_mockobject_builder_parametersmatch' => '/Framework/MockObject/Builder/ParametersMatch.php',
'phpunit_framework_mockobject_builder_stub' => '/Framework/MockObject/Builder/Stub.php',
+ 'phpunit_framework_mockobject_functioninvocationmocker' => '/Framework/MockObject/FunctionInvocationMocker.php',
'phpunit_framework_mockobject_generator' => '/Framework/MockObject/Generator.php',
'phpunit_framework_mockobject_invocation' => '/Framework/MockObject/Invocation.php',
+ 'phpunit_framework_mockobject_invocation_function' => '/Framework/MockObject/Invocation/Function.php',
'phpunit_framework_mockobject_invocation_object' => '/Framework/MockObject/Invocation/Object.php',
'phpunit_framework_mockobject_invocation_static' => '/Framework/MockObject/Invocation/Static.php',
'phpunit_framework_mockobject_invocationmocker' => '/Framework/MockObject/InvocationMocker.php',
@@ -70,9 +73,11 @@ function phpunit_mockobject_autoload($class = NULL) {
'phpunit_framework_mockobject_matcher_invokedcount' => '/Framework/MockObject/Matcher/InvokedCount.php',
'phpunit_framework_mockobject_matcher_invokedrecorder' => '/Framework/MockObject/Matcher/InvokedRecorder.php',
'phpunit_framework_mockobject_matcher_methodname' => '/Framework/MockObject/Matcher/MethodName.php',
+ 'phpunit_framework_mockobject_matcher_functionname' => '/Framework/MockObject/Matcher/FunctionName.php',
'phpunit_framework_mockobject_matcher_parameters' => '/Framework/MockObject/Matcher/Parameters.php',
'phpunit_framework_mockobject_matcher_statelessinvocation' => '/Framework/MockObject/Matcher/StatelessInvocation.php',
'phpunit_framework_mockobject_mockbuilder' => '/Framework/MockObject/MockBuilder.php',
+ 'phpunit_framework_mockobject_mockfunction' => '/Framework/MockObject/MockFunction.php',
'phpunit_framework_mockobject_mockobject' => '/Framework/MockObject/MockObject.php',
'phpunit_framework_mockobject_stub' => '/Framework/MockObject/Stub.php',
'phpunit_framework_mockobject_stub_consecutivecalls' => '/Framework/MockObject/Stub/ConsecutiveCalls.php',
@@ -0,0 +1,177 @@
+<?php
+/**
+ * PHPUnit
+ *
+ * Copyright (c) 2010-2012, Sebastian Bergmann <sb@sebastian-bergmann.de>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * * Neither the name of Sebastian Bergmann nor the names of his
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @package PHPUnit_MockObject
+ * @author Sebastian Bergmann <sb@sebastian-bergmann.de>
+ * @copyright 2010-2012 Sebastian Bergmann <sb@sebastian-bergmann.de>
+ * @license http://www.opensource.org/licenses/bsd-license.php BSD License
+ * @link http://github.com/sebastianbergmann/phpunit-mock-objects
+ * @since File available since Release 1.0.0
+ */
+
+/**
+ * Builder for mocked or stubbed invocations.
+ *
+ * Provides methods for building expectations without having to resort to
+ * instantiating the various matchers manually. These methods also form a
+ * more natural way of reading the expectation. This class should be together
+ * with the test case PHPUnit_Framework_MockObject_TestCase.
+ *
+ * @package PHPUnit_MockObject
+ * @author Sebastian Bergmann <sb@sebastian-bergmann.de>
+ * @copyright 2010-2012 Sebastian Bergmann <sb@sebastian-bergmann.de>
+ * @license http://www.opensource.org/licenses/bsd-license.php BSD License
+ * @version Release: @package_version@
+ * @link http://github.com/sebastianbergmann/phpunit-mock-objects
+ * @since Class available since Release 1.0.0
+ */
+class PHPUnit_Framework_MockObject_Builder_FunctionInvocationMocker implements PHPUnit_Framework_MockObject_Builder_ParametersMatch
+{
+ /**
+ * @var PHPUnit_Framework_MockObject_Stub_MatcherCollection
+ */
+ protected $collection;
+
+ /**
+ * @var PHPUnit_Framework_MockObject_Matcher
+ */
+ protected $matcher;
+
+ /**
+ * @param PHPUnit_Framework_MockObject_Stub_MatcherCollection $collection
+ * @param PHPUnit_Framework_MockObject_Matcher_Invocation $invocationMatcher
+ */
+ public function __construct(PHPUnit_Framework_MockObject_Stub_MatcherCollection $collection, PHPUnit_Framework_MockObject_Matcher_Invocation $invocationMatcher, $constraint)
+ {
+ $this->collection = $collection;
+ $this->matcher = new PHPUnit_Framework_MockObject_Matcher(
+ $invocationMatcher
+ );
+
+ $this->matcher->methodNameMatcher = new PHPUnit_Framework_MockObject_Matcher_FunctionName($constraint);
+ $this->collection->addMatcher($this->matcher);
+ }
+
+ /**
+ * @return PHPUnit_Framework_MockObject_Matcher
+ */
+ public function getMatcher()
+ {
+ return $this->matcher;
+ }
+
+ /**
+ * @param mixed $id
+ * @return PHPUnit_Framework_MockObject_Builder_InvocationMocker
+ */
+ public function id($id)
+ {
+ $this->collection->registerId($id, $this);
+
+ return $this;
+ }
+
+ /**
+ * @param PHPUnit_Framework_MockObject_Stub $stub
+ * @return PHPUnit_Framework_MockObject_Builder_InvocationMocker
+ */
+ public function will(PHPUnit_Framework_MockObject_Stub $stub)
+ {
+ $this->matcher->stub = $stub;
+
+ return $this;
+ }
+
+ /**
+ * @param mixed $id
+ * @return PHPUnit_Framework_MockObject_Builder_InvocationMocker
+ */
+ public function after($id)
+ {
+ $this->matcher->afterMatchBuilderId = $id;
+
+ return $this;
+ }
+
+ /**
+ * @param mixed $argument, ...
+ * @return PHPUnit_Framework_MockObject_Builder_InvocationMocker
+ */
+ public function with()
+ {
+ $args = func_get_args();
+
+ if ($this->matcher->methodNameMatcher === NULL) {
+ throw new PHPUnit_Framework_Exception(
+ 'Method name matcher is not defined, cannot define parameter ' .
+ ' matcher without one'
+ );
+ }
+
+ if ($this->matcher->parametersMatcher !== NULL) {
+ throw new PHPUnit_Framework_Exception(
+ 'Parameter matcher is already defined, cannot redefine'
+ );
+ }
+
+ $this->matcher->parametersMatcher = new PHPUnit_Framework_MockObject_Matcher_Parameters($args);
+
+ return $this;
+ }
+
+ /**
+ * @return PHPUnit_Framework_MockObject_Builder_InvocationMocker
+ */
+ public function withAnyParameters()
+ {
+ if ($this->matcher->methodNameMatcher === NULL) {
+ throw new PHPUnit_Framework_Exception(
+ 'Method name matcher is not defined, cannot define parameter ' .
+ 'matcher without one'
+ );
+ }
+
+ if ($this->matcher->parametersMatcher !== NULL) {
+ throw new PHPUnit_Framework_Exception(
+ 'Parameter matcher is already defined, cannot redefine'
+ );
+ }
+
+ $this->matcher->parametersMatcher = new PHPUnit_Framework_MockObject_Matcher_AnyParameters;
+
+ return $this;
+ }
+}
Oops, something went wrong. Retry.

0 comments on commit 0af7c54

Please sign in to comment.