diff --git a/src/Symfony/Component/Console/Helper/ProgressBar.php b/src/Symfony/Component/Console/Helper/ProgressBar.php index 61c471424ad4a..66bc33c00fb2d 100644 --- a/src/Symfony/Component/Console/Helper/ProgressBar.php +++ b/src/Symfony/Component/Console/Helper/ProgressBar.php @@ -514,7 +514,7 @@ private static function initPlaceholderFormatters(): array $display = str_repeat($bar->getBarCharacter(), $completeBars); if ($completeBars < $bar->getBarWidth()) { $emptyBars = $bar->getBarWidth() - $completeBars - Helper::strlenWithoutDecoration($output->getFormatter(), $bar->getProgressCharacter()); - $display .= $bar->getProgressCharacter().str_repeat($bar->getEmptyBarCharacter(), $emptyBars); + $display .= $bar->getProgressCharacter().str_repeat($bar->getEmptyBarCharacter(), max($emptyBars, 0)); } return $display; diff --git a/src/Symfony/Component/Console/Tests/Helper/ProgressBarTest.php b/src/Symfony/Component/Console/Tests/Helper/ProgressBarTest.php index 8baf5a6d824cc..71b6c7850ee01 100644 --- a/src/Symfony/Component/Console/Tests/Helper/ProgressBarTest.php +++ b/src/Symfony/Component/Console/Tests/Helper/ProgressBarTest.php @@ -899,6 +899,21 @@ public function testSetFormat() ); } + public function testUnicode() + { + $bar = new ProgressBar($output = $this->getOutputStream(), 10, 0); + ProgressBar::setFormatDefinition('test', '%current%/%max% [%bar%] %percent:3s%% %message% Fruitcake marzipan toffee. Cupcake gummi bears tart dessert ice cream chupa chups cupcake chocolate bar sesame snaps. Croissant halvah cookie jujubes powder macaroon. Fruitcake bear claw bonbon jelly beans oat cake pie muffin Fruitcake marzipan toffee.'); + $bar->setFormat('test'); + $bar->setProgressCharacter('💧'); + $bar->start(); + rewind($output->getStream()); + $this->assertStringContainsString( + ' 0/10 [💧] 0%', + stream_get_contents($output->getStream()) + ); + $bar->finish(); + } + /** * @dataProvider provideFormat */