From 84b760b923bbb6f06955f88186e75c7df6952461 Mon Sep 17 00:00:00 2001 From: Fabien Potencier Date: Fri, 9 Nov 2012 16:49:48 +0100 Subject: [PATCH] [HttpKernel] fixed Client when using StreamedResponses (closes #5370) --- src/Symfony/Component/HttpKernel/Client.php | 7 ++++++- .../Component/HttpKernel/Tests/ClientTest.php | 17 +++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Component/HttpKernel/Client.php b/src/Symfony/Component/HttpKernel/Client.php index f5dcd9a376..017ef2fc12 100644 --- a/src/Symfony/Component/HttpKernel/Client.php +++ b/src/Symfony/Component/HttpKernel/Client.php @@ -179,6 +179,11 @@ EOF; $headers['Set-Cookie'] = $cookies; } - return new DomResponse($response->getContent(), $response->getStatusCode(), $headers); + // this is needed to support StreamResponse + ob_start(); + $response->sendContent(); + $content = ob_get_clean(); + + return new DomResponse($content, $response->getStatusCode(), $headers); } } diff --git a/src/Symfony/Component/HttpKernel/Tests/ClientTest.php b/src/Symfony/Component/HttpKernel/Tests/ClientTest.php index c1fc6619f9..4e273069da 100644 --- a/src/Symfony/Component/HttpKernel/Tests/ClientTest.php +++ b/src/Symfony/Component/HttpKernel/Tests/ClientTest.php @@ -15,6 +15,7 @@ use Symfony\Component\HttpKernel\Client; use Symfony\Component\HttpKernel\HttpKernel; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; +use Symfony\Component\HttpFoundation\StreamedResponse; use Symfony\Component\HttpFoundation\Cookie; use Symfony\Component\HttpFoundation\File\UploadedFile; use Symfony\Component\HttpKernel\Tests\Fixtures\TestClient; @@ -86,6 +87,22 @@ class ClientTest extends \PHPUnit_Framework_TestCase $this->assertEquals($expected, $domResponse->getHeader('Set-Cookie', false)); } + public function testFilterResponseSupportsStreamedResponses() + { + $client = new Client(new TestHttpKernel()); + + $r = new \ReflectionObject($client); + $m = $r->getMethod('filterResponse'); + $m->setAccessible(true); + + $response = new StreamedResponse(function () { + echo 'foo'; + }); + + $domResponse = $m->invoke($client, $response); + $this->assertEquals('foo', $domResponse->getContent()); + } + public function testUploadedFile() { $source = tempnam(sys_get_temp_dir(), 'source');