/**
* @dataProvider getProviderTypes
*/
public function testHandleRestoresThePreviousRequestOnException($type)
{
$request = new Request();
$expected = new \Exception();
$container = $this->getMock('Symfony\\Component\\DependencyInjection\\ContainerInterface');
$container->expects($this->once())->method('enterScope')->with($this->equalTo('request'));
$container->expects($this->once())->method('leaveScope')->with($this->equalTo('request'));
$container->expects($this->once())->method('set')->with($this->equalTo('request'), $this->equalTo($request), $this->equalTo('request'));
$dispatcher = new EventDispatcher();
$resolver = $this->getMock('Symfony\\Component\\HttpKernel\\Controller\\ControllerResolverInterface');
$kernel = new HttpKernel($dispatcher, $container, $resolver);
$controller = function () use($expected) {
throw $expected;
};
$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()));
try {
$kernel->handle($request, $type);
$this->fail('->handle() suppresses the controller exception');
} catch (\Exception $actual) {
$this->assertSame($expected, $actual, '->handle() throws the controller exception');
}
}