/
githubmirror
/
symfony
Обзор
Документация
Войти
/
githubmirror
/
symfony
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
8.2
src/Symfony/Component/DependencyInjection/Tests/Compiler/AutowireRequiredMethodsPassTest.php
127 строк
4 KB
Amoifr
[DependencyInjection] Add a $priority argument to the #[Required] attribute
27 июл 2026, 18:39
27 июл 2026, 18:39
ef543bf
Код
Авторство
О чём код?
<?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\DependencyInjection\Tests\Compiler; use PHPUnit\Framework\TestCase; use Symfony\Component\DependencyInjection\Compiler\AutowireRequiredMethodsPass; use Symfony\Component\DependencyInjection\Compiler\ResolveClassPass; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\Tests\Fixtures\WitherStaticReturnType; use Symfony\Contracts\Service\Attribute\Required; require_once __DIR__.'/../Fixtures/includes/autowiring_classes.php'; class AutowireRequiredMethodsPassTest extends TestCase { public function testSetterInjectionWithAttribute() { $container = new ContainerBuilder(); $container->register(Foo::class); $container ->register('setter_injection', AutowireSetter::class) ->setAutowired(true); (new ResolveClassPass())->process($container); (new AutowireRequiredMethodsPass())->process($container); $methodCalls = $container->getDefinition('setter_injection')->getMethodCalls(); $this->assertSame([['setFoo', []]], $methodCalls); } public function testExplicitMethodInjectionAttribute() { $container = new ContainerBuilder(); $container->register(Foo::class); $container->register(A::class); $container->register(CollisionA::class); $container->register(CollisionB::class); $container ->register('setter_injection', SetterInjection::class) ->setAutowired(true) ->addMethodCall('notASetter', []); (new ResolveClassPass())->process($container); (new AutowireRequiredMethodsPass())->process($container); $methodCalls = $container->getDefinition('setter_injection')->getMethodCalls(); $this->assertEquals( ['notASetter', 'setFoo', 'setDependencies', 'setWithCallsConfigured', 'setChildMethodWithoutDocBlock'], array_column($methodCalls, 0) ); $this->assertEquals([], $methodCalls[0][1]); } public function testSetterInjectionWithPriority() { if (!property_exists(Required::class, 'priority')) { $this->markTestSkipped('symfony/service-contracts 3.7+ is required.'); } $container = new ContainerBuilder(); $container->register(Foo::class); $container ->register('prioritized_setters', AutowirePrioritizedSetters::class) ->setAutowired(true); (new ResolveClassPass())->process($container); (new AutowireRequiredMethodsPass())->process($container); $this->assertSame([ ['withBar', [], true], ['withFoo', [], true], ['setHigh', []], ['setFoo', []], ['setBar', []], ['setLow', []], ], $container->getDefinition('prioritized_setters')->getMethodCalls()); } public function testWitherWithStaticReturnTypeInjection() { $container = new ContainerBuilder(); $container->register(Foo::class); $container ->register('wither', WitherStaticReturnType::class) ->setAutowired(true); (new ResolveClassPass())->process($container); (new AutowireRequiredMethodsPass())->process($container); $methodCalls = $container->getDefinition('wither')->getMethodCalls(); $expected = [ ['withFoo', [], true], ['setFoo', []], ]; $this->assertSame($expected, $methodCalls); } public function testWitherInjectionWithAttribute() { $container = new ContainerBuilder(); $container->register(Foo::class); $container ->register('wither', AutowireWither::class) ->setAutowired(true); (new ResolveClassPass())->process($container); (new AutowireRequiredMethodsPass())->process($container); $this->assertSame([['withFoo', [], true]], $container->getDefinition('wither')->getMethodCalls()); } }