Skip to content

Commit c1706ec

Browse files
authored
Merge pull request #173 from sakhunzai/4.9.x
Non-variadic parameter should not throw exception when calling `ParameterGenerator#setVariadic(false)` with an existing default value
2 parents 7d57ac6 + 0896096 commit c1706ec

File tree

2 files changed

+29
-3
lines changed

2 files changed

+29
-3
lines changed

src/Generator/ParameterGenerator.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -256,12 +256,12 @@ public function setPassedByReference($passedByReference)
256256
*/
257257
public function setVariadic($variadic)
258258
{
259-
if (isset($this->defaultValue)) {
259+
$this->variadic = (bool) $variadic;
260+
261+
if (true === $this->variadic && isset($this->defaultValue)) {
260262
throw new Exception\InvalidArgumentException('Variadic parameter cannot have a default value');
261263
}
262264

263-
$this->variadic = (bool) $variadic;
264-
265265
return $this;
266266
}
267267

test/Generator/ParameterGeneratorTest.php

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -550,6 +550,19 @@ public function testAssigningDefaultValueToVariadicParameterThrowsInvalidArgumen
550550
$parameter->setDefaultValue([]);
551551
}
552552

553+
public function testAssigningDefaultValueToNonVariadicParameter(): void
554+
{
555+
$parameter = new ParameterGenerator();
556+
557+
$parameter->setName('parameter');
558+
$parameter->setType('int');
559+
$parameter->setPosition(1);
560+
$parameter->setVariadic(false);
561+
self::assertSame('int $parameter', $parameter->generate());
562+
$parameter->setDefaultValue(7);
563+
self::assertSame('int $parameter = 7', $parameter->generate());
564+
}
565+
553566
public function testMakingParameterVariadicWithExistingDefaultValueThrowsInvalidArgumentException(): void
554567
{
555568
$parameter = new ParameterGenerator();
@@ -566,6 +579,19 @@ public function testMakingParameterVariadicWithExistingDefaultValueThrowsInvalid
566579
$parameter->setVariadic(true);
567580
}
568581

582+
public function testMakingParameterNonVariadicWithExistingDefaultValue(): void
583+
{
584+
$parameter = new ParameterGenerator();
585+
586+
$parameter->setName('parameter');
587+
$parameter->setType('int');
588+
$parameter->setPosition(1);
589+
$parameter->setDefaultValue(7);
590+
self::assertSame('int $parameter = 7', $parameter->generate());
591+
$parameter->setVariadic(false);
592+
self::assertSame('int $parameter = 7', $parameter->generate());
593+
}
594+
569595
#[Group('zendframework/zend-code#29')]
570596
public function testGetInternalClassDefaultParameterValue()
571597
{

0 commit comments

Comments
 (0)