ConsoleParserTest.php 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. <?php
  2. namespace Illuminate\Tests\Console;
  3. use Illuminate\Console\Parser;
  4. use InvalidArgumentException;
  5. use PHPUnit\Framework\TestCase;
  6. class ConsoleParserTest extends TestCase
  7. {
  8. public function testBasicParameterParsing()
  9. {
  10. $results = Parser::parse('command:name');
  11. $this->assertSame('command:name', $results[0]);
  12. $results = Parser::parse('command:name {argument} {--option}');
  13. $this->assertSame('command:name', $results[0]);
  14. $this->assertSame('argument', $results[1][0]->getName());
  15. $this->assertSame('option', $results[2][0]->getName());
  16. $this->assertFalse($results[2][0]->acceptValue());
  17. $results = Parser::parse('command:name {argument*} {--option=}');
  18. $this->assertSame('command:name', $results[0]);
  19. $this->assertSame('argument', $results[1][0]->getName());
  20. $this->assertTrue($results[1][0]->isArray());
  21. $this->assertTrue($results[1][0]->isRequired());
  22. $this->assertSame('option', $results[2][0]->getName());
  23. $this->assertTrue($results[2][0]->acceptValue());
  24. $results = Parser::parse('command:name {argument?*} {--option=*}');
  25. $this->assertSame('command:name', $results[0]);
  26. $this->assertSame('argument', $results[1][0]->getName());
  27. $this->assertTrue($results[1][0]->isArray());
  28. $this->assertFalse($results[1][0]->isRequired());
  29. $this->assertSame('option', $results[2][0]->getName());
  30. $this->assertTrue($results[2][0]->acceptValue());
  31. $this->assertTrue($results[2][0]->isArray());
  32. $results = Parser::parse('command:name {argument?* : The argument description.} {--option=* : The option description.}');
  33. $this->assertSame('command:name', $results[0]);
  34. $this->assertSame('argument', $results[1][0]->getName());
  35. $this->assertSame('The argument description.', $results[1][0]->getDescription());
  36. $this->assertTrue($results[1][0]->isArray());
  37. $this->assertFalse($results[1][0]->isRequired());
  38. $this->assertSame('option', $results[2][0]->getName());
  39. $this->assertSame('The option description.', $results[2][0]->getDescription());
  40. $this->assertTrue($results[2][0]->acceptValue());
  41. $this->assertTrue($results[2][0]->isArray());
  42. $results = Parser::parse('command:name
  43. {argument?* : The argument description.}
  44. {--option=* : The option description.}');
  45. $this->assertSame('command:name', $results[0]);
  46. $this->assertSame('argument', $results[1][0]->getName());
  47. $this->assertSame('The argument description.', $results[1][0]->getDescription());
  48. $this->assertTrue($results[1][0]->isArray());
  49. $this->assertFalse($results[1][0]->isRequired());
  50. $this->assertSame('option', $results[2][0]->getName());
  51. $this->assertSame('The option description.', $results[2][0]->getDescription());
  52. $this->assertTrue($results[2][0]->acceptValue());
  53. $this->assertTrue($results[2][0]->isArray());
  54. }
  55. public function testShortcutNameParsing()
  56. {
  57. $results = Parser::parse('command:name {--o|option}');
  58. $this->assertSame('o', $results[2][0]->getShortcut());
  59. $this->assertSame('option', $results[2][0]->getName());
  60. $this->assertFalse($results[2][0]->acceptValue());
  61. $results = Parser::parse('command:name {--o|option=}');
  62. $this->assertSame('o', $results[2][0]->getShortcut());
  63. $this->assertSame('option', $results[2][0]->getName());
  64. $this->assertTrue($results[2][0]->acceptValue());
  65. $results = Parser::parse('command:name {--o|option=*}');
  66. $this->assertSame('command:name', $results[0]);
  67. $this->assertSame('o', $results[2][0]->getShortcut());
  68. $this->assertSame('option', $results[2][0]->getName());
  69. $this->assertTrue($results[2][0]->acceptValue());
  70. $this->assertTrue($results[2][0]->isArray());
  71. $results = Parser::parse('command:name {--o|option=* : The option description.}');
  72. $this->assertSame('command:name', $results[0]);
  73. $this->assertSame('o', $results[2][0]->getShortcut());
  74. $this->assertSame('option', $results[2][0]->getName());
  75. $this->assertSame('The option description.', $results[2][0]->getDescription());
  76. $this->assertTrue($results[2][0]->acceptValue());
  77. $this->assertTrue($results[2][0]->isArray());
  78. $results = Parser::parse('command:name
  79. {--o|option=* : The option description.}');
  80. $this->assertSame('command:name', $results[0]);
  81. $this->assertSame('o', $results[2][0]->getShortcut());
  82. $this->assertSame('option', $results[2][0]->getName());
  83. $this->assertSame('The option description.', $results[2][0]->getDescription());
  84. $this->assertTrue($results[2][0]->acceptValue());
  85. $this->assertTrue($results[2][0]->isArray());
  86. }
  87. public function testDefaultValueParsing()
  88. {
  89. $results = Parser::parse('command:name {argument=defaultArgumentValue} {--option=defaultOptionValue}');
  90. $this->assertFalse($results[1][0]->isRequired());
  91. $this->assertSame('defaultArgumentValue', $results[1][0]->getDefault());
  92. $this->assertTrue($results[2][0]->acceptValue());
  93. $this->assertSame('defaultOptionValue', $results[2][0]->getDefault());
  94. $results = Parser::parse('command:name {argument=*defaultArgumentValue1,defaultArgumentValue2} {--option=*defaultOptionValue1,defaultOptionValue2}');
  95. $this->assertTrue($results[1][0]->isArray());
  96. $this->assertFalse($results[1][0]->isRequired());
  97. $this->assertEquals(['defaultArgumentValue1', 'defaultArgumentValue2'], $results[1][0]->getDefault());
  98. $this->assertTrue($results[2][0]->acceptValue());
  99. $this->assertTrue($results[2][0]->isArray());
  100. $this->assertEquals(['defaultOptionValue1', 'defaultOptionValue2'], $results[2][0]->getDefault());
  101. }
  102. public function testArgumentDefaultValue()
  103. {
  104. $results = Parser::parse('command:name {argument= : The argument description.}');
  105. $this->assertNull($results[1][0]->getDefault());
  106. $results = Parser::parse('command:name {argument=default : The argument description.}');
  107. $this->assertSame('default', $results[1][0]->getDefault());
  108. }
  109. public function testOptionDefaultValue()
  110. {
  111. $results = Parser::parse('command:name {--option= : The option description.}');
  112. $this->assertNull($results[2][0]->getDefault());
  113. $results = Parser::parse('command:name {--option=default : The option description.}');
  114. $this->assertSame('default', $results[2][0]->getDefault());
  115. }
  116. public function testNameIsSpacesException()
  117. {
  118. $this->expectException(InvalidArgumentException::class);
  119. $this->expectExceptionMessage('Unable to determine command name from signature.');
  120. Parser::parse(" \t\n\r\x0B\f");
  121. }
  122. public function testNameInEmptyException()
  123. {
  124. $this->expectException(InvalidArgumentException::class);
  125. $this->expectExceptionMessage('Unable to determine command name from signature.');
  126. Parser::parse('');
  127. }
  128. }