summaryrefslogtreecommitdiff
path: root/vendor/symfony/console/Tests/Helper/ProgressIndicatorTest.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/symfony/console/Tests/Helper/ProgressIndicatorTest.php')
-rw-r--r--vendor/symfony/console/Tests/Helper/ProgressIndicatorTest.php182
1 files changed, 182 insertions, 0 deletions
diff --git a/vendor/symfony/console/Tests/Helper/ProgressIndicatorTest.php b/vendor/symfony/console/Tests/Helper/ProgressIndicatorTest.php
new file mode 100644
index 00000000..19262526
--- /dev/null
+++ b/vendor/symfony/console/Tests/Helper/ProgressIndicatorTest.php
@@ -0,0 +1,182 @@
+<?php
+
+namespace Symfony\Component\Console\Tests\Helper;
+
+use Symfony\Component\Console\Helper\ProgressIndicator;
+use Symfony\Component\Console\Output\StreamOutput;
+
+/**
+ * @group time-sensitive
+ */
+class ProgressIndicatorTest extends \PHPUnit_Framework_TestCase
+{
+ public function testDefaultIndicator()
+ {
+ $bar = new ProgressIndicator($output = $this->getOutputStream());
+ $bar->start('Starting...');
+ usleep(101000);
+ $bar->advance();
+ usleep(101000);
+ $bar->advance();
+ usleep(101000);
+ $bar->advance();
+ usleep(101000);
+ $bar->advance();
+ usleep(101000);
+ $bar->advance();
+ usleep(101000);
+ $bar->setMessage('Advancing...');
+ $bar->advance();
+ $bar->finish('Done...');
+ $bar->start('Starting Again...');
+ usleep(101000);
+ $bar->advance();
+ $bar->finish('Done Again...');
+
+ rewind($output->getStream());
+
+ $this->assertEquals(
+ $this->generateOutput(' - Starting...').
+ $this->generateOutput(' \\ Starting...').
+ $this->generateOutput(' | Starting...').
+ $this->generateOutput(' / Starting...').
+ $this->generateOutput(' - Starting...').
+ $this->generateOutput(' \\ Starting...').
+ $this->generateOutput(' \\ Advancing...').
+ $this->generateOutput(' | Advancing...').
+ $this->generateOutput(' | Done... ').
+ PHP_EOL.
+ $this->generateOutput(' - Starting Again...').
+ $this->generateOutput(' \\ Starting Again...').
+ $this->generateOutput(' \\ Done Again... ').
+ PHP_EOL,
+ stream_get_contents($output->getStream())
+ );
+ }
+
+ public function testNonDecoratedOutput()
+ {
+ $bar = new ProgressIndicator($output = $this->getOutputStream(false));
+
+ $bar->start('Starting...');
+ $bar->advance();
+ $bar->advance();
+ $bar->setMessage('Midway...');
+ $bar->advance();
+ $bar->advance();
+ $bar->finish('Done...');
+
+ rewind($output->getStream());
+
+ $this->assertEquals(
+ ' Starting...'.PHP_EOL.
+ ' Midway... '.PHP_EOL.
+ ' Done... '.PHP_EOL.PHP_EOL,
+ stream_get_contents($output->getStream())
+ );
+ }
+
+ public function testCustomIndicatorValues()
+ {
+ $bar = new ProgressIndicator($output = $this->getOutputStream(), null, 100, array('a', 'b', 'c'));
+
+ $bar->start('Starting...');
+ usleep(101000);
+ $bar->advance();
+ usleep(101000);
+ $bar->advance();
+ usleep(101000);
+ $bar->advance();
+
+ rewind($output->getStream());
+
+ $this->assertEquals(
+ $this->generateOutput(' a Starting...').
+ $this->generateOutput(' b Starting...').
+ $this->generateOutput(' c Starting...').
+ $this->generateOutput(' a Starting...'),
+ stream_get_contents($output->getStream())
+ );
+ }
+
+ /**
+ * @expectedException \InvalidArgumentException
+ * @expectedExceptionMessage Must have at least 2 indicator value characters.
+ */
+ public function testCannotSetInvalidIndicatorCharacters()
+ {
+ $bar = new ProgressIndicator($this->getOutputStream(), null, 100, array('1'));
+ }
+
+ /**
+ * @expectedException \LogicException
+ * @expectedExceptionMessage Progress indicator already started.
+ */
+ public function testCannotStartAlreadyStartedIndicator()
+ {
+ $bar = new ProgressIndicator($this->getOutputStream());
+ $bar->start('Starting...');
+ $bar->start('Starting Again.');
+ }
+
+ /**
+ * @expectedException \LogicException
+ * @expectedExceptionMessage Progress indicator has not yet been started.
+ */
+ public function testCannotAdvanceUnstartedIndicator()
+ {
+ $bar = new ProgressIndicator($this->getOutputStream());
+ $bar->advance();
+ }
+
+ /**
+ * @expectedException \LogicException
+ * @expectedExceptionMessage Progress indicator has not yet been started.
+ */
+ public function testCannotFinishUnstartedIndicator()
+ {
+ $bar = new ProgressIndicator($this->getOutputStream());
+ $bar->finish('Finished');
+ }
+
+ /**
+ * @dataProvider provideFormat
+ */
+ public function testFormats($format)
+ {
+ $bar = new ProgressIndicator($output = $this->getOutputStream(), $format);
+ $bar->start('Starting...');
+ $bar->advance();
+
+ 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".($count ? sprintf("\033[%dA", $count) : '').$expected;
+ }
+}