Skip to content

Commit d9ab24c

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

File tree

2 files changed

+20
-2
lines changed

2 files changed

+20
-2
lines changed

src/Symfony/Component/HttpKernel/HttpKernelBrowser.php

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -181,9 +181,14 @@ protected function filterFiles(array $files): array
181181
protected function filterResponse(object $response): DomResponse
182182
{
183183
// this is needed to support StreamedResponse
184-
ob_start();
184+
$content = '';
185+
ob_start(static function (string $chunk) use (&$content): string {
186+
$content .= $chunk;
187+
188+
return $chunk;
189+
});
185190
$response->sendContent();
186-
$content = ob_get_clean();
191+
ob_end_clean();
187192

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

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)