d59b95af5c406f2fb9d5c4b63dcb42ece4942b40
[yaffs-website] / vendor / symfony / dependency-injection / Tests / Compiler / ResolveBindingsPassTest.php
1 <?php
2
3 /*
4  * This file is part of the Symfony package.
5  *
6  * (c) Fabien Potencier <fabien@symfony.com>
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\Compiler;
13
14 use PHPUnit\Framework\TestCase;
15 use Symfony\Component\DependencyInjection\Argument\BoundArgument;
16 use Symfony\Component\DependencyInjection\Compiler\AutowireRequiredMethodsPass;
17 use Symfony\Component\DependencyInjection\Compiler\ResolveBindingsPass;
18 use Symfony\Component\DependencyInjection\ContainerBuilder;
19 use Symfony\Component\DependencyInjection\Reference;
20 use Symfony\Component\DependencyInjection\Tests\Fixtures\CaseSensitiveClass;
21 use Symfony\Component\DependencyInjection\Tests\Fixtures\NamedArgumentsDummy;
22 use Symfony\Component\DependencyInjection\Tests\Fixtures\ParentNotExists;
23 use Symfony\Component\DependencyInjection\TypedReference;
24
25 require_once __DIR__.'/../Fixtures/includes/autowiring_classes.php';
26
27 class ResolveBindingsPassTest extends TestCase
28 {
29     public function testProcess()
30     {
31         $container = new ContainerBuilder();
32
33         $bindings = array(CaseSensitiveClass::class => new BoundArgument(new Reference('foo')));
34
35         $definition = $container->register(NamedArgumentsDummy::class, NamedArgumentsDummy::class);
36         $definition->setArguments(array(1 => '123'));
37         $definition->addMethodCall('setSensitiveClass');
38         $definition->setBindings($bindings);
39
40         $container->register('foo', CaseSensitiveClass::class)
41             ->setBindings($bindings);
42
43         $pass = new ResolveBindingsPass();
44         $pass->process($container);
45
46         $this->assertEquals(array(new Reference('foo'), '123'), $definition->getArguments());
47         $this->assertEquals(array(array('setSensitiveClass', array(new Reference('foo')))), $definition->getMethodCalls());
48     }
49
50     /**
51      * @expectedException \Symfony\Component\DependencyInjection\Exception\InvalidArgumentException
52      * @expectedExceptionMessage Unused binding "$quz" in service "Symfony\Component\DependencyInjection\Tests\Fixtures\NamedArgumentsDummy".
53      */
54     public function testUnusedBinding()
55     {
56         $container = new ContainerBuilder();
57
58         $definition = $container->register(NamedArgumentsDummy::class, NamedArgumentsDummy::class);
59         $definition->setBindings(array('$quz' => '123'));
60
61         $pass = new ResolveBindingsPass();
62         $pass->process($container);
63     }
64
65     /**
66      * @expectedException \Symfony\Component\DependencyInjection\Exception\InvalidArgumentException
67      * @expectedExceptionMessageRegexp Unused binding "$quz" in service [\s\S]+ Invalid service ".*\\ParentNotExists": class NotExists not found\.
68      */
69     public function testMissingParent()
70     {
71         $container = new ContainerBuilder();
72
73         $definition = $container->register(ParentNotExists::class, ParentNotExists::class);
74         $definition->setBindings(array('$quz' => '123'));
75
76         $pass = new ResolveBindingsPass();
77         $pass->process($container);
78     }
79
80     public function testTypedReferenceSupport()
81     {
82         $container = new ContainerBuilder();
83
84         $bindings = array(CaseSensitiveClass::class => new BoundArgument(new Reference('foo')));
85
86         // Explicit service id
87         $definition1 = $container->register('def1', NamedArgumentsDummy::class);
88         $definition1->addArgument($typedRef = new TypedReference('bar', CaseSensitiveClass::class));
89         $definition1->setBindings($bindings);
90
91         $definition2 = $container->register('def2', NamedArgumentsDummy::class);
92         $definition2->addArgument(new TypedReference(CaseSensitiveClass::class, CaseSensitiveClass::class));
93         $definition2->setBindings($bindings);
94
95         $pass = new ResolveBindingsPass();
96         $pass->process($container);
97
98         $this->assertEquals(array($typedRef), $container->getDefinition('def1')->getArguments());
99         $this->assertEquals(array(new Reference('foo')), $container->getDefinition('def2')->getArguments());
100     }
101
102     public function testScalarSetter()
103     {
104         $container = new ContainerBuilder();
105
106         $definition = $container->autowire('foo', ScalarSetter::class);
107         $definition->setBindings(array('$defaultLocale' => 'fr'));
108
109         (new AutowireRequiredMethodsPass())->process($container);
110         (new ResolveBindingsPass())->process($container);
111
112         $this->assertEquals(array(array('setDefaultLocale', array('fr'))), $definition->getMethodCalls());
113     }
114 }