4 * This file is part of the Symfony package.
6 * (c) Fabien Potencier <fabien@symfony.com>
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
12 namespace Symfony\Component\HttpKernel\Tests\Controller\ArgumentResolver;
14 use PHPUnit\Framework\TestCase;
15 use Symfony\Component\DependencyInjection\ServiceLocator;
16 use Symfony\Component\HttpFoundation\Request;
17 use Symfony\Component\HttpKernel\Controller\ArgumentResolver\ServiceValueResolver;
18 use Symfony\Component\HttpKernel\ControllerMetadata\ArgumentMetadata;
20 class ServiceValueResolverTest extends TestCase
22 public function testDoNotSupportWhenControllerDoNotExists()
24 $resolver = new ServiceValueResolver(new ServiceLocator(array()));
25 $argument = new ArgumentMetadata('dummy', DummyService::class, false, false, null);
26 $request = $this->requestWithAttributes(array('_controller' => 'my_controller'));
28 $this->assertFalse($resolver->supports($request, $argument));
31 public function testExistingController()
33 $resolver = new ServiceValueResolver(new ServiceLocator(array(
34 'App\\Controller\\Mine::method' => function () {
35 return new ServiceLocator(array(
36 'dummy' => function () {
37 return new DummyService();
43 $request = $this->requestWithAttributes(array('_controller' => 'App\\Controller\\Mine::method'));
44 $argument = new ArgumentMetadata('dummy', DummyService::class, false, false, null);
46 $this->assertTrue($resolver->supports($request, $argument));
47 $this->assertYieldEquals(array(new DummyService()), $resolver->resolve($request, $argument));
50 public function testExistingControllerWithATrailingBackSlash()
52 $resolver = new ServiceValueResolver(new ServiceLocator(array(
53 'App\\Controller\\Mine::method' => function () {
54 return new ServiceLocator(array(
55 'dummy' => function () {
56 return new DummyService();
62 $request = $this->requestWithAttributes(array('_controller' => '\\App\\Controller\\Mine::method'));
63 $argument = new ArgumentMetadata('dummy', DummyService::class, false, false, null);
65 $this->assertTrue($resolver->supports($request, $argument));
66 $this->assertYieldEquals(array(new DummyService()), $resolver->resolve($request, $argument));
69 public function testControllerNameIsAnArray()
71 $resolver = new ServiceValueResolver(new ServiceLocator(array(
72 'App\\Controller\\Mine::method' => function () {
73 return new ServiceLocator(array(
74 'dummy' => function () {
75 return new DummyService();
81 $request = $this->requestWithAttributes(array('_controller' => array('App\\Controller\\Mine', 'method')));
82 $argument = new ArgumentMetadata('dummy', DummyService::class, false, false, null);
84 $this->assertTrue($resolver->supports($request, $argument));
85 $this->assertYieldEquals(array(new DummyService()), $resolver->resolve($request, $argument));
88 private function requestWithAttributes(array $attributes)
90 $request = Request::create('/');
92 foreach ($attributes as $name => $value) {
93 $request->attributes->set($name, $value);
99 private function assertYieldEquals(array $expected, \Generator $generator)
102 foreach ($generator as $arg) {
106 $this->assertEquals($expected, $args);