public function buildMethodParametersCodeRendersParametersCodeWithCorrectTypeHintsAndDefaultValues()
{
$className = 'TestClass' . md5(uniqid(mt_rand(), true));
eval('
/**
* @param string $arg1 Arg1
*/
class ' . $className . ' {
public function foo($arg1, array $arg2, \\ArrayObject $arg3, $arg4= "foo", $arg5 = TRUE, array $arg6 = array(TRUE, \'foo\' => \'bar\', NULL, 3 => 1, 2.3)) {}
}
');
$methodParameters = ['arg1' => ['position' => 0, 'byReference' => false, 'array' => false, 'optional' => false, 'allowsNull' => true, 'class' => null, 'scalarDeclaration' => false], 'arg2' => ['position' => 1, 'byReference' => false, 'array' => true, 'optional' => false, 'allowsNull' => true, 'class' => null, 'scalarDeclaration' => false], 'arg3' => ['position' => 2, 'byReference' => false, 'array' => false, 'optional' => false, 'allowsNull' => true, 'class' => 'ArrayObject', 'scalarDeclaration' => false], 'arg4' => ['position' => 3, 'byReference' => false, 'array' => false, 'optional' => true, 'allowsNull' => true, 'class' => null, 'defaultValue' => 'foo', 'scalarDeclaration' => false], 'arg5' => ['position' => 4, 'byReference' => false, 'array' => false, 'optional' => true, 'allowsNull' => true, 'class' => null, 'defaultValue' => true, 'scalarDeclaration' => false], 'arg6' => ['position' => 5, 'byReference' => false, 'array' => true, 'optional' => true, 'allowsNull' => true, 'class' => null, 'defaultValue' => [0 => true, 'foo' => 'bar', 1 => null, 3 => 1, 4 => 2.3], 'scalarDeclaration' => false]];
$mockReflectionService = $this->createMock(ReflectionService::class);
$mockReflectionService->expects($this->atLeastOnce())->method('getMethodParameters')->will($this->returnValue($methodParameters));
$expectedCode = '$arg1, array $arg2, \\ArrayObject $arg3, $arg4 = \'foo\', $arg5 = TRUE, array $arg6 = array(0 => TRUE, \'foo\' => \'bar\', 1 => NULL, 3 => 1, 4 => 2.3)';
$builder = $this->getMockBuilder(ProxyMethod::class)->disableOriginalConstructor()->setMethods(['dummy'])->getMock();
$builder->injectReflectionService($mockReflectionService);
$actualCode = $builder->buildMethodParametersCode($className, 'foo', true);
$this->assertSame($expectedCode, $actualCode);
}