Skip to content

Commit 8254cc7

Browse files
kbondnicolas-grekas
authored andcommitted
[DependencyInjection] Add tests for AutowireLocator/AutowireIterator
1 parent 4b75619 commit 8254cc7

File tree

5 files changed

+70
-4
lines changed

5 files changed

+70
-4
lines changed

Tests/Compiler/IntegrationTest.php

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
use Psr\Container\ContainerInterface;
1616
use Symfony\Component\Config\FileLocator;
1717
use Symfony\Component\DependencyInjection\Alias;
18+
use Symfony\Component\DependencyInjection\Argument\RewindableGenerator;
1819
use Symfony\Component\DependencyInjection\Argument\ServiceLocatorArgument;
1920
use Symfony\Component\DependencyInjection\Argument\TaggedIteratorArgument;
2021
use Symfony\Component\DependencyInjection\ChildDefinition;
@@ -32,6 +33,7 @@
3233
use Symfony\Component\DependencyInjection\Tests\Fixtures\AutoconfiguredInterface2;
3334
use Symfony\Component\DependencyInjection\Tests\Fixtures\AutoconfiguredService1;
3435
use Symfony\Component\DependencyInjection\Tests\Fixtures\AutoconfiguredService2;
36+
use Symfony\Component\DependencyInjection\Tests\Fixtures\AutowireIteratorConsumer;
3537
use Symfony\Component\DependencyInjection\Tests\Fixtures\AutowireLocatorConsumer;
3638
use Symfony\Component\DependencyInjection\Tests\Fixtures\BarTagClass;
3739
use Symfony\Component\DependencyInjection\Tests\Fixtures\FooBarTaggedClass;
@@ -392,6 +394,7 @@ public function testTaggedServiceWithIndexAttributeAndDefaultMethod()
392394
public function testLocatorConfiguredViaAttribute()
393395
{
394396
$container = new ContainerBuilder();
397+
$container->setParameter('some.parameter', 'foo');
395398
$container->register(BarTagClass::class)
396399
->setPublic(true)
397400
;
@@ -411,6 +414,36 @@ public function testLocatorConfiguredViaAttribute()
411414
self::assertSame($container->get(BarTagClass::class), $s->locator->get(BarTagClass::class));
412415
self::assertSame($container->get(FooTagClass::class), $s->locator->get('with_key'));
413416
self::assertFalse($s->locator->has('nullable'));
417+
self::assertSame('foo', $s->locator->get('subscribed'));
418+
}
419+
420+
public function testIteratorConfiguredViaAttribute()
421+
{
422+
$container = new ContainerBuilder();
423+
$container->setParameter('some.parameter', 'foo');
424+
$container->register(BarTagClass::class)
425+
->setPublic(true)
426+
;
427+
$container->register(FooTagClass::class)
428+
->setPublic(true)
429+
;
430+
$container->register(AutowireIteratorConsumer::class)
431+
->setAutowired(true)
432+
->setPublic(true)
433+
;
434+
435+
$container->compile();
436+
437+
/** @var AutowireIteratorConsumer $s */
438+
$s = $container->get(AutowireIteratorConsumer::class);
439+
440+
self::assertInstanceOf(RewindableGenerator::class, $s->iterator);
441+
442+
$values = iterator_to_array($s->iterator);
443+
self::assertCount(3, $values);
444+
self::assertSame($container->get(BarTagClass::class), $values[BarTagClass::class]);
445+
self::assertSame($container->get(FooTagClass::class), $values['with_key']);
446+
self::assertSame('foo', $values['subscribed']);
414447
}
415448

416449
public function testTaggedServiceWithIndexAttributeAndDefaultMethodConfiguredViaAttribute()
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Symfony package.
5+
*
6+
* (c) Fabien Potencier <[email protected]>
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
namespace Symfony\Component\DependencyInjection\Tests\Fixtures;
13+
14+
use Symfony\Component\DependencyInjection\Attribute\Autowire;
15+
use Symfony\Component\DependencyInjection\Attribute\AutowireIterator;
16+
use Symfony\Contracts\Service\Attribute\SubscribedService;
17+
18+
final class AutowireIteratorConsumer
19+
{
20+
public function __construct(
21+
#[AutowireIterator([
22+
BarTagClass::class,
23+
'with_key' => FooTagClass::class,
24+
'nullable' => '?invalid',
25+
'subscribed' => new SubscribedService(type: 'string', attributes: new Autowire('%some.parameter%')),
26+
])]
27+
public readonly iterable $iterator,
28+
) {
29+
}
30+
}

Tests/Fixtures/AutowireLocatorConsumer.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,9 @@
1212
namespace Symfony\Component\DependencyInjection\Tests\Fixtures;
1313

1414
use Psr\Container\ContainerInterface;
15+
use Symfony\Component\DependencyInjection\Attribute\Autowire;
1516
use Symfony\Component\DependencyInjection\Attribute\AutowireLocator;
17+
use Symfony\Contracts\Service\Attribute\SubscribedService;
1618

1719
final class AutowireLocatorConsumer
1820
{
@@ -21,6 +23,7 @@ public function __construct(
2123
BarTagClass::class,
2224
'with_key' => FooTagClass::class,
2325
'nullable' => '?invalid',
26+
'subscribed' => new SubscribedService(type: 'string', attributes: new Autowire('%some.parameter%')),
2427
])]
2528
public readonly ContainerInterface $locator,
2629
) {

Tests/Fixtures/TaggedIteratorConsumer.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,12 @@
1111

1212
namespace Symfony\Component\DependencyInjection\Tests\Fixtures;
1313

14-
use Symfony\Component\DependencyInjection\Attribute\TaggedIterator;
14+
use Symfony\Component\DependencyInjection\Attribute\AutowireIterator;
1515

1616
final class TaggedIteratorConsumer
1717
{
1818
public function __construct(
19-
#[TaggedIterator('foo_bar', indexAttribute: 'foo')]
19+
#[AutowireIterator('foo_bar', indexAttribute: 'foo')]
2020
private iterable $param,
2121
) {
2222
}

Tests/Fixtures/TaggedLocatorConsumer.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,12 @@
1212
namespace Symfony\Component\DependencyInjection\Tests\Fixtures;
1313

1414
use Psr\Container\ContainerInterface;
15-
use Symfony\Component\DependencyInjection\Attribute\TaggedLocator;
15+
use Symfony\Component\DependencyInjection\Attribute\AutowireLocator;
1616

1717
final class TaggedLocatorConsumer
1818
{
1919
public function __construct(
20-
#[TaggedLocator('foo_bar', indexAttribute: 'foo')]
20+
#[AutowireLocator('foo_bar', indexAttribute: 'foo')]
2121
private ContainerInterface $locator,
2222
) {
2323
}

0 commit comments

Comments
 (0)