Updated to Drupal 8.5. Core Media not yet in use.
[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\NamedArgumentsDummy;
21 use Symfony\Component\DependencyInjection\Tests\Fixtures\CaseSensitiveClass;
22 use Symfony\Component\DependencyInjection\TypedReference;
23
24 require_once __DIR__.'/../Fixtures/includes/autowiring_classes.php';
25
26 class ResolveBindingsPassTest extends TestCase
27 {
28     public function testProcess()
29     {
30         $container = new ContainerBuilder();
31
32         $bindings = array(CaseSensitiveClass::class => new BoundArgument(new Reference('foo')));
33
34         $definition = $container->register(NamedArgumentsDummy::class, NamedArgumentsDummy::class);
35         $definition->setArguments(array(1 => '123'));
36         $definition->addMethodCall('setSensitiveClass');
37         $definition->setBindings($bindings);
38
39         $container->register('foo', CaseSensitiveClass::class)
40             ->setBindings($bindings);
41
42         $pass = new ResolveBindingsPass();
43         $pass->process($container);
44
45         $this->assertEquals(array(new Reference('foo'), '123'), $definition->getArguments());
46         $this->assertEquals(array(array('setSensitiveClass', array(new Reference('foo')))), $definition->getMethodCalls());
47     }
48
49     /**
50      * @expectedException \Symfony\Component\DependencyInjection\Exception\InvalidArgumentException
51      * @expectedExceptionMessage Unused binding "$quz" in service "Symfony\Component\DependencyInjection\Tests\Fixtures\NamedArgumentsDummy".
52      */
53     public function testUnusedBinding()
54     {
55         $container = new ContainerBuilder();
56
57         $definition = $container->register(NamedArgumentsDummy::class, NamedArgumentsDummy::class);
58         $definition->setBindings(array('$quz' => '123'));
59
60         $pass = new ResolveBindingsPass();
61         $pass->process($container);
62     }
63
64     public function testTypedReferenceSupport()
65     {
66         $container = new ContainerBuilder();
67
68         $bindings = array(CaseSensitiveClass::class => new BoundArgument(new Reference('foo')));
69
70         // Explicit service id
71         $definition1 = $container->register('def1', NamedArgumentsDummy::class);
72         $definition1->addArgument($typedRef = new TypedReference('bar', CaseSensitiveClass::class));
73         $definition1->setBindings($bindings);
74
75         $definition2 = $container->register('def2', NamedArgumentsDummy::class);
76         $definition2->addArgument(new TypedReference(CaseSensitiveClass::class, CaseSensitiveClass::class));
77         $definition2->setBindings($bindings);
78
79         $pass = new ResolveBindingsPass();
80         $pass->process($container);
81
82         $this->assertEquals(array($typedRef), $container->getDefinition('def1')->getArguments());
83         $this->assertEquals(array(new Reference('foo')), $container->getDefinition('def2')->getArguments());
84     }
85
86     public function testScalarSetter()
87     {
88         $container = new ContainerBuilder();
89
90         $definition = $container->autowire('foo', ScalarSetter::class);
91         $definition->setBindings(array('$defaultLocale' => 'fr'));
92
93         (new AutowireRequiredMethodsPass())->process($container);
94         (new ResolveBindingsPass())->process($container);
95
96         $this->assertEquals(array(array('setDefaultLocale', array('fr'))), $definition->getMethodCalls());
97     }
98 }