1
0
Fork 0
composer/tests/Composer/Test/IO/ConsoleIOTest.php

300 lines
13 KiB
PHP
Raw Normal View History

2022-02-23 15:58:18 +00:00
<?php declare(strict_types=1);
2012-01-22 21:06:09 +00:00
/*
* This file is part of Composer.
*
* (c) Nils Adermann <naderman@naderman.de>
* Jordi Boggiano <j.boggiano@seld.be>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Composer\Test\IO;
use Composer\IO\ConsoleIO;
use Composer\Pcre\Preg;
use Composer\Test\TestCase;
use Symfony\Component\Console\Output\OutputInterface;
2012-01-22 21:06:09 +00:00
class ConsoleIOTest extends TestCase
{
public function testIsInteractive(): void
2012-01-22 21:06:09 +00:00
{
$inputMock = $this->getMockBuilder('Symfony\Component\Console\Input\InputInterface')->getMock();
$inputMock->expects($this->exactly(2))
2012-01-22 21:06:09 +00:00
->method('isInteractive')
->willReturnOnConsecutiveCalls(
true,
false
);
2012-01-22 21:06:09 +00:00
$outputMock = $this->getMockBuilder('Symfony\Component\Console\Output\OutputInterface')->getMock();
$helperMock = $this->getMockBuilder('Symfony\Component\Console\Helper\HelperSet')->getMock();
2012-01-22 21:06:09 +00:00
$consoleIO = new ConsoleIO($inputMock, $outputMock, $helperMock);
$this->assertTrue($consoleIO->isInteractive());
$this->assertFalse($consoleIO->isInteractive());
}
public function testWrite(): void
2012-01-22 21:06:09 +00:00
{
$inputMock = $this->getMockBuilder('Symfony\Component\Console\Input\InputInterface')->getMock();
$outputMock = $this->getMockBuilder('Symfony\Component\Console\Output\OutputInterface')->getMock();
$outputMock->expects($this->once())
->method('getVerbosity')
->willReturn(OutputInterface::VERBOSITY_NORMAL);
2012-01-22 21:06:09 +00:00
$outputMock->expects($this->once())
->method('write')
->with($this->equalTo('some information about something'), $this->equalTo(false));
$helperMock = $this->getMockBuilder('Symfony\Component\Console\Helper\HelperSet')->getMock();
2012-01-22 21:06:09 +00:00
$consoleIO = new ConsoleIO($inputMock, $outputMock, $helperMock);
$consoleIO->write('some information about something', false);
}
public function testWriteError(): void
{
$inputMock = $this->getMockBuilder('Symfony\Component\Console\Input\InputInterface')->getMock();
$outputMock = $this->getMockBuilder('Symfony\Component\Console\Output\ConsoleOutputInterface')->getMock();
$outputMock->expects($this->once())
->method('getVerbosity')
->willReturn(OutputInterface::VERBOSITY_NORMAL);
$outputMock->expects($this->once())
->method('getErrorOutput')
->willReturn($outputMock);
$outputMock->expects($this->once())
->method('write')
->with($this->equalTo('some information about something'), $this->equalTo(false));
$helperMock = $this->getMockBuilder('Symfony\Component\Console\Helper\HelperSet')->getMock();
$consoleIO = new ConsoleIO($inputMock, $outputMock, $helperMock);
$consoleIO->writeError('some information about something', false);
}
public function testWriteWithMultipleLineStringWhenDebugging(): void
{
$inputMock = $this->getMockBuilder('Symfony\Component\Console\Input\InputInterface')->getMock();
$outputMock = $this->getMockBuilder('Symfony\Component\Console\Output\OutputInterface')->getMock();
$outputMock->expects($this->once())
->method('getVerbosity')
->willReturn(OutputInterface::VERBOSITY_NORMAL);
$outputMock->expects($this->once())
->method('write')
->with(
2022-08-17 12:20:07 +00:00
$this->callback(static function ($messages): bool {
$result = Preg::isMatch("[(.*)/(.*) First line]", $messages[0]);
$result = $result && Preg::isMatch("[(.*)/(.*) Second line]", $messages[1]);
2015-02-24 14:22:54 +00:00
return $result;
}),
$this->equalTo(false)
);
$helperMock = $this->getMockBuilder('Symfony\Component\Console\Helper\HelperSet')->getMock();
$consoleIO = new ConsoleIO($inputMock, $outputMock, $helperMock);
$startTime = microtime(true);
$consoleIO->enableDebugging($startTime);
$example = explode('\n', 'First line\nSecond lines');
$consoleIO->write($example, false);
}
public function testOverwrite(): void
2012-01-22 21:06:09 +00:00
{
$inputMock = $this->getMockBuilder('Symfony\Component\Console\Input\InputInterface')->getMock();
$outputMock = $this->getMockBuilder('Symfony\Component\Console\Output\OutputInterface')->getMock();
$outputMock->expects($this->any())
->method('getVerbosity')
->willReturn(OutputInterface::VERBOSITY_NORMAL);
$outputMock->expects($this->atLeast(7))
2012-01-22 21:06:09 +00:00
->method('write')
->willReturnCallback(function (...$args) {
static $series = null;
if ($series === null) {
$series = [
['something (<question>strlen = 23</question>)', true],
[str_repeat("\x08", 23), false],
['shorter (<comment>12</comment>)', false],
[str_repeat(' ', 11), false],
[str_repeat("\x08", 11), false],
[str_repeat("\x08", 12), false],
['something longer than initial (<info>34</info>)', false],
];
}
if (count($series) > 0) {
$this->assertSame(array_shift($series), [$args[0], $args[1]]);
}
});
2012-01-22 21:06:09 +00:00
$helperMock = $this->getMockBuilder('Symfony\Component\Console\Helper\HelperSet')->getMock();
2012-01-22 21:06:09 +00:00
$consoleIO = new ConsoleIO($inputMock, $outputMock, $helperMock);
$consoleIO->write('something (<question>strlen = 23</question>)');
$consoleIO->overwrite('shorter (<comment>12</comment>)', false);
$consoleIO->overwrite('something longer than initial (<info>34</info>)');
2012-01-22 21:06:09 +00:00
}
public function testAsk(): void
2012-01-22 21:06:09 +00:00
{
$inputMock = $this->getMockBuilder('Symfony\Component\Console\Input\InputInterface')->getMock();
$outputMock = $this->getMockBuilder('Symfony\Component\Console\Output\OutputInterface')->getMock();
$helperMock = $this->getMockBuilder('Symfony\Component\Console\Helper\QuestionHelper')->getMock();
$setMock = $this->getMockBuilder('Symfony\Component\Console\Helper\HelperSet')->getMock();
2012-01-22 21:06:09 +00:00
$helperMock
->expects($this->once())
2012-01-22 21:06:09 +00:00
->method('ask')
->with(
$this->isInstanceOf('Symfony\Component\Console\Input\InputInterface'),
$this->isInstanceOf('Symfony\Component\Console\Output\OutputInterface'),
$this->isInstanceOf('Symfony\Component\Console\Question\Question')
)
;
$setMock
->expects($this->once())
2012-01-22 21:06:09 +00:00
->method('get')
->with($this->equalTo('question'))
->will($this->returnValue($helperMock))
;
2012-01-22 21:06:09 +00:00
$consoleIO = new ConsoleIO($inputMock, $outputMock, $setMock);
2012-01-22 21:06:09 +00:00
$consoleIO->ask('Why?', 'default');
}
public function testAskConfirmation(): void
2012-01-22 21:06:09 +00:00
{
$inputMock = $this->getMockBuilder('Symfony\Component\Console\Input\InputInterface')->getMock();
$outputMock = $this->getMockBuilder('Symfony\Component\Console\Output\OutputInterface')->getMock();
$helperMock = $this->getMockBuilder('Symfony\Component\Console\Helper\QuestionHelper')->getMock();
$setMock = $this->getMockBuilder('Symfony\Component\Console\Helper\HelperSet')->getMock();
2012-01-22 21:06:09 +00:00
$helperMock
->expects($this->once())
->method('ask')
->with(
$this->isInstanceOf('Symfony\Component\Console\Input\InputInterface'),
$this->isInstanceOf('Symfony\Component\Console\Output\OutputInterface'),
$this->isInstanceOf('Composer\Question\StrictConfirmationQuestion')
)
;
$setMock
->expects($this->once())
2012-01-22 21:06:09 +00:00
->method('get')
->with($this->equalTo('question'))
->will($this->returnValue($helperMock))
;
2012-01-22 21:06:09 +00:00
$consoleIO = new ConsoleIO($inputMock, $outputMock, $setMock);
$consoleIO->askConfirmation('Why?', false);
2012-01-22 21:06:09 +00:00
}
public function testAskAndValidate(): void
2012-01-22 21:06:09 +00:00
{
$inputMock = $this->getMockBuilder('Symfony\Component\Console\Input\InputInterface')->getMock();
$outputMock = $this->getMockBuilder('Symfony\Component\Console\Output\OutputInterface')->getMock();
$helperMock = $this->getMockBuilder('Symfony\Component\Console\Helper\QuestionHelper')->getMock();
$setMock = $this->getMockBuilder('Symfony\Component\Console\Helper\HelperSet')->getMock();
2012-01-22 21:06:09 +00:00
$helperMock
->expects($this->once())
->method('ask')
->with(
$this->isInstanceOf('Symfony\Component\Console\Input\InputInterface'),
$this->isInstanceOf('Symfony\Component\Console\Output\OutputInterface'),
$this->isInstanceOf('Symfony\Component\Console\Question\Question')
)
;
$setMock
->expects($this->once())
2012-01-22 21:06:09 +00:00
->method('get')
->with($this->equalTo('question'))
->will($this->returnValue($helperMock))
;
2012-01-22 21:06:09 +00:00
2022-08-17 12:20:07 +00:00
$validator = static function ($value): bool {
2017-12-18 15:02:48 +00:00
return true;
2017-05-22 06:16:45 +00:00
};
$consoleIO = new ConsoleIO($inputMock, $outputMock, $setMock);
2017-05-22 06:16:45 +00:00
$consoleIO->askAndValidate('Why?', $validator, 10, 'default');
2012-01-22 21:06:09 +00:00
}
public function testSelect(): void
{
$inputMock = $this->getMockBuilder('Symfony\Component\Console\Input\InputInterface')->getMock();
$outputMock = $this->getMockBuilder('Symfony\Component\Console\Output\OutputInterface')->getMock();
$helperMock = $this->getMockBuilder('Symfony\Component\Console\Helper\QuestionHelper')->getMock();
$setMock = $this->getMockBuilder('Symfony\Component\Console\Helper\HelperSet')->getMock();
$helperMock
->expects($this->once())
->method('ask')
->with(
$this->isInstanceOf('Symfony\Component\Console\Input\InputInterface'),
$this->isInstanceOf('Symfony\Component\Console\Output\OutputInterface'),
$this->isInstanceOf('Symfony\Component\Console\Question\Question')
)
2022-08-17 12:20:07 +00:00
->will($this->returnValue(['item2']));
$setMock
->expects($this->once())
->method('get')
->with($this->equalTo('question'))
->will($this->returnValue($helperMock))
;
$consoleIO = new ConsoleIO($inputMock, $outputMock, $setMock);
2022-08-17 12:20:07 +00:00
$result = $consoleIO->select('Select item', ["item1", "item2"], 'item1', false, "Error message", true);
$this->assertEquals(['1'], $result);
}
public function testSetAndgetAuthentication(): void
2012-01-22 21:06:09 +00:00
{
$inputMock = $this->getMockBuilder('Symfony\Component\Console\Input\InputInterface')->getMock();
$outputMock = $this->getMockBuilder('Symfony\Component\Console\Output\OutputInterface')->getMock();
$helperMock = $this->getMockBuilder('Symfony\Component\Console\Helper\HelperSet')->getMock();
2012-01-22 21:06:09 +00:00
$consoleIO = new ConsoleIO($inputMock, $outputMock, $helperMock);
$consoleIO->setAuthentication('repoName', 'l3l0', 'passwd');
2012-01-22 21:06:09 +00:00
$this->assertEquals(
2022-08-17 12:20:07 +00:00
['username' => 'l3l0', 'password' => 'passwd'],
$consoleIO->getAuthentication('repoName')
2012-01-22 21:06:09 +00:00
);
}
public function testGetAuthenticationWhenDidNotSet(): void
2012-01-22 21:06:09 +00:00
{
$inputMock = $this->getMockBuilder('Symfony\Component\Console\Input\InputInterface')->getMock();
$outputMock = $this->getMockBuilder('Symfony\Component\Console\Output\OutputInterface')->getMock();
$helperMock = $this->getMockBuilder('Symfony\Component\Console\Helper\HelperSet')->getMock();
2012-01-22 21:06:09 +00:00
$consoleIO = new ConsoleIO($inputMock, $outputMock, $helperMock);
$this->assertEquals(
2022-08-17 12:20:07 +00:00
['username' => null, 'password' => null],
$consoleIO->getAuthentication('repoName')
2012-01-22 21:06:09 +00:00
);
}
public function testHasAuthentication(): void
2012-01-22 21:06:09 +00:00
{
$inputMock = $this->getMockBuilder('Symfony\Component\Console\Input\InputInterface')->getMock();
$outputMock = $this->getMockBuilder('Symfony\Component\Console\Output\OutputInterface')->getMock();
$helperMock = $this->getMockBuilder('Symfony\Component\Console\Helper\HelperSet')->getMock();
2012-01-22 21:06:09 +00:00
$consoleIO = new ConsoleIO($inputMock, $outputMock, $helperMock);
$consoleIO->setAuthentication('repoName', 'l3l0', 'passwd');
2012-01-22 21:06:09 +00:00
$this->assertTrue($consoleIO->hasAuthentication('repoName'));
$this->assertFalse($consoleIO->hasAuthentication('repoName2'));
2012-01-22 21:06:09 +00:00
}
}