use Symfony\Component\DependencyInjection\Compiler\AutowirePass;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Reference;
+use Symfony\Component\DependencyInjection\Tests\Fixtures\includes\FooVariadic;
/**
* @author Kévin Dunglas <dunglas@gmail.com>
$this->assertEquals('foo', (string) $container->getDefinition('bar')->getArgument(0));
}
+ /**
+ * @requires PHP 5.6
+ */
+ public function testProcessVariadic()
+ {
+ $container = new ContainerBuilder();
+ $container->register('foo', Foo::class);
+ $definition = $container->register('fooVariadic', FooVariadic::class);
+ $definition->setAutowired(true);
+
+ $pass = new AutowirePass();
+ $pass->process($container);
+
+ $this->assertCount(1, $container->getDefinition('fooVariadic')->getArguments());
+ $this->assertEquals('foo', (string) $container->getDefinition('fooVariadic')->getArgument(0));
+ }
+
public function testProcessAutowireParent()
{
$container = new ContainerBuilder();
);
}
+ /**
+ * @dataProvider getCreateResourceTests
+ */
+ public function testCreateResourceForClass($className, $isEqual)
+ {
+ $startingResource = AutowirePass::createResourceForClass(
+ new \ReflectionClass(__NAMESPACE__.'\ClassForResource')
+ );
+ $newResource = AutowirePass::createResourceForClass(
+ new \ReflectionClass(__NAMESPACE__.'\\'.$className)
+ );
+
+ // hack so the objects don't differ by the class name
+ $startingReflObject = new \ReflectionObject($startingResource);
+ $reflProp = $startingReflObject->getProperty('class');
+ $reflProp->setAccessible(true);
+ $reflProp->setValue($startingResource, __NAMESPACE__.'\\'.$className);
+
+ if ($isEqual) {
+ $this->assertEquals($startingResource, $newResource);
+ } else {
+ $this->assertNotEquals($startingResource, $newResource);
+ }
+ }
+
+ public function getCreateResourceTests()
+ {
+ return array(
+ array('IdenticalClassResource', true),
+ array('ClassChangedConstructorArgs', false),
+ );
+ }
+
public function testIgnoreServiceWithClassNotExisting()
{
$container = new ContainerBuilder();
{
}
}
+
+/*
+ * Classes used for testing createResourceForClass
+ */
+class ClassForResource
+{
+ public function __construct($foo, Bar $bar = null)
+ {
+ }
+
+ public function setBar(Bar $bar)
+ {
+ }
+}
+class IdenticalClassResource extends ClassForResource
+{
+}
+class ClassChangedConstructorArgs extends ClassForResource
+{
+ public function __construct($foo, Bar $bar, $baz)
+ {
+ }
+}