123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185 |
- <?php
- /*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
- namespace Symfony\Component\Console\Tests\Helper;
- use Symfony\Component\Console\Helper\ProgressHelper;
- use Symfony\Component\Console\Output\StreamOutput;
- class ProgressHelperTest extends \PHPUnit_Framework_TestCase
- {
- public function testAdvance()
- {
- $progress = new ProgressHelper();
- $progress->start($output = $this->getOutputStream());
- $progress->advance();
- rewind($output->getStream());
- $this->assertEquals($this->generateOutput(' 1 [->--------------------------]'), stream_get_contents($output->getStream()));
- }
- public function testAdvanceWithStep()
- {
- $progress = new ProgressHelper();
- $progress->start($output = $this->getOutputStream());
- $progress->advance(5);
- rewind($output->getStream());
- $this->assertEquals($this->generateOutput(' 5 [----->----------------------]'), stream_get_contents($output->getStream()));
- }
- public function testAdvanceMultipleTimes()
- {
- $progress = new ProgressHelper();
- $progress->start($output = $this->getOutputStream());
- $progress->advance(3);
- $progress->advance(2);
- rewind($output->getStream());
- $this->assertEquals($this->generateOutput(' 3 [--->------------------------]').$this->generateOutput(' 5 [----->----------------------]'), stream_get_contents($output->getStream()));
- }
- public function testCustomizations()
- {
- $progress = new ProgressHelper();
- $progress->setBarWidth(10);
- $progress->setBarCharacter('_');
- $progress->setEmptyBarCharacter(' ');
- $progress->setProgressCharacter('/');
- $progress->setFormat(' %current%/%max% [%bar%] %percent%%');
- $progress->start($output = $this->getOutputStream(), 10);
- $progress->advance();
- rewind($output->getStream());
- $this->assertEquals($this->generateOutput(' 1/10 [_/ ] 10%'), stream_get_contents($output->getStream()));
- }
- public function testPercent()
- {
- $progress = new ProgressHelper();
- $progress->start($output = $this->getOutputStream(), 50);
- $progress->display();
- $progress->advance();
- $progress->advance();
- rewind($output->getStream());
- $this->assertEquals($this->generateOutput(' 0/50 [>---------------------------] 0%').$this->generateOutput(' 1/50 [>---------------------------] 2%').$this->generateOutput(' 2/50 [=>--------------------------] 4%'), stream_get_contents($output->getStream()));
- }
- public function testOverwriteWithShorterLine()
- {
- $progress = new ProgressHelper();
- $progress->setFormat(' %current%/%max% [%bar%] %percent%%');
- $progress->start($output = $this->getOutputStream(), 50);
- $progress->display();
- $progress->advance();
- // set shorter format
- $progress->setFormat(' %current%/%max% [%bar%]');
- $progress->advance();
- rewind($output->getStream());
- $this->assertEquals(
- $this->generateOutput(' 0/50 [>---------------------------] 0%') .
- $this->generateOutput(' 1/50 [>---------------------------] 2%') .
- $this->generateOutput(' 2/50 [=>--------------------------] '),
- stream_get_contents($output->getStream())
- );
- }
- public function testSetCurrentProgress()
- {
- $progress = new ProgressHelper();
- $progress->start($output = $this->getOutputStream(), 50);
- $progress->display();
- $progress->advance();
- $progress->setCurrent(15);
- $progress->setCurrent(25);
- rewind($output->getStream());
- $this->assertEquals(
- $this->generateOutput(' 0/50 [>---------------------------] 0%') .
- $this->generateOutput(' 1/50 [>---------------------------] 2%') .
- $this->generateOutput(' 15/50 [========>-------------------] 30%') .
- $this->generateOutput(' 25/50 [==============>-------------] 50%'),
- stream_get_contents($output->getStream())
- );
- }
- /**
- * @expectedException \LogicException
- * @expectedExceptionMessage You must start the progress bar
- */
- public function testSetCurrentBeforeStarting()
- {
- $progress = new ProgressHelper();
- $progress->setCurrent(15);
- }
- /**
- * @expectedException \LogicException
- * @expectedExceptionMessage You can't regress the progress bar
- */
- public function testRegressProgress()
- {
- $progress = new ProgressHelper();
- $progress->start($output = $this->getOutputStream(), 50);
- $progress->setCurrent(15);
- $progress->setCurrent(10);
- }
- public function testMultiByteSupport()
- {
- if (!function_exists('mb_strlen') || (false === $encoding = mb_detect_encoding('■'))) {
- $this->markTestSkipped('The mbstring extension is needed for multi-byte support');
- }
- $progress = new ProgressHelper();
- $progress->start($output = $this->getOutputStream());
- $progress->setBarCharacter('■');
- $progress->advance(3);
- rewind($output->getStream());
- $this->assertEquals($this->generateOutput(' 3 [■■■>------------------------]'), stream_get_contents($output->getStream()));
- }
- public function testPercentNotHundredBeforeComplete()
- {
- $progress = new ProgressHelper();
- $progress->start($output = $this->getOutputStream(), 200);
- $progress->display();
- $progress->advance(199);
- $progress->advance();
- rewind($output->getStream());
- $this->assertEquals($this->generateOutput(' 0/200 [>---------------------------] 0%').$this->generateOutput(' 199/200 [===========================>] 99%').$this->generateOutput(' 200/200 [============================] 100%'), stream_get_contents($output->getStream()));
- }
- protected function getOutputStream()
- {
- return new StreamOutput(fopen('php://memory', 'r+', false));
- }
- protected $lastMessagesLength;
- protected function generateOutput($expected)
- {
- $expectedout = $expected;
- if ($this->lastMessagesLength !== null) {
- $expectedout = str_pad($expected, $this->lastMessagesLength, "\x20", STR_PAD_RIGHT);
- }
- $this->lastMessagesLength = strlen($expectedout);
- return "\x0D".$expectedout;
- }
- }
|