Skip to content

Commit

Permalink
[Console] Allow to returns all tokens after the command name
Browse files Browse the repository at this point in the history
  • Loading branch information
lyrixx committed Mar 20, 2024
1 parent a9133af commit 5d24503
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 2 deletions.
23 changes: 21 additions & 2 deletions src/Symfony/Component/Console/Input/ArgvInput.php
Expand Up @@ -348,11 +348,30 @@ public function getParameterOption(string|array $values, string|bool|int|float|a
/**
* Returns un-parsed and not validated tokens.
*
* @param bool $strip Whether to return the raw parameters (false) or the values after the command name (true)
*
* @return list<string>
*/
public function getRawTokens(): array
public function getRawTokens(bool $strip = false): array
{
return $this->tokens;
if (!$strip) {
return $this->tokens;
}

$parameters = [];
$keep = false;
foreach ($this->tokens as $value) {
if ($value === $this->getFirstArgument()) {
$keep = true;

continue;
}
if ($keep) {
$parameters[] = $value;
}
}

return $parameters;
}

/**
Expand Down
26 changes: 26 additions & 0 deletions src/Symfony/Component/Console/Tests/Input/ArgvInputTest.php
Expand Up @@ -562,4 +562,30 @@ public function testParseOptionWithValueOptionalGivenEmptyAndOptionalArgument()
$this->assertEquals(['foo' => '0'], $input->getOptions(), '->parse() parses optional options with empty value as null');
$this->assertEquals(['name' => 'bar'], $input->getArguments(), '->parse() parses optional arguments');
}

public function testGetRawTokensFalse()
{
$input = new ArgvInput(['cli.php', '--foo', 'bar']);
$this->assertSame(['--foo', 'bar'], $input->getRawTokens());
}

/**
* @dataProvider provideGetRawTokensTrueTests
*/
public function testGetRawTokensTrue(array $argv, array $expected)
{
$input = new ArgvInput($argv);
$this->assertSame($expected, $input->getRawTokens(true));
}

public static function provideGetRawTokensTrueTests(): iterable
{
yield [['app/console', 'foo:bar'], []];
yield [['app/console', 'foo:bar', '--env=prod'], ['--env=prod']];
yield [['app/console', 'foo:bar', '--env', 'prod'], ['--env', 'prod']];
yield [['app/console', '--no-ansi', 'foo:bar', '--env', 'prod'], ['--env', 'prod']];
yield [['app/console', '--no-ansi', 'foo:bar', '--env', 'prod'], ['--env', 'prod']];
yield [['app/console', '--no-ansi', 'foo:bar', 'argument'], ['argument']];
yield [['app/console', '--no-ansi', 'foo:bar', '--', 'argument'], ['--', 'argument']];
}
}

0 comments on commit 5d24503

Please sign in to comment.