Skip to content

Commit fd8fb64

Browse files
committed
[HttpKernel] Fix StreamedResponse with chunks support in HttpKernelBrowser
1 parent a2b613e commit fd8fb64

File tree

2 files changed

+25
-3
lines changed

2 files changed

+25
-3
lines changed

src/Symfony/Component/HttpKernel/HttpKernelBrowser.php

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -181,9 +181,18 @@ protected function filterFiles(array $files): array
181181
protected function filterResponse(object $response): DomResponse
182182
{
183183
// this is needed to support StreamedResponse
184-
ob_start();
185-
$response->sendContent();
186-
$content = ob_get_clean();
184+
$content = '';
185+
ob_start(static function (string $chunk) use (&$content): string {
186+
$content .= $chunk;
187+
188+
return $chunk;
189+
});
190+
191+
try {
192+
$response->sendContent();
193+
} finally {
194+
ob_end_clean();
195+
}
187196

188197
return new DomResponse($content, $response->getStatusCode(), $response->headers->all());
189198
}

src/Symfony/Component/HttpKernel/Tests/HttpKernelBrowserTest.php

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,19 @@ public function testFilterResponseSupportsStreamedResponses()
8989
$this->assertEquals('foo', $domResponse->getContent());
9090
}
9191

92+
public function testFilterResponseSupportsStreamedResponsesWithChunks()
93+
{
94+
$client = new HttpKernelBrowser(new TestHttpKernel());
95+
96+
$r = new \ReflectionObject($client);
97+
$m = $r->getMethod('filterResponse');
98+
99+
$response = new StreamedResponse(new \ArrayIterator(['foo']));
100+
101+
$domResponse = $m->invoke($client, $response);
102+
$this->assertEquals('foo', $domResponse->getContent());
103+
}
104+
92105
public function testUploadedFile()
93106
{
94107
$source = tempnam(sys_get_temp_dir(), 'source');

0 commit comments

Comments
 (0)