Files
thephpleague-climate/tests/Argument/ManagerTest.php
T

134 lines
3.5 KiB
PHP

<?php
namespace League\CLImate\Tests\Argument;
use League\CLImate\Argument\Argument;
use League\CLImate\Argument\Manager;
use PHPUnit\Framework\TestCase;
class ManagerTest extends TestCase
{
private $manager;
public function setUp(): void
{
$this->manager = new Manager();
}
public function testDefined1()
{
$argument = Argument::createFromArray("test", [
"prefix" => "t",
"longPrefix" => "test",
]);
$this->manager->add($argument);
$result = $this->manager->defined("test", ["command", "--test"]);
$this->assertTrue($result);
}
public function testDefined2()
{
$result = $this->manager->defined("test");
$this->assertFalse($result);
}
public function testDefined3()
{
$argument = Argument::createFromArray("lorem", [
"prefix" => "l",
"longPrefix" => "Лорем",
]);
$this->manager->add($argument);
$result = $this->manager->defined("lorem", ["command", "--Лорем"]);
$this->assertTrue($result);
}
public function testProvidedReturnsTrueWhenValueGivenOnCommandLine()
{
$this->manager->add([
'foo' => ['prefix' => 'f', 'defaultValue' => 'bar'],
]);
$this->manager->parse(['command', '-f', 'baz']);
$this->assertTrue($this->manager->provided('foo'));
}
public function testProvidedReturnsFalseWhenFallingBackToDefault()
{
$this->manager->add([
'foo' => ['prefix' => 'f', 'defaultValue' => 'bar'],
]);
$this->manager->parse(['command']);
$this->assertFalse($this->manager->provided('foo'));
$this->assertEquals('bar', $this->manager->get('foo'));
}
public function testProvidedReturnsFalseForUnknownArgument()
{
$this->assertFalse($this->manager->provided('missing'));
}
public function testItParsesAnOptionalArgument()
{
$this->manager->add([
'foo' => ['prefix' => 'f'],
'bar' => ['prefix' => 'b']
]);
$this->manager->parse(['command', '-f', '-b', 'abc']);
$this->assertEquals('', $this->manager->get('foo'));
}
public function testItStoresTrailingInArray()
{
$this->manager->add([
'foo' => ['prefix' => 'f']
]);
$this->manager->parse(['command', '-f', '--', 'test', 'trailing with spaces']);
$this->assertEquals('test trailing with spaces', $this->manager->trailing());
$this->assertEquals(['test', 'trailing with spaces'], $this->manager->trailingArray());
}
public function testItSuggestAlternativesToUnknowArguments()
{
$this->manager->add([
'user' => [
'longPrefix' => 'user',
],
'password' => [
'longPrefix' => 'password',
],
'flag' => [
'longPrefix' => 'flag',
'noValue' => true,
],
]);
$argv = [
'test-script',
'--user=baz',
'--pass=123',
'--fag',
'--xyz',
];
$this->manager->parse($argv);
$processed = $this->manager->getUnknowPrefixedArgumentsAndSuggestions();
$this->assertCount(3, $processed);
$this->assertEquals('password', $processed['pass']);
$this->assertEquals('flag', $processed['fag']);
$this->assertEquals('', $processed['xyz']);
}
}