Chris@14: --TEST-- Chris@14: https://github.com/sebastianbergmann/phpunit-mock-objects/issues/397 Chris@16: --SKIPIF-- Chris@16: =')) print 'skip: PHP >= 7.1 required'; Chris@14: --FILE-- Chris@14: generate( Chris@14: C::class, Chris@14: [], Chris@14: 'MockC', Chris@14: true, Chris@14: true Chris@14: ); Chris@14: Chris@14: print $mock['code']; Chris@14: --EXPECTF-- Chris@14: class MockC extends C implements PHPUnit\Framework\MockObject\MockObject Chris@14: { Chris@14: private $__phpunit_invocationMocker; Chris@14: private $__phpunit_originalObject; Chris@14: private $__phpunit_configurable = ['m']; Chris@14: Chris@14: public function __clone() Chris@14: { Chris@14: $this->__phpunit_invocationMocker = clone $this->__phpunit_getInvocationMocker(); Chris@14: } Chris@14: Chris@14: public function m(?C $other): C Chris@14: { Chris@14: $arguments = array($other); Chris@14: $count = func_num_args(); Chris@14: Chris@14: if ($count > 1) { Chris@14: $_arguments = func_get_args(); Chris@14: Chris@14: for ($i = 1; $i < $count; $i++) { Chris@14: $arguments[] = $_arguments[$i]; Chris@14: } Chris@14: } Chris@14: Chris@14: $result = $this->__phpunit_getInvocationMocker()->invoke( Chris@14: new \PHPUnit\Framework\MockObject\Invocation\ObjectInvocation( Chris@14: 'C', 'm', $arguments, 'C', $this, true Chris@14: ) Chris@14: ); Chris@14: Chris@14: return $result; Chris@14: } Chris@14: Chris@14: public function expects(\PHPUnit\Framework\MockObject\Matcher\Invocation $matcher) Chris@14: { Chris@14: return $this->__phpunit_getInvocationMocker()->expects($matcher); Chris@14: } Chris@14: Chris@14: public function method() Chris@14: { Chris@14: $any = new \PHPUnit\Framework\MockObject\Matcher\AnyInvokedCount; Chris@14: $expects = $this->expects($any); Chris@14: return call_user_func_array(array($expects, 'method'), func_get_args()); Chris@14: } Chris@14: Chris@14: public function __phpunit_setOriginalObject($originalObject) Chris@14: { Chris@14: $this->__phpunit_originalObject = $originalObject; Chris@14: } Chris@14: Chris@14: public function __phpunit_getInvocationMocker() Chris@14: { Chris@14: if ($this->__phpunit_invocationMocker === null) { Chris@14: $this->__phpunit_invocationMocker = new \PHPUnit\Framework\MockObject\InvocationMocker($this->__phpunit_configurable); Chris@14: } Chris@14: Chris@14: return $this->__phpunit_invocationMocker; Chris@14: } Chris@14: Chris@14: public function __phpunit_hasMatchers() Chris@14: { Chris@14: return $this->__phpunit_getInvocationMocker()->hasMatchers(); Chris@14: } Chris@14: Chris@14: public function __phpunit_verify($unsetInvocationMocker = true) Chris@14: { Chris@14: $this->__phpunit_getInvocationMocker()->verify(); Chris@14: Chris@14: if ($unsetInvocationMocker) { Chris@14: $this->__phpunit_invocationMocker = null; Chris@14: } Chris@14: } Chris@14: }