diff --git a/src/Symfony/Component/DependencyInjection/Tests/Compiler/IntegrationTest.php b/src/Symfony/Component/DependencyInjection/Tests/Compiler/IntegrationTest.php
index 83d3e23d3ba5..698e3e1accf4 100644
--- a/src/Symfony/Component/DependencyInjection/Tests/Compiler/IntegrationTest.php
+++ b/src/Symfony/Component/DependencyInjection/Tests/Compiler/IntegrationTest.php
@@ -402,6 +402,30 @@ public function testTaggedServiceLocatorWithDefaultIndex()
];
$this->assertSame($expected, ['baz' => $serviceLocator->get('baz')]);
}
+
+ public function testTaggedServiceWithPriorityMethod()
+ {
+ $container = new ContainerBuilder();
+ $container->register(BarTagClass::class)
+ ->setPublic(true)
+ ->addTag('foo_bar', ['priority' => 10])
+ ;
+ $container->register(FooTagClass::class)
+ ->setPublic(true)
+ ->addTag('foo_bar')
+ ;
+ $container->register(FooBarTaggedClass::class)
+ ->addArgument(new TaggedIteratorArgument('foo_bar', null, null, false, 'getDefaultPriority'))
+ ->setPublic(true)
+ ;
+
+ $container->compile();
+
+ $s = $container->get(FooBarTaggedClass::class);
+
+ $param = iterator_to_array($s->getParam()->getIterator());
+ $this->assertSame([0 => $container->get(FooTagClass::class), 1 => $container->get(BarTagClass::class)], $param);
+ }
}
class ServiceSubscriberStub implements ServiceSubscriberInterface
diff --git a/src/Symfony/Component/DependencyInjection/Tests/Dumper/XmlDumperTest.php b/src/Symfony/Component/DependencyInjection/Tests/Dumper/XmlDumperTest.php
index cc80a69455b9..676ee81b9bab 100644
--- a/src/Symfony/Component/DependencyInjection/Tests/Dumper/XmlDumperTest.php
+++ b/src/Symfony/Component/DependencyInjection/Tests/Dumper/XmlDumperTest.php
@@ -220,6 +220,24 @@ public function testTaggedArguments()
$this->assertStringEqualsFile(self::$fixturesPath.'/xml/services_with_tagged_arguments.xml', $dumper->dump());
}
+ public function testTaggedWithDefaultPriorityMethod()
+ {
+ $taggedIterator = new TaggedIteratorArgument('foo_tag', null, null, false, 'foopriority');
+ $container = new ContainerBuilder();
+ $container->register('foo', 'Foo')->addTag('foo_tag');
+ $container->register('foo_tagged_iterator', 'Bar')
+ ->setPublic(true)
+ ->addArgument($taggedIterator)
+ ;
+ $container->register('foo_tagged_locator', 'Bar')
+ ->setPublic(true)
+ ->addArgument(new ServiceLocatorArgument($taggedIterator))
+ ;
+
+ $dumper = new XmlDumper($container);
+ $this->assertStringEqualsFile(self::$fixturesPath.'/xml/services_with_tagged_priority_method.xml', $dumper->dump());
+ }
+
public function testDumpAbstractServices()
{
$container = include self::$fixturesPath.'/containers/container_abstract.php';
diff --git a/src/Symfony/Component/DependencyInjection/Tests/Dumper/YamlDumperTest.php b/src/Symfony/Component/DependencyInjection/Tests/Dumper/YamlDumperTest.php
index 72901c855e41..8742f7e8390b 100644
--- a/src/Symfony/Component/DependencyInjection/Tests/Dumper/YamlDumperTest.php
+++ b/src/Symfony/Component/DependencyInjection/Tests/Dumper/YamlDumperTest.php
@@ -109,6 +109,18 @@ public function testTaggedArguments()
$this->assertStringEqualsFile(self::$fixturesPath.'/yaml/services_with_tagged_argument.yml', $dumper->dump());
}
+ public function testTaggedWithDefaultPriorityMethod()
+ {
+ $taggedIterator = new TaggedIteratorArgument('foo', null, null, false, 'foopriority');
+ $container = new ContainerBuilder();
+ $container->register('foo_service', 'Foo')->addTag('foo');
+ $container->register('foo_service_tagged_iterator', 'Bar')->addArgument($taggedIterator);
+ $container->register('foo_service_tagged_locator', 'Bar')->addArgument(new ServiceLocatorArgument($taggedIterator));
+
+ $dumper = new YamlDumper($container);
+ $this->assertStringEqualsFile(self::$fixturesPath.'/yaml/services_with_tagged_priority_method.yml', $dumper->dump());
+ }
+
private function assertEqualYamlStructure($expected, $yaml, $message = '')
{
$parser = new Parser();
diff --git a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/FooTagClass.php b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/FooTagClass.php
index c1279b9a9fee..7ec13a33d548 100644
--- a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/FooTagClass.php
+++ b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/FooTagClass.php
@@ -8,4 +8,9 @@ public static function getDefaultFooName()
{
return 'foo_tag_class';
}
+
+ public static function getDefaultPriority()
+ {
+ return 20;
+ }
}
diff --git a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/services_with_tagged_priority_method.xml b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/services_with_tagged_priority_method.xml
new file mode 100644
index 000000000000..d446bfc855a2
--- /dev/null
+++ b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/services_with_tagged_priority_method.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/services_with_tagged_priority_method.yml b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/services_with_tagged_priority_method.yml
new file mode 100644
index 000000000000..743751f4ed52
--- /dev/null
+++ b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/services_with_tagged_priority_method.yml
@@ -0,0 +1,22 @@
+
+services:
+ service_container:
+ class: Symfony\Component\DependencyInjection\ContainerInterface
+ public: true
+ synthetic: true
+ foo_service:
+ class: Foo
+ tags:
+ - { name: foo }
+ foo_service_tagged_iterator:
+ class: Bar
+ arguments: [!tagged_iterator { tag: foo, default_priority_method: foopriority }]
+ foo_service_tagged_locator:
+ class: Bar
+ arguments: [!tagged_locator { tag: foo, default_priority_method: foopriority }]
+ Psr\Container\ContainerInterface:
+ alias: service_container
+ public: false
+ Symfony\Component\DependencyInjection\ContainerInterface:
+ alias: service_container
+ public: false
diff --git a/src/Symfony/Component/DependencyInjection/Tests/Loader/XmlFileLoaderTest.php b/src/Symfony/Component/DependencyInjection/Tests/Loader/XmlFileLoaderTest.php
index b57f10c597f5..7e618b6eb96d 100644
--- a/src/Symfony/Component/DependencyInjection/Tests/Loader/XmlFileLoaderTest.php
+++ b/src/Symfony/Component/DependencyInjection/Tests/Loader/XmlFileLoaderTest.php
@@ -336,6 +336,23 @@ public function testParseTaggedArgumentsWithIndexBy()
$this->assertEquals(new ServiceLocatorArgument($taggedIterator), $container->getDefinition('foo_tagged_locator')->getArgument(0));
}
+ public function testParseTaggedArgumentsWithPriority()
+ {
+ $container = new ContainerBuilder();
+ $loader = new XmlFileLoader($container, new FileLocator(self::$fixturesPath.'/xml'));
+ $loader->load('services_with_tagged_priority_method.xml');
+
+ $this->assertCount(1, $container->getDefinition('foo')->getTag('foo_tag'));
+ $this->assertCount(1, $container->getDefinition('foo_tagged_iterator')->getArguments());
+ $this->assertCount(1, $container->getDefinition('foo_tagged_locator')->getArguments());
+
+ $taggedIterator = new TaggedIteratorArgument('foo_tag', null, null, false, 'foopriority');
+ $this->assertEquals($taggedIterator, $container->getDefinition('foo_tagged_iterator')->getArgument(0));
+
+ $taggedIterator = new TaggedIteratorArgument('foo_tag', null, null, true, 'foopriority');
+ $this->assertEquals(new ServiceLocatorArgument($taggedIterator), $container->getDefinition('foo_tagged_locator')->getArgument(0));
+ }
+
/**
* @expectedException \Symfony\Component\DependencyInjection\Exception\InvalidArgumentException
*/
diff --git a/src/Symfony/Component/DependencyInjection/Tests/Loader/YamlFileLoaderTest.php b/src/Symfony/Component/DependencyInjection/Tests/Loader/YamlFileLoaderTest.php
index 0aa30f288c70..0fb4307b27c8 100644
--- a/src/Symfony/Component/DependencyInjection/Tests/Loader/YamlFileLoaderTest.php
+++ b/src/Symfony/Component/DependencyInjection/Tests/Loader/YamlFileLoaderTest.php
@@ -317,6 +317,23 @@ public function testTaggedArgumentsWithIndex()
$this->assertEquals(new ServiceLocatorArgument($taggedIterator), $container->getDefinition('foo_service_tagged_locator')->getArgument(0));
}
+ public function testParseTaggedArgumentsWithPriority()
+ {
+ $container = new ContainerBuilder();
+ $loader = new YamlFileLoader($container, new FileLocator(self::$fixturesPath.'/yaml'));
+ $loader->load('services_with_tagged_priority_method.yml');
+
+ $this->assertCount(1, $container->getDefinition('foo_service')->getTag('foo'));
+ $this->assertCount(1, $container->getDefinition('foo_service_tagged_iterator')->getArguments());
+ $this->assertCount(1, $container->getDefinition('foo_service_tagged_locator')->getArguments());
+
+ $taggedIterator = new TaggedIteratorArgument('foo', null, null, false, 'foopriority');
+ $this->assertEquals($taggedIterator, $container->getDefinition('foo_service_tagged_iterator')->getArgument(0));
+
+ $taggedIterator = new TaggedIteratorArgument('foo', null, null, true, 'foopriority');
+ $this->assertEquals(new ServiceLocatorArgument($taggedIterator), $container->getDefinition('foo_service_tagged_locator')->getArgument(0));
+ }
+
public function testNameOnlyTagsAreAllowedAsString()
{
$container = new ContainerBuilder();
pFad - Phonifier reborn
Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies:
Alternative Proxy
pFad Proxy
pFad v3 Proxy
pFad v4 Proxy