![]() Server : Apache/2 System : Linux server-15-235-50-60 5.15.0-164-generic #174-Ubuntu SMP Fri Nov 14 20:25:16 UTC 2025 x86_64 User : gositeme ( 1004) PHP Version : 8.2.29 Disable Function : exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname Directory : /home/gositeme/domains/gositeme.com/public_html/whmcs/vendor/symfony/console/Tests/ |
<?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;
use PHPUnit\Framework\TestCase;
use Symfony\Component\Console\Cursor;
use Symfony\Component\Console\Output\StreamOutput;
class CursorTest extends TestCase
{
protected $stream;
protected function setUp(): void
{
$this->stream = fopen('php://memory', 'r+');
}
protected function tearDown(): void
{
fclose($this->stream);
$this->stream = null;
}
public function testMoveUpOneLine()
{
$cursor = new Cursor($output = $this->getOutputStream());
$cursor->moveUp();
$this->assertEquals("\x1b[1A", $this->getOutputContent($output));
}
public function testMoveUpMultipleLines()
{
$cursor = new Cursor($output = $this->getOutputStream());
$cursor->moveUp(12);
$this->assertEquals("\x1b[12A", $this->getOutputContent($output));
}
public function testMoveDownOneLine()
{
$cursor = new Cursor($output = $this->getOutputStream());
$cursor->moveDown();
$this->assertEquals("\x1b[1B", $this->getOutputContent($output));
}
public function testMoveDownMultipleLines()
{
$cursor = new Cursor($output = $this->getOutputStream());
$cursor->moveDown(12);
$this->assertEquals("\x1b[12B", $this->getOutputContent($output));
}
public function testMoveLeftOneLine()
{
$cursor = new Cursor($output = $this->getOutputStream());
$cursor->moveLeft();
$this->assertEquals("\x1b[1D", $this->getOutputContent($output));
}
public function testMoveLeftMultipleLines()
{
$cursor = new Cursor($output = $this->getOutputStream());
$cursor->moveLeft(12);
$this->assertEquals("\x1b[12D", $this->getOutputContent($output));
}
public function testMoveRightOneLine()
{
$cursor = new Cursor($output = $this->getOutputStream());
$cursor->moveRight();
$this->assertEquals("\x1b[1C", $this->getOutputContent($output));
}
public function testMoveRightMultipleLines()
{
$cursor = new Cursor($output = $this->getOutputStream());
$cursor->moveRight(12);
$this->assertEquals("\x1b[12C", $this->getOutputContent($output));
}
public function testMoveToColumn()
{
$cursor = new Cursor($output = $this->getOutputStream());
$cursor->moveToColumn(6);
$this->assertEquals("\x1b[6G", $this->getOutputContent($output));
}
public function testMoveToPosition()
{
$cursor = new Cursor($output = $this->getOutputStream());
$cursor->moveToPosition(18, 16);
$this->assertEquals("\x1b[17;18H", $this->getOutputContent($output));
}
public function testClearLine()
{
$cursor = new Cursor($output = $this->getOutputStream());
$cursor->clearLine();
$this->assertEquals("\x1b[2K", $this->getOutputContent($output));
}
public function testSavePosition()
{
$cursor = new Cursor($output = $this->getOutputStream());
$cursor->savePosition();
$this->assertEquals("\x1b7", $this->getOutputContent($output));
}
public function testHide()
{
$cursor = new Cursor($output = $this->getOutputStream());
$cursor->hide();
$this->assertEquals("\x1b[?25l", $this->getOutputContent($output));
}
public function testShow()
{
$cursor = new Cursor($output = $this->getOutputStream());
$cursor->show();
$this->assertEquals("\x1b[?25h\x1b[?0c", $this->getOutputContent($output));
}
public function testRestorePosition()
{
$cursor = new Cursor($output = $this->getOutputStream());
$cursor->restorePosition();
$this->assertEquals("\x1b8", $this->getOutputContent($output));
}
public function testClearOutput()
{
$cursor = new Cursor($output = $this->getOutputStream());
$cursor->clearOutput();
$this->assertEquals("\x1b[0J", $this->getOutputContent($output));
}
public function testGetCurrentPosition()
{
$cursor = new Cursor($output = $this->getOutputStream());
$cursor->moveToPosition(10, 10);
$position = $cursor->getCurrentPosition();
$this->assertEquals("\x1b[11;10H", $this->getOutputContent($output));
$isTtySupported = (bool) @proc_open('echo 1 >/dev/null', [['file', '/dev/tty', 'r'], ['file', '/dev/tty', 'w'], ['file', '/dev/tty', 'w']], $pipes);
if ($isTtySupported) {
// When tty is supported, we can't validate the exact cursor position since it depends where the cursor is when the test runs.
// Instead we just make sure that it doesn't return 1,1
$this->assertNotEquals([1, 1], $position);
} else {
$this->assertEquals([1, 1], $position);
}
}
protected function getOutputContent(StreamOutput $output)
{
rewind($output->getStream());
return str_replace(\PHP_EOL, "\n", stream_get_contents($output->getStream()));
}
protected function getOutputStream(): StreamOutput
{
return new StreamOutput($this->stream, StreamOutput::VERBOSITY_NORMAL);
}
}