Updated to Drupal 8.5. Core Media not yet in use.
[yaffs-website] / vendor / symfony / dependency-injection / Tests / Compiler / ResolveNamedArgumentsPassTest.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\Compiler\ResolveNamedArgumentsPass;
16 use Symfony\Component\DependencyInjection\ContainerBuilder;
17 use Symfony\Component\DependencyInjection\Reference;
18 use Symfony\Component\DependencyInjection\Tests\Fixtures\CaseSensitiveClass;
19 use Symfony\Component\DependencyInjection\Tests\Fixtures\NamedArgumentsDummy;
20 use Symfony\Component\DependencyInjection\Tests\Fixtures\SimilarArgumentsDummy;
21
22 /**
23  * @author Kévin Dunglas <dunglas@gmail.com>
24  */
25 class ResolveNamedArgumentsPassTest extends TestCase
26 {
27     public function testProcess()
28     {
29         $container = new ContainerBuilder();
30
31         $definition = $container->register(NamedArgumentsDummy::class, NamedArgumentsDummy::class);
32         $definition->setArguments(array(
33             2 => 'http://api.example.com',
34             '$apiKey' => '123',
35             0 => new Reference('foo'),
36         ));
37         $definition->addMethodCall('setApiKey', array('$apiKey' => '123'));
38
39         $pass = new ResolveNamedArgumentsPass();
40         $pass->process($container);
41
42         $this->assertEquals(array(0 => new Reference('foo'), 1 => '123', 2 => 'http://api.example.com'), $definition->getArguments());
43         $this->assertEquals(array(array('setApiKey', array('123'))), $definition->getMethodCalls());
44     }
45
46     public function testWithFactory()
47     {
48         $container = new ContainerBuilder();
49
50         $container->register('factory', NoConstructor::class);
51         $definition = $container->register('foo', NoConstructor::class)
52             ->setFactory(array(new Reference('factory'), 'create'))
53             ->setArguments(array('$apiKey' => '123'));
54
55         $pass = new ResolveNamedArgumentsPass();
56         $pass->process($container);
57
58         $this->assertSame(array(0 => '123'), $definition->getArguments());
59     }
60
61     /**
62      * @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException
63      */
64     public function testClassNull()
65     {
66         $container = new ContainerBuilder();
67
68         $definition = $container->register(NamedArgumentsDummy::class);
69         $definition->setArguments(array('$apiKey' => '123'));
70
71         $pass = new ResolveNamedArgumentsPass();
72         $pass->process($container);
73     }
74
75     /**
76      * @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException
77      */
78     public function testClassNotExist()
79     {
80         $container = new ContainerBuilder();
81
82         $definition = $container->register(NotExist::class, NotExist::class);
83         $definition->setArguments(array('$apiKey' => '123'));
84
85         $pass = new ResolveNamedArgumentsPass();
86         $pass->process($container);
87     }
88
89     /**
90      * @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException
91      */
92     public function testClassNoConstructor()
93     {
94         $container = new ContainerBuilder();
95
96         $definition = $container->register(NoConstructor::class, NoConstructor::class);
97         $definition->setArguments(array('$apiKey' => '123'));
98
99         $pass = new ResolveNamedArgumentsPass();
100         $pass->process($container);
101     }
102
103     /**
104      * @expectedException \Symfony\Component\DependencyInjection\Exception\InvalidArgumentException
105      */
106     public function testArgumentNotFound()
107     {
108         $container = new ContainerBuilder();
109
110         $definition = $container->register(NamedArgumentsDummy::class, NamedArgumentsDummy::class);
111         $definition->setArguments(array('$notFound' => '123'));
112
113         $pass = new ResolveNamedArgumentsPass();
114         $pass->process($container);
115     }
116
117     public function testTypedArgument()
118     {
119         $container = new ContainerBuilder();
120
121         $definition = $container->register(NamedArgumentsDummy::class, NamedArgumentsDummy::class);
122         $definition->setArguments(array('$apiKey' => '123', CaseSensitiveClass::class => new Reference('foo')));
123
124         $pass = new ResolveNamedArgumentsPass();
125         $pass->process($container);
126
127         $this->assertEquals(array(new Reference('foo'), '123'), $definition->getArguments());
128     }
129
130     public function testResolvesMultipleArgumentsOfTheSameType()
131     {
132         $container = new ContainerBuilder();
133
134         $definition = $container->register(SimilarArgumentsDummy::class, SimilarArgumentsDummy::class);
135         $definition->setArguments(array(CaseSensitiveClass::class => new Reference('foo'), '$token' => 'qwerty'));
136
137         $pass = new ResolveNamedArgumentsPass();
138         $pass->process($container);
139
140         $this->assertEquals(array(new Reference('foo'), 'qwerty', new Reference('foo')), $definition->getArguments());
141     }
142
143     public function testResolvePrioritizeNamedOverType()
144     {
145         $container = new ContainerBuilder();
146
147         $definition = $container->register(SimilarArgumentsDummy::class, SimilarArgumentsDummy::class);
148         $definition->setArguments(array(CaseSensitiveClass::class => new Reference('foo'), '$token' => 'qwerty', '$class1' => new Reference('bar')));
149
150         $pass = new ResolveNamedArgumentsPass();
151         $pass->process($container);
152
153         $this->assertEquals(array(new Reference('bar'), 'qwerty', new Reference('foo')), $definition->getArguments());
154     }
155 }
156
157 class NoConstructor
158 {
159     public static function create($apiKey)
160     {
161     }
162 }