You are here

class ContainerAwareHttpKernelTest in Zircon Profile 8.0

Same name and namespace in other branches
  1. 8 vendor/symfony/http-kernel/Tests/DependencyInjection/ContainerAwareHttpKernelTest.php \Symfony\Component\HttpKernel\Tests\DependencyInjection\ContainerAwareHttpKernelTest

@group legacy

Hierarchy

  • class \Symfony\Component\HttpKernel\Tests\DependencyInjection\ContainerAwareHttpKernelTest extends \Symfony\Component\HttpKernel\Tests\DependencyInjection\PHPUnit_Framework_TestCase

Expanded class hierarchy of ContainerAwareHttpKernelTest

File

vendor/symfony/http-kernel/Tests/DependencyInjection/ContainerAwareHttpKernelTest.php, line 24

Namespace

Symfony\Component\HttpKernel\Tests\DependencyInjection
View source
class ContainerAwareHttpKernelTest extends \PHPUnit_Framework_TestCase {

  /**
   * @dataProvider getProviderTypes
   */
  public function testHandle($type) {
    $request = new Request();
    $expected = new Response();
    $controller = function () use ($expected) {
      return $expected;
    };
    $container = $this
      ->getMock('Symfony\\Component\\DependencyInjection\\ContainerInterface');
    $this
      ->expectsEnterScopeOnce($container)
      ->expectsLeaveScopeOnce($container)
      ->expectsSetRequestWithAt($container, $request, 3)
      ->expectsSetRequestWithAt($container, null, 4);
    $dispatcher = new EventDispatcher();
    $resolver = $this
      ->getResolverMockFor($controller, $request);
    $stack = new RequestStack();
    $kernel = new ContainerAwareHttpKernel($dispatcher, $container, $resolver, $stack);
    $actual = $kernel
      ->handle($request, $type);
    $this
      ->assertSame($expected, $actual, '->handle() returns the response');
  }

  /**
   * @dataProvider getProviderTypes
   */
  public function testVerifyRequestStackPushPopDuringHandle($type) {
    $request = new Request();
    $expected = new Response();
    $controller = function () use ($expected) {
      return $expected;
    };
    $stack = $this
      ->getMock('Symfony\\Component\\HttpFoundation\\RequestStack', array(
      'push',
      'pop',
    ));
    $stack
      ->expects($this
      ->at(0))
      ->method('push')
      ->with($this
      ->equalTo($request));
    $stack
      ->expects($this
      ->at(1))
      ->method('pop');
    $container = $this
      ->getMock('Symfony\\Component\\DependencyInjection\\ContainerInterface');
    $dispatcher = new EventDispatcher();
    $resolver = $this
      ->getResolverMockFor($controller, $request);
    $kernel = new ContainerAwareHttpKernel($dispatcher, $container, $resolver, $stack);
    $kernel
      ->handle($request, $type);
  }

  /**
   * @dataProvider getProviderTypes
   */
  public function testHandleRestoresThePreviousRequestOnException($type) {
    $request = new Request();
    $expected = new \Exception();
    $controller = function () use ($expected) {
      throw $expected;
    };
    $container = $this
      ->getMock('Symfony\\Component\\DependencyInjection\\ContainerInterface');
    $this
      ->expectsEnterScopeOnce($container)
      ->expectsLeaveScopeOnce($container)
      ->expectsSetRequestWithAt($container, $request, 3)
      ->expectsSetRequestWithAt($container, null, 4);
    $dispatcher = new EventDispatcher();
    $resolver = $this
      ->getMock('Symfony\\Component\\HttpKernel\\Controller\\ControllerResolverInterface');
    $resolver = $this
      ->getResolverMockFor($controller, $request);
    $stack = new RequestStack();
    $kernel = new ContainerAwareHttpKernel($dispatcher, $container, $resolver, $stack);
    try {
      $kernel
        ->handle($request, $type);
      $this
        ->fail('->handle() suppresses the controller exception');
    } catch (\PHPUnit_Framework_Exception $e) {
      throw $e;
    } catch (\Exception $e) {
      $this
        ->assertSame($expected, $e, '->handle() throws the controller exception');
    }
  }
  public function getProviderTypes() {
    return array(
      array(
        HttpKernelInterface::MASTER_REQUEST,
      ),
      array(
        HttpKernelInterface::SUB_REQUEST,
      ),
    );
  }
  private function getResolverMockFor($controller, $request) {
    $resolver = $this
      ->getMock('Symfony\\Component\\HttpKernel\\Controller\\ControllerResolverInterface');
    $resolver
      ->expects($this
      ->once())
      ->method('getController')
      ->with($request)
      ->will($this
      ->returnValue($controller));
    $resolver
      ->expects($this
      ->once())
      ->method('getArguments')
      ->with($request, $controller)
      ->will($this
      ->returnValue(array()));
    return $resolver;
  }
  private function expectsSetRequestWithAt($container, $with, $at) {
    $container
      ->expects($this
      ->at($at))
      ->method('set')
      ->with($this
      ->equalTo('request'), $this
      ->equalTo($with), $this
      ->equalTo('request'));
    return $this;
  }
  private function expectsEnterScopeOnce($container) {
    $container
      ->expects($this
      ->once())
      ->method('enterScope')
      ->with($this
      ->equalTo('request'));
    return $this;
  }
  private function expectsLeaveScopeOnce($container) {
    $container
      ->expects($this
      ->once())
      ->method('leaveScope')
      ->with($this
      ->equalTo('request'));
    return $this;
  }

}

Members