[COMPOSER] Add new php-ffmpeg package
This commit is contained in:
		
							
								
								
									
										662
									
								
								vendor/symfony/console/Tests/Helper/ProgressBarTest.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										662
									
								
								vendor/symfony/console/Tests/Helper/ProgressBarTest.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,662 @@ | ||||
| <?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 PHPUnit\Framework\TestCase; | ||||
| use Symfony\Component\Console\Helper\Helper; | ||||
| use Symfony\Component\Console\Helper\ProgressBar; | ||||
| use Symfony\Component\Console\Output\StreamOutput; | ||||
|  | ||||
| /** | ||||
|  * @group time-sensitive | ||||
|  */ | ||||
| class ProgressBarTest extends TestCase | ||||
| { | ||||
|     public function testMultipleStart() | ||||
|     { | ||||
|         $bar = new ProgressBar($output = $this->getOutputStream()); | ||||
|         $bar->start(); | ||||
|         $bar->advance(); | ||||
|         $bar->start(); | ||||
|  | ||||
|         rewind($output->getStream()); | ||||
|         $this->assertEquals( | ||||
|             '    0 [>---------------------------]'. | ||||
|             $this->generateOutput('    1 [->--------------------------]'). | ||||
|             $this->generateOutput('    0 [>---------------------------]'), | ||||
|             stream_get_contents($output->getStream()) | ||||
|         ); | ||||
|     } | ||||
|  | ||||
|     public function testAdvance() | ||||
|     { | ||||
|         $bar = new ProgressBar($output = $this->getOutputStream()); | ||||
|         $bar->start(); | ||||
|         $bar->advance(); | ||||
|  | ||||
|         rewind($output->getStream()); | ||||
|         $this->assertEquals( | ||||
|             '    0 [>---------------------------]'. | ||||
|             $this->generateOutput('    1 [->--------------------------]'), | ||||
|             stream_get_contents($output->getStream()) | ||||
|         ); | ||||
|     } | ||||
|  | ||||
|     public function testAdvanceWithStep() | ||||
|     { | ||||
|         $bar = new ProgressBar($output = $this->getOutputStream()); | ||||
|         $bar->start(); | ||||
|         $bar->advance(5); | ||||
|  | ||||
|         rewind($output->getStream()); | ||||
|         $this->assertEquals( | ||||
|             '    0 [>---------------------------]'. | ||||
|             $this->generateOutput('    5 [----->----------------------]'), | ||||
|             stream_get_contents($output->getStream()) | ||||
|         ); | ||||
|     } | ||||
|  | ||||
|     public function testAdvanceMultipleTimes() | ||||
|     { | ||||
|         $bar = new ProgressBar($output = $this->getOutputStream()); | ||||
|         $bar->start(); | ||||
|         $bar->advance(3); | ||||
|         $bar->advance(2); | ||||
|  | ||||
|         rewind($output->getStream()); | ||||
|         $this->assertEquals( | ||||
|             '    0 [>---------------------------]'. | ||||
|             $this->generateOutput('    3 [--->------------------------]'). | ||||
|             $this->generateOutput('    5 [----->----------------------]'), | ||||
|             stream_get_contents($output->getStream()) | ||||
|         ); | ||||
|     } | ||||
|  | ||||
|     public function testAdvanceOverMax() | ||||
|     { | ||||
|         $bar = new ProgressBar($output = $this->getOutputStream(), 10); | ||||
|         $bar->setProgress(9); | ||||
|         $bar->advance(); | ||||
|         $bar->advance(); | ||||
|  | ||||
|         rewind($output->getStream()); | ||||
|         $this->assertEquals( | ||||
|             '  9/10 [=========================>--]  90%'. | ||||
|             $this->generateOutput(' 10/10 [============================] 100%'). | ||||
|             $this->generateOutput(' 11/11 [============================] 100%'), | ||||
|             stream_get_contents($output->getStream()) | ||||
|         ); | ||||
|     } | ||||
|  | ||||
|     public function testFormat() | ||||
|     { | ||||
|         $expected = | ||||
|             '  0/10 [>---------------------------]   0%'. | ||||
|             $this->generateOutput(' 10/10 [============================] 100%'). | ||||
|             $this->generateOutput(' 10/10 [============================] 100%') | ||||
|         ; | ||||
|  | ||||
|         // max in construct, no format | ||||
|         $bar = new ProgressBar($output = $this->getOutputStream(), 10); | ||||
|         $bar->start(); | ||||
|         $bar->advance(10); | ||||
|         $bar->finish(); | ||||
|  | ||||
|         rewind($output->getStream()); | ||||
|         $this->assertEquals($expected, stream_get_contents($output->getStream())); | ||||
|  | ||||
|         // max in start, no format | ||||
|         $bar = new ProgressBar($output = $this->getOutputStream()); | ||||
|         $bar->start(10); | ||||
|         $bar->advance(10); | ||||
|         $bar->finish(); | ||||
|  | ||||
|         rewind($output->getStream()); | ||||
|         $this->assertEquals($expected, stream_get_contents($output->getStream())); | ||||
|  | ||||
|         // max in construct, explicit format before | ||||
|         $bar = new ProgressBar($output = $this->getOutputStream(), 10); | ||||
|         $bar->setFormat('normal'); | ||||
|         $bar->start(); | ||||
|         $bar->advance(10); | ||||
|         $bar->finish(); | ||||
|  | ||||
|         rewind($output->getStream()); | ||||
|         $this->assertEquals($expected, stream_get_contents($output->getStream())); | ||||
|  | ||||
|         // max in start, explicit format before | ||||
|         $bar = new ProgressBar($output = $this->getOutputStream()); | ||||
|         $bar->setFormat('normal'); | ||||
|         $bar->start(10); | ||||
|         $bar->advance(10); | ||||
|         $bar->finish(); | ||||
|  | ||||
|         rewind($output->getStream()); | ||||
|         $this->assertEquals($expected, stream_get_contents($output->getStream())); | ||||
|     } | ||||
|  | ||||
|     public function testCustomizations() | ||||
|     { | ||||
|         $bar = new ProgressBar($output = $this->getOutputStream(), 10); | ||||
|         $bar->setBarWidth(10); | ||||
|         $bar->setBarCharacter('_'); | ||||
|         $bar->setEmptyBarCharacter(' '); | ||||
|         $bar->setProgressCharacter('/'); | ||||
|         $bar->setFormat(' %current%/%max% [%bar%] %percent:3s%%'); | ||||
|         $bar->start(); | ||||
|         $bar->advance(); | ||||
|  | ||||
|         rewind($output->getStream()); | ||||
|         $this->assertEquals( | ||||
|             '  0/10 [/         ]   0%'. | ||||
|             $this->generateOutput('  1/10 [_/        ]  10%'), | ||||
|             stream_get_contents($output->getStream()) | ||||
|         ); | ||||
|     } | ||||
|  | ||||
|     public function testDisplayWithoutStart() | ||||
|     { | ||||
|         $bar = new ProgressBar($output = $this->getOutputStream(), 50); | ||||
|         $bar->display(); | ||||
|  | ||||
|         rewind($output->getStream()); | ||||
|         $this->assertEquals( | ||||
|             '  0/50 [>---------------------------]   0%', | ||||
|             stream_get_contents($output->getStream()) | ||||
|         ); | ||||
|     } | ||||
|  | ||||
|     public function testDisplayWithQuietVerbosity() | ||||
|     { | ||||
|         $bar = new ProgressBar($output = $this->getOutputStream(true, StreamOutput::VERBOSITY_QUIET), 50); | ||||
|         $bar->display(); | ||||
|  | ||||
|         rewind($output->getStream()); | ||||
|         $this->assertEquals( | ||||
|             '', | ||||
|             stream_get_contents($output->getStream()) | ||||
|         ); | ||||
|     } | ||||
|  | ||||
|     public function testFinishWithoutStart() | ||||
|     { | ||||
|         $bar = new ProgressBar($output = $this->getOutputStream(), 50); | ||||
|         $bar->finish(); | ||||
|  | ||||
|         rewind($output->getStream()); | ||||
|         $this->assertEquals( | ||||
|             ' 50/50 [============================] 100%', | ||||
|             stream_get_contents($output->getStream()) | ||||
|         ); | ||||
|     } | ||||
|  | ||||
|     public function testPercent() | ||||
|     { | ||||
|         $bar = new ProgressBar($output = $this->getOutputStream(), 50); | ||||
|         $bar->start(); | ||||
|         $bar->display(); | ||||
|         $bar->advance(); | ||||
|         $bar->advance(); | ||||
|  | ||||
|         rewind($output->getStream()); | ||||
|         $this->assertEquals( | ||||
|             '  0/50 [>---------------------------]   0%'. | ||||
|             $this->generateOutput('  0/50 [>---------------------------]   0%'). | ||||
|             $this->generateOutput('  1/50 [>---------------------------]   2%'). | ||||
|             $this->generateOutput('  2/50 [=>--------------------------]   4%'), | ||||
|             stream_get_contents($output->getStream()) | ||||
|         ); | ||||
|     } | ||||
|  | ||||
|     public function testOverwriteWithShorterLine() | ||||
|     { | ||||
|         $bar = new ProgressBar($output = $this->getOutputStream(), 50); | ||||
|         $bar->setFormat(' %current%/%max% [%bar%] %percent:3s%%'); | ||||
|         $bar->start(); | ||||
|         $bar->display(); | ||||
|         $bar->advance(); | ||||
|  | ||||
|         // set shorter format | ||||
|         $bar->setFormat(' %current%/%max% [%bar%]'); | ||||
|         $bar->advance(); | ||||
|  | ||||
|         rewind($output->getStream()); | ||||
|         $this->assertEquals( | ||||
|             '  0/50 [>---------------------------]   0%'. | ||||
|             $this->generateOutput('  0/50 [>---------------------------]   0%'). | ||||
|             $this->generateOutput('  1/50 [>---------------------------]   2%'). | ||||
|             $this->generateOutput('  2/50 [=>--------------------------]'), | ||||
|             stream_get_contents($output->getStream()) | ||||
|         ); | ||||
|     } | ||||
|  | ||||
|     public function testStartWithMax() | ||||
|     { | ||||
|         $bar = new ProgressBar($output = $this->getOutputStream()); | ||||
|         $bar->setFormat('%current%/%max% [%bar%]'); | ||||
|         $bar->start(50); | ||||
|         $bar->advance(); | ||||
|  | ||||
|         rewind($output->getStream()); | ||||
|         $this->assertEquals( | ||||
|             ' 0/50 [>---------------------------]'. | ||||
|             $this->generateOutput(' 1/50 [>---------------------------]'), | ||||
|             stream_get_contents($output->getStream()) | ||||
|         ); | ||||
|     } | ||||
|  | ||||
|     public function testSetCurrentProgress() | ||||
|     { | ||||
|         $bar = new ProgressBar($output = $this->getOutputStream(), 50); | ||||
|         $bar->start(); | ||||
|         $bar->display(); | ||||
|         $bar->advance(); | ||||
|         $bar->setProgress(15); | ||||
|         $bar->setProgress(25); | ||||
|  | ||||
|         rewind($output->getStream()); | ||||
|         $this->assertEquals( | ||||
|             '  0/50 [>---------------------------]   0%'. | ||||
|             $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()) | ||||
|         ); | ||||
|     } | ||||
|  | ||||
|     public function testSetCurrentBeforeStarting() | ||||
|     { | ||||
|         $bar = new ProgressBar($this->getOutputStream()); | ||||
|         $bar->setProgress(15); | ||||
|         $this->assertNotNull($bar->getStartTime()); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * @expectedException        \LogicException | ||||
|      * @expectedExceptionMessage You can't regress the progress bar | ||||
|      */ | ||||
|     public function testRegressProgress() | ||||
|     { | ||||
|         $bar = new ProgressBar($output = $this->getOutputStream(), 50); | ||||
|         $bar->start(); | ||||
|         $bar->setProgress(15); | ||||
|         $bar->setProgress(10); | ||||
|     } | ||||
|  | ||||
|     public function testRedrawFrequency() | ||||
|     { | ||||
|         $bar = $this->getMockBuilder('Symfony\Component\Console\Helper\ProgressBar')->setMethods(array('display'))->setConstructorArgs(array($this->getOutputStream(), 6))->getMock(); | ||||
|         $bar->expects($this->exactly(4))->method('display'); | ||||
|  | ||||
|         $bar->setRedrawFrequency(2); | ||||
|         $bar->start(); | ||||
|         $bar->setProgress(1); | ||||
|         $bar->advance(2); | ||||
|         $bar->advance(2); | ||||
|         $bar->advance(1); | ||||
|     } | ||||
|  | ||||
|     public function testRedrawFrequencyIsAtLeastOneIfZeroGiven() | ||||
|     { | ||||
|         $bar = $this->getMockBuilder('Symfony\Component\Console\Helper\ProgressBar')->setMethods(array('display'))->setConstructorArgs(array($this->getOutputStream()))->getMock(); | ||||
|  | ||||
|         $bar->expects($this->exactly(2))->method('display'); | ||||
|         $bar->setRedrawFrequency(0); | ||||
|         $bar->start(); | ||||
|         $bar->advance(); | ||||
|     } | ||||
|  | ||||
|     public function testRedrawFrequencyIsAtLeastOneIfSmallerOneGiven() | ||||
|     { | ||||
|         $bar = $this->getMockBuilder('Symfony\Component\Console\Helper\ProgressBar')->setMethods(array('display'))->setConstructorArgs(array($this->getOutputStream()))->getMock(); | ||||
|  | ||||
|         $bar->expects($this->exactly(2))->method('display'); | ||||
|         $bar->setRedrawFrequency(0.9); | ||||
|         $bar->start(); | ||||
|         $bar->advance(); | ||||
|     } | ||||
|  | ||||
|     public function testMultiByteSupport() | ||||
|     { | ||||
|         $bar = new ProgressBar($output = $this->getOutputStream()); | ||||
|         $bar->start(); | ||||
|         $bar->setBarCharacter('■'); | ||||
|         $bar->advance(3); | ||||
|  | ||||
|         rewind($output->getStream()); | ||||
|         $this->assertEquals( | ||||
|             '    0 [>---------------------------]'. | ||||
|             $this->generateOutput('    3 [■■■>------------------------]'), | ||||
|             stream_get_contents($output->getStream()) | ||||
|         ); | ||||
|     } | ||||
|  | ||||
|     public function testClear() | ||||
|     { | ||||
|         $bar = new ProgressBar($output = $this->getOutputStream(), 50); | ||||
|         $bar->start(); | ||||
|         $bar->setProgress(25); | ||||
|         $bar->clear(); | ||||
|  | ||||
|         rewind($output->getStream()); | ||||
|         $this->assertEquals( | ||||
|             '  0/50 [>---------------------------]   0%'. | ||||
|             $this->generateOutput(' 25/50 [==============>-------------]  50%'). | ||||
|             $this->generateOutput(''), | ||||
|             stream_get_contents($output->getStream()) | ||||
|         ); | ||||
|     } | ||||
|  | ||||
|     public function testPercentNotHundredBeforeComplete() | ||||
|     { | ||||
|         $bar = new ProgressBar($output = $this->getOutputStream(), 200); | ||||
|         $bar->start(); | ||||
|         $bar->display(); | ||||
|         $bar->advance(199); | ||||
|         $bar->advance(); | ||||
|  | ||||
|         rewind($output->getStream()); | ||||
|         $this->assertEquals( | ||||
|             '   0/200 [>---------------------------]   0%'. | ||||
|             $this->generateOutput('   0/200 [>---------------------------]   0%'). | ||||
|             $this->generateOutput(' 199/200 [===========================>]  99%'). | ||||
|             $this->generateOutput(' 200/200 [============================] 100%'), | ||||
|             stream_get_contents($output->getStream()) | ||||
|         ); | ||||
|     } | ||||
|  | ||||
|     public function testNonDecoratedOutput() | ||||
|     { | ||||
|         $bar = new ProgressBar($output = $this->getOutputStream(false), 200); | ||||
|         $bar->start(); | ||||
|  | ||||
|         for ($i = 0; $i < 200; ++$i) { | ||||
|             $bar->advance(); | ||||
|         } | ||||
|  | ||||
|         $bar->finish(); | ||||
|  | ||||
|         rewind($output->getStream()); | ||||
|         $this->assertEquals( | ||||
|             '   0/200 [>---------------------------]   0%'.PHP_EOL. | ||||
|             '  20/200 [==>-------------------------]  10%'.PHP_EOL. | ||||
|             '  40/200 [=====>----------------------]  20%'.PHP_EOL. | ||||
|             '  60/200 [========>-------------------]  30%'.PHP_EOL. | ||||
|             '  80/200 [===========>----------------]  40%'.PHP_EOL. | ||||
|             ' 100/200 [==============>-------------]  50%'.PHP_EOL. | ||||
|             ' 120/200 [================>-----------]  60%'.PHP_EOL. | ||||
|             ' 140/200 [===================>--------]  70%'.PHP_EOL. | ||||
|             ' 160/200 [======================>-----]  80%'.PHP_EOL. | ||||
|             ' 180/200 [=========================>--]  90%'.PHP_EOL. | ||||
|             ' 200/200 [============================] 100%', | ||||
|             stream_get_contents($output->getStream()) | ||||
|         ); | ||||
|     } | ||||
|  | ||||
|     public function testNonDecoratedOutputWithClear() | ||||
|     { | ||||
|         $bar = new ProgressBar($output = $this->getOutputStream(false), 50); | ||||
|         $bar->start(); | ||||
|         $bar->setProgress(25); | ||||
|         $bar->clear(); | ||||
|         $bar->setProgress(50); | ||||
|         $bar->finish(); | ||||
|  | ||||
|         rewind($output->getStream()); | ||||
|         $this->assertEquals( | ||||
|             '  0/50 [>---------------------------]   0%'.PHP_EOL. | ||||
|             ' 25/50 [==============>-------------]  50%'.PHP_EOL. | ||||
|             ' 50/50 [============================] 100%', | ||||
|             stream_get_contents($output->getStream()) | ||||
|         ); | ||||
|     } | ||||
|  | ||||
|     public function testNonDecoratedOutputWithoutMax() | ||||
|     { | ||||
|         $bar = new ProgressBar($output = $this->getOutputStream(false)); | ||||
|         $bar->start(); | ||||
|         $bar->advance(); | ||||
|  | ||||
|         rewind($output->getStream()); | ||||
|         $this->assertEquals( | ||||
|             '    0 [>---------------------------]'.PHP_EOL. | ||||
|             '    1 [->--------------------------]', | ||||
|             stream_get_contents($output->getStream()) | ||||
|         ); | ||||
|     } | ||||
|  | ||||
|     public function testParallelBars() | ||||
|     { | ||||
|         $output = $this->getOutputStream(); | ||||
|         $bar1 = new ProgressBar($output, 2); | ||||
|         $bar2 = new ProgressBar($output, 3); | ||||
|         $bar2->setProgressCharacter('#'); | ||||
|         $bar3 = new ProgressBar($output); | ||||
|  | ||||
|         $bar1->start(); | ||||
|         $output->write("\n"); | ||||
|         $bar2->start(); | ||||
|         $output->write("\n"); | ||||
|         $bar3->start(); | ||||
|  | ||||
|         for ($i = 1; $i <= 3; ++$i) { | ||||
|             // up two lines | ||||
|             $output->write("\033[2A"); | ||||
|             if ($i <= 2) { | ||||
|                 $bar1->advance(); | ||||
|             } | ||||
|             $output->write("\n"); | ||||
|             $bar2->advance(); | ||||
|             $output->write("\n"); | ||||
|             $bar3->advance(); | ||||
|         } | ||||
|         $output->write("\033[2A"); | ||||
|         $output->write("\n"); | ||||
|         $output->write("\n"); | ||||
|         $bar3->finish(); | ||||
|  | ||||
|         rewind($output->getStream()); | ||||
|         $this->assertEquals( | ||||
|             ' 0/2 [>---------------------------]   0%'."\n". | ||||
|             ' 0/3 [#---------------------------]   0%'."\n". | ||||
|             rtrim('    0 [>---------------------------]'). | ||||
|  | ||||
|             "\033[2A". | ||||
|             $this->generateOutput(' 1/2 [==============>-------------]  50%')."\n". | ||||
|             $this->generateOutput(' 1/3 [=========#------------------]  33%')."\n". | ||||
|             rtrim($this->generateOutput('    1 [->--------------------------]')). | ||||
|  | ||||
|             "\033[2A". | ||||
|             $this->generateOutput(' 2/2 [============================] 100%')."\n". | ||||
|             $this->generateOutput(' 2/3 [==================#---------]  66%')."\n". | ||||
|             rtrim($this->generateOutput('    2 [-->-------------------------]')). | ||||
|  | ||||
|             "\033[2A". | ||||
|             "\n". | ||||
|             $this->generateOutput(' 3/3 [============================] 100%')."\n". | ||||
|             rtrim($this->generateOutput('    3 [--->------------------------]')). | ||||
|  | ||||
|             "\033[2A". | ||||
|             "\n". | ||||
|             "\n". | ||||
|             rtrim($this->generateOutput('    3 [============================]')), | ||||
|             stream_get_contents($output->getStream()) | ||||
|         ); | ||||
|     } | ||||
|  | ||||
|     public function testWithoutMax() | ||||
|     { | ||||
|         $output = $this->getOutputStream(); | ||||
|  | ||||
|         $bar = new ProgressBar($output); | ||||
|         $bar->start(); | ||||
|         $bar->advance(); | ||||
|         $bar->advance(); | ||||
|         $bar->advance(); | ||||
|         $bar->finish(); | ||||
|  | ||||
|         rewind($output->getStream()); | ||||
|         $this->assertEquals( | ||||
|             rtrim('    0 [>---------------------------]'). | ||||
|             rtrim($this->generateOutput('    1 [->--------------------------]')). | ||||
|             rtrim($this->generateOutput('    2 [-->-------------------------]')). | ||||
|             rtrim($this->generateOutput('    3 [--->------------------------]')). | ||||
|             rtrim($this->generateOutput('    3 [============================]')), | ||||
|             stream_get_contents($output->getStream()) | ||||
|         ); | ||||
|     } | ||||
|  | ||||
|     public function testAddingPlaceholderFormatter() | ||||
|     { | ||||
|         ProgressBar::setPlaceholderFormatterDefinition('remaining_steps', function (ProgressBar $bar) { | ||||
|             return $bar->getMaxSteps() - $bar->getProgress(); | ||||
|         }); | ||||
|         $bar = new ProgressBar($output = $this->getOutputStream(), 3); | ||||
|         $bar->setFormat(' %remaining_steps% [%bar%]'); | ||||
|  | ||||
|         $bar->start(); | ||||
|         $bar->advance(); | ||||
|         $bar->finish(); | ||||
|  | ||||
|         rewind($output->getStream()); | ||||
|         $this->assertEquals( | ||||
|             ' 3 [>---------------------------]'. | ||||
|             $this->generateOutput(' 2 [=========>------------------]'). | ||||
|             $this->generateOutput(' 0 [============================]'), | ||||
|             stream_get_contents($output->getStream()) | ||||
|         ); | ||||
|     } | ||||
|  | ||||
|     public function testMultilineFormat() | ||||
|     { | ||||
|         $bar = new ProgressBar($output = $this->getOutputStream(), 3); | ||||
|         $bar->setFormat("%bar%\nfoobar"); | ||||
|  | ||||
|         $bar->start(); | ||||
|         $bar->advance(); | ||||
|         $bar->clear(); | ||||
|         $bar->finish(); | ||||
|  | ||||
|         rewind($output->getStream()); | ||||
|         $this->assertEquals( | ||||
|             ">---------------------------\nfoobar". | ||||
|             $this->generateOutput("=========>------------------\nfoobar"). | ||||
|             "\x0D\x1B[2K\x1B[1A\x1B[2K". | ||||
|             $this->generateOutput("============================\nfoobar"), | ||||
|             stream_get_contents($output->getStream()) | ||||
|         ); | ||||
|     } | ||||
|  | ||||
|     public function testAnsiColorsAndEmojis() | ||||
|     { | ||||
|         $bar = new ProgressBar($output = $this->getOutputStream(), 15); | ||||
|         ProgressBar::setPlaceholderFormatterDefinition('memory', function (ProgressBar $bar) { | ||||
|             static $i = 0; | ||||
|             $mem = 100000 * $i; | ||||
|             $colors = $i++ ? '41;37' : '44;37'; | ||||
|  | ||||
|             return "\033[".$colors.'m '.Helper::formatMemory($mem)." \033[0m"; | ||||
|         }); | ||||
|         $bar->setFormat(" \033[44;37m %title:-37s% \033[0m\n %current%/%max% %bar% %percent:3s%%\n 🏁  %remaining:-10s% %memory:37s%"); | ||||
|         $bar->setBarCharacter($done = "\033[32m●\033[0m"); | ||||
|         $bar->setEmptyBarCharacter($empty = "\033[31m●\033[0m"); | ||||
|         $bar->setProgressCharacter($progress = "\033[32m➤ \033[0m"); | ||||
|  | ||||
|         $bar->setMessage('Starting the demo... fingers crossed', 'title'); | ||||
|         $bar->start(); | ||||
|         $bar->setMessage('Looks good to me...', 'title'); | ||||
|         $bar->advance(4); | ||||
|         $bar->setMessage('Thanks, bye', 'title'); | ||||
|         $bar->finish(); | ||||
|  | ||||
|         rewind($output->getStream()); | ||||
|         $this->assertEquals( | ||||
|                 " \033[44;37m Starting the demo... fingers crossed  \033[0m\n". | ||||
|                 '  0/15 '.$progress.str_repeat($empty, 26)."   0%\n". | ||||
|                 " \xf0\x9f\x8f\x81  < 1 sec                        \033[44;37m 0 B \033[0m" | ||||
|             . | ||||
|             $this->generateOutput( | ||||
|                 " \033[44;37m Looks good to me...                   \033[0m\n". | ||||
|                 '  4/15 '.str_repeat($done, 7).$progress.str_repeat($empty, 19)."  26%\n". | ||||
|                 " \xf0\x9f\x8f\x81  < 1 sec                     \033[41;37m 97 KiB \033[0m" | ||||
|             ). | ||||
|             $this->generateOutput( | ||||
|                 " \033[44;37m Thanks, bye                           \033[0m\n". | ||||
|                 ' 15/15 '.str_repeat($done, 28)." 100%\n". | ||||
|                 " \xf0\x9f\x8f\x81  < 1 sec                    \033[41;37m 195 KiB \033[0m" | ||||
|             ), | ||||
|             stream_get_contents($output->getStream()) | ||||
|         ); | ||||
|     } | ||||
|  | ||||
|     public function testSetFormat() | ||||
|     { | ||||
|         $bar = new ProgressBar($output = $this->getOutputStream()); | ||||
|         $bar->setFormat('normal'); | ||||
|         $bar->start(); | ||||
|         rewind($output->getStream()); | ||||
|         $this->assertEquals( | ||||
|             '    0 [>---------------------------]', | ||||
|             stream_get_contents($output->getStream()) | ||||
|         ); | ||||
|  | ||||
|         $bar = new ProgressBar($output = $this->getOutputStream(), 10); | ||||
|         $bar->setFormat('normal'); | ||||
|         $bar->start(); | ||||
|         rewind($output->getStream()); | ||||
|         $this->assertEquals( | ||||
|             '  0/10 [>---------------------------]   0%', | ||||
|             stream_get_contents($output->getStream()) | ||||
|         ); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * @dataProvider provideFormat | ||||
|      */ | ||||
|     public function testFormatsWithoutMax($format) | ||||
|     { | ||||
|         $bar = new ProgressBar($output = $this->getOutputStream()); | ||||
|         $bar->setFormat($format); | ||||
|         $bar->start(); | ||||
|  | ||||
|         rewind($output->getStream()); | ||||
|         $this->assertNotEmpty(stream_get_contents($output->getStream())); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Provides each defined format. | ||||
|      * | ||||
|      * @return array | ||||
|      */ | ||||
|     public function provideFormat() | ||||
|     { | ||||
|         return array( | ||||
|             array('normal'), | ||||
|             array('verbose'), | ||||
|             array('very_verbose'), | ||||
|             array('debug'), | ||||
|         ); | ||||
|     } | ||||
|  | ||||
|     protected function getOutputStream($decorated = true, $verbosity = StreamOutput::VERBOSITY_NORMAL) | ||||
|     { | ||||
|         return new StreamOutput(fopen('php://memory', 'r+', false), $verbosity, $decorated); | ||||
|     } | ||||
|  | ||||
|     protected function generateOutput($expected) | ||||
|     { | ||||
|         $count = substr_count($expected, "\n"); | ||||
|  | ||||
|         return "\x0D\x1B[2K".($count ? str_repeat("\x1B[1A\x1B[2K", $count) : '').$expected; | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user