| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184 |
- <?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\Style;
- use PHPUnit\Framework\TestCase;
- use Symfony\Component\Console\Command\Command;
- use Symfony\Component\Console\Exception\RuntimeException;
- use Symfony\Component\Console\Formatter\OutputFormatter;
- use Symfony\Component\Console\Input\ArrayInput;
- use Symfony\Component\Console\Input\InputInterface;
- use Symfony\Component\Console\Output\ConsoleOutputInterface;
- use Symfony\Component\Console\Output\ConsoleSectionOutput;
- use Symfony\Component\Console\Output\NullOutput;
- use Symfony\Component\Console\Output\OutputInterface;
- use Symfony\Component\Console\Style\SymfonyStyle;
- use Symfony\Component\Console\Tester\CommandTester;
- class SymfonyStyleTest extends TestCase
- {
- /** @var Command */
- protected $command;
- /** @var CommandTester */
- protected $tester;
- private $colSize;
- protected function setUp(): void
- {
- $this->colSize = getenv('COLUMNS');
- putenv('COLUMNS=121');
- $this->command = new Command('sfstyle');
- $this->tester = new CommandTester($this->command);
- }
- protected function tearDown(): void
- {
- putenv($this->colSize ? 'COLUMNS='.$this->colSize : 'COLUMNS');
- $this->command = null;
- $this->tester = null;
- }
- /**
- * @dataProvider inputCommandToOutputFilesProvider
- */
- public function testOutputs($inputCommandFilepath, $outputFilepath)
- {
- $code = require $inputCommandFilepath;
- $this->command->setCode($code);
- $this->tester->execute([], ['interactive' => false, 'decorated' => false]);
- $this->assertStringEqualsFile($outputFilepath, $this->tester->getDisplay(true));
- }
- /**
- * @dataProvider inputInteractiveCommandToOutputFilesProvider
- */
- public function testInteractiveOutputs($inputCommandFilepath, $outputFilepath)
- {
- $code = require $inputCommandFilepath;
- $this->command->setCode($code);
- $this->tester->execute([], ['interactive' => true, 'decorated' => false]);
- $this->assertStringEqualsFile($outputFilepath, $this->tester->getDisplay(true));
- }
- public static function inputInteractiveCommandToOutputFilesProvider()
- {
- $baseDir = __DIR__.'/../Fixtures/Style/SymfonyStyle';
- return array_map(null, glob($baseDir.'/command/interactive_command_*.php'), glob($baseDir.'/output/interactive_output_*.txt'));
- }
- public static function inputCommandToOutputFilesProvider()
- {
- $baseDir = __DIR__.'/../Fixtures/Style/SymfonyStyle';
- return array_map(null, glob($baseDir.'/command/command_*.php'), glob($baseDir.'/output/output_*.txt'));
- }
- public function testOutputProgressIterate()
- {
- $code = require __DIR__.'/../Fixtures/Style/SymfonyStyle/progress/command_progress_iterate.php';
- if ('\\' === \DIRECTORY_SEPARATOR || 'Hyper' === getenv('TERM_PROGRAM')) {
- $outputFilepath = __DIR__.'/../Fixtures/Style/SymfonyStyle/progress/output_progress_iterate_no_shade.txt';
- } else {
- $outputFilepath = __DIR__.'/../Fixtures/Style/SymfonyStyle/progress/output_progress_iterate_shade.txt';
- }
- $this->command->setCode($code);
- $this->tester->execute([], ['interactive' => false, 'decorated' => false]);
- $this->assertStringEqualsFile($outputFilepath, $this->tester->getDisplay(true));
- }
- public function testGetErrorStyle()
- {
- $input = $this->createMock(InputInterface::class);
- $errorOutput = $this->createMock(OutputInterface::class);
- $errorOutput
- ->method('getFormatter')
- ->willReturn(new OutputFormatter());
- $errorOutput
- ->expects($this->once())
- ->method('write');
- $output = $this->createMock(ConsoleOutputInterface::class);
- $output
- ->method('getFormatter')
- ->willReturn(new OutputFormatter());
- $output
- ->expects($this->once())
- ->method('getErrorOutput')
- ->willReturn($errorOutput);
- $io = new SymfonyStyle($input, $output);
- $io->getErrorStyle()->write('');
- }
- public function testCreateTableWithConsoleOutput()
- {
- $input = $this->createMock(InputInterface::class);
- $output = $this->createMock(ConsoleOutputInterface::class);
- $output
- ->method('getFormatter')
- ->willReturn(new OutputFormatter());
- $output
- ->expects($this->once())
- ->method('section')
- ->willReturn($this->createMock(ConsoleSectionOutput::class));
- $style = new SymfonyStyle($input, $output);
- $style->createTable();
- }
- public function testCreateTableWithoutConsoleOutput()
- {
- $input = $this->createMock(InputInterface::class);
- $output = $this->createMock(OutputInterface::class);
- $output
- ->method('getFormatter')
- ->willReturn(new OutputFormatter());
- $style = new SymfonyStyle($input, $output);
- $this->expectException(RuntimeException::class);
- $this->expectExceptionMessage('Output should be an instance of "Symfony\Component\Console\Output\ConsoleSectionOutput"');
- $style->createTable()->appendRow(['row']);
- }
- public function testGetErrorStyleUsesTheCurrentOutputIfNoErrorOutputIsAvailable()
- {
- $output = $this->createMock(OutputInterface::class);
- $output
- ->method('getFormatter')
- ->willReturn(new OutputFormatter());
- $style = new SymfonyStyle($this->createMock(InputInterface::class), $output);
- $this->assertInstanceOf(SymfonyStyle::class, $style->getErrorStyle());
- }
- public function testMemoryConsumption()
- {
- $io = new SymfonyStyle(new ArrayInput([]), new NullOutput());
- $str = 'teststr';
- $io->writeln($str, SymfonyStyle::VERBOSITY_QUIET);
- $io->writeln($str, SymfonyStyle::VERBOSITY_QUIET);
- $start = memory_get_usage();
- for ($i = 0; $i < 100; ++$i) {
- $io->writeln($str, SymfonyStyle::VERBOSITY_QUIET);
- }
- $this->assertSame(0, memory_get_usage() - $start);
- }
- }
|