From 29c71a50f1f8bb4f7f2489d6ec1b1a9c4024cbf0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20P=C3=A4rtel?= Date: Fri, 17 May 2013 10:15:24 +0300 Subject: [PATCH] [Console] Add clear() to ProgressHelper. One may want to print something else while the progress bar is running. The output will be messy if the progress bar is not removed first. One may also want to remove the progress bar after the work is complete. --- .../Component/Console/Helper/ProgressHelper.php | 12 ++++++++++++ .../Console/Tests/Helper/ProgressHelperTest.php | 14 ++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/src/Symfony/Component/Console/Helper/ProgressHelper.php b/src/Symfony/Component/Console/Helper/ProgressHelper.php index 4ed92cfab3..4301818e21 100644 --- a/src/Symfony/Component/Console/Helper/ProgressHelper.php +++ b/src/Symfony/Component/Console/Helper/ProgressHelper.php @@ -289,6 +289,18 @@ class ProgressHelper extends Helper $this->overwrite($this->output, $message); } + /** + * Removes the progress bar from the current line. + * + * This is useful if you wish to write some output + * while a progress bar is running. + * Call display() to show the progress bar again. + */ + public function clear() + { + $this->overwrite($this->output, ''); + } + /** * Finishes the progress output. */ diff --git a/src/Symfony/Component/Console/Tests/Helper/ProgressHelperTest.php b/src/Symfony/Component/Console/Tests/Helper/ProgressHelperTest.php index abb8d0b681..4fe8ab2906 100644 --- a/src/Symfony/Component/Console/Tests/Helper/ProgressHelperTest.php +++ b/src/Symfony/Component/Console/Tests/Helper/ProgressHelperTest.php @@ -151,6 +151,20 @@ class ProgressHelperTest extends \PHPUnit_Framework_TestCase $this->assertEquals($this->generateOutput(' 3 [■■■>------------------------]'), stream_get_contents($output->getStream())); } + public function testClear() + { + $progress = new ProgressHelper(); + $progress->start($output = $this->getOutputStream(), 50); + $progress->setCurrent(25); + $progress->clear(); + + rewind($output->getStream()); + $this->assertEquals( + $this->generateOutput(' 25/50 [==============>-------------] 50%') . $this->generateOutput(''), + stream_get_contents($output->getStream()) + ); + } + protected function getOutputStream() { return new StreamOutput(fopen('php://memory', 'r+', false));