Skip to content

Commit 1b8aacb

Browse files
Merge branch '6.0' into 6.1
* 6.0: (22 commits) [Messenger] Use :memory: for SQLite tests [Mailer] Stream timeout not detected due to checking only string result of function fgets don not set http_version instead of setting it to null [DependencyInjection] don't move locator tag for service subscriber Fix search scope when performing fallback mapping driver detection Fix the notification email theme for asynchronously dispatched emails Update the CI setup to use the new output file Update actions in the CI to move away from the deprecated runtime Use 6.3 for new features [HttpFoundation] Check IPv6 is valid before comparing it Run tests with UTC to avoid daylight saving time messing with assertions Bump Symfony version to 6.0.16 Update VERSION for 6.0.15 Update CHANGELOG for 6.0.15 Bump Symfony version to 5.4.16 Update VERSION for 5.4.15 Update CHANGELOG for 5.4.15 Bump Symfony version to 4.4.49 Update VERSION for 4.4.48 Update CONTRIBUTORS for 4.4.48 ...
2 parents b9c797c + b4f3a4b commit 1b8aacb

File tree

4 files changed

+37
-5
lines changed

4 files changed

+37
-5
lines changed

Compiler/DecoratorServicePass.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public function process(ContainerBuilder $container)
4242

4343
$tagsToKeep = $container->hasParameter('container.behavior_describing_tags')
4444
? $container->getParameter('container.behavior_describing_tags')
45-
: ['container.do_not_inline', 'container.service_locator', 'container.service_subscriber'];
45+
: ['container.do_not_inline', 'container.service_locator', 'container.service_subscriber', 'container.service_subscriber.locator'];
4646

4747
foreach ($definitions as [$id, $definition]) {
4848
$decoratedService = $definition->getDecoratedService();

Compiler/ResolveInstanceofConditionalsPass.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ private function processDefinition(ContainerBuilder $container, string $id, Defi
129129
foreach ($instanceofTags[$i] as $k => $v) {
130130
if (null === $definition->getDecoratedService() || \in_array($k, $tagsToKeep, true)) {
131131
foreach ($v as $v) {
132-
if ($definition->hasTag($k) && \in_array($v, $definition->getTag($k))) {
132+
if ($definition->hasTag($k) && (!$v || \in_array($v, $definition->getTag($k)))) {
133133
continue;
134134
}
135135
$definition->addTag($k, $v);

Tests/Compiler/DecoratorServicePassTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,7 @@ public function testProcessLeavesServiceSubscriberTagOnOriginalDefinition()
248248
$container = new ContainerBuilder();
249249
$container
250250
->register('foo')
251-
->setTags(['container.service_subscriber' => [], 'bar' => ['attr' => 'baz']])
251+
->setTags(['container.service_subscriber' => [], 'container.service_subscriber.locator' => [], 'bar' => ['attr' => 'baz']])
252252
;
253253
$container
254254
->register('baz')
@@ -258,7 +258,7 @@ public function testProcessLeavesServiceSubscriberTagOnOriginalDefinition()
258258

259259
$this->process($container);
260260

261-
$this->assertEquals(['container.service_subscriber' => []], $container->getDefinition('baz.inner')->getTags());
261+
$this->assertEquals(['container.service_subscriber' => [], 'container.service_subscriber.locator' => []], $container->getDefinition('baz.inner')->getTags());
262262
$this->assertEquals(['bar' => ['attr' => 'baz'], 'foobar' => ['attr' => 'bar']], $container->getDefinition('baz')->getTags());
263263
}
264264

Tests/Compiler/IntegrationTest.php

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
namespace Symfony\Component\DependencyInjection\Tests\Compiler;
1313

1414
use PHPUnit\Framework\TestCase;
15+
use Psr\Container\ContainerInterface;
1516
use Symfony\Component\Config\FileLocator;
1617
use Symfony\Component\DependencyInjection\Alias;
1718
use Symfony\Component\DependencyInjection\Argument\ServiceLocatorArgument;
@@ -152,19 +153,41 @@ public function testProcessInlinesWhenThereAreMultipleReferencesButFromTheSameDe
152153
$this->assertFalse($container->hasDefinition('c'), 'Service C was not inlined.');
153154
}
154155

155-
public function testCanDecorateServiceSubscriber()
156+
public function testCanDecorateServiceSubscriberUsingBinding()
156157
{
157158
$container = new ContainerBuilder();
158159
$container->register(ServiceSubscriberStub::class)
159160
->addTag('container.service_subscriber')
160161
->setPublic(true);
161162

162163
$container->register(DecoratedServiceSubscriber::class)
164+
->setProperty('inner', new Reference(DecoratedServiceSubscriber::class.'.inner'))
163165
->setDecoratedService(ServiceSubscriberStub::class);
164166

165167
$container->compile();
166168

167169
$this->assertInstanceOf(DecoratedServiceSubscriber::class, $container->get(ServiceSubscriberStub::class));
170+
$this->assertInstanceOf(ServiceSubscriberStub::class, $container->get(ServiceSubscriberStub::class)->inner);
171+
$this->assertInstanceOf(ServiceLocator::class, $container->get(ServiceSubscriberStub::class)->inner->container);
172+
}
173+
174+
public function testCanDecorateServiceSubscriberReplacingArgument()
175+
{
176+
$container = new ContainerBuilder();
177+
$container->register(ServiceSubscriberStub::class)
178+
->setArguments([new Reference(ContainerInterface::class)])
179+
->addTag('container.service_subscriber')
180+
->setPublic(true);
181+
182+
$container->register(DecoratedServiceSubscriber::class)
183+
->setProperty('inner', new Reference(DecoratedServiceSubscriber::class.'.inner'))
184+
->setDecoratedService(ServiceSubscriberStub::class);
185+
186+
$container->compile();
187+
188+
$this->assertInstanceOf(DecoratedServiceSubscriber::class, $container->get(ServiceSubscriberStub::class));
189+
$this->assertInstanceOf(ServiceSubscriberStub::class, $container->get(ServiceSubscriberStub::class)->inner);
190+
$this->assertInstanceOf(ServiceLocator::class, $container->get(ServiceSubscriberStub::class)->inner->container);
168191
}
169192

170193
public function testCanDecorateServiceLocator()
@@ -826,6 +849,7 @@ static function (ChildDefinition $definition, CustomAutoconfiguration $attribute
826849
$definition->addTag('app.custom_tag', get_object_vars($attribute) + ['class' => $reflector->getName()]);
827850
}
828851
);
852+
$container->registerForAutoconfiguration(TaggedService1::class)->addTag('app.custom_tag');
829853

830854
$container->register('one', TaggedService1::class)
831855
->setPublic(true)
@@ -1043,6 +1067,13 @@ public function testTaggedIteratorAndLocatorWithExclude()
10431067

10441068
class ServiceSubscriberStub implements ServiceSubscriberInterface
10451069
{
1070+
public $container;
1071+
1072+
public function __construct(ContainerInterface $container)
1073+
{
1074+
$this->container = $container;
1075+
}
1076+
10461077
public static function getSubscribedServices(): array
10471078
{
10481079
return [];
@@ -1051,6 +1082,7 @@ public static function getSubscribedServices(): array
10511082

10521083
class DecoratedServiceSubscriber
10531084
{
1085+
public $inner;
10541086
}
10551087

10561088
class DecoratedServiceLocator implements ServiceProviderInterface

0 commit comments

Comments
 (0)