From af978ed56d98fe1e064e631c9378dc8a1ff5f892 Mon Sep 17 00:00:00 2001 From: Serge Kvashnin <75180587+serge-kvashnin@users.noreply.github.com> Date: Sat, 1 Jun 2024 13:43:11 +0200 Subject: [PATCH] Remove restriction on passing additional parameters as positional arguments. --- src/Container.php | 4 ---- tests/Integration/InvokeTest.php | 24 +++++++++++++++++------- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/src/Container.php b/src/Container.php index 7e4b7c5..03241f3 100644 --- a/src/Container.php +++ b/src/Container.php @@ -95,10 +95,6 @@ public function __invoke(Closure|callable|array|string $callable, mixed ...$argu throw new ContainerException('Autowiring must be enabled for invoking callables using container.'); } - if (array_is_list($arguments)) { - throw new ContainerException('Extra parameters should be passed as named parameters.'); - } - $closure = $this->closure($callable); $parameters = $this->parameters( $arguments, diff --git a/tests/Integration/InvokeTest.php b/tests/Integration/InvokeTest.php index cd50094..ec85442 100644 --- a/tests/Integration/InvokeTest.php +++ b/tests/Integration/InvokeTest.php @@ -12,17 +12,18 @@ use Tests\Norvica\Container\Fixtures\Invoke\Fixture289a24a0; use Tests\Norvica\Container\Fixtures\Invoke\Fixture3b51a559; use Tests\Norvica\Container\Fixtures\Invoke\Fixture9c429bd8; +use function Norvica\Container\ref; final class InvokeTest extends BaseTestCase { public static function containers(): Generator { - yield 'cold' => [self::container([])]; - yield 'compiled' => [self::compiled([])]; + yield 'cold container' => [self::container([])]; + yield 'compiled container' => [self::compiled([])]; } #[DataProvider('containers')] - public function testInvoke(InvokerInterface $container): void + public function testInvokeWithNamedArguments(InvokerInterface $container): void { [$a, $b, $c] = $container(Fixture9c429bd8::class, c: 'foo'); $this->assertInstanceOf(Fixture289a24a0::class, $a); @@ -31,16 +32,25 @@ public function testInvoke(InvokerInterface $container): void } #[DataProvider('containers')] - public function testPositionalArguments(InvokerInterface $container): void + public function testInvokeWithPositionalArguments(InvokerInterface $container): void { + [$a, $b, $c] = $container(Fixture9c429bd8::class, ref(Fixture3b51a559::class), 'foo'); + $this->assertInstanceOf(Fixture289a24a0::class, $a); + $this->assertInstanceOf(Fixture3b51a559::class, $b); + $this->assertEquals('foo', $c); + } + + public function testAutowiringDisabledCold(): void + { + $container = self::container([], false); $this->expectException(ContainerException::class); - $container(Fixture9c429bd8::class, 'foo'); + $container(static fn() => null); } - #[DataProvider('containers')] - public function testAutowiringDisabled(InvokerInterface $container): void + public function testAutowiringDisabledCompiled(): void { + $container = self::compiled([], false); $this->expectException(ContainerException::class); $container(static fn() => null);