public function testGetController() {
$logger = new Logger();
$resolver = new ControllerResolver($logger);
$request = Request::create('/');
$this
->assertFalse($resolver
->getController($request), '->getController() returns false when the request has no _controller attribute');
$this
->assertEquals(array(
'Unable to look for the controller as the "_controller" parameter is missing',
), $logger
->getLogs('warning'));
$request->attributes
->set('_controller', 'Symfony\\Component\\HttpKernel\\Tests\\ControllerResolverTest::testGetController');
$controller = $resolver
->getController($request);
$this
->assertInstanceOf('Symfony\\Component\\HttpKernel\\Tests\\ControllerResolverTest', $controller[0], '->getController() returns a PHP callable');
$request->attributes
->set('_controller', $lambda = function () {
});
$controller = $resolver
->getController($request);
$this
->assertSame($lambda, $controller);
$request->attributes
->set('_controller', $this);
$controller = $resolver
->getController($request);
$this
->assertSame($this, $controller);
$request->attributes
->set('_controller', 'Symfony\\Component\\HttpKernel\\Tests\\ControllerResolverTest');
$controller = $resolver
->getController($request);
$this
->assertInstanceOf('Symfony\\Component\\HttpKernel\\Tests\\ControllerResolverTest', $controller);
$request->attributes
->set('_controller', array(
$this,
'controllerMethod1',
));
$controller = $resolver
->getController($request);
$this
->assertSame(array(
$this,
'controllerMethod1',
), $controller);
$request->attributes
->set('_controller', array(
'Symfony\\Component\\HttpKernel\\Tests\\ControllerResolverTest',
'controllerMethod4',
));
$controller = $resolver
->getController($request);
$this
->assertSame(array(
'Symfony\\Component\\HttpKernel\\Tests\\ControllerResolverTest',
'controllerMethod4',
), $controller);
$request->attributes
->set('_controller', 'Symfony\\Component\\HttpKernel\\Tests\\some_controller_function');
$controller = $resolver
->getController($request);
$this
->assertSame('Symfony\\Component\\HttpKernel\\Tests\\some_controller_function', $controller);
$request->attributes
->set('_controller', 'foo');
try {
$resolver
->getController($request);
$this
->fail('->getController() throws an \\InvalidArgumentException if the _controller attribute is not well-formatted');
} catch (\Exception $e) {
$this
->assertInstanceOf('\\InvalidArgumentException', $e, '->getController() throws an \\InvalidArgumentException if the _controller attribute is not well-formatted');
}
$request->attributes
->set('_controller', 'foo::bar');
try {
$resolver
->getController($request);
$this
->fail('->getController() throws an \\InvalidArgumentException if the _controller attribute contains a non-existent class');
} catch (\Exception $e) {
$this
->assertInstanceOf('\\InvalidArgumentException', $e, '->getController() throws an \\InvalidArgumentException if the _controller attribute contains a non-existent class');
}
$request->attributes
->set('_controller', 'Symfony\\Component\\HttpKernel\\Tests\\ControllerResolverTest::bar');
try {
$resolver
->getController($request);
$this
->fail('->getController() throws an \\InvalidArgumentException if the _controller attribute contains a non-existent method');
} catch (\Exception $e) {
$this
->assertInstanceOf('\\InvalidArgumentException', $e, '->getController() throws an \\InvalidArgumentException if the _controller attribute contains a non-existent method');
}
}