Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 121e072

Browse files
committed
[DependencyInjection] Add tests for #[TaggedIterator] & #[TaggedLocator] on controller arguments
1 parent e2d5c4a commit 121e072

File tree

2 files changed

+50
-6
lines changed

2 files changed

+50
-6
lines changed

src/Symfony/Component/HttpKernel/Tests/DependencyInjection/RegisterControllerArgumentLocatorsPassTest.php

Lines changed: 48 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,11 @@
1212
namespace Symfony\Component\HttpKernel\Tests\DependencyInjection;
1313

1414
use PHPUnit\Framework\TestCase;
15+
use Symfony\Component\DependencyInjection\Argument\RewindableGenerator;
1516
use Symfony\Component\DependencyInjection\Argument\ServiceClosureArgument;
1617
use Symfony\Component\DependencyInjection\Attribute\Autowire;
18+
use Symfony\Component\DependencyInjection\Attribute\TaggedIterator;
19+
use Symfony\Component\DependencyInjection\Attribute\TaggedLocator;
1720
use Symfony\Component\DependencyInjection\Attribute\Target;
1821
use Symfony\Component\DependencyInjection\ChildDefinition;
1922
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
@@ -460,10 +463,6 @@ public function testResponseArgumentIsIgnored()
460463

461464
public function testAutowireAttribute()
462465
{
463-
if (!class_exists(Autowire::class)) {
464-
$this->markTestSkipped('#[Autowire] attribute not available.');
465-
}
466-
467466
$container = new ContainerBuilder();
468467
$resolver = $container->register('argument_resolver.service', 'stdClass')->addArgument([]);
469468

@@ -493,6 +492,42 @@ public function testAutowireAttribute()
493492
$this->assertSame('foo', $locator->get('customAutowire'));
494493
$this->assertFalse($locator->has('service2'));
495494
}
495+
496+
public function testTaggedIteratorAndTaggedLocatorAttributes()
497+
{
498+
$container = new ContainerBuilder();
499+
$resolver = $container->register('argument_resolver.service', \stdClass::class)->addArgument([]);
500+
501+
$container->register('bar', \stdClass::class)->addTag('foobar');
502+
$container->register('baz', \stdClass::class)->addTag('foobar');
503+
504+
$container->register('foo', WithTaggedIteratorAndTaggedLocator::class)
505+
->addTag('controller.service_arguments');
506+
507+
(new RegisterControllerArgumentLocatorsPass())->process($container);
508+
509+
$locatorId = (string) $resolver->getArgument(0);
510+
$container->getDefinition($locatorId)->setPublic(true);
511+
512+
$container->compile();
513+
514+
/** @var ServiceLocator $locator */
515+
$locator = $container->get($locatorId)->get('foo::fooAction');
516+
517+
$this->assertCount(2, $locator->getProvidedServices());
518+
519+
$this->assertTrue($locator->has('iterator'));
520+
$this->assertInstanceOf(RewindableGenerator::class, $argIterator = $locator->get('iterator'));
521+
$this->assertCount(2, $argIterator);
522+
523+
$this->assertTrue($locator->has('locator'));
524+
$this->assertInstanceOf(ServiceLocator::class, $argLocator = $locator->get('locator'));
525+
$this->assertCount(2, $argLocator);
526+
$this->assertTrue($argLocator->has('bar'));
527+
$this->assertTrue($argLocator->has('baz'));
528+
529+
$this->assertSame(iterator_to_array($argIterator), [$argLocator->get('bar'), $argLocator->get('baz')]);
530+
}
496531
}
497532

498533
class RegisterTestController
@@ -614,3 +649,12 @@ public function fooAction(
614649
) {
615650
}
616651
}
652+
653+
class WithTaggedIteratorAndTaggedLocator
654+
{
655+
public function fooAction(
656+
#[TaggedIterator('foobar')] iterable $iterator,
657+
#[TaggedLocator('foobar')] ServiceLocator $locator,
658+
) {
659+
}
660+
}

src/Symfony/Component/HttpKernel/composer.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
"symfony/config": "^6.1",
3131
"symfony/console": "^5.4|^6.0",
3232
"symfony/css-selector": "^5.4|^6.0",
33-
"symfony/dependency-injection": "^6.2",
33+
"symfony/dependency-injection": "^6.3",
3434
"symfony/dom-crawler": "^5.4|^6.0",
3535
"symfony/expression-language": "^5.4|^6.0",
3636
"symfony/finder": "^5.4|^6.0",
@@ -53,7 +53,7 @@
5353
"symfony/config": "<6.1",
5454
"symfony/console": "<5.4",
5555
"symfony/form": "<5.4",
56-
"symfony/dependency-injection": "<6.2",
56+
"symfony/dependency-injection": "<6.3",
5757
"symfony/doctrine-bridge": "<5.4",
5858
"symfony/http-client": "<5.4",
5959
"symfony/http-client-contracts": "<2.5",

0 commit comments

Comments
 (0)