public function ControllerResolverTest::testGetController

File

drupal/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Tests/Controller/ControllerResolverTest.php, line 26

Class

ControllerResolverTest

Namespace

Symfony\Component\HttpKernel\Tests

Code

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');
  }
}