From 3c8d395d0d67e4475af37e77e0e53be6b47957bd Mon Sep 17 00:00:00 2001 From: Fabien Potencier Date: Fri, 9 Aug 2019 13:42:40 +0200 Subject: [PATCH] [HttpKernel] fixed class having a leading \ in a route controller --- .../ContainerControllerResolverTest.php | 30 +++++++++++++++++++ .../Controller/ControllerResolverTest.php | 23 -------------- 2 files changed, 30 insertions(+), 23 deletions(-) diff --git a/src/Symfony/Component/HttpKernel/Tests/Controller/ContainerControllerResolverTest.php b/src/Symfony/Component/HttpKernel/Tests/Controller/ContainerControllerResolverTest.php index 842c84a224..956adb9613 100644 --- a/src/Symfony/Component/HttpKernel/Tests/Controller/ContainerControllerResolverTest.php +++ b/src/Symfony/Component/HttpKernel/Tests/Controller/ContainerControllerResolverTest.php @@ -119,6 +119,36 @@ class ContainerControllerResolverTest extends ControllerResolverTest $this->assertSame($service, $controller); } + /** + * @dataProvider getControllers + */ + public function testInstantiateControllerWhenControllerStartsWithABackslash($controller) + { + $service = new ControllerTestService('foo'); + $class = ControllerTestService::class; + + $container = $this->createMockContainer(); + $container->expects($this->once())->method('has')->with($class)->willReturn(true); + $container->expects($this->once())->method('get')->with($class)->willReturn($service); + + $resolver = $this->createControllerResolver(null, $container); + $request = Request::create('/'); + $request->attributes->set('_controller', $controller); + + $controller = $resolver->getController($request); + + $this->assertInstanceOf(ControllerTestService::class, $controller[0]); + $this->assertSame('action', $controller[1]); + } + + public function getControllers() + { + return [ + ['\\'.ControllerTestService::class.'::action'], + ['\\'.ControllerTestService::class.':action'], + ]; + } + public function testExceptionWhenUsingRemovedControllerServiceWithClassNameAsName() { $this->expectException('InvalidArgumentException'); diff --git a/src/Symfony/Component/HttpKernel/Tests/Controller/ControllerResolverTest.php b/src/Symfony/Component/HttpKernel/Tests/Controller/ControllerResolverTest.php index 576ad76f03..77ce524fc6 100644 --- a/src/Symfony/Component/HttpKernel/Tests/Controller/ControllerResolverTest.php +++ b/src/Symfony/Component/HttpKernel/Tests/Controller/ControllerResolverTest.php @@ -38,18 +38,6 @@ class ControllerResolverTest extends TestCase $this->assertSame($lambda, $controller); } - public function testGetControllerWithStartingBackslash() - { - $resolver = $this->createControllerResolver(); - - $request = Request::create('/'); - $request->attributes->set('_controller', '\\'.ControllerTest::class.'::publicAction'); - $controller = $resolver->getController($request); - - $this->assertInstanceOf(ControllerTest::class, $controller[0]); - $this->assertSame('publicAction', $controller[1]); - } - public function testGetControllerWithObjectAndInvokeMethod() { $resolver = $this->createControllerResolver(); @@ -83,17 +71,6 @@ class ControllerResolverTest extends TestCase $this->assertSame('publicAction', $controller[1]); } - public function testGetControllerWithClassAndMethodAsArrayWithBackslash() - { - $resolver = $this->createControllerResolver(); - - $request = Request::create('/'); - $request->attributes->set('_controller', ['\\'.ControllerTest::class, 'publicAction']); - $controller = $resolver->getController($request); - $this->assertInstanceOf(ControllerTest::class, $controller[0]); - $this->assertSame('publicAction', $controller[1]); - } - public function testGetControllerWithClassAndMethodAsString() { $resolver = $this->createControllerResolver();