Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ public function __construct(
if (null !== $value && null !== $service) {
throw new LogicException('#[Autowire] attribute cannot declare $value and $service at the same time.');
}
} elseif (!(null !== $value xor null !== $service xor null !== $expression xor null !== $env xor null !== $param)) {
} elseif (1 !== (null !== $value) + (null !== $service) + (null !== $expression) + (null !== $env) + (null !== $param)) {
throw new LogicException('#[Autowire] attribute must declare exactly one of $service, $expression, $env, $param or $value.');
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,4 +82,24 @@ public static function provideMultipleParameters(): iterable

yield [['value' => 'some-value', 'expression' => 'expr']];
}

/**
* @dataProvider provideMutuallyExclusiveOptions
*/
public function testConstructThrowsOnMutuallyExclusiveOptions(array $parameters)
{
$this->expectException(LogicException::class);
$this->expectExceptionMessage('#[Autowire] attribute must declare exactly one of $service, $expression, $env, $param or $value.');

new Autowire(...$parameters);
}

public static function provideMutuallyExclusiveOptions(): iterable
{
yield [[]];
yield [['value' => 'some-value', 'service' => 'id']];
yield [['value' => 'some-value', 'service' => 'id', 'expression' => 'expr']];
yield [['value' => 'some-value', 'service' => 'id', 'expression' => 'expr', 'env' => 'ENV']];
yield [['value' => 'some-value', 'service' => 'id', 'expression' => 'expr', 'env' => 'ENV', 'param' => 'param']];
}
}