Skip to content

Commit c7b217e

Browse files
Merge branch '4.4' into 5.4
* 4.4: [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 the notification email theme for asynchronously dispatched emails 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 4.4.49 Update VERSION for 4.4.48 Update CONTRIBUTORS for 4.4.48 Update CHANGELOG for 4.4.48
2 parents af0ed3d + ecb8e19 commit c7b217e

File tree

3 files changed

+35
-4
lines changed

3 files changed

+35
-4
lines changed

Compiler/DecoratorServicePass.php

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

5454
$tagsToKeep = $container->hasParameter('container.behavior_describing_tags')
5555
? $container->getParameter('container.behavior_describing_tags')
56-
: ['container.do_not_inline', 'container.service_locator', 'container.service_subscriber'];
56+
: ['container.do_not_inline', 'container.service_locator', 'container.service_subscriber', 'container.service_subscriber.locator'];
5757

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

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: 32 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;
@@ -148,19 +149,41 @@ public function testProcessInlinesWhenThereAreMultipleReferencesButFromTheSameDe
148149
$this->assertFalse($container->hasDefinition('c'), 'Service C was not inlined.');
149150
}
150151

151-
public function testCanDecorateServiceSubscriber()
152+
public function testCanDecorateServiceSubscriberUsingBinding()
152153
{
153154
$container = new ContainerBuilder();
154155
$container->register(ServiceSubscriberStub::class)
155156
->addTag('container.service_subscriber')
156157
->setPublic(true);
157158

158159
$container->register(DecoratedServiceSubscriber::class)
160+
->setProperty('inner', new Reference(DecoratedServiceSubscriber::class.'.inner'))
159161
->setDecoratedService(ServiceSubscriberStub::class);
160162

161163
$container->compile();
162164

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

166189
public function testCanDecorateServiceLocator()
@@ -1051,6 +1074,13 @@ static function (ChildDefinition $definition) {
10511074

10521075
class ServiceSubscriberStub implements ServiceSubscriberInterface
10531076
{
1077+
public $container;
1078+
1079+
public function __construct(ContainerInterface $container)
1080+
{
1081+
$this->container = $container;
1082+
}
1083+
10541084
public static function getSubscribedServices(): array
10551085
{
10561086
return [];
@@ -1059,6 +1089,7 @@ public static function getSubscribedServices(): array
10591089

10601090
class DecoratedServiceSubscriber
10611091
{
1092+
public $inner;
10621093
}
10631094

10641095
class DecoratedServiceLocator implements ServiceProviderInterface

0 commit comments

Comments
 (0)