|
16 | 16 | use Symfony\Component\DependencyInjection\Compiler\AutowireRequiredMethodsPass;
|
17 | 17 | use Symfony\Component\DependencyInjection\Compiler\ResolveBindingsPass;
|
18 | 18 | use Symfony\Component\DependencyInjection\ContainerBuilder;
|
| 19 | +use Symfony\Component\DependencyInjection\Definition; |
| 20 | +use Symfony\Component\DependencyInjection\Exception\RuntimeException; |
19 | 21 | use Symfony\Component\DependencyInjection\Reference;
|
20 | 22 | use Symfony\Component\DependencyInjection\Tests\Fixtures\CaseSensitiveClass;
|
21 | 23 | use Symfony\Component\DependencyInjection\Tests\Fixtures\NamedArgumentsDummy;
|
22 | 24 | use Symfony\Component\DependencyInjection\Tests\Fixtures\ParentNotExists;
|
23 | 25 | use Symfony\Component\DependencyInjection\TypedReference;
|
| 26 | +use Symfony\Component\HttpKernel\HttpKernelInterface; |
24 | 27 |
|
25 | 28 | require_once __DIR__.'/../Fixtures/includes/autowiring_classes.php';
|
26 | 29 |
|
@@ -111,4 +114,45 @@ public function testScalarSetter()
|
111 | 114 |
|
112 | 115 | $this->assertEquals([['setDefaultLocale', ['fr']]], $definition->getMethodCalls());
|
113 | 116 | }
|
| 117 | + |
| 118 | + public function testWithNonExistingSetterAndBinding() |
| 119 | + { |
| 120 | + $container = new ContainerBuilder(); |
| 121 | + |
| 122 | + $bindings = [ |
| 123 | + '$c' => (new Definition('logger'))->setFactory('logger'), |
| 124 | + ]; |
| 125 | + |
| 126 | + $definition = $container->register(HttpKernelInterface::class, HttpKernelInterface::class); |
| 127 | + $definition->addMethodCall('setLogger'); |
| 128 | + $definition->setBindings($bindings); |
| 129 | + $this->expectException(RuntimeException::class); |
| 130 | + |
| 131 | + $pass = new ResolveBindingsPass(); |
| 132 | + $pass->process($container); |
| 133 | + } |
| 134 | + |
| 135 | + public function testTupleBinding() |
| 136 | + { |
| 137 | + $container = new ContainerBuilder(); |
| 138 | + |
| 139 | + $bindings = [ |
| 140 | + '$c' => new BoundArgument(new Reference('bar')), |
| 141 | + CaseSensitiveClass::class.'$c' => new BoundArgument(new Reference('foo')), |
| 142 | + ]; |
| 143 | + |
| 144 | + $definition = $container->register(NamedArgumentsDummy::class, NamedArgumentsDummy::class); |
| 145 | + $definition->addMethodCall('setSensitiveClass'); |
| 146 | + $definition->addMethodCall('setAnotherC'); |
| 147 | + $definition->setBindings($bindings); |
| 148 | + |
| 149 | + $pass = new ResolveBindingsPass(); |
| 150 | + $pass->process($container); |
| 151 | + |
| 152 | + $expected = [ |
| 153 | + ['setSensitiveClass', [new Reference('foo')]], |
| 154 | + ['setAnotherC', [new Reference('bar')]], |
| 155 | + ]; |
| 156 | + $this->assertEquals($expected, $definition->getMethodCalls()); |
| 157 | + } |
114 | 158 | }
|
0 commit comments