Skip to content

Commit

Permalink
Merge pull request #72 from mchekin/make-sure-variadic-parameter-does…
Browse files Browse the repository at this point in the history
…-not-have-default-value

Make sure variadic parameter does not have default value
  • Loading branch information
Ocramius authored Apr 14, 2021
2 parents ab0d54d + d031130 commit 30376bb
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 1 deletion.
8 changes: 8 additions & 0 deletions src/Generator/ParameterGenerator.php
Original file line number Diff line number Diff line change
Expand Up @@ -200,6 +200,10 @@ public function getName()
*/
public function setDefaultValue($defaultValue)
{
if ($this->variadic) {
throw new Exception\InvalidArgumentException('Variadic parameter cannot have a default value');
}

if (! $defaultValue instanceof ValueGenerator) {
$defaultValue = new ValueGenerator($defaultValue);
}
Expand Down Expand Up @@ -258,6 +262,10 @@ public function setPassedByReference($passedByReference)
*/
public function setVariadic($variadic)
{
if (isset($this->defaultValue)) {
throw new Exception\InvalidArgumentException('Variadic parameter cannot have a default value');
}

$this->variadic = (bool) $variadic;

return $this;
Expand Down
34 changes: 33 additions & 1 deletion test/Generator/ParameterGeneratorTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
namespace LaminasTest\Code\Generator;

use Closure;
use Laminas\Code\Generator\Exception\InvalidArgumentException;
use Laminas\Code\Generator\ParameterGenerator;
use Laminas\Code\Generator\ValueGenerator;
use Laminas\Code\Reflection\ClassReflection;
Expand Down Expand Up @@ -517,7 +518,7 @@ public function testVariadicArgumentFromReflection(
$methodName,
$parameterName,
$expectedGeneratedSignature
) {
): void {
$parameter = ParameterGenerator::fromReflection(new ParameterReflection(
[$className, $methodName],
$parameterName
Expand Down Expand Up @@ -577,6 +578,37 @@ public function testSetGetVariadic()
self::assertSame('$foo', $parameter->generate());
}

public function testAssigningDefaultValueToVariadicParameterThrowsInvalidArgumentException(): void
{
$parameter = new ParameterGenerator();

$parameter->setName('parameter');
$parameter->setType('int');
$parameter->setPosition(1);
$parameter->setVariadic(true);

$this->expectException(InvalidArgumentException::class);
$this->expectExceptionMessage('Variadic parameter cannot have a default value');

$parameter->setDefaultValue([]);
}

public function testMakingParameterVariadicWithExistingDefaultValueThrowsInvalidArgumentException(): void
{
$parameter = new ParameterGenerator();

$parameter->setName('parameter');
$parameter->setType('int');
$parameter->setPosition(1);

$parameter->setDefaultValue([]);

$this->expectException(InvalidArgumentException::class);
$this->expectExceptionMessage('Variadic parameter cannot have a default value');

$parameter->setVariadic(true);
}

/**
* @group zendframework/zend-code#29
*/
Expand Down

0 comments on commit 30376bb

Please sign in to comment.