From ea74610723f789fbe478803fc71babcb5d6642f9 Mon Sep 17 00:00:00 2001 From: Robert Queck Date: Tue, 11 Dec 2012 14:31:22 +0100 Subject: [PATCH] jumping progress bar fix for windows & unix --- .../Component/Console/Helper/ProgressHelper.php | 8 +++++++- .../Console/Tests/Helper/ProgressHelperTest.php | 12 +++++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/Symfony/Component/Console/Helper/ProgressHelper.php b/src/Symfony/Component/Console/Helper/ProgressHelper.php index e2db53bc5f..2ae910a920 100644 --- a/src/Symfony/Component/Console/Helper/ProgressHelper.php +++ b/src/Symfony/Component/Console/Helper/ProgressHelper.php @@ -36,6 +36,7 @@ class ProgressHelper extends Helper private $format = null; private $redrawFreq = 1; + private $lastMessagesLength; private $barCharOriginal; /** @@ -384,8 +385,13 @@ class ProgressHelper extends Helper private function overwrite(OutputInterface $output, $messages) { $output->write("\x0D"); // carriage return - $output->write("\x1B\x5B\x4B"); // clear line + if($this->lastMessagesLength!==null){ + $output->write(str_repeat("\x20", $this->lastMessagesLength)); //clear the line with the length of the last message + $output->write("\x0D"); // carriage return + } $output->write($messages); + + $this->lastMessagesLength=strlen($messages); } /** diff --git a/src/Symfony/Component/Console/Tests/Helper/ProgressHelperTest.php b/src/Symfony/Component/Console/Tests/Helper/ProgressHelperTest.php index 8eafb57f79..0b407d0caf 100644 --- a/src/Symfony/Component/Console/Tests/Helper/ProgressHelperTest.php +++ b/src/Symfony/Component/Console/Tests/Helper/ProgressHelperTest.php @@ -80,8 +80,18 @@ class ProgressHelperTest extends \PHPUnit_Framework_TestCase return new StreamOutput(fopen('php://memory', 'r+', false)); } + protected $lastMessagesLength; + protected function generateOutput($expected) { - return "\x0D\x1B\x5B\x4B".$expected; + $expectedout = $expected; + + if($this->lastMessagesLength!==null){ + $expectedout=str_repeat("\x20", $this->lastMessagesLength)."\x0D".$expected; + } + + $this->lastMessagesLength=strlen($expected); + + return "\x0D".$expectedout; } }