Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
sebastianbergmann committed May 29, 2018
1 parent 56de7e9 commit 83722bc
Show file tree
Hide file tree
Showing 3 changed files with 117 additions and 2 deletions.
4 changes: 4 additions & 0 deletions ChangeLog-7.2.md
Expand Up @@ -18,6 +18,10 @@ All notable changes of the PHPUnit 7.2 release series are documented in this fil
* Implemented [#3103](https://github.com/sebastianbergmann/phpunit/issues/3103): Merge `phpunit-mock-objects` back into PHPUnit's Git repository
* Implemented [#3115](https://github.com/sebastianbergmann/phpunit/pull/3115): Method-level `@covers` annotation overrides class-level `@coversNothing` annotation

### Fixed

* Fixed [phpunit-mock-objects#419](https://github.com/sebastianbergmann/phpunit-mock-objects/issues/419): Constants as default parameter values are not handled correctly

### Removed

* Fixed [#3069](https://github.com/sebastianbergmann/phpunit/issues/3069): Method `ResultPrinter::printWaitPrompt()` seems to be unused
Expand Down
9 changes: 7 additions & 2 deletions src/Framework/MockObject/Generator.php
Expand Up @@ -1176,8 +1176,13 @@ private function getMethodParameters(ReflectionMethod $method, $forCall = false)

if (!$parameter->isVariadic()) {
if ($parameter->isDefaultValueAvailable()) {
$value = $parameter->getDefaultValue();
$default = ' = ' . \var_export($value, true);
$value = $parameter->getDefaultValueConstantName();

if ($value === null) {
$value = \var_export($parameter->getDefaultValue(), true);
}

$default = ' = ' . $value;
} elseif ($parameter->isOptional()) {
$default = ' = null';
}
Expand Down
@@ -0,0 +1,106 @@
--TEST--
\PHPUnit\Framework\MockObject\Generator::generate('Foo', [], 'MockFoo', true, true)
--FILE--
<?php
class Foo
{
public function bar(int $baz = PHP_INT_MIN)
{
}
}

require __DIR__ . '/../../../../vendor/autoload.php';

$generator = new \PHPUnit\Framework\MockObject\Generator;

$mock = $generator->generate(
'Foo',
[],
'MockFoo',
true,
true
);

print $mock['code'];
?>
--EXPECT--
class MockFoo extends Foo implements PHPUnit\Framework\MockObject\MockObject
{
private $__phpunit_invocationMocker;
private $__phpunit_originalObject;
private $__phpunit_configurable = ['bar'];
private $__phpunit_returnValueGeneration = true;

public function __clone()
{
$this->__phpunit_invocationMocker = clone $this->__phpunit_getInvocationMocker();
}

public function bar(int $baz = PHP_INT_MIN)
{
$__phpunit_arguments = [$baz];
$__phpunit_count = func_num_args();

if ($__phpunit_count > 1) {
$__phpunit_arguments_tmp = func_get_args();

for ($__phpunit_i = 1; $__phpunit_i < $__phpunit_count; $__phpunit_i++) {
$__phpunit_arguments[] = $__phpunit_arguments_tmp[$__phpunit_i];
}
}

$__phpunit_result = $this->__phpunit_getInvocationMocker()->invoke(
new \PHPUnit\Framework\MockObject\Invocation\ObjectInvocation(
'Foo', 'bar', $__phpunit_arguments, '', $this, true
)
);

return $__phpunit_result;
}

public function expects(\PHPUnit\Framework\MockObject\Matcher\Invocation $matcher)
{
return $this->__phpunit_getInvocationMocker()->expects($matcher);
}

public function method()
{
$any = new \PHPUnit\Framework\MockObject\Matcher\AnyInvokedCount;
$expects = $this->expects($any);

return call_user_func_array([$expects, 'method'], func_get_args());
}

public function __phpunit_setOriginalObject($originalObject)
{
$this->__phpunit_originalObject = $originalObject;
}

public function __phpunit_setReturnValueGeneration(bool $returnValueGeneration)
{
$this->__phpunit_returnValueGeneration = $returnValueGeneration;
}

public function __phpunit_getInvocationMocker()
{
if ($this->__phpunit_invocationMocker === null) {
$this->__phpunit_invocationMocker = new \PHPUnit\Framework\MockObject\InvocationMocker($this->__phpunit_configurable, $this->__phpunit_returnValueGeneration);
}

return $this->__phpunit_invocationMocker;
}

public function __phpunit_hasMatchers()
{
return $this->__phpunit_getInvocationMocker()->hasMatchers();
}

public function __phpunit_verify($unsetInvocationMocker = true)
{
$this->__phpunit_getInvocationMocker()->verify();

if ($unsetInvocationMocker) {
$this->__phpunit_invocationMocker = null;
}
}
}

0 comments on commit 83722bc

Please sign in to comment.