ArgvInputTest.php 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. <?php
  2. /*
  3. * This file is part of the symfony package.
  4. * (c) Fabien Potencier <fabien.potencier@symfony-project.com>
  5. *
  6. * For the full copyright and license information, please view the LICENSE
  7. * file that was distributed with this source code.
  8. */
  9. require_once __DIR__.'/../../../../bootstrap.php';
  10. use Symfony\Components\Console\Input\ArgvInput;
  11. use Symfony\Components\Console\Input\InputDefinition;
  12. use Symfony\Components\Console\Input\InputArgument;
  13. use Symfony\Components\Console\Input\InputOption;
  14. class TestInput extends ArgvInput
  15. {
  16. public function getTokens()
  17. {
  18. return $this->tokens;
  19. }
  20. }
  21. $t = new LimeTest(26);
  22. // __construct()
  23. $t->diag('__construct()');
  24. $_SERVER['argv'] = array('cli.php', 'foo');
  25. $input = new TestInput();
  26. $t->is($input->getTokens(), array('foo'), '__construct() automatically get its input from the argv server variable');
  27. // ->parse()
  28. $t->diag('->parse()');
  29. $input = new TestInput(array('cli.php', 'foo'));
  30. $input->bind(new InputDefinition(array(new InputArgument('name'))));
  31. $t->is($input->getArguments(), array('name' => 'foo'), '->parse() parses required arguments');
  32. $input->bind(new InputDefinition(array(new InputArgument('name'))));
  33. $t->is($input->getArguments(), array('name' => 'foo'), '->parse() is stateless');
  34. $input = new TestInput(array('cli.php', '--foo'));
  35. $input->bind(new InputDefinition(array(new InputOption('foo'))));
  36. $t->is($input->getOptions(), array('foo' => true), '->parse() parses long options without parameter');
  37. $input = new TestInput(array('cli.php', '--foo=bar'));
  38. $input->bind(new InputDefinition(array(new InputOption('foo', 'f', InputOption::PARAMETER_REQUIRED))));
  39. $t->is($input->getOptions(), array('foo' => 'bar'), '->parse() parses long options with a required parameter (with a = separator)');
  40. $input = new TestInput(array('cli.php', '--foo', 'bar'));
  41. $input->bind(new InputDefinition(array(new InputOption('foo', 'f', InputOption::PARAMETER_REQUIRED))));
  42. $t->is($input->getOptions(), array('foo' => 'bar'), '->parse() parses long options with a required parameter (with a space separator)');
  43. try
  44. {
  45. $input = new TestInput(array('cli.php', '--foo'));
  46. $input->bind(new InputDefinition(array(new InputOption('foo', 'f', InputOption::PARAMETER_REQUIRED))));
  47. $t->fail('->parse() throws a \RuntimeException if no parameter is passed to an option when it is required');
  48. }
  49. catch (\RuntimeException $e)
  50. {
  51. $t->pass('->parse() throws a \RuntimeException if no parameter is passed to an option when it is required');
  52. }
  53. $input = new TestInput(array('cli.php', '-f'));
  54. $input->bind(new InputDefinition(array(new InputOption('foo', 'f'))));
  55. $t->is($input->getOptions(), array('foo' => true), '->parse() parses short options without parameter');
  56. $input = new TestInput(array('cli.php', '-fbar'));
  57. $input->bind(new InputDefinition(array(new InputOption('foo', 'f', InputOption::PARAMETER_REQUIRED))));
  58. $t->is($input->getOptions(), array('foo' => 'bar'), '->parse() parses short options with a required parameter (with no separator)');
  59. $input = new TestInput(array('cli.php', '-f', 'bar'));
  60. $input->bind(new InputDefinition(array(new InputOption('foo', 'f', InputOption::PARAMETER_REQUIRED))));
  61. $t->is($input->getOptions(), array('foo' => 'bar'), '->parse() parses short options with a required parameter (with a space separator)');
  62. $input = new TestInput(array('cli.php', '-f', '-b', 'foo'));
  63. $input->bind(new InputDefinition(array(new InputArgument('name'), new InputOption('foo', 'f', InputOption::PARAMETER_OPTIONAL), new InputOption('bar', 'b'))));
  64. $t->is($input->getOptions(), array('foo' => null, 'bar' => true), '->parse() parses short options with an optional parameter which is not present');
  65. try
  66. {
  67. $input = new TestInput(array('cli.php', '-f'));
  68. $input->bind(new InputDefinition(array(new InputOption('foo', 'f', InputOption::PARAMETER_REQUIRED))));
  69. $t->fail('->parse() throws a \RuntimeException if no parameter is passed to an option when it is required');
  70. }
  71. catch (\RuntimeException $e)
  72. {
  73. $t->pass('->parse() throws a \RuntimeException if no parameter is passed to an option when it is required');
  74. }
  75. try
  76. {
  77. $input = new TestInput(array('cli.php', '-ffoo'));
  78. $input->bind(new InputDefinition(array(new InputOption('foo', 'f', InputOption::PARAMETER_NONE))));
  79. $t->fail('->parse() throws a \RuntimeException if a value is passed to an option which does not take one');
  80. }
  81. catch (\RuntimeException $e)
  82. {
  83. $t->pass('->parse() throws a \RuntimeException if a value is passed to an option which does not take one');
  84. }
  85. try
  86. {
  87. $input = new TestInput(array('cli.php', 'foo', 'bar'));
  88. $input->bind(new InputDefinition());
  89. $t->fail('->parse() throws a \RuntimeException if too many arguments are passed');
  90. }
  91. catch (\RuntimeException $e)
  92. {
  93. $t->pass('->parse() throws a \RuntimeException if too many arguments are passed');
  94. }
  95. try
  96. {
  97. $input = new TestInput(array('cli.php', '--foo'));
  98. $input->bind(new InputDefinition());
  99. $t->fail('->parse() throws a \RuntimeException if an unknown long option is passed');
  100. }
  101. catch (\RuntimeException $e)
  102. {
  103. $t->pass('->parse() throws a \RuntimeException if an unknown long option is passed');
  104. }
  105. try
  106. {
  107. $input = new TestInput(array('cli.php', '-f'));
  108. $input->bind(new InputDefinition());
  109. $t->fail('->parse() throws a \RuntimeException if an unknown short option is passed');
  110. }
  111. catch (\RuntimeException $e)
  112. {
  113. $t->pass('->parse() throws a \RuntimeException if an unknown short option is passed');
  114. }
  115. $input = new TestInput(array('cli.php', '-fb'));
  116. $input->bind(new InputDefinition(array(new InputOption('foo', 'f'), new InputOption('bar', 'b'))));
  117. $t->is($input->getOptions(), array('foo' => true, 'bar' => true), '->parse() parses short options when they are aggregated as a single one');
  118. $input = new TestInput(array('cli.php', '-fb', 'bar'));
  119. $input->bind(new InputDefinition(array(new InputOption('foo', 'f'), new InputOption('bar', 'b', InputOption::PARAMETER_REQUIRED))));
  120. $t->is($input->getOptions(), array('foo' => true, 'bar' => 'bar'), '->parse() parses short options when they are aggregated as a single one and the last one has a required parameter');
  121. $input = new TestInput(array('cli.php', '-fb', 'bar'));
  122. $input->bind(new InputDefinition(array(new InputOption('foo', 'f'), new InputOption('bar', 'b', InputOption::PARAMETER_OPTIONAL))));
  123. $t->is($input->getOptions(), array('foo' => true, 'bar' => 'bar'), '->parse() parses short options when they are aggregated as a single one and the last one has an optional parameter');
  124. $input = new TestInput(array('cli.php', '-fbbar'));
  125. $input->bind(new InputDefinition(array(new InputOption('foo', 'f'), new InputOption('bar', 'b', InputOption::PARAMETER_OPTIONAL))));
  126. $t->is($input->getOptions(), array('foo' => true, 'bar' => 'bar'), '->parse() parses short options when they are aggregated as a single one and the last one has an optional parameter with no separator');
  127. $input = new TestInput(array('cli.php', '-fbbar'));
  128. $input->bind(new InputDefinition(array(new InputOption('foo', 'f', InputOption::PARAMETER_OPTIONAL), new InputOption('bar', 'b', InputOption::PARAMETER_OPTIONAL))));
  129. $t->is($input->getOptions(), array('foo' => 'bbar', 'bar' => null), '->parse() parses short options when they are aggregated as a single one and one of them takes a parameter');
  130. // ->getFirstArgument()
  131. $t->diag('->getFirstArgument()');
  132. $input = new TestInput(array('cli.php', '-fbbar'));
  133. $t->is($input->getFirstArgument(), '', '->getFirstArgument() returns the first argument from the raw input');
  134. $input = new TestInput(array('cli.php', '-fbbar', 'foo'));
  135. $t->is($input->getFirstArgument(), 'foo', '->getFirstArgument() returns the first argument from the raw input');
  136. // ->hasParameterOption()
  137. $t->diag('->hasParameterOption()');
  138. $input = new TestInput(array('cli.php', '-f', 'foo'));
  139. $t->ok($input->hasParameterOption('-f'), '->hasParameterOption() returns true if the given short option is in the raw input');
  140. $input = new TestInput(array('cli.php', '--foo', 'foo'));
  141. $t->ok($input->hasParameterOption('--foo'), '->hasParameterOption() returns true if the given short option is in the raw input');
  142. $input = new TestInput(array('cli.php', 'foo'));
  143. $t->ok(!$input->hasParameterOption('--foo'), '->hasParameterOption() returns false if the given short option is not in the raw input');