dependabot-composer 0.107.13 → 0.107.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (901) hide show
  1. checksums.yaml +4 -4
  2. data/helpers/vendor/autoload.php +7 -0
  3. data/helpers/vendor/bin/composer +1 -0
  4. data/helpers/vendor/bin/jsonlint +1 -0
  5. data/helpers/vendor/bin/validate-json +1 -0
  6. data/helpers/vendor/composer/ClassLoader.php +445 -0
  7. data/helpers/vendor/composer/LICENSE +21 -0
  8. data/helpers/vendor/composer/autoload_classmap.php +9 -0
  9. data/helpers/vendor/composer/autoload_files.php +11 -0
  10. data/helpers/vendor/composer/autoload_namespaces.php +9 -0
  11. data/helpers/vendor/composer/autoload_psr4.php +26 -0
  12. data/helpers/vendor/composer/autoload_real.php +70 -0
  13. data/helpers/vendor/composer/autoload_static.php +128 -0
  14. data/helpers/vendor/composer/ca-bundle/LICENSE +19 -0
  15. data/helpers/vendor/composer/ca-bundle/README.md +85 -0
  16. data/helpers/vendor/composer/ca-bundle/composer.json +54 -0
  17. data/helpers/vendor/composer/ca-bundle/res/cacert.pem +3401 -0
  18. data/helpers/vendor/composer/ca-bundle/src/CaBundle.php +308 -0
  19. data/helpers/vendor/composer/composer/.gitattributes +12 -0
  20. data/helpers/vendor/composer/composer/.github/CONTRIBUTING.md +59 -0
  21. data/helpers/vendor/composer/composer/.github/ISSUE_TEMPLATE.md +25 -0
  22. data/helpers/vendor/composer/composer/.gitignore +11 -0
  23. data/helpers/vendor/composer/composer/.php_cs +58 -0
  24. data/helpers/vendor/composer/composer/.travis.yml +76 -0
  25. data/helpers/vendor/composer/composer/CHANGELOG.md +808 -0
  26. data/helpers/vendor/composer/composer/LICENSE +19 -0
  27. data/helpers/vendor/composer/composer/PORTING_INFO +39 -0
  28. data/helpers/vendor/composer/composer/README.md +62 -0
  29. data/helpers/vendor/composer/composer/appveyor.yml +33 -0
  30. data/helpers/vendor/composer/composer/bin/compile +31 -0
  31. data/helpers/vendor/composer/composer/bin/composer +62 -0
  32. data/helpers/vendor/composer/composer/composer.json +81 -0
  33. data/helpers/vendor/composer/composer/composer.lock +1800 -0
  34. data/helpers/vendor/composer/composer/doc/00-intro.md +156 -0
  35. data/helpers/vendor/composer/composer/doc/01-basic-usage.md +266 -0
  36. data/helpers/vendor/composer/composer/doc/02-libraries.md +153 -0
  37. data/helpers/vendor/composer/composer/doc/03-cli.md +931 -0
  38. data/helpers/vendor/composer/composer/doc/04-schema.md +924 -0
  39. data/helpers/vendor/composer/composer/doc/05-repositories.md +713 -0
  40. data/helpers/vendor/composer/composer/doc/06-config.md +277 -0
  41. data/helpers/vendor/composer/composer/doc/07-community.md +35 -0
  42. data/helpers/vendor/composer/composer/doc/articles/aliases.md +105 -0
  43. data/helpers/vendor/composer/composer/doc/articles/autoloader-optimization.md +111 -0
  44. data/helpers/vendor/composer/composer/doc/articles/custom-installers.md +204 -0
  45. data/helpers/vendor/composer/composer/doc/articles/handling-private-packages-with-satis.md +343 -0
  46. data/helpers/vendor/composer/composer/doc/articles/http-basic-authentication.md +59 -0
  47. data/helpers/vendor/composer/composer/doc/articles/plugins.md +285 -0
  48. data/helpers/vendor/composer/composer/doc/articles/scripts.md +304 -0
  49. data/helpers/vendor/composer/composer/doc/articles/troubleshooting.md +309 -0
  50. data/helpers/vendor/composer/composer/doc/articles/vendor-binaries.md +110 -0
  51. data/helpers/vendor/composer/composer/doc/articles/versions.md +230 -0
  52. data/helpers/vendor/composer/composer/doc/dev/DefaultPolicy.md +55 -0
  53. data/helpers/vendor/composer/composer/doc/faqs/how-do-i-install-a-package-to-a-custom-path-for-my-framework.md +50 -0
  54. data/helpers/vendor/composer/composer/doc/faqs/how-to-install-composer-programmatically.md +42 -0
  55. data/helpers/vendor/composer/composer/doc/faqs/how-to-install-untrusted-packages-safely.md +19 -0
  56. data/helpers/vendor/composer/composer/doc/faqs/should-i-commit-the-dependencies-in-my-vendor-directory.md +32 -0
  57. data/helpers/vendor/composer/composer/doc/faqs/which-version-numbering-system-does-composer-itself-use.md +4 -0
  58. data/helpers/vendor/composer/composer/doc/faqs/why-are-unbound-version-constraints-a-bad-idea.md +21 -0
  59. data/helpers/vendor/composer/composer/doc/faqs/why-are-version-constraints-combining-comparisons-and-wildcards-a-bad-idea.md +21 -0
  60. data/helpers/vendor/composer/composer/doc/faqs/why-can't-composer-load-repositories-recursively.md +35 -0
  61. data/helpers/vendor/composer/composer/doc/fixtures/fixtures.md +22 -0
  62. data/helpers/vendor/composer/composer/doc/fixtures/repo-composer-plain/packages.json +158 -0
  63. data/helpers/vendor/composer/composer/doc/fixtures/repo-composer-with-providers/p/bar/baz$923363b3c22e73abb2e3fd891c8156dd4d0821a97fd3e428bc910833e3e46dbe.json +50 -0
  64. data/helpers/vendor/composer/composer/doc/fixtures/repo-composer-with-providers/p/foo/bar$4baabb3303afa3e34a4d3af18fb138e5f3b79029c1f8d9ab5b477ea15776ba0a.json +77 -0
  65. data/helpers/vendor/composer/composer/doc/fixtures/repo-composer-with-providers/p/gar/nix$5d210670cb46c8364c8e3fb449967b9bea558b971e5b082f330ae4f1d484c321.json +50 -0
  66. data/helpers/vendor/composer/composer/doc/fixtures/repo-composer-with-providers/p/provider-active$1893a061e579543822389ecd12d791c612db0c05e22d90e9286e233cacd86ed8.json +16 -0
  67. data/helpers/vendor/composer/composer/doc/fixtures/repo-composer-with-providers/p/qux/quux$c142d1a07ca354be46b613f59f1d601923a5a00ccc5fcce50a77ecdd461eb72d.json +22 -0
  68. data/helpers/vendor/composer/composer/doc/fixtures/repo-composer-with-providers/packages.json +9 -0
  69. data/helpers/vendor/composer/composer/phpunit.xml.dist +35 -0
  70. data/helpers/vendor/composer/composer/res/composer-repository-schema.json +110 -0
  71. data/helpers/vendor/composer/composer/res/composer-schema.json +843 -0
  72. data/helpers/vendor/composer/composer/src/Composer/Autoload/AutoloadGenerator.php +1061 -0
  73. data/helpers/vendor/composer/composer/src/Composer/Autoload/ClassLoader.php +445 -0
  74. data/helpers/vendor/composer/composer/src/Composer/Autoload/ClassMapGenerator.php +222 -0
  75. data/helpers/vendor/composer/composer/src/Composer/Cache.php +251 -0
  76. data/helpers/vendor/composer/composer/src/Composer/Command/AboutCommand.php +46 -0
  77. data/helpers/vendor/composer/composer/src/Composer/Command/ArchiveCommand.php +166 -0
  78. data/helpers/vendor/composer/composer/src/Composer/Command/BaseCommand.php +181 -0
  79. data/helpers/vendor/composer/composer/src/Composer/Command/BaseDependencyCommand.php +255 -0
  80. data/helpers/vendor/composer/composer/src/Composer/Command/CheckPlatformReqsCommand.php +156 -0
  81. data/helpers/vendor/composer/composer/src/Composer/Command/ClearCacheCommand.php +74 -0
  82. data/helpers/vendor/composer/composer/src/Composer/Command/ConfigCommand.php +707 -0
  83. data/helpers/vendor/composer/composer/src/Composer/Command/CreateProjectCommand.php +385 -0
  84. data/helpers/vendor/composer/composer/src/Composer/Command/DependsCommand.php +57 -0
  85. data/helpers/vendor/composer/composer/src/Composer/Command/DiagnoseCommand.php +729 -0
  86. data/helpers/vendor/composer/composer/src/Composer/Command/DumpAutoloadCommand.php +88 -0
  87. data/helpers/vendor/composer/composer/src/Composer/Command/ExecCommand.php +97 -0
  88. data/helpers/vendor/composer/composer/src/Composer/Command/GlobalCommand.php +111 -0
  89. data/helpers/vendor/composer/composer/src/Composer/Command/HomeCommand.php +168 -0
  90. data/helpers/vendor/composer/composer/src/Composer/Command/InitCommand.php +808 -0
  91. data/helpers/vendor/composer/composer/src/Composer/Command/InstallCommand.php +124 -0
  92. data/helpers/vendor/composer/composer/src/Composer/Command/LicensesCommand.php +159 -0
  93. data/helpers/vendor/composer/composer/src/Composer/Command/OutdatedCommand.php +95 -0
  94. data/helpers/vendor/composer/composer/src/Composer/Command/ProhibitsCommand.php +57 -0
  95. data/helpers/vendor/composer/composer/src/Composer/Command/RemoveCommand.php +163 -0
  96. data/helpers/vendor/composer/composer/src/Composer/Command/RequireCommand.php +258 -0
  97. data/helpers/vendor/composer/composer/src/Composer/Command/RunScriptCommand.php +141 -0
  98. data/helpers/vendor/composer/composer/src/Composer/Command/ScriptAliasCommand.php +66 -0
  99. data/helpers/vendor/composer/composer/src/Composer/Command/SearchCommand.php +83 -0
  100. data/helpers/vendor/composer/composer/src/Composer/Command/SelfUpdateCommand.php +405 -0
  101. data/helpers/vendor/composer/composer/src/Composer/Command/ShowCommand.php +1015 -0
  102. data/helpers/vendor/composer/composer/src/Composer/Command/StatusCommand.php +214 -0
  103. data/helpers/vendor/composer/composer/src/Composer/Command/SuggestsCommand.php +152 -0
  104. data/helpers/vendor/composer/composer/src/Composer/Command/UpdateCommand.php +228 -0
  105. data/helpers/vendor/composer/composer/src/Composer/Command/ValidateCommand.php +172 -0
  106. data/helpers/vendor/composer/composer/src/Composer/Compiler.php +284 -0
  107. data/helpers/vendor/composer/composer/src/Composer/Composer.php +283 -0
  108. data/helpers/vendor/composer/composer/src/Composer/Config.php +461 -0
  109. data/helpers/vendor/composer/composer/src/Composer/Config/ConfigSourceInterface.php +91 -0
  110. data/helpers/vendor/composer/composer/src/Composer/Config/JsonConfigSource.php +267 -0
  111. data/helpers/vendor/composer/composer/src/Composer/Console/Application.php +481 -0
  112. data/helpers/vendor/composer/composer/src/Composer/Console/HtmlOutputFormatter.php +90 -0
  113. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/Decisions.php +211 -0
  114. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/DefaultPolicy.php +285 -0
  115. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/GenericRule.php +91 -0
  116. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/Operation/InstallOperation.php +66 -0
  117. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/Operation/MarkAliasInstalledOperation.php +67 -0
  118. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/Operation/MarkAliasUninstalledOperation.php +67 -0
  119. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/Operation/OperationInterface.php +42 -0
  120. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/Operation/SolverOperation.php +50 -0
  121. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/Operation/UninstallOperation.php +66 -0
  122. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/Operation/UpdateOperation.php +80 -0
  123. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/PolicyInterface.php +27 -0
  124. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/Pool.php +378 -0
  125. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/Problem.php +253 -0
  126. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/Request.php +78 -0
  127. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/Rule.php +268 -0
  128. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/Rule2Literals.php +113 -0
  129. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/RuleSet.php +176 -0
  130. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/RuleSetGenerator.php +372 -0
  131. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/RuleSetIterator.php +94 -0
  132. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/RuleWatchChain.php +52 -0
  133. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/RuleWatchGraph.php +144 -0
  134. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/RuleWatchNode.php +113 -0
  135. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/Solver.php +874 -0
  136. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/SolverBugException.php +27 -0
  137. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/SolverProblemsException.php +88 -0
  138. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/Transaction.php +244 -0
  139. data/helpers/vendor/composer/composer/src/Composer/Downloader/ArchiveDownloader.php +135 -0
  140. data/helpers/vendor/composer/composer/src/Composer/Downloader/ChangeReportInterface.php +32 -0
  141. data/helpers/vendor/composer/composer/src/Composer/Downloader/DownloadManager.php +325 -0
  142. data/helpers/vendor/composer/composer/src/Composer/Downloader/DownloaderInterface.php +64 -0
  143. data/helpers/vendor/composer/composer/src/Composer/Downloader/DvcsDownloaderInterface.php +32 -0
  144. data/helpers/vendor/composer/composer/src/Composer/Downloader/FileDownloader.php +322 -0
  145. data/helpers/vendor/composer/composer/src/Composer/Downloader/FilesystemException.php +26 -0
  146. data/helpers/vendor/composer/composer/src/Composer/Downloader/FossilDownloader.php +116 -0
  147. data/helpers/vendor/composer/composer/src/Composer/Downloader/GitDownloader.php +516 -0
  148. data/helpers/vendor/composer/composer/src/Composer/Downloader/GzipDownloader.php +84 -0
  149. data/helpers/vendor/composer/composer/src/Composer/Downloader/HgDownloader.php +100 -0
  150. data/helpers/vendor/composer/composer/src/Composer/Downloader/PathDownloader.php +202 -0
  151. data/helpers/vendor/composer/composer/src/Composer/Downloader/PearPackageExtractor.php +266 -0
  152. data/helpers/vendor/composer/composer/src/Composer/Downloader/PerforceDownloader.php +114 -0
  153. data/helpers/vendor/composer/composer/src/Composer/Downloader/PharDownloader.php +36 -0
  154. data/helpers/vendor/composer/composer/src/Composer/Downloader/RarDownloader.php +91 -0
  155. data/helpers/vendor/composer/composer/src/Composer/Downloader/SvnDownloader.php +225 -0
  156. data/helpers/vendor/composer/composer/src/Composer/Downloader/TarDownloader.php +31 -0
  157. data/helpers/vendor/composer/composer/src/Composer/Downloader/TransportException.php +53 -0
  158. data/helpers/vendor/composer/composer/src/Composer/Downloader/VcsCapableDownloaderInterface.php +32 -0
  159. data/helpers/vendor/composer/composer/src/Composer/Downloader/VcsDownloader.php +293 -0
  160. data/helpers/vendor/composer/composer/src/Composer/Downloader/XzDownloader.php +60 -0
  161. data/helpers/vendor/composer/composer/src/Composer/Downloader/ZipDownloader.php +230 -0
  162. data/helpers/vendor/composer/composer/src/Composer/EventDispatcher/Event.php +103 -0
  163. data/helpers/vendor/composer/composer/src/Composer/EventDispatcher/EventDispatcher.php +536 -0
  164. data/helpers/vendor/composer/composer/src/Composer/EventDispatcher/EventSubscriberInterface.php +48 -0
  165. data/helpers/vendor/composer/composer/src/Composer/EventDispatcher/ScriptExecutionException.php +20 -0
  166. data/helpers/vendor/composer/composer/src/Composer/Exception/NoSslException.php +20 -0
  167. data/helpers/vendor/composer/composer/src/Composer/Factory.php +653 -0
  168. data/helpers/vendor/composer/composer/src/Composer/IO/BaseIO.php +255 -0
  169. data/helpers/vendor/composer/composer/src/Composer/IO/BufferIO.php +59 -0
  170. data/helpers/vendor/composer/composer/src/Composer/IO/ConsoleIO.php +322 -0
  171. data/helpers/vendor/composer/composer/src/Composer/IO/IOInterface.php +207 -0
  172. data/helpers/vendor/composer/composer/src/Composer/IO/NullIO.php +129 -0
  173. data/helpers/vendor/composer/composer/src/Composer/Installer.php +1798 -0
  174. data/helpers/vendor/composer/composer/src/Composer/Installer/BinaryInstaller.php +214 -0
  175. data/helpers/vendor/composer/composer/src/Composer/Installer/BinaryPresenceInterface.php +30 -0
  176. data/helpers/vendor/composer/composer/src/Composer/Installer/InstallationManager.php +326 -0
  177. data/helpers/vendor/composer/composer/src/Composer/Installer/InstallerEvent.php +161 -0
  178. data/helpers/vendor/composer/composer/src/Composer/Installer/InstallerEvents.php +43 -0
  179. data/helpers/vendor/composer/composer/src/Composer/Installer/InstallerInterface.php +79 -0
  180. data/helpers/vendor/composer/composer/src/Composer/Installer/LibraryInstaller.php +232 -0
  181. data/helpers/vendor/composer/composer/src/Composer/Installer/MetapackageInstaller.php +100 -0
  182. data/helpers/vendor/composer/composer/src/Composer/Installer/NoopInstaller.php +88 -0
  183. data/helpers/vendor/composer/composer/src/Composer/Installer/PackageEvent.php +65 -0
  184. data/helpers/vendor/composer/composer/src/Composer/Installer/PackageEvents.php +75 -0
  185. data/helpers/vendor/composer/composer/src/Composer/Installer/PearBinaryInstaller.php +144 -0
  186. data/helpers/vendor/composer/composer/src/Composer/Installer/PearInstaller.php +84 -0
  187. data/helpers/vendor/composer/composer/src/Composer/Installer/PluginInstaller.php +84 -0
  188. data/helpers/vendor/composer/composer/src/Composer/Installer/ProjectInstaller.php +99 -0
  189. data/helpers/vendor/composer/composer/src/Composer/Installer/SuggestedPackagesReporter.php +151 -0
  190. data/helpers/vendor/composer/composer/src/Composer/Json/JsonFile.php +301 -0
  191. data/helpers/vendor/composer/composer/src/Composer/Json/JsonFormatter.php +134 -0
  192. data/helpers/vendor/composer/composer/src/Composer/Json/JsonManipulator.php +521 -0
  193. data/helpers/vendor/composer/composer/src/Composer/Json/JsonValidationException.php +34 -0
  194. data/helpers/vendor/composer/composer/src/Composer/Package/AliasPackage.php +404 -0
  195. data/helpers/vendor/composer/composer/src/Composer/Package/Archiver/ArchivableFilesFilter.php +44 -0
  196. data/helpers/vendor/composer/composer/src/Composer/Package/Archiver/ArchivableFilesFinder.php +105 -0
  197. data/helpers/vendor/composer/composer/src/Composer/Package/Archiver/ArchiveManager.php +183 -0
  198. data/helpers/vendor/composer/composer/src/Composer/Package/Archiver/ArchiverInterface.php +43 -0
  199. data/helpers/vendor/composer/composer/src/Composer/Package/Archiver/BaseExcludeFilter.php +148 -0
  200. data/helpers/vendor/composer/composer/src/Composer/Package/Archiver/ComposerExcludeFilter.php +31 -0
  201. data/helpers/vendor/composer/composer/src/Composer/Package/Archiver/GitExcludeFilter.php +79 -0
  202. data/helpers/vendor/composer/composer/src/Composer/Package/Archiver/HgExcludeFilter.php +107 -0
  203. data/helpers/vendor/composer/composer/src/Composer/Package/Archiver/PharArchiver.php +97 -0
  204. data/helpers/vendor/composer/composer/src/Composer/Package/Archiver/ZipArchiver.php +74 -0
  205. data/helpers/vendor/composer/composer/src/Composer/Package/BasePackage.php +251 -0
  206. data/helpers/vendor/composer/composer/src/Composer/Package/Comparer/Comparer.php +129 -0
  207. data/helpers/vendor/composer/composer/src/Composer/Package/CompletePackage.php +199 -0
  208. data/helpers/vendor/composer/composer/src/Composer/Package/CompletePackageInterface.php +95 -0
  209. data/helpers/vendor/composer/composer/src/Composer/Package/Dumper/ArrayDumper.php +151 -0
  210. data/helpers/vendor/composer/composer/src/Composer/Package/Link.php +128 -0
  211. data/helpers/vendor/composer/composer/src/Composer/Package/LinkConstraint/EmptyConstraint.php +24 -0
  212. data/helpers/vendor/composer/composer/src/Composer/Package/LinkConstraint/LinkConstraintInterface.php +24 -0
  213. data/helpers/vendor/composer/composer/src/Composer/Package/LinkConstraint/MultiConstraint.php +24 -0
  214. data/helpers/vendor/composer/composer/src/Composer/Package/LinkConstraint/SpecificConstraint.php +24 -0
  215. data/helpers/vendor/composer/composer/src/Composer/Package/LinkConstraint/VersionConstraint.php +24 -0
  216. data/helpers/vendor/composer/composer/src/Composer/Package/Loader/ArrayLoader.php +290 -0
  217. data/helpers/vendor/composer/composer/src/Composer/Package/Loader/InvalidPackageException.php +46 -0
  218. data/helpers/vendor/composer/composer/src/Composer/Package/Loader/JsonLoader.php +45 -0
  219. data/helpers/vendor/composer/composer/src/Composer/Package/Loader/LoaderInterface.php +30 -0
  220. data/helpers/vendor/composer/composer/src/Composer/Package/Loader/RootPackageLoader.php +264 -0
  221. data/helpers/vendor/composer/composer/src/Composer/Package/Loader/ValidatingArrayLoader.php +493 -0
  222. data/helpers/vendor/composer/composer/src/Composer/Package/Locker.php +438 -0
  223. data/helpers/vendor/composer/composer/src/Composer/Package/Package.php +612 -0
  224. data/helpers/vendor/composer/composer/src/Composer/Package/PackageInterface.php +361 -0
  225. data/helpers/vendor/composer/composer/src/Composer/Package/RootAliasPackage.php +173 -0
  226. data/helpers/vendor/composer/composer/src/Composer/Package/RootPackage.php +136 -0
  227. data/helpers/vendor/composer/composer/src/Composer/Package/RootPackageInterface.php +142 -0
  228. data/helpers/vendor/composer/composer/src/Composer/Package/Version/VersionGuesser.php +302 -0
  229. data/helpers/vendor/composer/composer/src/Composer/Package/Version/VersionParser.php +81 -0
  230. data/helpers/vendor/composer/composer/src/Composer/Package/Version/VersionSelector.php +176 -0
  231. data/helpers/vendor/composer/composer/src/Composer/Plugin/Capability/Capability.php +23 -0
  232. data/helpers/vendor/composer/composer/src/Composer/Plugin/Capability/CommandProvider.php +33 -0
  233. data/helpers/vendor/composer/composer/src/Composer/Plugin/Capable.php +43 -0
  234. data/helpers/vendor/composer/composer/src/Composer/Plugin/CommandEvent.php +88 -0
  235. data/helpers/vendor/composer/composer/src/Composer/Plugin/PluginEvents.php +61 -0
  236. data/helpers/vendor/composer/composer/src/Composer/Plugin/PluginInterface.php +39 -0
  237. data/helpers/vendor/composer/composer/src/Composer/Plugin/PluginManager.php +403 -0
  238. data/helpers/vendor/composer/composer/src/Composer/Plugin/PreCommandRunEvent.php +68 -0
  239. data/helpers/vendor/composer/composer/src/Composer/Plugin/PreFileDownloadEvent.php +78 -0
  240. data/helpers/vendor/composer/composer/src/Composer/Question/StrictConfirmationQuestion.php +94 -0
  241. data/helpers/vendor/composer/composer/src/Composer/Repository/ArrayRepository.php +208 -0
  242. data/helpers/vendor/composer/composer/src/Composer/Repository/ArtifactRepository.php +167 -0
  243. data/helpers/vendor/composer/composer/src/Composer/Repository/BaseRepository.php +157 -0
  244. data/helpers/vendor/composer/composer/src/Composer/Repository/ComposerRepository.php +829 -0
  245. data/helpers/vendor/composer/composer/src/Composer/Repository/CompositeRepository.php +164 -0
  246. data/helpers/vendor/composer/composer/src/Composer/Repository/ConfigurableRepositoryInterface.php +23 -0
  247. data/helpers/vendor/composer/composer/src/Composer/Repository/FilesystemRepository.php +97 -0
  248. data/helpers/vendor/composer/composer/src/Composer/Repository/InstalledArrayRepository.php +24 -0
  249. data/helpers/vendor/composer/composer/src/Composer/Repository/InstalledFilesystemRepository.php +22 -0
  250. data/helpers/vendor/composer/composer/src/Composer/Repository/InstalledRepositoryInterface.php +24 -0
  251. data/helpers/vendor/composer/composer/src/Composer/Repository/InvalidRepositoryException.php +22 -0
  252. data/helpers/vendor/composer/composer/src/Composer/Repository/PackageRepository.php +61 -0
  253. data/helpers/vendor/composer/composer/src/Composer/Repository/PathRepository.php +190 -0
  254. data/helpers/vendor/composer/composer/src/Composer/Repository/Pear/BaseChannelReader.php +82 -0
  255. data/helpers/vendor/composer/composer/src/Composer/Repository/Pear/ChannelInfo.php +67 -0
  256. data/helpers/vendor/composer/composer/src/Composer/Repository/Pear/ChannelReader.php +101 -0
  257. data/helpers/vendor/composer/composer/src/Composer/Repository/Pear/ChannelRest10Reader.php +164 -0
  258. data/helpers/vendor/composer/composer/src/Composer/Repository/Pear/ChannelRest11Reader.php +139 -0
  259. data/helpers/vendor/composer/composer/src/Composer/Repository/Pear/DependencyConstraint.php +60 -0
  260. data/helpers/vendor/composer/composer/src/Composer/Repository/Pear/DependencyInfo.php +50 -0
  261. data/helpers/vendor/composer/composer/src/Composer/Repository/Pear/PackageDependencyParser.php +317 -0
  262. data/helpers/vendor/composer/composer/src/Composer/Repository/Pear/PackageInfo.php +94 -0
  263. data/helpers/vendor/composer/composer/src/Composer/Repository/Pear/ReleaseInfo.php +50 -0
  264. data/helpers/vendor/composer/composer/src/Composer/Repository/PearRepository.php +198 -0
  265. data/helpers/vendor/composer/composer/src/Composer/Repository/PlatformRepository.php +342 -0
  266. data/helpers/vendor/composer/composer/src/Composer/Repository/RepositoryFactory.php +169 -0
  267. data/helpers/vendor/composer/composer/src/Composer/Repository/RepositoryInterface.php +74 -0
  268. data/helpers/vendor/composer/composer/src/Composer/Repository/RepositoryManager.php +177 -0
  269. data/helpers/vendor/composer/composer/src/Composer/Repository/RepositorySecurityException.php +22 -0
  270. data/helpers/vendor/composer/composer/src/Composer/Repository/Vcs/BitbucketDriver.php +445 -0
  271. data/helpers/vendor/composer/composer/src/Composer/Repository/Vcs/FossilDriver.php +238 -0
  272. data/helpers/vendor/composer/composer/src/Composer/Repository/Vcs/GitBitbucketDriver.php +91 -0
  273. data/helpers/vendor/composer/composer/src/Composer/Repository/Vcs/GitDriver.php +222 -0
  274. data/helpers/vendor/composer/composer/src/Composer/Repository/Vcs/GitHubDriver.php +472 -0
  275. data/helpers/vendor/composer/composer/src/Composer/Repository/Vcs/GitLabDriver.php +511 -0
  276. data/helpers/vendor/composer/composer/src/Composer/Repository/Vcs/HgBitbucketDriver.php +91 -0
  277. data/helpers/vendor/composer/composer/src/Composer/Repository/Vcs/HgDriver.php +230 -0
  278. data/helpers/vendor/composer/composer/src/Composer/Repository/Vcs/PerforceDriver.php +181 -0
  279. data/helpers/vendor/composer/composer/src/Composer/Repository/Vcs/SvnDriver.php +397 -0
  280. data/helpers/vendor/composer/composer/src/Composer/Repository/Vcs/VcsDriver.php +175 -0
  281. data/helpers/vendor/composer/composer/src/Composer/Repository/Vcs/VcsDriverInterface.php +117 -0
  282. data/helpers/vendor/composer/composer/src/Composer/Repository/VcsRepository.php +407 -0
  283. data/helpers/vendor/composer/composer/src/Composer/Repository/VersionCacheInterface.php +23 -0
  284. data/helpers/vendor/composer/composer/src/Composer/Repository/WritableArrayRepository.php +66 -0
  285. data/helpers/vendor/composer/composer/src/Composer/Repository/WritableRepositoryInterface.php +54 -0
  286. data/helpers/vendor/composer/composer/src/Composer/Script/CommandEvent.php +22 -0
  287. data/helpers/vendor/composer/composer/src/Composer/Script/Event.php +89 -0
  288. data/helpers/vendor/composer/composer/src/Composer/Script/PackageEvent.php +24 -0
  289. data/helpers/vendor/composer/composer/src/Composer/Script/ScriptEvents.php +193 -0
  290. data/helpers/vendor/composer/composer/src/Composer/SelfUpdate/Keys.php +36 -0
  291. data/helpers/vendor/composer/composer/src/Composer/SelfUpdate/Versions.php +75 -0
  292. data/helpers/vendor/composer/composer/src/Composer/Util/AuthHelper.php +63 -0
  293. data/helpers/vendor/composer/composer/src/Composer/Util/Bitbucket.php +245 -0
  294. data/helpers/vendor/composer/composer/src/Composer/Util/ComposerMirror.php +57 -0
  295. data/helpers/vendor/composer/composer/src/Composer/Util/ConfigValidator.php +191 -0
  296. data/helpers/vendor/composer/composer/src/Composer/Util/ErrorHandler.php +79 -0
  297. data/helpers/vendor/composer/composer/src/Composer/Util/Filesystem.php +715 -0
  298. data/helpers/vendor/composer/composer/src/Composer/Util/Git.php +374 -0
  299. data/helpers/vendor/composer/composer/src/Composer/Util/GitHub.php +180 -0
  300. data/helpers/vendor/composer/composer/src/Composer/Util/GitLab.php +163 -0
  301. data/helpers/vendor/composer/composer/src/Composer/Util/Hg.php +94 -0
  302. data/helpers/vendor/composer/composer/src/Composer/Util/IniHelper.php +64 -0
  303. data/helpers/vendor/composer/composer/src/Composer/Util/NoProxyPattern.php +147 -0
  304. data/helpers/vendor/composer/composer/src/Composer/Util/Perforce.php +581 -0
  305. data/helpers/vendor/composer/composer/src/Composer/Util/Platform.php +92 -0
  306. data/helpers/vendor/composer/composer/src/Composer/Util/ProcessExecutor.php +192 -0
  307. data/helpers/vendor/composer/composer/src/Composer/Util/RemoteFilesystem.php +1109 -0
  308. data/helpers/vendor/composer/composer/src/Composer/Util/Silencer.php +78 -0
  309. data/helpers/vendor/composer/composer/src/Composer/Util/SpdxLicense.php +24 -0
  310. data/helpers/vendor/composer/composer/src/Composer/Util/StreamContextFactory.php +177 -0
  311. data/helpers/vendor/composer/composer/src/Composer/Util/Svn.php +381 -0
  312. data/helpers/vendor/composer/composer/src/Composer/Util/TlsHelper.php +204 -0
  313. data/helpers/vendor/composer/composer/src/Composer/Util/Url.php +55 -0
  314. data/helpers/vendor/composer/composer/src/Composer/XdebugHandler.php +31 -0
  315. data/helpers/vendor/composer/composer/src/bootstrap.php +24 -0
  316. data/helpers/vendor/composer/installed.json +947 -0
  317. data/helpers/vendor/composer/semver/CHANGELOG.md +72 -0
  318. data/helpers/vendor/composer/semver/LICENSE +19 -0
  319. data/helpers/vendor/composer/semver/README.md +70 -0
  320. data/helpers/vendor/composer/semver/composer.json +58 -0
  321. data/helpers/vendor/composer/semver/src/Comparator.php +111 -0
  322. data/helpers/vendor/composer/semver/src/Constraint/AbstractConstraint.php +63 -0
  323. data/helpers/vendor/composer/semver/src/Constraint/Constraint.php +219 -0
  324. data/helpers/vendor/composer/semver/src/Constraint/ConstraintInterface.php +32 -0
  325. data/helpers/vendor/composer/semver/src/Constraint/EmptyConstraint.php +59 -0
  326. data/helpers/vendor/composer/semver/src/Constraint/MultiConstraint.php +120 -0
  327. data/helpers/vendor/composer/semver/src/Semver.php +127 -0
  328. data/helpers/vendor/composer/semver/src/VersionParser.php +540 -0
  329. data/helpers/vendor/composer/spdx-licenses/.php_cs.dist +59 -0
  330. data/helpers/vendor/composer/spdx-licenses/CHANGELOG.md +89 -0
  331. data/helpers/vendor/composer/spdx-licenses/LICENSE +19 -0
  332. data/helpers/vendor/composer/spdx-licenses/README.md +69 -0
  333. data/helpers/vendor/composer/spdx-licenses/composer.json +56 -0
  334. data/helpers/vendor/composer/spdx-licenses/res/spdx-exceptions.json +101 -0
  335. data/helpers/vendor/composer/spdx-licenses/res/spdx-licenses.json +1932 -0
  336. data/helpers/vendor/composer/spdx-licenses/src/SpdxLicenses.php +343 -0
  337. data/helpers/vendor/composer/xdebug-handler/CHANGELOG.md +55 -0
  338. data/helpers/vendor/composer/xdebug-handler/LICENSE +21 -0
  339. data/helpers/vendor/composer/xdebug-handler/README.md +288 -0
  340. data/helpers/vendor/composer/xdebug-handler/composer.json +40 -0
  341. data/helpers/vendor/composer/xdebug-handler/src/PhpConfig.php +73 -0
  342. data/helpers/vendor/composer/xdebug-handler/src/Process.php +160 -0
  343. data/helpers/vendor/composer/xdebug-handler/src/Status.php +163 -0
  344. data/helpers/vendor/composer/xdebug-handler/src/XdebugHandler.php +565 -0
  345. data/helpers/vendor/justinrainbow/json-schema/.gitattributes +5 -0
  346. data/helpers/vendor/justinrainbow/json-schema/.php_cs.dist +30 -0
  347. data/helpers/vendor/justinrainbow/json-schema/LICENSE +21 -0
  348. data/helpers/vendor/justinrainbow/json-schema/README.md +206 -0
  349. data/helpers/vendor/justinrainbow/json-schema/bin/validate-json +251 -0
  350. data/helpers/vendor/justinrainbow/json-schema/composer.json +76 -0
  351. data/helpers/vendor/justinrainbow/json-schema/demo/README.md +14 -0
  352. data/helpers/vendor/justinrainbow/json-schema/demo/data.json +3 -0
  353. data/helpers/vendor/justinrainbow/json-schema/demo/demo.php +18 -0
  354. data/helpers/vendor/justinrainbow/json-schema/demo/schema.json +3 -0
  355. data/helpers/vendor/justinrainbow/json-schema/dist/schema/json-schema-draft-03.json +174 -0
  356. data/helpers/vendor/justinrainbow/json-schema/dist/schema/json-schema-draft-04.json +150 -0
  357. data/helpers/vendor/justinrainbow/json-schema/phpunit.xml.dist +26 -0
  358. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/BaseConstraint.php +148 -0
  359. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/CollectionConstraint.php +121 -0
  360. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/Constraint.php +213 -0
  361. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/ConstraintInterface.php +65 -0
  362. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/EnumConstraint.php +54 -0
  363. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/Factory.php +220 -0
  364. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/FormatConstraint.php +214 -0
  365. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/NumberConstraint.php +81 -0
  366. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/ObjectConstraint.php +192 -0
  367. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/SchemaConstraint.php +94 -0
  368. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/StringConstraint.php +60 -0
  369. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/TypeCheck/LooseTypeCheck.php +68 -0
  370. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/TypeCheck/StrictTypeCheck.php +40 -0
  371. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/TypeCheck/TypeCheckInterface.php +18 -0
  372. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/TypeConstraint.php +261 -0
  373. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/UndefinedConstraint.php +413 -0
  374. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Entity/JsonPointer.php +161 -0
  375. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/ExceptionInterface.php +7 -0
  376. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidArgumentException.php +17 -0
  377. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidConfigException.php +17 -0
  378. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidSchemaException.php +17 -0
  379. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidSchemaMediaTypeException.php +17 -0
  380. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidSourceUriException.php +17 -0
  381. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/JsonDecodingException.php +40 -0
  382. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/ResourceNotFoundException.php +17 -0
  383. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/RuntimeException.php +17 -0
  384. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/UnresolvableJsonPointerException.php +19 -0
  385. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/UriResolverException.php +17 -0
  386. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/ValidationException.php +14 -0
  387. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Iterator/ObjectIterator.php +149 -0
  388. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Rfc3339.php +30 -0
  389. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/SchemaStorage.php +169 -0
  390. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/SchemaStorageInterface.php +41 -0
  391. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/AbstractRetriever.php +34 -0
  392. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/Curl.php +83 -0
  393. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/FileGetContents.php +93 -0
  394. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/PredefinedArray.php +56 -0
  395. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/UriRetrieverInterface.php +36 -0
  396. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/UriResolver.php +175 -0
  397. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/UriRetriever.php +349 -0
  398. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/UriResolverInterface.php +26 -0
  399. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/UriRetrieverInterface.php +26 -0
  400. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Validator.php +90 -0
  401. data/helpers/vendor/psr/log/.gitignore +1 -0
  402. data/helpers/vendor/psr/log/LICENSE +19 -0
  403. data/helpers/vendor/psr/log/Psr/Log/AbstractLogger.php +128 -0
  404. data/helpers/vendor/psr/log/Psr/Log/InvalidArgumentException.php +7 -0
  405. data/helpers/vendor/psr/log/Psr/Log/LogLevel.php +18 -0
  406. data/helpers/vendor/psr/log/Psr/Log/LoggerAwareInterface.php +18 -0
  407. data/helpers/vendor/psr/log/Psr/Log/LoggerAwareTrait.php +26 -0
  408. data/helpers/vendor/psr/log/Psr/Log/LoggerInterface.php +123 -0
  409. data/helpers/vendor/psr/log/Psr/Log/LoggerTrait.php +140 -0
  410. data/helpers/vendor/psr/log/Psr/Log/NullLogger.php +28 -0
  411. data/helpers/vendor/psr/log/Psr/Log/Test/LoggerInterfaceTest.php +144 -0
  412. data/helpers/vendor/psr/log/Psr/Log/Test/TestLogger.php +146 -0
  413. data/helpers/vendor/psr/log/README.md +52 -0
  414. data/helpers/vendor/psr/log/composer.json +26 -0
  415. data/helpers/vendor/seld/jsonlint/.gitignore +3 -0
  416. data/helpers/vendor/seld/jsonlint/.travis.yml +25 -0
  417. data/helpers/vendor/seld/jsonlint/CHANGELOG.md +66 -0
  418. data/helpers/vendor/seld/jsonlint/LICENSE +19 -0
  419. data/helpers/vendor/seld/jsonlint/README.md +89 -0
  420. data/helpers/vendor/seld/jsonlint/bin/jsonlint +117 -0
  421. data/helpers/vendor/seld/jsonlint/composer.json +24 -0
  422. data/helpers/vendor/seld/jsonlint/phpunit.xml.dist +25 -0
  423. data/helpers/vendor/seld/jsonlint/src/Seld/JsonLint/DuplicateKeyException.php +26 -0
  424. data/helpers/vendor/seld/jsonlint/src/Seld/JsonLint/JsonParser.php +502 -0
  425. data/helpers/vendor/seld/jsonlint/src/Seld/JsonLint/Lexer.php +217 -0
  426. data/helpers/vendor/seld/jsonlint/src/Seld/JsonLint/ParsingException.php +28 -0
  427. data/helpers/vendor/seld/jsonlint/src/Seld/JsonLint/Undefined.php +16 -0
  428. data/helpers/vendor/seld/jsonlint/tests/JsonParserTest.php +230 -0
  429. data/helpers/vendor/seld/jsonlint/tests/bom.json +6 -0
  430. data/helpers/vendor/seld/jsonlint/tests/bootstrap.php +13 -0
  431. data/helpers/vendor/seld/phar-utils/.gitignore +1 -0
  432. data/helpers/vendor/seld/phar-utils/LICENSE +19 -0
  433. data/helpers/vendor/seld/phar-utils/README.md +39 -0
  434. data/helpers/vendor/seld/phar-utils/composer.json +26 -0
  435. data/helpers/vendor/seld/phar-utils/composer.lock +19 -0
  436. data/helpers/vendor/seld/phar-utils/src/Timestamps.php +192 -0
  437. data/helpers/vendor/symfony/console/.gitignore +3 -0
  438. data/helpers/vendor/symfony/console/Application.php +1181 -0
  439. data/helpers/vendor/symfony/console/CHANGELOG.md +140 -0
  440. data/helpers/vendor/symfony/console/Command/Command.php +654 -0
  441. data/helpers/vendor/symfony/console/Command/HelpCommand.php +81 -0
  442. data/helpers/vendor/symfony/console/Command/ListCommand.php +90 -0
  443. data/helpers/vendor/symfony/console/Command/LockableTrait.php +71 -0
  444. data/helpers/vendor/symfony/console/CommandLoader/CommandLoaderInterface.php +37 -0
  445. data/helpers/vendor/symfony/console/CommandLoader/ContainerCommandLoader.php +55 -0
  446. data/helpers/vendor/symfony/console/CommandLoader/FactoryCommandLoader.php +62 -0
  447. data/helpers/vendor/symfony/console/ConsoleEvents.php +47 -0
  448. data/helpers/vendor/symfony/console/DependencyInjection/AddConsoleCommandPass.php +98 -0
  449. data/helpers/vendor/symfony/console/Descriptor/ApplicationDescription.php +144 -0
  450. data/helpers/vendor/symfony/console/Descriptor/Descriptor.php +107 -0
  451. data/helpers/vendor/symfony/console/Descriptor/DescriptorInterface.php +31 -0
  452. data/helpers/vendor/symfony/console/Descriptor/JsonDescriptor.php +168 -0
  453. data/helpers/vendor/symfony/console/Descriptor/MarkdownDescriptor.php +182 -0
  454. data/helpers/vendor/symfony/console/Descriptor/TextDescriptor.php +342 -0
  455. data/helpers/vendor/symfony/console/Descriptor/XmlDescriptor.php +245 -0
  456. data/helpers/vendor/symfony/console/Event/ConsoleCommandEvent.php +60 -0
  457. data/helpers/vendor/symfony/console/Event/ConsoleErrorEvent.php +58 -0
  458. data/helpers/vendor/symfony/console/Event/ConsoleEvent.php +67 -0
  459. data/helpers/vendor/symfony/console/Event/ConsoleTerminateEvent.php +53 -0
  460. data/helpers/vendor/symfony/console/EventListener/ErrorListener.php +91 -0
  461. data/helpers/vendor/symfony/console/Exception/CommandNotFoundException.php +43 -0
  462. data/helpers/vendor/symfony/console/Exception/ExceptionInterface.php +21 -0
  463. data/helpers/vendor/symfony/console/Exception/InvalidArgumentException.php +19 -0
  464. data/helpers/vendor/symfony/console/Exception/InvalidOptionException.php +21 -0
  465. data/helpers/vendor/symfony/console/Exception/LogicException.php +19 -0
  466. data/helpers/vendor/symfony/console/Exception/NamespaceNotFoundException.php +21 -0
  467. data/helpers/vendor/symfony/console/Exception/RuntimeException.php +19 -0
  468. data/helpers/vendor/symfony/console/Formatter/OutputFormatter.php +282 -0
  469. data/helpers/vendor/symfony/console/Formatter/OutputFormatterInterface.php +71 -0
  470. data/helpers/vendor/symfony/console/Formatter/OutputFormatterStyle.php +203 -0
  471. data/helpers/vendor/symfony/console/Formatter/OutputFormatterStyleInterface.php +62 -0
  472. data/helpers/vendor/symfony/console/Formatter/OutputFormatterStyleStack.php +110 -0
  473. data/helpers/vendor/symfony/console/Formatter/WrappableOutputFormatterInterface.php +25 -0
  474. data/helpers/vendor/symfony/console/Helper/DebugFormatterHelper.php +127 -0
  475. data/helpers/vendor/symfony/console/Helper/DescriptorHelper.php +94 -0
  476. data/helpers/vendor/symfony/console/Helper/FormatterHelper.php +106 -0
  477. data/helpers/vendor/symfony/console/Helper/Helper.php +138 -0
  478. data/helpers/vendor/symfony/console/Helper/HelperInterface.php +39 -0
  479. data/helpers/vendor/symfony/console/Helper/HelperSet.php +108 -0
  480. data/helpers/vendor/symfony/console/Helper/InputAwareHelper.php +33 -0
  481. data/helpers/vendor/symfony/console/Helper/ProcessHelper.php +156 -0
  482. data/helpers/vendor/symfony/console/Helper/ProgressBar.php +527 -0
  483. data/helpers/vendor/symfony/console/Helper/ProgressIndicator.php +269 -0
  484. data/helpers/vendor/symfony/console/Helper/QuestionHelper.php +447 -0
  485. data/helpers/vendor/symfony/console/Helper/SymfonyQuestionHelper.php +96 -0
  486. data/helpers/vendor/symfony/console/Helper/Table.php +813 -0
  487. data/helpers/vendor/symfony/console/Helper/TableCell.php +68 -0
  488. data/helpers/vendor/symfony/console/Helper/TableRows.php +32 -0
  489. data/helpers/vendor/symfony/console/Helper/TableSeparator.php +25 -0
  490. data/helpers/vendor/symfony/console/Helper/TableStyle.php +458 -0
  491. data/helpers/vendor/symfony/console/Input/ArgvInput.php +365 -0
  492. data/helpers/vendor/symfony/console/Input/ArrayInput.php +206 -0
  493. data/helpers/vendor/symfony/console/Input/Input.php +203 -0
  494. data/helpers/vendor/symfony/console/Input/InputArgument.php +129 -0
  495. data/helpers/vendor/symfony/console/Input/InputAwareInterface.php +26 -0
  496. data/helpers/vendor/symfony/console/Input/InputDefinition.php +404 -0
  497. data/helpers/vendor/symfony/console/Input/InputInterface.php +163 -0
  498. data/helpers/vendor/symfony/console/Input/InputOption.php +208 -0
  499. data/helpers/vendor/symfony/console/Input/StreamableInputInterface.php +37 -0
  500. data/helpers/vendor/symfony/console/Input/StringInput.php +72 -0
  501. data/helpers/vendor/symfony/console/LICENSE +19 -0
  502. data/helpers/vendor/symfony/console/Logger/ConsoleLogger.php +124 -0
  503. data/helpers/vendor/symfony/console/Output/BufferedOutput.php +45 -0
  504. data/helpers/vendor/symfony/console/Output/ConsoleOutput.php +161 -0
  505. data/helpers/vendor/symfony/console/Output/ConsoleOutputInterface.php +32 -0
  506. data/helpers/vendor/symfony/console/Output/ConsoleSectionOutput.php +141 -0
  507. data/helpers/vendor/symfony/console/Output/NullOutput.php +123 -0
  508. data/helpers/vendor/symfony/console/Output/Output.php +177 -0
  509. data/helpers/vendor/symfony/console/Output/OutputInterface.php +114 -0
  510. data/helpers/vendor/symfony/console/Output/StreamOutput.php +124 -0
  511. data/helpers/vendor/symfony/console/Question/ChoiceQuestion.php +184 -0
  512. data/helpers/vendor/symfony/console/Question/ConfirmationQuestion.php +59 -0
  513. data/helpers/vendor/symfony/console/Question/Question.php +246 -0
  514. data/helpers/vendor/symfony/console/README.md +20 -0
  515. data/helpers/vendor/symfony/console/Resources/bin/hiddeninput.exe +0 -0
  516. data/helpers/vendor/symfony/console/Style/OutputStyle.php +155 -0
  517. data/helpers/vendor/symfony/console/Style/StyleInterface.php +154 -0
  518. data/helpers/vendor/symfony/console/Style/SymfonyStyle.php +438 -0
  519. data/helpers/vendor/symfony/console/Terminal.php +137 -0
  520. data/helpers/vendor/symfony/console/Tester/ApplicationTester.php +77 -0
  521. data/helpers/vendor/symfony/console/Tester/CommandTester.php +78 -0
  522. data/helpers/vendor/symfony/console/Tester/TesterTrait.php +177 -0
  523. data/helpers/vendor/symfony/console/Tests/ApplicationTest.php +1814 -0
  524. data/helpers/vendor/symfony/console/Tests/Command/CommandTest.php +436 -0
  525. data/helpers/vendor/symfony/console/Tests/Command/HelpCommandTest.php +71 -0
  526. data/helpers/vendor/symfony/console/Tests/Command/ListCommandTest.php +113 -0
  527. data/helpers/vendor/symfony/console/Tests/Command/LockableTraitTest.php +67 -0
  528. data/helpers/vendor/symfony/console/Tests/CommandLoader/ContainerCommandLoaderTest.php +61 -0
  529. data/helpers/vendor/symfony/console/Tests/CommandLoader/FactoryCommandLoaderTest.php +60 -0
  530. data/helpers/vendor/symfony/console/Tests/DependencyInjection/AddConsoleCommandPassTest.php +258 -0
  531. data/helpers/vendor/symfony/console/Tests/Descriptor/AbstractDescriptorTest.php +107 -0
  532. data/helpers/vendor/symfony/console/Tests/Descriptor/JsonDescriptorTest.php +35 -0
  533. data/helpers/vendor/symfony/console/Tests/Descriptor/MarkdownDescriptorTest.php +45 -0
  534. data/helpers/vendor/symfony/console/Tests/Descriptor/ObjectsProvider.php +82 -0
  535. data/helpers/vendor/symfony/console/Tests/Descriptor/TextDescriptorTest.php +53 -0
  536. data/helpers/vendor/symfony/console/Tests/Descriptor/XmlDescriptorTest.php +27 -0
  537. data/helpers/vendor/symfony/console/Tests/EventListener/ErrorListenerTest.php +156 -0
  538. data/helpers/vendor/symfony/console/Tests/Fixtures/BarBucCommand.php +11 -0
  539. data/helpers/vendor/symfony/console/Tests/Fixtures/DescriptorApplication1.php +18 -0
  540. data/helpers/vendor/symfony/console/Tests/Fixtures/DescriptorApplication2.php +26 -0
  541. data/helpers/vendor/symfony/console/Tests/Fixtures/DescriptorApplicationMbString.php +24 -0
  542. data/helpers/vendor/symfony/console/Tests/Fixtures/DescriptorCommand1.php +27 -0
  543. data/helpers/vendor/symfony/console/Tests/Fixtures/DescriptorCommand2.php +32 -0
  544. data/helpers/vendor/symfony/console/Tests/Fixtures/DescriptorCommand3.php +27 -0
  545. data/helpers/vendor/symfony/console/Tests/Fixtures/DescriptorCommand4.php +25 -0
  546. data/helpers/vendor/symfony/console/Tests/Fixtures/DescriptorCommandMbString.php +32 -0
  547. data/helpers/vendor/symfony/console/Tests/Fixtures/DummyOutput.php +36 -0
  548. data/helpers/vendor/symfony/console/Tests/Fixtures/Foo1Command.php +26 -0
  549. data/helpers/vendor/symfony/console/Tests/Fixtures/Foo2Command.php +21 -0
  550. data/helpers/vendor/symfony/console/Tests/Fixtures/Foo3Command.php +29 -0
  551. data/helpers/vendor/symfony/console/Tests/Fixtures/Foo4Command.php +11 -0
  552. data/helpers/vendor/symfony/console/Tests/Fixtures/Foo5Command.php +10 -0
  553. data/helpers/vendor/symfony/console/Tests/Fixtures/Foo6Command.php +11 -0
  554. data/helpers/vendor/symfony/console/Tests/Fixtures/FooCommand.php +33 -0
  555. data/helpers/vendor/symfony/console/Tests/Fixtures/FooLock2Command.php +28 -0
  556. data/helpers/vendor/symfony/console/Tests/Fixtures/FooLockCommand.php +27 -0
  557. data/helpers/vendor/symfony/console/Tests/Fixtures/FooOptCommand.php +36 -0
  558. data/helpers/vendor/symfony/console/Tests/Fixtures/FooSameCaseLowercaseCommand.php +11 -0
  559. data/helpers/vendor/symfony/console/Tests/Fixtures/FooSameCaseUppercaseCommand.php +11 -0
  560. data/helpers/vendor/symfony/console/Tests/Fixtures/FooSubnamespaced1Command.php +26 -0
  561. data/helpers/vendor/symfony/console/Tests/Fixtures/FooSubnamespaced2Command.php +26 -0
  562. data/helpers/vendor/symfony/console/Tests/Fixtures/FooWithoutAliasCommand.php +21 -0
  563. data/helpers/vendor/symfony/console/Tests/Fixtures/FoobarCommand.php +25 -0
  564. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_0.php +11 -0
  565. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_1.php +13 -0
  566. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_10.php +17 -0
  567. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_11.php +12 -0
  568. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_12.php +13 -0
  569. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_13.php +14 -0
  570. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_14.php +17 -0
  571. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_15.php +14 -0
  572. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_16.php +15 -0
  573. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_17.php +13 -0
  574. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_2.php +16 -0
  575. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_3.php +12 -0
  576. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_4.php +34 -0
  577. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_4_with_iterators.php +34 -0
  578. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_5.php +37 -0
  579. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_6.php +16 -0
  580. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_7.php +15 -0
  581. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_8.php +26 -0
  582. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_9.php +11 -0
  583. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/interactive_command_1.php +19 -0
  584. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/interactive_output_1.txt +7 -0
  585. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_0.txt +3 -0
  586. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_1.txt +9 -0
  587. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_10.txt +7 -0
  588. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_11.txt +4 -0
  589. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_12.txt +6 -0
  590. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_13.txt +7 -0
  591. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_14.txt +6 -0
  592. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_15.txt +7 -0
  593. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_16.txt +8 -0
  594. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_17.txt +7 -0
  595. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_2.txt +13 -0
  596. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_3.txt +7 -0
  597. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_4.txt +32 -0
  598. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_4_with_iterators.txt +32 -0
  599. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_5.txt +18 -0
  600. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_6.txt +6 -0
  601. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_7.txt +5 -0
  602. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_8.txt +9 -0
  603. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_9.txt +5 -0
  604. data/helpers/vendor/symfony/console/Tests/Fixtures/TestCommand.php +28 -0
  605. data/helpers/vendor/symfony/console/Tests/Fixtures/TestTiti.php +21 -0
  606. data/helpers/vendor/symfony/console/Tests/Fixtures/TestToto.php +22 -0
  607. data/helpers/vendor/symfony/console/Tests/Fixtures/application_1.json +156 -0
  608. data/helpers/vendor/symfony/console/Tests/Fixtures/application_1.md +172 -0
  609. data/helpers/vendor/symfony/console/Tests/Fixtures/application_1.txt +17 -0
  610. data/helpers/vendor/symfony/console/Tests/Fixtures/application_1.xml +104 -0
  611. data/helpers/vendor/symfony/console/Tests/Fixtures/application_2.json +509 -0
  612. data/helpers/vendor/symfony/console/Tests/Fixtures/application_2.md +431 -0
  613. data/helpers/vendor/symfony/console/Tests/Fixtures/application_2.txt +21 -0
  614. data/helpers/vendor/symfony/console/Tests/Fixtures/application_2.xml +254 -0
  615. data/helpers/vendor/symfony/console/Tests/Fixtures/application_filtered_namespace.txt +16 -0
  616. data/helpers/vendor/symfony/console/Tests/Fixtures/application_gethelp.txt +1 -0
  617. data/helpers/vendor/symfony/console/Tests/Fixtures/application_mbstring.md +269 -0
  618. data/helpers/vendor/symfony/console/Tests/Fixtures/application_mbstring.txt +19 -0
  619. data/helpers/vendor/symfony/console/Tests/Fixtures/application_renderexception1.txt +5 -0
  620. data/helpers/vendor/symfony/console/Tests/Fixtures/application_renderexception2.txt +7 -0
  621. data/helpers/vendor/symfony/console/Tests/Fixtures/application_renderexception3.txt +18 -0
  622. data/helpers/vendor/symfony/console/Tests/Fixtures/application_renderexception3decorated.txt +18 -0
  623. data/helpers/vendor/symfony/console/Tests/Fixtures/application_renderexception4.txt +6 -0
  624. data/helpers/vendor/symfony/console/Tests/Fixtures/application_renderexception_doublewidth1.txt +8 -0
  625. data/helpers/vendor/symfony/console/Tests/Fixtures/application_renderexception_doublewidth1decorated.txt +8 -0
  626. data/helpers/vendor/symfony/console/Tests/Fixtures/application_renderexception_doublewidth2.txt +9 -0
  627. data/helpers/vendor/symfony/console/Tests/Fixtures/application_renderexception_escapeslines.txt +9 -0
  628. data/helpers/vendor/symfony/console/Tests/Fixtures/application_renderexception_linebreaks.txt +11 -0
  629. data/helpers/vendor/symfony/console/Tests/Fixtures/application_run1.txt +17 -0
  630. data/helpers/vendor/symfony/console/Tests/Fixtures/application_run2.txt +29 -0
  631. data/helpers/vendor/symfony/console/Tests/Fixtures/application_run3.txt +29 -0
  632. data/helpers/vendor/symfony/console/Tests/Fixtures/application_run4.txt +1 -0
  633. data/helpers/vendor/symfony/console/Tests/Fixtures/command_1.json +15 -0
  634. data/helpers/vendor/symfony/console/Tests/Fixtures/command_1.md +12 -0
  635. data/helpers/vendor/symfony/console/Tests/Fixtures/command_1.txt +10 -0
  636. data/helpers/vendor/symfony/console/Tests/Fixtures/command_1.xml +12 -0
  637. data/helpers/vendor/symfony/console/Tests/Fixtures/command_2.json +33 -0
  638. data/helpers/vendor/symfony/console/Tests/Fixtures/command_2.md +29 -0
  639. data/helpers/vendor/symfony/console/Tests/Fixtures/command_2.txt +16 -0
  640. data/helpers/vendor/symfony/console/Tests/Fixtures/command_2.xml +21 -0
  641. data/helpers/vendor/symfony/console/Tests/Fixtures/command_mbstring.md +29 -0
  642. data/helpers/vendor/symfony/console/Tests/Fixtures/command_mbstring.txt +16 -0
  643. data/helpers/vendor/symfony/console/Tests/Fixtures/input_argument_1.json +7 -0
  644. data/helpers/vendor/symfony/console/Tests/Fixtures/input_argument_1.md +5 -0
  645. data/helpers/vendor/symfony/console/Tests/Fixtures/input_argument_1.txt +1 -0
  646. data/helpers/vendor/symfony/console/Tests/Fixtures/input_argument_1.xml +5 -0
  647. data/helpers/vendor/symfony/console/Tests/Fixtures/input_argument_2.json +7 -0
  648. data/helpers/vendor/symfony/console/Tests/Fixtures/input_argument_2.md +7 -0
  649. data/helpers/vendor/symfony/console/Tests/Fixtures/input_argument_2.txt +1 -0
  650. data/helpers/vendor/symfony/console/Tests/Fixtures/input_argument_2.xml +5 -0
  651. data/helpers/vendor/symfony/console/Tests/Fixtures/input_argument_3.json +7 -0
  652. data/helpers/vendor/symfony/console/Tests/Fixtures/input_argument_3.md +7 -0
  653. data/helpers/vendor/symfony/console/Tests/Fixtures/input_argument_3.txt +1 -0
  654. data/helpers/vendor/symfony/console/Tests/Fixtures/input_argument_3.xml +7 -0
  655. data/helpers/vendor/symfony/console/Tests/Fixtures/input_argument_4.json +7 -0
  656. data/helpers/vendor/symfony/console/Tests/Fixtures/input_argument_4.md +8 -0
  657. data/helpers/vendor/symfony/console/Tests/Fixtures/input_argument_4.txt +2 -0
  658. data/helpers/vendor/symfony/console/Tests/Fixtures/input_argument_4.xml +6 -0
  659. data/helpers/vendor/symfony/console/Tests/Fixtures/input_argument_with_default_inf_value.json +7 -0
  660. data/helpers/vendor/symfony/console/Tests/Fixtures/input_argument_with_default_inf_value.md +7 -0
  661. data/helpers/vendor/symfony/console/Tests/Fixtures/input_argument_with_default_inf_value.txt +1 -0
  662. data/helpers/vendor/symfony/console/Tests/Fixtures/input_argument_with_default_inf_value.xml +7 -0
  663. data/helpers/vendor/symfony/console/Tests/Fixtures/input_argument_with_style.json +7 -0
  664. data/helpers/vendor/symfony/console/Tests/Fixtures/input_argument_with_style.md +7 -0
  665. data/helpers/vendor/symfony/console/Tests/Fixtures/input_argument_with_style.txt +1 -0
  666. data/helpers/vendor/symfony/console/Tests/Fixtures/input_argument_with_style.xml +7 -0
  667. data/helpers/vendor/symfony/console/Tests/Fixtures/input_definition_1.json +4 -0
  668. data/helpers/vendor/symfony/console/Tests/Fixtures/input_definition_1.md +0 -0
  669. data/helpers/vendor/symfony/console/Tests/Fixtures/input_definition_1.txt +0 -0
  670. data/helpers/vendor/symfony/console/Tests/Fixtures/input_definition_1.xml +5 -0
  671. data/helpers/vendor/symfony/console/Tests/Fixtures/input_definition_2.json +12 -0
  672. data/helpers/vendor/symfony/console/Tests/Fixtures/input_definition_2.md +7 -0
  673. data/helpers/vendor/symfony/console/Tests/Fixtures/input_definition_2.txt +2 -0
  674. data/helpers/vendor/symfony/console/Tests/Fixtures/input_definition_2.xml +10 -0
  675. data/helpers/vendor/symfony/console/Tests/Fixtures/input_definition_3.json +14 -0
  676. data/helpers/vendor/symfony/console/Tests/Fixtures/input_definition_3.md +8 -0
  677. data/helpers/vendor/symfony/console/Tests/Fixtures/input_definition_3.txt +2 -0
  678. data/helpers/vendor/symfony/console/Tests/Fixtures/input_definition_3.xml +9 -0
  679. data/helpers/vendor/symfony/console/Tests/Fixtures/input_definition_4.json +22 -0
  680. data/helpers/vendor/symfony/console/Tests/Fixtures/input_definition_4.md +16 -0
  681. data/helpers/vendor/symfony/console/Tests/Fixtures/input_definition_4.txt +5 -0
  682. data/helpers/vendor/symfony/console/Tests/Fixtures/input_definition_4.xml +14 -0
  683. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_1.json +9 -0
  684. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_1.md +6 -0
  685. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_1.txt +1 -0
  686. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_1.xml +4 -0
  687. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_2.json +9 -0
  688. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_2.md +8 -0
  689. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_2.txt +1 -0
  690. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_2.xml +7 -0
  691. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_3.json +9 -0
  692. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_3.md +8 -0
  693. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_3.txt +1 -0
  694. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_3.xml +5 -0
  695. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_4.json +9 -0
  696. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_4.md +8 -0
  697. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_4.txt +1 -0
  698. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_4.xml +5 -0
  699. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_5.json +9 -0
  700. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_5.md +9 -0
  701. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_5.txt +2 -0
  702. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_5.xml +6 -0
  703. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_6.json +9 -0
  704. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_6.md +8 -0
  705. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_6.txt +1 -0
  706. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_6.xml +5 -0
  707. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_with_default_inf_value.json +9 -0
  708. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_with_default_inf_value.md +8 -0
  709. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_with_default_inf_value.txt +1 -0
  710. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_with_default_inf_value.xml +7 -0
  711. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_with_style.json +9 -0
  712. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_with_style.md +8 -0
  713. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_with_style.txt +1 -0
  714. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_with_style.xml +7 -0
  715. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_with_style_array.json +12 -0
  716. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_with_style_array.md +8 -0
  717. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_with_style_array.txt +1 -0
  718. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_with_style_array.xml +8 -0
  719. data/helpers/vendor/symfony/console/Tests/Formatter/OutputFormatterStyleStackTest.php +71 -0
  720. data/helpers/vendor/symfony/console/Tests/Formatter/OutputFormatterStyleTest.php +100 -0
  721. data/helpers/vendor/symfony/console/Tests/Formatter/OutputFormatterTest.php +355 -0
  722. data/helpers/vendor/symfony/console/Tests/Helper/AbstractQuestionHelperTest.php +34 -0
  723. data/helpers/vendor/symfony/console/Tests/Helper/FormatterHelperTest.php +129 -0
  724. data/helpers/vendor/symfony/console/Tests/Helper/HelperSetTest.php +127 -0
  725. data/helpers/vendor/symfony/console/Tests/Helper/HelperTest.php +55 -0
  726. data/helpers/vendor/symfony/console/Tests/Helper/ProcessHelperTest.php +133 -0
  727. data/helpers/vendor/symfony/console/Tests/Helper/ProgressBarTest.php +912 -0
  728. data/helpers/vendor/symfony/console/Tests/Helper/ProgressIndicatorTest.php +183 -0
  729. data/helpers/vendor/symfony/console/Tests/Helper/QuestionHelperTest.php +715 -0
  730. data/helpers/vendor/symfony/console/Tests/Helper/SymfonyQuestionHelperTest.php +168 -0
  731. data/helpers/vendor/symfony/console/Tests/Helper/TableStyleTest.php +28 -0
  732. data/helpers/vendor/symfony/console/Tests/Helper/TableTest.php +1199 -0
  733. data/helpers/vendor/symfony/console/Tests/Input/ArgvInputTest.php +466 -0
  734. data/helpers/vendor/symfony/console/Tests/Input/ArrayInputTest.php +177 -0
  735. data/helpers/vendor/symfony/console/Tests/Input/InputArgumentTest.php +103 -0
  736. data/helpers/vendor/symfony/console/Tests/Input/InputDefinitionTest.php +407 -0
  737. data/helpers/vendor/symfony/console/Tests/Input/InputOptionTest.php +196 -0
  738. data/helpers/vendor/symfony/console/Tests/Input/InputTest.php +149 -0
  739. data/helpers/vendor/symfony/console/Tests/Input/StringInputTest.php +87 -0
  740. data/helpers/vendor/symfony/console/Tests/Logger/ConsoleLoggerTest.php +215 -0
  741. data/helpers/vendor/symfony/console/Tests/Output/ConsoleOutputTest.php +42 -0
  742. data/helpers/vendor/symfony/console/Tests/Output/ConsoleSectionOutputTest.php +163 -0
  743. data/helpers/vendor/symfony/console/Tests/Output/NullOutputTest.php +88 -0
  744. data/helpers/vendor/symfony/console/Tests/Output/OutputTest.php +189 -0
  745. data/helpers/vendor/symfony/console/Tests/Output/StreamOutputTest.php +61 -0
  746. data/helpers/vendor/symfony/console/Tests/Question/ConfirmationQuestionTest.php +62 -0
  747. data/helpers/vendor/symfony/console/Tests/Style/SymfonyStyleTest.php +118 -0
  748. data/helpers/vendor/symfony/console/Tests/TerminalTest.php +59 -0
  749. data/helpers/vendor/symfony/console/Tests/Tester/ApplicationTesterTest.php +113 -0
  750. data/helpers/vendor/symfony/console/Tests/Tester/CommandTesterTest.php +235 -0
  751. data/helpers/vendor/symfony/console/composer.json +56 -0
  752. data/helpers/vendor/symfony/console/phpunit.xml.dist +41 -0
  753. data/helpers/vendor/symfony/contracts/.gitignore +3 -0
  754. data/helpers/vendor/symfony/contracts/CHANGELOG.md +12 -0
  755. data/helpers/vendor/symfony/contracts/Cache/CacheInterface.php +57 -0
  756. data/helpers/vendor/symfony/contracts/Cache/CacheTrait.php +71 -0
  757. data/helpers/vendor/symfony/contracts/Cache/CallbackInterface.php +30 -0
  758. data/helpers/vendor/symfony/contracts/Cache/ItemInterface.php +60 -0
  759. data/helpers/vendor/symfony/contracts/Cache/TagAwareCacheInterface.php +38 -0
  760. data/helpers/vendor/symfony/contracts/LICENSE +19 -0
  761. data/helpers/vendor/symfony/contracts/README.md +70 -0
  762. data/helpers/vendor/symfony/contracts/Service/ResetInterface.php +30 -0
  763. data/helpers/vendor/symfony/contracts/Service/ServiceLocatorTrait.php +97 -0
  764. data/helpers/vendor/symfony/contracts/Service/ServiceSubscriberInterface.php +53 -0
  765. data/helpers/vendor/symfony/contracts/Service/ServiceSubscriberTrait.php +61 -0
  766. data/helpers/vendor/symfony/contracts/Tests/Cache/CacheTraitTest.php +165 -0
  767. data/helpers/vendor/symfony/contracts/Tests/Service/ServiceLocatorTest.php +94 -0
  768. data/helpers/vendor/symfony/contracts/Tests/Service/ServiceSubscriberTraitTest.php +65 -0
  769. data/helpers/vendor/symfony/contracts/Tests/Translation/TranslatorTest.php +353 -0
  770. data/helpers/vendor/symfony/contracts/Translation/LocaleAwareInterface.php +31 -0
  771. data/helpers/vendor/symfony/contracts/Translation/TranslatorInterface.php +65 -0
  772. data/helpers/vendor/symfony/contracts/Translation/TranslatorTrait.php +255 -0
  773. data/helpers/vendor/symfony/contracts/composer.json +44 -0
  774. data/helpers/vendor/symfony/contracts/phpunit.xml.dist +31 -0
  775. data/helpers/vendor/symfony/filesystem/.gitignore +3 -0
  776. data/helpers/vendor/symfony/filesystem/CHANGELOG.md +59 -0
  777. data/helpers/vendor/symfony/filesystem/Exception/ExceptionInterface.php +21 -0
  778. data/helpers/vendor/symfony/filesystem/Exception/FileNotFoundException.php +34 -0
  779. data/helpers/vendor/symfony/filesystem/Exception/IOException.php +39 -0
  780. data/helpers/vendor/symfony/filesystem/Exception/IOExceptionInterface.php +27 -0
  781. data/helpers/vendor/symfony/filesystem/Exception/InvalidArgumentException.php +19 -0
  782. data/helpers/vendor/symfony/filesystem/Filesystem.php +767 -0
  783. data/helpers/vendor/symfony/filesystem/LICENSE +19 -0
  784. data/helpers/vendor/symfony/filesystem/README.md +13 -0
  785. data/helpers/vendor/symfony/filesystem/Tests/ExceptionTest.php +47 -0
  786. data/helpers/vendor/symfony/filesystem/Tests/FilesystemTest.php +1686 -0
  787. data/helpers/vendor/symfony/filesystem/Tests/FilesystemTestCase.php +166 -0
  788. data/helpers/vendor/symfony/filesystem/Tests/Fixtures/MockStream/MockStream.php +46 -0
  789. data/helpers/vendor/symfony/filesystem/composer.json +34 -0
  790. data/helpers/vendor/symfony/filesystem/phpunit.xml.dist +30 -0
  791. data/helpers/vendor/symfony/finder/.gitignore +3 -0
  792. data/helpers/vendor/symfony/finder/CHANGELOG.md +69 -0
  793. data/helpers/vendor/symfony/finder/Comparator/Comparator.php +98 -0
  794. data/helpers/vendor/symfony/finder/Comparator/DateComparator.php +51 -0
  795. data/helpers/vendor/symfony/finder/Comparator/NumberComparator.php +79 -0
  796. data/helpers/vendor/symfony/finder/Exception/AccessDeniedException.php +19 -0
  797. data/helpers/vendor/symfony/finder/Finder.php +783 -0
  798. data/helpers/vendor/symfony/finder/Glob.php +116 -0
  799. data/helpers/vendor/symfony/finder/Iterator/CustomFilterIterator.php +61 -0
  800. data/helpers/vendor/symfony/finder/Iterator/DateRangeFilterIterator.php +58 -0
  801. data/helpers/vendor/symfony/finder/Iterator/DepthRangeFilterIterator.php +45 -0
  802. data/helpers/vendor/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php +84 -0
  803. data/helpers/vendor/symfony/finder/Iterator/FileTypeFilterIterator.php +53 -0
  804. data/helpers/vendor/symfony/finder/Iterator/FilecontentFilterIterator.php +58 -0
  805. data/helpers/vendor/symfony/finder/Iterator/FilenameFilterIterator.php +47 -0
  806. data/helpers/vendor/symfony/finder/Iterator/MultiplePcreFilterIterator.php +112 -0
  807. data/helpers/vendor/symfony/finder/Iterator/PathFilterIterator.php +56 -0
  808. data/helpers/vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php +140 -0
  809. data/helpers/vendor/symfony/finder/Iterator/SizeRangeFilterIterator.php +57 -0
  810. data/helpers/vendor/symfony/finder/Iterator/SortableIterator.php +99 -0
  811. data/helpers/vendor/symfony/finder/LICENSE +19 -0
  812. data/helpers/vendor/symfony/finder/README.md +14 -0
  813. data/helpers/vendor/symfony/finder/SplFileInfo.php +78 -0
  814. data/helpers/vendor/symfony/finder/Tests/Comparator/ComparatorTest.php +65 -0
  815. data/helpers/vendor/symfony/finder/Tests/Comparator/DateComparatorTest.php +64 -0
  816. data/helpers/vendor/symfony/finder/Tests/Comparator/NumberComparatorTest.php +108 -0
  817. data/helpers/vendor/symfony/finder/Tests/FinderTest.php +1384 -0
  818. data/helpers/vendor/symfony/finder/Tests/Fixtures/.dot/a +0 -0
  819. data/helpers/vendor/symfony/finder/Tests/Fixtures/.dot/b/c.neon +0 -0
  820. data/helpers/vendor/symfony/finder/Tests/Fixtures/.dot/b/d.neon +0 -0
  821. data/helpers/vendor/symfony/finder/Tests/Fixtures/A/B/C/abc.dat +0 -0
  822. data/helpers/vendor/symfony/finder/Tests/Fixtures/A/B/ab.dat +0 -0
  823. data/helpers/vendor/symfony/finder/Tests/Fixtures/A/a.dat +0 -0
  824. data/helpers/vendor/symfony/finder/Tests/Fixtures/copy/A/B/C/abc.dat.copy +0 -0
  825. data/helpers/vendor/symfony/finder/Tests/Fixtures/copy/A/B/ab.dat.copy +0 -0
  826. data/helpers/vendor/symfony/finder/Tests/Fixtures/copy/A/a.dat.copy +0 -0
  827. data/helpers/vendor/symfony/finder/Tests/Fixtures/dolor.txt +2 -0
  828. data/helpers/vendor/symfony/finder/Tests/Fixtures/ipsum.txt +2 -0
  829. data/helpers/vendor/symfony/finder/Tests/Fixtures/lorem.txt +2 -0
  830. data/helpers/vendor/symfony/finder/Tests/Fixtures/one/.dot +1 -0
  831. data/helpers/vendor/symfony/finder/Tests/Fixtures/one/a +0 -0
  832. data/helpers/vendor/symfony/finder/Tests/Fixtures/one/b/c.neon +0 -0
  833. data/helpers/vendor/symfony/finder/Tests/Fixtures/one/b/d.neon +0 -0
  834. data/helpers/vendor/symfony/finder/Tests/Fixtures/r+e.gex[c]a(r)s/dir/bar.dat +0 -0
  835. data/helpers/vendor/symfony/finder/Tests/Fixtures/with space/foo.txt b/data/helpers/vendor/symfony/finder/Tests/Fixtures/with → space/foo.txt +0 -0
  836. data/helpers/vendor/symfony/finder/Tests/GlobTest.php +95 -0
  837. data/helpers/vendor/symfony/finder/Tests/Iterator/CustomFilterIteratorTest.php +46 -0
  838. data/helpers/vendor/symfony/finder/Tests/Iterator/DateRangeFilterIteratorTest.php +92 -0
  839. data/helpers/vendor/symfony/finder/Tests/Iterator/DepthRangeFilterIteratorTest.php +103 -0
  840. data/helpers/vendor/symfony/finder/Tests/Iterator/ExcludeDirectoryFilterIteratorTest.php +107 -0
  841. data/helpers/vendor/symfony/finder/Tests/Iterator/FileTypeFilterIteratorTest.php +82 -0
  842. data/helpers/vendor/symfony/finder/Tests/Iterator/FilecontentFilterIteratorTest.php +86 -0
  843. data/helpers/vendor/symfony/finder/Tests/Iterator/FilenameFilterIteratorTest.php +54 -0
  844. data/helpers/vendor/symfony/finder/Tests/Iterator/Iterator.php +55 -0
  845. data/helpers/vendor/symfony/finder/Tests/Iterator/IteratorTestCase.php +100 -0
  846. data/helpers/vendor/symfony/finder/Tests/Iterator/MockFileListIterator.php +21 -0
  847. data/helpers/vendor/symfony/finder/Tests/Iterator/MockSplFileInfo.php +132 -0
  848. data/helpers/vendor/symfony/finder/Tests/Iterator/MultiplePcreFilterIteratorTest.php +71 -0
  849. data/helpers/vendor/symfony/finder/Tests/Iterator/PathFilterIteratorTest.php +82 -0
  850. data/helpers/vendor/symfony/finder/Tests/Iterator/RealIteratorTestCase.php +128 -0
  851. data/helpers/vendor/symfony/finder/Tests/Iterator/RecursiveDirectoryIteratorTest.php +59 -0
  852. data/helpers/vendor/symfony/finder/Tests/Iterator/SizeRangeFilterIteratorTest.php +70 -0
  853. data/helpers/vendor/symfony/finder/Tests/Iterator/SortableIteratorTest.php +262 -0
  854. data/helpers/vendor/symfony/finder/composer.json +33 -0
  855. data/helpers/vendor/symfony/finder/phpunit.xml.dist +30 -0
  856. data/helpers/vendor/symfony/polyfill-ctype/Ctype.php +227 -0
  857. data/helpers/vendor/symfony/polyfill-ctype/LICENSE +19 -0
  858. data/helpers/vendor/symfony/polyfill-ctype/README.md +12 -0
  859. data/helpers/vendor/symfony/polyfill-ctype/bootstrap.php +26 -0
  860. data/helpers/vendor/symfony/polyfill-ctype/composer.json +34 -0
  861. data/helpers/vendor/symfony/polyfill-mbstring/LICENSE +19 -0
  862. data/helpers/vendor/symfony/polyfill-mbstring/Mbstring.php +800 -0
  863. data/helpers/vendor/symfony/polyfill-mbstring/README.md +13 -0
  864. data/helpers/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php +1096 -0
  865. data/helpers/vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php +5 -0
  866. data/helpers/vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.php +1104 -0
  867. data/helpers/vendor/symfony/polyfill-mbstring/bootstrap.php +58 -0
  868. data/helpers/vendor/symfony/polyfill-mbstring/composer.json +34 -0
  869. data/helpers/vendor/symfony/process/.gitignore +3 -0
  870. data/helpers/vendor/symfony/process/CHANGELOG.md +90 -0
  871. data/helpers/vendor/symfony/process/Exception/ExceptionInterface.php +21 -0
  872. data/helpers/vendor/symfony/process/Exception/InvalidArgumentException.php +21 -0
  873. data/helpers/vendor/symfony/process/Exception/LogicException.php +21 -0
  874. data/helpers/vendor/symfony/process/Exception/ProcessFailedException.php +54 -0
  875. data/helpers/vendor/symfony/process/Exception/ProcessSignaledException.php +41 -0
  876. data/helpers/vendor/symfony/process/Exception/ProcessTimedOutException.php +69 -0
  877. data/helpers/vendor/symfony/process/Exception/RuntimeException.php +21 -0
  878. data/helpers/vendor/symfony/process/ExecutableFinder.php +88 -0
  879. data/helpers/vendor/symfony/process/InputStream.php +90 -0
  880. data/helpers/vendor/symfony/process/LICENSE +19 -0
  881. data/helpers/vendor/symfony/process/PhpExecutableFinder.php +101 -0
  882. data/helpers/vendor/symfony/process/PhpProcess.php +75 -0
  883. data/helpers/vendor/symfony/process/Pipes/AbstractPipes.php +178 -0
  884. data/helpers/vendor/symfony/process/Pipes/PipesInterface.php +67 -0
  885. data/helpers/vendor/symfony/process/Pipes/UnixPipes.php +153 -0
  886. data/helpers/vendor/symfony/process/Pipes/WindowsPipes.php +191 -0
  887. data/helpers/vendor/symfony/process/Process.php +1652 -0
  888. data/helpers/vendor/symfony/process/ProcessUtils.php +69 -0
  889. data/helpers/vendor/symfony/process/README.md +13 -0
  890. data/helpers/vendor/symfony/process/Tests/ExecutableFinderTest.php +178 -0
  891. data/helpers/vendor/symfony/process/Tests/KillableProcessWithOutput.php +25 -0
  892. data/helpers/vendor/symfony/process/Tests/NonStopableProcess.php +47 -0
  893. data/helpers/vendor/symfony/process/Tests/PhpExecutableFinderTest.php +49 -0
  894. data/helpers/vendor/symfony/process/Tests/PhpProcessTest.php +63 -0
  895. data/helpers/vendor/symfony/process/Tests/PipeStdinInStdoutStdErrStreamSelect.php +72 -0
  896. data/helpers/vendor/symfony/process/Tests/ProcessFailedExceptionTest.php +137 -0
  897. data/helpers/vendor/symfony/process/Tests/ProcessTest.php +1537 -0
  898. data/helpers/vendor/symfony/process/Tests/SignalListener.php +21 -0
  899. data/helpers/vendor/symfony/process/composer.json +33 -0
  900. data/helpers/vendor/symfony/process/phpunit.xml.dist +30 -0
  901. metadata +902 -3
@@ -0,0 +1,1814 @@
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Symfony package.
5
+ *
6
+ * (c) Fabien Potencier <fabien@symfony.com>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Symfony\Component\Console\Tests;
13
+
14
+ use PHPUnit\Framework\TestCase;
15
+ use Symfony\Component\Console\Application;
16
+ use Symfony\Component\Console\Command\Command;
17
+ use Symfony\Component\Console\CommandLoader\FactoryCommandLoader;
18
+ use Symfony\Component\Console\DependencyInjection\AddConsoleCommandPass;
19
+ use Symfony\Component\Console\Event\ConsoleCommandEvent;
20
+ use Symfony\Component\Console\Event\ConsoleErrorEvent;
21
+ use Symfony\Component\Console\Event\ConsoleTerminateEvent;
22
+ use Symfony\Component\Console\Exception\CommandNotFoundException;
23
+ use Symfony\Component\Console\Exception\NamespaceNotFoundException;
24
+ use Symfony\Component\Console\Helper\FormatterHelper;
25
+ use Symfony\Component\Console\Helper\HelperSet;
26
+ use Symfony\Component\Console\Input\ArgvInput;
27
+ use Symfony\Component\Console\Input\ArrayInput;
28
+ use Symfony\Component\Console\Input\InputArgument;
29
+ use Symfony\Component\Console\Input\InputDefinition;
30
+ use Symfony\Component\Console\Input\InputInterface;
31
+ use Symfony\Component\Console\Input\InputOption;
32
+ use Symfony\Component\Console\Output\NullOutput;
33
+ use Symfony\Component\Console\Output\Output;
34
+ use Symfony\Component\Console\Output\OutputInterface;
35
+ use Symfony\Component\Console\Output\StreamOutput;
36
+ use Symfony\Component\Console\Tester\ApplicationTester;
37
+ use Symfony\Component\DependencyInjection\ContainerBuilder;
38
+ use Symfony\Component\EventDispatcher\EventDispatcher;
39
+
40
+ class ApplicationTest extends TestCase
41
+ {
42
+ protected static $fixturesPath;
43
+
44
+ private $colSize;
45
+
46
+ protected function setUp()
47
+ {
48
+ $this->colSize = getenv('COLUMNS');
49
+ }
50
+
51
+ protected function tearDown()
52
+ {
53
+ putenv($this->colSize ? 'COLUMNS='.$this->colSize : 'COLUMNS');
54
+ putenv('SHELL_VERBOSITY');
55
+ unset($_ENV['SHELL_VERBOSITY']);
56
+ unset($_SERVER['SHELL_VERBOSITY']);
57
+ }
58
+
59
+ public static function setUpBeforeClass()
60
+ {
61
+ self::$fixturesPath = realpath(__DIR__.'/Fixtures/');
62
+ require_once self::$fixturesPath.'/FooCommand.php';
63
+ require_once self::$fixturesPath.'/FooOptCommand.php';
64
+ require_once self::$fixturesPath.'/Foo1Command.php';
65
+ require_once self::$fixturesPath.'/Foo2Command.php';
66
+ require_once self::$fixturesPath.'/Foo3Command.php';
67
+ require_once self::$fixturesPath.'/Foo4Command.php';
68
+ require_once self::$fixturesPath.'/Foo5Command.php';
69
+ require_once self::$fixturesPath.'/FooSameCaseUppercaseCommand.php';
70
+ require_once self::$fixturesPath.'/FooSameCaseLowercaseCommand.php';
71
+ require_once self::$fixturesPath.'/FoobarCommand.php';
72
+ require_once self::$fixturesPath.'/BarBucCommand.php';
73
+ require_once self::$fixturesPath.'/FooSubnamespaced1Command.php';
74
+ require_once self::$fixturesPath.'/FooSubnamespaced2Command.php';
75
+ require_once self::$fixturesPath.'/FooWithoutAliasCommand.php';
76
+ require_once self::$fixturesPath.'/TestTiti.php';
77
+ require_once self::$fixturesPath.'/TestToto.php';
78
+ }
79
+
80
+ protected function normalizeLineBreaks($text)
81
+ {
82
+ return str_replace(PHP_EOL, "\n", $text);
83
+ }
84
+
85
+ /**
86
+ * Replaces the dynamic placeholders of the command help text with a static version.
87
+ * The placeholder %command.full_name% includes the script path that is not predictable
88
+ * and can not be tested against.
89
+ */
90
+ protected function ensureStaticCommandHelp(Application $application)
91
+ {
92
+ foreach ($application->all() as $command) {
93
+ $command->setHelp(str_replace('%command.full_name%', 'app/console %command.name%', $command->getHelp()));
94
+ }
95
+ }
96
+
97
+ public function testConstructor()
98
+ {
99
+ $application = new Application('foo', 'bar');
100
+ $this->assertEquals('foo', $application->getName(), '__construct() takes the application name as its first argument');
101
+ $this->assertEquals('bar', $application->getVersion(), '__construct() takes the application version as its second argument');
102
+ $this->assertEquals(['help', 'list'], array_keys($application->all()), '__construct() registered the help and list commands by default');
103
+ }
104
+
105
+ public function testSetGetName()
106
+ {
107
+ $application = new Application();
108
+ $application->setName('foo');
109
+ $this->assertEquals('foo', $application->getName(), '->setName() sets the name of the application');
110
+ }
111
+
112
+ public function testSetGetVersion()
113
+ {
114
+ $application = new Application();
115
+ $application->setVersion('bar');
116
+ $this->assertEquals('bar', $application->getVersion(), '->setVersion() sets the version of the application');
117
+ }
118
+
119
+ public function testGetLongVersion()
120
+ {
121
+ $application = new Application('foo', 'bar');
122
+ $this->assertEquals('foo <info>bar</info>', $application->getLongVersion(), '->getLongVersion() returns the long version of the application');
123
+ }
124
+
125
+ public function testHelp()
126
+ {
127
+ $application = new Application();
128
+ $this->assertStringEqualsFile(self::$fixturesPath.'/application_gethelp.txt', $this->normalizeLineBreaks($application->getHelp()), '->getHelp() returns a help message');
129
+ }
130
+
131
+ public function testAll()
132
+ {
133
+ $application = new Application();
134
+ $commands = $application->all();
135
+ $this->assertInstanceOf('Symfony\\Component\\Console\\Command\\HelpCommand', $commands['help'], '->all() returns the registered commands');
136
+
137
+ $application->add(new \FooCommand());
138
+ $commands = $application->all('foo');
139
+ $this->assertCount(1, $commands, '->all() takes a namespace as its first argument');
140
+ }
141
+
142
+ public function testAllWithCommandLoader()
143
+ {
144
+ $application = new Application();
145
+ $commands = $application->all();
146
+ $this->assertInstanceOf('Symfony\\Component\\Console\\Command\\HelpCommand', $commands['help'], '->all() returns the registered commands');
147
+
148
+ $application->add(new \FooCommand());
149
+ $commands = $application->all('foo');
150
+ $this->assertCount(1, $commands, '->all() takes a namespace as its first argument');
151
+
152
+ $application->setCommandLoader(new FactoryCommandLoader([
153
+ 'foo:bar1' => function () { return new \Foo1Command(); },
154
+ ]));
155
+ $commands = $application->all('foo');
156
+ $this->assertCount(2, $commands, '->all() takes a namespace as its first argument');
157
+ $this->assertInstanceOf(\FooCommand::class, $commands['foo:bar'], '->all() returns the registered commands');
158
+ $this->assertInstanceOf(\Foo1Command::class, $commands['foo:bar1'], '->all() returns the registered commands');
159
+ }
160
+
161
+ public function testRegister()
162
+ {
163
+ $application = new Application();
164
+ $command = $application->register('foo');
165
+ $this->assertEquals('foo', $command->getName(), '->register() registers a new command');
166
+ }
167
+
168
+ public function testAdd()
169
+ {
170
+ $application = new Application();
171
+ $application->add($foo = new \FooCommand());
172
+ $commands = $application->all();
173
+ $this->assertEquals($foo, $commands['foo:bar'], '->add() registers a command');
174
+
175
+ $application = new Application();
176
+ $application->addCommands([$foo = new \FooCommand(), $foo1 = new \Foo1Command()]);
177
+ $commands = $application->all();
178
+ $this->assertEquals([$foo, $foo1], [$commands['foo:bar'], $commands['foo:bar1']], '->addCommands() registers an array of commands');
179
+ }
180
+
181
+ /**
182
+ * @expectedException \LogicException
183
+ * @expectedExceptionMessage Command class "Foo5Command" is not correctly initialized. You probably forgot to call the parent constructor.
184
+ */
185
+ public function testAddCommandWithEmptyConstructor()
186
+ {
187
+ $application = new Application();
188
+ $application->add(new \Foo5Command());
189
+ }
190
+
191
+ public function testHasGet()
192
+ {
193
+ $application = new Application();
194
+ $this->assertTrue($application->has('list'), '->has() returns true if a named command is registered');
195
+ $this->assertFalse($application->has('afoobar'), '->has() returns false if a named command is not registered');
196
+
197
+ $application->add($foo = new \FooCommand());
198
+ $this->assertTrue($application->has('afoobar'), '->has() returns true if an alias is registered');
199
+ $this->assertEquals($foo, $application->get('foo:bar'), '->get() returns a command by name');
200
+ $this->assertEquals($foo, $application->get('afoobar'), '->get() returns a command by alias');
201
+
202
+ $application = new Application();
203
+ $application->add($foo = new \FooCommand());
204
+ // simulate --help
205
+ $r = new \ReflectionObject($application);
206
+ $p = $r->getProperty('wantHelps');
207
+ $p->setAccessible(true);
208
+ $p->setValue($application, true);
209
+ $command = $application->get('foo:bar');
210
+ $this->assertInstanceOf('Symfony\Component\Console\Command\HelpCommand', $command, '->get() returns the help command if --help is provided as the input');
211
+ }
212
+
213
+ public function testHasGetWithCommandLoader()
214
+ {
215
+ $application = new Application();
216
+ $this->assertTrue($application->has('list'), '->has() returns true if a named command is registered');
217
+ $this->assertFalse($application->has('afoobar'), '->has() returns false if a named command is not registered');
218
+
219
+ $application->add($foo = new \FooCommand());
220
+ $this->assertTrue($application->has('afoobar'), '->has() returns true if an alias is registered');
221
+ $this->assertEquals($foo, $application->get('foo:bar'), '->get() returns a command by name');
222
+ $this->assertEquals($foo, $application->get('afoobar'), '->get() returns a command by alias');
223
+
224
+ $application->setCommandLoader(new FactoryCommandLoader([
225
+ 'foo:bar1' => function () { return new \Foo1Command(); },
226
+ ]));
227
+
228
+ $this->assertTrue($application->has('afoobar'), '->has() returns true if an instance is registered for an alias even with command loader');
229
+ $this->assertEquals($foo, $application->get('foo:bar'), '->get() returns an instance by name even with command loader');
230
+ $this->assertEquals($foo, $application->get('afoobar'), '->get() returns an instance by alias even with command loader');
231
+ $this->assertTrue($application->has('foo:bar1'), '->has() returns true for commands registered in the loader');
232
+ $this->assertInstanceOf(\Foo1Command::class, $foo1 = $application->get('foo:bar1'), '->get() returns a command by name from the command loader');
233
+ $this->assertTrue($application->has('afoobar1'), '->has() returns true for commands registered in the loader');
234
+ $this->assertEquals($foo1, $application->get('afoobar1'), '->get() returns a command by name from the command loader');
235
+ }
236
+
237
+ public function testSilentHelp()
238
+ {
239
+ $application = new Application();
240
+ $application->setAutoExit(false);
241
+ $application->setCatchExceptions(false);
242
+
243
+ $tester = new ApplicationTester($application);
244
+ $tester->run(['-h' => true, '-q' => true], ['decorated' => false]);
245
+
246
+ $this->assertEmpty($tester->getDisplay(true));
247
+ }
248
+
249
+ /**
250
+ * @expectedException \Symfony\Component\Console\Exception\CommandNotFoundException
251
+ * @expectedExceptionMessage The command "foofoo" does not exist.
252
+ */
253
+ public function testGetInvalidCommand()
254
+ {
255
+ $application = new Application();
256
+ $application->get('foofoo');
257
+ }
258
+
259
+ public function testGetNamespaces()
260
+ {
261
+ $application = new Application();
262
+ $application->add(new \FooCommand());
263
+ $application->add(new \Foo1Command());
264
+ $this->assertEquals(['foo'], $application->getNamespaces(), '->getNamespaces() returns an array of unique used namespaces');
265
+ }
266
+
267
+ public function testFindNamespace()
268
+ {
269
+ $application = new Application();
270
+ $application->add(new \FooCommand());
271
+ $this->assertEquals('foo', $application->findNamespace('foo'), '->findNamespace() returns the given namespace if it exists');
272
+ $this->assertEquals('foo', $application->findNamespace('f'), '->findNamespace() finds a namespace given an abbreviation');
273
+ $application->add(new \Foo2Command());
274
+ $this->assertEquals('foo', $application->findNamespace('foo'), '->findNamespace() returns the given namespace if it exists');
275
+ }
276
+
277
+ public function testFindNamespaceWithSubnamespaces()
278
+ {
279
+ $application = new Application();
280
+ $application->add(new \FooSubnamespaced1Command());
281
+ $application->add(new \FooSubnamespaced2Command());
282
+ $this->assertEquals('foo', $application->findNamespace('foo'), '->findNamespace() returns commands even if the commands are only contained in subnamespaces');
283
+ }
284
+
285
+ public function testFindAmbiguousNamespace()
286
+ {
287
+ $application = new Application();
288
+ $application->add(new \BarBucCommand());
289
+ $application->add(new \FooCommand());
290
+ $application->add(new \Foo2Command());
291
+
292
+ $expectedMsg = "The namespace \"f\" is ambiguous.\nDid you mean one of these?\n foo\n foo1";
293
+
294
+ if (method_exists($this, 'expectException')) {
295
+ $this->expectException(NamespaceNotFoundException::class);
296
+ $this->expectExceptionMessage($expectedMsg);
297
+ } else {
298
+ $this->setExpectedException(NamespaceNotFoundException::class, $expectedMsg);
299
+ }
300
+
301
+ $application->findNamespace('f');
302
+ }
303
+
304
+ public function testFindNonAmbiguous()
305
+ {
306
+ $application = new Application();
307
+ $application->add(new \TestTiti());
308
+ $application->add(new \TestToto());
309
+ $this->assertEquals('test-toto', $application->find('test')->getName());
310
+ }
311
+
312
+ /**
313
+ * @expectedException \Symfony\Component\Console\Exception\NamespaceNotFoundException
314
+ * @expectedExceptionMessage There are no commands defined in the "bar" namespace.
315
+ */
316
+ public function testFindInvalidNamespace()
317
+ {
318
+ $application = new Application();
319
+ $application->findNamespace('bar');
320
+ }
321
+
322
+ /**
323
+ * @expectedException \Symfony\Component\Console\Exception\CommandNotFoundException
324
+ * @expectedExceptionMessage Command "foo1" is not defined
325
+ */
326
+ public function testFindUniqueNameButNamespaceName()
327
+ {
328
+ $application = new Application();
329
+ $application->add(new \FooCommand());
330
+ $application->add(new \Foo1Command());
331
+ $application->add(new \Foo2Command());
332
+
333
+ $application->find($commandName = 'foo1');
334
+ }
335
+
336
+ public function testFind()
337
+ {
338
+ $application = new Application();
339
+ $application->add(new \FooCommand());
340
+
341
+ $this->assertInstanceOf('FooCommand', $application->find('foo:bar'), '->find() returns a command if its name exists');
342
+ $this->assertInstanceOf('Symfony\Component\Console\Command\HelpCommand', $application->find('h'), '->find() returns a command if its name exists');
343
+ $this->assertInstanceOf('FooCommand', $application->find('f:bar'), '->find() returns a command if the abbreviation for the namespace exists');
344
+ $this->assertInstanceOf('FooCommand', $application->find('f:b'), '->find() returns a command if the abbreviation for the namespace and the command name exist');
345
+ $this->assertInstanceOf('FooCommand', $application->find('a'), '->find() returns a command if the abbreviation exists for an alias');
346
+ }
347
+
348
+ public function testFindCaseSensitiveFirst()
349
+ {
350
+ $application = new Application();
351
+ $application->add(new \FooSameCaseUppercaseCommand());
352
+ $application->add(new \FooSameCaseLowercaseCommand());
353
+
354
+ $this->assertInstanceOf('FooSameCaseUppercaseCommand', $application->find('f:B'), '->find() returns a command if the abbreviation is the correct case');
355
+ $this->assertInstanceOf('FooSameCaseUppercaseCommand', $application->find('f:BAR'), '->find() returns a command if the abbreviation is the correct case');
356
+ $this->assertInstanceOf('FooSameCaseLowercaseCommand', $application->find('f:b'), '->find() returns a command if the abbreviation is the correct case');
357
+ $this->assertInstanceOf('FooSameCaseLowercaseCommand', $application->find('f:bar'), '->find() returns a command if the abbreviation is the correct case');
358
+ }
359
+
360
+ public function testFindCaseInsensitiveAsFallback()
361
+ {
362
+ $application = new Application();
363
+ $application->add(new \FooSameCaseLowercaseCommand());
364
+
365
+ $this->assertInstanceOf('FooSameCaseLowercaseCommand', $application->find('f:b'), '->find() returns a command if the abbreviation is the correct case');
366
+ $this->assertInstanceOf('FooSameCaseLowercaseCommand', $application->find('f:B'), '->find() will fallback to case insensitivity');
367
+ $this->assertInstanceOf('FooSameCaseLowercaseCommand', $application->find('FoO:BaR'), '->find() will fallback to case insensitivity');
368
+ }
369
+
370
+ /**
371
+ * @expectedException \Symfony\Component\Console\Exception\CommandNotFoundException
372
+ * @expectedExceptionMessage Command "FoO:BaR" is ambiguous
373
+ */
374
+ public function testFindCaseInsensitiveSuggestions()
375
+ {
376
+ $application = new Application();
377
+ $application->add(new \FooSameCaseLowercaseCommand());
378
+ $application->add(new \FooSameCaseUppercaseCommand());
379
+
380
+ $this->assertInstanceOf('FooSameCaseLowercaseCommand', $application->find('FoO:BaR'), '->find() will find two suggestions with case insensitivity');
381
+ }
382
+
383
+ public function testFindWithCommandLoader()
384
+ {
385
+ $application = new Application();
386
+ $application->setCommandLoader(new FactoryCommandLoader([
387
+ 'foo:bar' => $f = function () { return new \FooCommand(); },
388
+ ]));
389
+
390
+ $this->assertInstanceOf('FooCommand', $application->find('foo:bar'), '->find() returns a command if its name exists');
391
+ $this->assertInstanceOf('Symfony\Component\Console\Command\HelpCommand', $application->find('h'), '->find() returns a command if its name exists');
392
+ $this->assertInstanceOf('FooCommand', $application->find('f:bar'), '->find() returns a command if the abbreviation for the namespace exists');
393
+ $this->assertInstanceOf('FooCommand', $application->find('f:b'), '->find() returns a command if the abbreviation for the namespace and the command name exist');
394
+ $this->assertInstanceOf('FooCommand', $application->find('a'), '->find() returns a command if the abbreviation exists for an alias');
395
+ }
396
+
397
+ /**
398
+ * @dataProvider provideAmbiguousAbbreviations
399
+ */
400
+ public function testFindWithAmbiguousAbbreviations($abbreviation, $expectedExceptionMessage)
401
+ {
402
+ putenv('COLUMNS=120');
403
+ if (method_exists($this, 'expectException')) {
404
+ $this->expectException('Symfony\Component\Console\Exception\CommandNotFoundException');
405
+ $this->expectExceptionMessage($expectedExceptionMessage);
406
+ } else {
407
+ $this->setExpectedException('Symfony\Component\Console\Exception\CommandNotFoundException', $expectedExceptionMessage);
408
+ }
409
+
410
+ $application = new Application();
411
+ $application->add(new \FooCommand());
412
+ $application->add(new \Foo1Command());
413
+ $application->add(new \Foo2Command());
414
+
415
+ $application->find($abbreviation);
416
+ }
417
+
418
+ public function provideAmbiguousAbbreviations()
419
+ {
420
+ return [
421
+ ['f', 'Command "f" is not defined.'],
422
+ [
423
+ 'a',
424
+ "Command \"a\" is ambiguous.\nDid you mean one of these?\n".
425
+ " afoobar The foo:bar command\n".
426
+ " afoobar1 The foo:bar1 command\n".
427
+ ' afoobar2 The foo1:bar command',
428
+ ],
429
+ [
430
+ 'foo:b',
431
+ "Command \"foo:b\" is ambiguous.\nDid you mean one of these?\n".
432
+ " foo:bar The foo:bar command\n".
433
+ " foo:bar1 The foo:bar1 command\n".
434
+ ' foo1:bar The foo1:bar command',
435
+ ],
436
+ ];
437
+ }
438
+
439
+ public function testFindCommandEqualNamespace()
440
+ {
441
+ $application = new Application();
442
+ $application->add(new \Foo3Command());
443
+ $application->add(new \Foo4Command());
444
+
445
+ $this->assertInstanceOf('Foo3Command', $application->find('foo3:bar'), '->find() returns the good command even if a namespace has same name');
446
+ $this->assertInstanceOf('Foo4Command', $application->find('foo3:bar:toh'), '->find() returns a command even if its namespace equals another command name');
447
+ }
448
+
449
+ public function testFindCommandWithAmbiguousNamespacesButUniqueName()
450
+ {
451
+ $application = new Application();
452
+ $application->add(new \FooCommand());
453
+ $application->add(new \FoobarCommand());
454
+
455
+ $this->assertInstanceOf('FoobarCommand', $application->find('f:f'));
456
+ }
457
+
458
+ public function testFindCommandWithMissingNamespace()
459
+ {
460
+ $application = new Application();
461
+ $application->add(new \Foo4Command());
462
+
463
+ $this->assertInstanceOf('Foo4Command', $application->find('f::t'));
464
+ }
465
+
466
+ /**
467
+ * @dataProvider provideInvalidCommandNamesSingle
468
+ * @expectedException \Symfony\Component\Console\Exception\CommandNotFoundException
469
+ * @expectedExceptionMessage Did you mean this
470
+ */
471
+ public function testFindAlternativeExceptionMessageSingle($name)
472
+ {
473
+ $application = new Application();
474
+ $application->add(new \Foo3Command());
475
+ $application->find($name);
476
+ }
477
+
478
+ public function testDontRunAlternativeNamespaceName()
479
+ {
480
+ $application = new Application();
481
+ $application->add(new \Foo1Command());
482
+ $application->setAutoExit(false);
483
+ $tester = new ApplicationTester($application);
484
+ $tester->run(['command' => 'foos:bar1'], ['decorated' => false]);
485
+ $this->assertSame('
486
+
487
+ There are no commands defined in the "foos" namespace.
488
+
489
+ Did you mean this?
490
+ foo
491
+
492
+
493
+ ', $tester->getDisplay(true));
494
+ }
495
+
496
+ public function testCanRunAlternativeCommandName()
497
+ {
498
+ $application = new Application();
499
+ $application->add(new \FooWithoutAliasCommand());
500
+ $application->setAutoExit(false);
501
+ $tester = new ApplicationTester($application);
502
+ $tester->setInputs(['y']);
503
+ $tester->run(['command' => 'foos'], ['decorated' => false]);
504
+ $display = trim($tester->getDisplay(true));
505
+ $this->assertContains('Command "foos" is not defined', $display);
506
+ $this->assertContains('Do you want to run "foo" instead? (yes/no) [no]:', $display);
507
+ $this->assertContains('called', $display);
508
+ }
509
+
510
+ public function testDontRunAlternativeCommandName()
511
+ {
512
+ $application = new Application();
513
+ $application->add(new \FooWithoutAliasCommand());
514
+ $application->setAutoExit(false);
515
+ $tester = new ApplicationTester($application);
516
+ $tester->setInputs(['n']);
517
+ $exitCode = $tester->run(['command' => 'foos'], ['decorated' => false]);
518
+ $this->assertSame(1, $exitCode);
519
+ $display = trim($tester->getDisplay(true));
520
+ $this->assertContains('Command "foos" is not defined', $display);
521
+ $this->assertContains('Do you want to run "foo" instead? (yes/no) [no]:', $display);
522
+ }
523
+
524
+ public function provideInvalidCommandNamesSingle()
525
+ {
526
+ return [
527
+ ['foo3:barr'],
528
+ ['fooo3:bar'],
529
+ ];
530
+ }
531
+
532
+ public function testFindAlternativeExceptionMessageMultiple()
533
+ {
534
+ putenv('COLUMNS=120');
535
+ $application = new Application();
536
+ $application->add(new \FooCommand());
537
+ $application->add(new \Foo1Command());
538
+ $application->add(new \Foo2Command());
539
+
540
+ // Command + plural
541
+ try {
542
+ $application->find('foo:baR');
543
+ $this->fail('->find() throws a CommandNotFoundException if command does not exist, with alternatives');
544
+ } catch (\Exception $e) {
545
+ $this->assertInstanceOf('Symfony\Component\Console\Exception\CommandNotFoundException', $e, '->find() throws a CommandNotFoundException if command does not exist, with alternatives');
546
+ $this->assertRegExp('/Did you mean one of these/', $e->getMessage(), '->find() throws a CommandNotFoundException if command does not exist, with alternatives');
547
+ $this->assertRegExp('/foo1:bar/', $e->getMessage());
548
+ $this->assertRegExp('/foo:bar/', $e->getMessage());
549
+ }
550
+
551
+ // Namespace + plural
552
+ try {
553
+ $application->find('foo2:bar');
554
+ $this->fail('->find() throws a CommandNotFoundException if command does not exist, with alternatives');
555
+ } catch (\Exception $e) {
556
+ $this->assertInstanceOf('Symfony\Component\Console\Exception\CommandNotFoundException', $e, '->find() throws a CommandNotFoundException if command does not exist, with alternatives');
557
+ $this->assertRegExp('/Did you mean one of these/', $e->getMessage(), '->find() throws a CommandNotFoundException if command does not exist, with alternatives');
558
+ $this->assertRegExp('/foo1/', $e->getMessage());
559
+ }
560
+
561
+ $application->add(new \Foo3Command());
562
+ $application->add(new \Foo4Command());
563
+
564
+ // Subnamespace + plural
565
+ try {
566
+ $a = $application->find('foo3:');
567
+ $this->fail('->find() should throw an Symfony\Component\Console\Exception\CommandNotFoundException if a command is ambiguous because of a subnamespace, with alternatives');
568
+ } catch (\Exception $e) {
569
+ $this->assertInstanceOf('Symfony\Component\Console\Exception\CommandNotFoundException', $e);
570
+ $this->assertRegExp('/foo3:bar/', $e->getMessage());
571
+ $this->assertRegExp('/foo3:bar:toh/', $e->getMessage());
572
+ }
573
+ }
574
+
575
+ public function testFindAlternativeCommands()
576
+ {
577
+ $application = new Application();
578
+
579
+ $application->add(new \FooCommand());
580
+ $application->add(new \Foo1Command());
581
+ $application->add(new \Foo2Command());
582
+
583
+ try {
584
+ $application->find($commandName = 'Unknown command');
585
+ $this->fail('->find() throws a CommandNotFoundException if command does not exist');
586
+ } catch (\Exception $e) {
587
+ $this->assertInstanceOf('Symfony\Component\Console\Exception\CommandNotFoundException', $e, '->find() throws a CommandNotFoundException if command does not exist');
588
+ $this->assertSame([], $e->getAlternatives());
589
+ $this->assertEquals(sprintf('Command "%s" is not defined.', $commandName), $e->getMessage(), '->find() throws a CommandNotFoundException if command does not exist, without alternatives');
590
+ }
591
+
592
+ // Test if "bar1" command throw a "CommandNotFoundException" and does not contain
593
+ // "foo:bar" as alternative because "bar1" is too far from "foo:bar"
594
+ try {
595
+ $application->find($commandName = 'bar1');
596
+ $this->fail('->find() throws a CommandNotFoundException if command does not exist');
597
+ } catch (\Exception $e) {
598
+ $this->assertInstanceOf('Symfony\Component\Console\Exception\CommandNotFoundException', $e, '->find() throws a CommandNotFoundException if command does not exist');
599
+ $this->assertSame(['afoobar1', 'foo:bar1'], $e->getAlternatives());
600
+ $this->assertRegExp(sprintf('/Command "%s" is not defined./', $commandName), $e->getMessage(), '->find() throws a CommandNotFoundException if command does not exist, with alternatives');
601
+ $this->assertRegExp('/afoobar1/', $e->getMessage(), '->find() throws a CommandNotFoundException if command does not exist, with alternative : "afoobar1"');
602
+ $this->assertRegExp('/foo:bar1/', $e->getMessage(), '->find() throws a CommandNotFoundException if command does not exist, with alternative : "foo:bar1"');
603
+ $this->assertNotRegExp('/foo:bar(?>!1)/', $e->getMessage(), '->find() throws a CommandNotFoundException if command does not exist, without "foo:bar" alternative');
604
+ }
605
+ }
606
+
607
+ public function testFindAlternativeCommandsWithAnAlias()
608
+ {
609
+ $fooCommand = new \FooCommand();
610
+ $fooCommand->setAliases(['foo2']);
611
+
612
+ $application = new Application();
613
+ $application->add($fooCommand);
614
+
615
+ $result = $application->find('foo');
616
+
617
+ $this->assertSame($fooCommand, $result);
618
+ }
619
+
620
+ public function testFindAlternativeNamespace()
621
+ {
622
+ $application = new Application();
623
+
624
+ $application->add(new \FooCommand());
625
+ $application->add(new \Foo1Command());
626
+ $application->add(new \Foo2Command());
627
+ $application->add(new \Foo3Command());
628
+
629
+ try {
630
+ $application->find('Unknown-namespace:Unknown-command');
631
+ $this->fail('->find() throws a CommandNotFoundException if namespace does not exist');
632
+ } catch (\Exception $e) {
633
+ $this->assertInstanceOf('Symfony\Component\Console\Exception\CommandNotFoundException', $e, '->find() throws a CommandNotFoundException if namespace does not exist');
634
+ $this->assertSame([], $e->getAlternatives());
635
+ $this->assertEquals('There are no commands defined in the "Unknown-namespace" namespace.', $e->getMessage(), '->find() throws a CommandNotFoundException if namespace does not exist, without alternatives');
636
+ }
637
+
638
+ try {
639
+ $application->find('foo2:command');
640
+ $this->fail('->find() throws a CommandNotFoundException if namespace does not exist');
641
+ } catch (\Exception $e) {
642
+ $this->assertInstanceOf('Symfony\Component\Console\Exception\NamespaceNotFoundException', $e, '->find() throws a NamespaceNotFoundException if namespace does not exist');
643
+ $this->assertInstanceOf('Symfony\Component\Console\Exception\CommandNotFoundException', $e, 'NamespaceNotFoundException extends from CommandNotFoundException');
644
+ $this->assertCount(3, $e->getAlternatives());
645
+ $this->assertContains('foo', $e->getAlternatives());
646
+ $this->assertContains('foo1', $e->getAlternatives());
647
+ $this->assertContains('foo3', $e->getAlternatives());
648
+ $this->assertRegExp('/There are no commands defined in the "foo2" namespace./', $e->getMessage(), '->find() throws a CommandNotFoundException if namespace does not exist, with alternative');
649
+ $this->assertRegExp('/foo/', $e->getMessage(), '->find() throws a CommandNotFoundException if namespace does not exist, with alternative : "foo"');
650
+ $this->assertRegExp('/foo1/', $e->getMessage(), '->find() throws a CommandNotFoundException if namespace does not exist, with alternative : "foo1"');
651
+ $this->assertRegExp('/foo3/', $e->getMessage(), '->find() throws a CommandNotFoundException if namespace does not exist, with alternative : "foo3"');
652
+ }
653
+ }
654
+
655
+ public function testFindAlternativesOutput()
656
+ {
657
+ $application = new Application();
658
+
659
+ $application->add(new \FooCommand());
660
+ $application->add(new \Foo1Command());
661
+ $application->add(new \Foo2Command());
662
+ $application->add(new \Foo3Command());
663
+
664
+ $expectedAlternatives = [
665
+ 'afoobar',
666
+ 'afoobar1',
667
+ 'afoobar2',
668
+ 'foo1:bar',
669
+ 'foo3:bar',
670
+ 'foo:bar',
671
+ 'foo:bar1',
672
+ ];
673
+
674
+ try {
675
+ $application->find('foo');
676
+ $this->fail('->find() throws a CommandNotFoundException if command is not defined');
677
+ } catch (\Exception $e) {
678
+ $this->assertInstanceOf('Symfony\Component\Console\Exception\CommandNotFoundException', $e, '->find() throws a CommandNotFoundException if command is not defined');
679
+ $this->assertSame($expectedAlternatives, $e->getAlternatives());
680
+
681
+ $this->assertRegExp('/Command "foo" is not defined\..*Did you mean one of these\?.*/Ums', $e->getMessage());
682
+ }
683
+ }
684
+
685
+ public function testFindNamespaceDoesNotFailOnDeepSimilarNamespaces()
686
+ {
687
+ $application = $this->getMockBuilder('Symfony\Component\Console\Application')->setMethods(['getNamespaces'])->getMock();
688
+ $application->expects($this->once())
689
+ ->method('getNamespaces')
690
+ ->will($this->returnValue(['foo:sublong', 'bar:sub']));
691
+
692
+ $this->assertEquals('foo:sublong', $application->findNamespace('f:sub'));
693
+ }
694
+
695
+ /**
696
+ * @expectedException \Symfony\Component\Console\Exception\CommandNotFoundException
697
+ * @expectedExceptionMessage Command "foo::bar" is not defined.
698
+ */
699
+ public function testFindWithDoubleColonInNameThrowsException()
700
+ {
701
+ $application = new Application();
702
+ $application->add(new \FooCommand());
703
+ $application->add(new \Foo4Command());
704
+ $application->find('foo::bar');
705
+ }
706
+
707
+ public function testSetCatchExceptions()
708
+ {
709
+ $application = new Application();
710
+ $application->setAutoExit(false);
711
+ putenv('COLUMNS=120');
712
+ $tester = new ApplicationTester($application);
713
+
714
+ $application->setCatchExceptions(true);
715
+ $this->assertTrue($application->areExceptionsCaught());
716
+
717
+ $tester->run(['command' => 'foo'], ['decorated' => false]);
718
+ $this->assertStringEqualsFile(self::$fixturesPath.'/application_renderexception1.txt', $tester->getDisplay(true), '->setCatchExceptions() sets the catch exception flag');
719
+
720
+ $tester->run(['command' => 'foo'], ['decorated' => false, 'capture_stderr_separately' => true]);
721
+ $this->assertStringEqualsFile(self::$fixturesPath.'/application_renderexception1.txt', $tester->getErrorOutput(true), '->setCatchExceptions() sets the catch exception flag');
722
+ $this->assertSame('', $tester->getDisplay(true));
723
+
724
+ $application->setCatchExceptions(false);
725
+ try {
726
+ $tester->run(['command' => 'foo'], ['decorated' => false]);
727
+ $this->fail('->setCatchExceptions() sets the catch exception flag');
728
+ } catch (\Exception $e) {
729
+ $this->assertInstanceOf('\Exception', $e, '->setCatchExceptions() sets the catch exception flag');
730
+ $this->assertEquals('Command "foo" is not defined.', $e->getMessage(), '->setCatchExceptions() sets the catch exception flag');
731
+ }
732
+ }
733
+
734
+ public function testAutoExitSetting()
735
+ {
736
+ $application = new Application();
737
+ $this->assertTrue($application->isAutoExitEnabled());
738
+
739
+ $application->setAutoExit(false);
740
+ $this->assertFalse($application->isAutoExitEnabled());
741
+ }
742
+
743
+ public function testRenderException()
744
+ {
745
+ $application = new Application();
746
+ $application->setAutoExit(false);
747
+ putenv('COLUMNS=120');
748
+ $tester = new ApplicationTester($application);
749
+
750
+ $tester->run(['command' => 'foo'], ['decorated' => false, 'capture_stderr_separately' => true]);
751
+ $this->assertStringEqualsFile(self::$fixturesPath.'/application_renderexception1.txt', $tester->getErrorOutput(true), '->renderException() renders a pretty exception');
752
+
753
+ $tester->run(['command' => 'foo'], ['decorated' => false, 'verbosity' => Output::VERBOSITY_VERBOSE, 'capture_stderr_separately' => true]);
754
+ $this->assertContains('Exception trace', $tester->getErrorOutput(), '->renderException() renders a pretty exception with a stack trace when verbosity is verbose');
755
+
756
+ $tester->run(['command' => 'list', '--foo' => true], ['decorated' => false, 'capture_stderr_separately' => true]);
757
+ $this->assertStringEqualsFile(self::$fixturesPath.'/application_renderexception2.txt', $tester->getErrorOutput(true), '->renderException() renders the command synopsis when an exception occurs in the context of a command');
758
+
759
+ $application->add(new \Foo3Command());
760
+ $tester = new ApplicationTester($application);
761
+ $tester->run(['command' => 'foo3:bar'], ['decorated' => false, 'capture_stderr_separately' => true]);
762
+ $this->assertStringEqualsFile(self::$fixturesPath.'/application_renderexception3.txt', $tester->getErrorOutput(true), '->renderException() renders a pretty exceptions with previous exceptions');
763
+
764
+ $tester->run(['command' => 'foo3:bar'], ['decorated' => false, 'verbosity' => Output::VERBOSITY_VERBOSE]);
765
+ $this->assertRegExp('/\[Exception\]\s*First exception/', $tester->getDisplay(), '->renderException() renders a pretty exception without code exception when code exception is default and verbosity is verbose');
766
+ $this->assertRegExp('/\[Exception\]\s*Second exception/', $tester->getDisplay(), '->renderException() renders a pretty exception without code exception when code exception is 0 and verbosity is verbose');
767
+ $this->assertRegExp('/\[Exception \(404\)\]\s*Third exception/', $tester->getDisplay(), '->renderException() renders a pretty exception with code exception when code exception is 404 and verbosity is verbose');
768
+
769
+ $tester->run(['command' => 'foo3:bar'], ['decorated' => true]);
770
+ $this->assertStringEqualsFile(self::$fixturesPath.'/application_renderexception3decorated.txt', $tester->getDisplay(true), '->renderException() renders a pretty exceptions with previous exceptions');
771
+
772
+ $tester->run(['command' => 'foo3:bar'], ['decorated' => true, 'capture_stderr_separately' => true]);
773
+ $this->assertStringEqualsFile(self::$fixturesPath.'/application_renderexception3decorated.txt', $tester->getErrorOutput(true), '->renderException() renders a pretty exceptions with previous exceptions');
774
+
775
+ $application = new Application();
776
+ $application->setAutoExit(false);
777
+ putenv('COLUMNS=32');
778
+ $tester = new ApplicationTester($application);
779
+
780
+ $tester->run(['command' => 'foo'], ['decorated' => false, 'capture_stderr_separately' => true]);
781
+ $this->assertStringEqualsFile(self::$fixturesPath.'/application_renderexception4.txt', $tester->getErrorOutput(true), '->renderException() wraps messages when they are bigger than the terminal');
782
+ putenv('COLUMNS=120');
783
+ }
784
+
785
+ public function testRenderExceptionWithDoubleWidthCharacters()
786
+ {
787
+ $application = new Application();
788
+ $application->setAutoExit(false);
789
+ putenv('COLUMNS=120');
790
+ $application->register('foo')->setCode(function () {
791
+ throw new \Exception('エラーメッセージ');
792
+ });
793
+ $tester = new ApplicationTester($application);
794
+
795
+ $tester->run(['command' => 'foo'], ['decorated' => false, 'capture_stderr_separately' => true]);
796
+ $this->assertStringMatchesFormatFile(self::$fixturesPath.'/application_renderexception_doublewidth1.txt', $tester->getErrorOutput(true), '->renderException() renders a pretty exceptions with previous exceptions');
797
+
798
+ $tester->run(['command' => 'foo'], ['decorated' => true, 'capture_stderr_separately' => true]);
799
+ $this->assertStringMatchesFormatFile(self::$fixturesPath.'/application_renderexception_doublewidth1decorated.txt', $tester->getErrorOutput(true), '->renderException() renders a pretty exceptions with previous exceptions');
800
+
801
+ $application = new Application();
802
+ $application->setAutoExit(false);
803
+ putenv('COLUMNS=32');
804
+ $application->register('foo')->setCode(function () {
805
+ throw new \Exception('コマンドの実行中にエラーが発生しました。');
806
+ });
807
+ $tester = new ApplicationTester($application);
808
+ $tester->run(['command' => 'foo'], ['decorated' => false, 'capture_stderr_separately' => true]);
809
+ $this->assertStringMatchesFormatFile(self::$fixturesPath.'/application_renderexception_doublewidth2.txt', $tester->getErrorOutput(true), '->renderException() wraps messages when they are bigger than the terminal');
810
+ putenv('COLUMNS=120');
811
+ }
812
+
813
+ public function testRenderExceptionEscapesLines()
814
+ {
815
+ $application = new Application();
816
+ $application->setAutoExit(false);
817
+ putenv('COLUMNS=22');
818
+ $application->register('foo')->setCode(function () {
819
+ throw new \Exception('dont break here <info>!</info>');
820
+ });
821
+ $tester = new ApplicationTester($application);
822
+
823
+ $tester->run(['command' => 'foo'], ['decorated' => false]);
824
+ $this->assertStringMatchesFormatFile(self::$fixturesPath.'/application_renderexception_escapeslines.txt', $tester->getDisplay(true), '->renderException() escapes lines containing formatting');
825
+ putenv('COLUMNS=120');
826
+ }
827
+
828
+ public function testRenderExceptionLineBreaks()
829
+ {
830
+ $application = $this->getMockBuilder('Symfony\Component\Console\Application')->setMethods(['getTerminalWidth'])->getMock();
831
+ $application->setAutoExit(false);
832
+ $application->expects($this->any())
833
+ ->method('getTerminalWidth')
834
+ ->will($this->returnValue(120));
835
+ $application->register('foo')->setCode(function () {
836
+ throw new \InvalidArgumentException("\n\nline 1 with extra spaces \nline 2\n\nline 4\n");
837
+ });
838
+ $tester = new ApplicationTester($application);
839
+
840
+ $tester->run(['command' => 'foo'], ['decorated' => false]);
841
+ $this->assertStringMatchesFormatFile(self::$fixturesPath.'/application_renderexception_linebreaks.txt', $tester->getDisplay(true), '->renderException() keep multiple line breaks');
842
+ }
843
+
844
+ public function testRenderAnonymousException()
845
+ {
846
+ $application = new Application();
847
+ $application->setAutoExit(false);
848
+ $application->register('foo')->setCode(function () {
849
+ throw new class('') extends \InvalidArgumentException {
850
+ };
851
+ });
852
+ $tester = new ApplicationTester($application);
853
+
854
+ $tester->run(['command' => 'foo'], ['decorated' => false]);
855
+ $this->assertContains('[InvalidArgumentException@anonymous]', $tester->getDisplay(true));
856
+
857
+ $application = new Application();
858
+ $application->setAutoExit(false);
859
+ $application->register('foo')->setCode(function () {
860
+ throw new \InvalidArgumentException(sprintf('Dummy type "%s" is invalid.', \get_class(new class() {
861
+ })));
862
+ });
863
+ $tester = new ApplicationTester($application);
864
+
865
+ $tester->run(['command' => 'foo'], ['decorated' => false]);
866
+ $this->assertContains('Dummy type "@anonymous" is invalid.', $tester->getDisplay(true));
867
+ }
868
+
869
+ public function testRenderExceptionStackTraceContainsRootException()
870
+ {
871
+ $application = new Application();
872
+ $application->setAutoExit(false);
873
+ $application->register('foo')->setCode(function () {
874
+ throw new class('') extends \InvalidArgumentException {
875
+ };
876
+ });
877
+ $tester = new ApplicationTester($application);
878
+
879
+ $tester->run(['command' => 'foo'], ['decorated' => false]);
880
+ $this->assertContains('[InvalidArgumentException@anonymous]', $tester->getDisplay(true));
881
+
882
+ $application = new Application();
883
+ $application->setAutoExit(false);
884
+ $application->register('foo')->setCode(function () {
885
+ throw new \InvalidArgumentException(sprintf('Dummy type "%s" is invalid.', \get_class(new class() {
886
+ })));
887
+ });
888
+ $tester = new ApplicationTester($application);
889
+
890
+ $tester->run(['command' => 'foo'], ['decorated' => false]);
891
+ $this->assertContains('Dummy type "@anonymous" is invalid.', $tester->getDisplay(true));
892
+ }
893
+
894
+ public function testRun()
895
+ {
896
+ $application = new Application();
897
+ $application->setAutoExit(false);
898
+ $application->setCatchExceptions(false);
899
+ $application->add($command = new \Foo1Command());
900
+ $_SERVER['argv'] = ['cli.php', 'foo:bar1'];
901
+
902
+ ob_start();
903
+ $application->run();
904
+ ob_end_clean();
905
+
906
+ $this->assertInstanceOf('Symfony\Component\Console\Input\ArgvInput', $command->input, '->run() creates an ArgvInput by default if none is given');
907
+ $this->assertInstanceOf('Symfony\Component\Console\Output\ConsoleOutput', $command->output, '->run() creates a ConsoleOutput by default if none is given');
908
+
909
+ $application = new Application();
910
+ $application->setAutoExit(false);
911
+ $application->setCatchExceptions(false);
912
+
913
+ $this->ensureStaticCommandHelp($application);
914
+ $tester = new ApplicationTester($application);
915
+
916
+ $tester->run([], ['decorated' => false]);
917
+ $this->assertStringEqualsFile(self::$fixturesPath.'/application_run1.txt', $tester->getDisplay(true), '->run() runs the list command if no argument is passed');
918
+
919
+ $tester->run(['--help' => true], ['decorated' => false]);
920
+ $this->assertStringEqualsFile(self::$fixturesPath.'/application_run2.txt', $tester->getDisplay(true), '->run() runs the help command if --help is passed');
921
+
922
+ $tester->run(['-h' => true], ['decorated' => false]);
923
+ $this->assertStringEqualsFile(self::$fixturesPath.'/application_run2.txt', $tester->getDisplay(true), '->run() runs the help command if -h is passed');
924
+
925
+ $tester->run(['command' => 'list', '--help' => true], ['decorated' => false]);
926
+ $this->assertStringEqualsFile(self::$fixturesPath.'/application_run3.txt', $tester->getDisplay(true), '->run() displays the help if --help is passed');
927
+
928
+ $tester->run(['command' => 'list', '-h' => true], ['decorated' => false]);
929
+ $this->assertStringEqualsFile(self::$fixturesPath.'/application_run3.txt', $tester->getDisplay(true), '->run() displays the help if -h is passed');
930
+
931
+ $tester->run(['--ansi' => true]);
932
+ $this->assertTrue($tester->getOutput()->isDecorated(), '->run() forces color output if --ansi is passed');
933
+
934
+ $tester->run(['--no-ansi' => true]);
935
+ $this->assertFalse($tester->getOutput()->isDecorated(), '->run() forces color output to be disabled if --no-ansi is passed');
936
+
937
+ $tester->run(['--version' => true], ['decorated' => false]);
938
+ $this->assertStringEqualsFile(self::$fixturesPath.'/application_run4.txt', $tester->getDisplay(true), '->run() displays the program version if --version is passed');
939
+
940
+ $tester->run(['-V' => true], ['decorated' => false]);
941
+ $this->assertStringEqualsFile(self::$fixturesPath.'/application_run4.txt', $tester->getDisplay(true), '->run() displays the program version if -v is passed');
942
+
943
+ $tester->run(['command' => 'list', '--quiet' => true]);
944
+ $this->assertSame('', $tester->getDisplay(), '->run() removes all output if --quiet is passed');
945
+ $this->assertFalse($tester->getInput()->isInteractive(), '->run() sets off the interactive mode if --quiet is passed');
946
+
947
+ $tester->run(['command' => 'list', '-q' => true]);
948
+ $this->assertSame('', $tester->getDisplay(), '->run() removes all output if -q is passed');
949
+ $this->assertFalse($tester->getInput()->isInteractive(), '->run() sets off the interactive mode if -q is passed');
950
+
951
+ $tester->run(['command' => 'list', '--verbose' => true]);
952
+ $this->assertSame(Output::VERBOSITY_VERBOSE, $tester->getOutput()->getVerbosity(), '->run() sets the output to verbose if --verbose is passed');
953
+
954
+ $tester->run(['command' => 'list', '--verbose' => 1]);
955
+ $this->assertSame(Output::VERBOSITY_VERBOSE, $tester->getOutput()->getVerbosity(), '->run() sets the output to verbose if --verbose=1 is passed');
956
+
957
+ $tester->run(['command' => 'list', '--verbose' => 2]);
958
+ $this->assertSame(Output::VERBOSITY_VERY_VERBOSE, $tester->getOutput()->getVerbosity(), '->run() sets the output to very verbose if --verbose=2 is passed');
959
+
960
+ $tester->run(['command' => 'list', '--verbose' => 3]);
961
+ $this->assertSame(Output::VERBOSITY_DEBUG, $tester->getOutput()->getVerbosity(), '->run() sets the output to debug if --verbose=3 is passed');
962
+
963
+ $tester->run(['command' => 'list', '--verbose' => 4]);
964
+ $this->assertSame(Output::VERBOSITY_VERBOSE, $tester->getOutput()->getVerbosity(), '->run() sets the output to verbose if unknown --verbose level is passed');
965
+
966
+ $tester->run(['command' => 'list', '-v' => true]);
967
+ $this->assertSame(Output::VERBOSITY_VERBOSE, $tester->getOutput()->getVerbosity(), '->run() sets the output to verbose if -v is passed');
968
+
969
+ $tester->run(['command' => 'list', '-vv' => true]);
970
+ $this->assertSame(Output::VERBOSITY_VERY_VERBOSE, $tester->getOutput()->getVerbosity(), '->run() sets the output to verbose if -v is passed');
971
+
972
+ $tester->run(['command' => 'list', '-vvv' => true]);
973
+ $this->assertSame(Output::VERBOSITY_DEBUG, $tester->getOutput()->getVerbosity(), '->run() sets the output to verbose if -v is passed');
974
+
975
+ $application = new Application();
976
+ $application->setAutoExit(false);
977
+ $application->setCatchExceptions(false);
978
+ $application->add(new \FooCommand());
979
+ $tester = new ApplicationTester($application);
980
+
981
+ $tester->run(['command' => 'foo:bar', '--no-interaction' => true], ['decorated' => false]);
982
+ $this->assertSame('called'.PHP_EOL, $tester->getDisplay(), '->run() does not call interact() if --no-interaction is passed');
983
+
984
+ $tester->run(['command' => 'foo:bar', '-n' => true], ['decorated' => false]);
985
+ $this->assertSame('called'.PHP_EOL, $tester->getDisplay(), '->run() does not call interact() if -n is passed');
986
+ }
987
+
988
+ public function testRunWithGlobalOptionAndNoCommand()
989
+ {
990
+ $application = new Application();
991
+ $application->setAutoExit(false);
992
+ $application->setCatchExceptions(false);
993
+ $application->getDefinition()->addOption(new InputOption('foo', 'f', InputOption::VALUE_OPTIONAL));
994
+
995
+ $output = new StreamOutput(fopen('php://memory', 'w', false));
996
+ $input = new ArgvInput(['cli.php', '--foo', 'bar']);
997
+
998
+ $this->assertSame(0, $application->run($input, $output));
999
+ }
1000
+
1001
+ /**
1002
+ * Issue #9285.
1003
+ *
1004
+ * If the "verbose" option is just before an argument in ArgvInput,
1005
+ * an argument value should not be treated as verbosity value.
1006
+ * This test will fail with "Not enough arguments." if broken
1007
+ */
1008
+ public function testVerboseValueNotBreakArguments()
1009
+ {
1010
+ $application = new Application();
1011
+ $application->setAutoExit(false);
1012
+ $application->setCatchExceptions(false);
1013
+ $application->add(new \FooCommand());
1014
+
1015
+ $output = new StreamOutput(fopen('php://memory', 'w', false));
1016
+
1017
+ $input = new ArgvInput(['cli.php', '-v', 'foo:bar']);
1018
+ $application->run($input, $output);
1019
+
1020
+ $this->addToAssertionCount(1);
1021
+
1022
+ $input = new ArgvInput(['cli.php', '--verbose', 'foo:bar']);
1023
+ $application->run($input, $output);
1024
+
1025
+ $this->addToAssertionCount(1);
1026
+ }
1027
+
1028
+ public function testRunReturnsIntegerExitCode()
1029
+ {
1030
+ $exception = new \Exception('', 4);
1031
+
1032
+ $application = $this->getMockBuilder('Symfony\Component\Console\Application')->setMethods(['doRun'])->getMock();
1033
+ $application->setAutoExit(false);
1034
+ $application->expects($this->once())
1035
+ ->method('doRun')
1036
+ ->willThrowException($exception);
1037
+
1038
+ $exitCode = $application->run(new ArrayInput([]), new NullOutput());
1039
+
1040
+ $this->assertSame(4, $exitCode, '->run() returns integer exit code extracted from raised exception');
1041
+ }
1042
+
1043
+ public function testRunDispatchesIntegerExitCode()
1044
+ {
1045
+ $passedRightValue = false;
1046
+
1047
+ // We can assume here that some other test asserts that the event is dispatched at all
1048
+ $dispatcher = new EventDispatcher();
1049
+ $dispatcher->addListener('console.terminate', function (ConsoleTerminateEvent $event) use (&$passedRightValue) {
1050
+ $passedRightValue = (4 === $event->getExitCode());
1051
+ });
1052
+
1053
+ $application = new Application();
1054
+ $application->setDispatcher($dispatcher);
1055
+ $application->setAutoExit(false);
1056
+
1057
+ $application->register('test')->setCode(function (InputInterface $input, OutputInterface $output) {
1058
+ throw new \Exception('', 4);
1059
+ });
1060
+
1061
+ $tester = new ApplicationTester($application);
1062
+ $tester->run(['command' => 'test']);
1063
+
1064
+ $this->assertTrue($passedRightValue, '-> exit code 4 was passed in the console.terminate event');
1065
+ }
1066
+
1067
+ public function testRunReturnsExitCodeOneForExceptionCodeZero()
1068
+ {
1069
+ $exception = new \Exception('', 0);
1070
+
1071
+ $application = $this->getMockBuilder('Symfony\Component\Console\Application')->setMethods(['doRun'])->getMock();
1072
+ $application->setAutoExit(false);
1073
+ $application->expects($this->once())
1074
+ ->method('doRun')
1075
+ ->willThrowException($exception);
1076
+
1077
+ $exitCode = $application->run(new ArrayInput([]), new NullOutput());
1078
+
1079
+ $this->assertSame(1, $exitCode, '->run() returns exit code 1 when exception code is 0');
1080
+ }
1081
+
1082
+ public function testRunDispatchesExitCodeOneForExceptionCodeZero()
1083
+ {
1084
+ $passedRightValue = false;
1085
+
1086
+ // We can assume here that some other test asserts that the event is dispatched at all
1087
+ $dispatcher = new EventDispatcher();
1088
+ $dispatcher->addListener('console.terminate', function (ConsoleTerminateEvent $event) use (&$passedRightValue) {
1089
+ $passedRightValue = (1 === $event->getExitCode());
1090
+ });
1091
+
1092
+ $application = new Application();
1093
+ $application->setDispatcher($dispatcher);
1094
+ $application->setAutoExit(false);
1095
+
1096
+ $application->register('test')->setCode(function (InputInterface $input, OutputInterface $output) {
1097
+ throw new \Exception();
1098
+ });
1099
+
1100
+ $tester = new ApplicationTester($application);
1101
+ $tester->run(['command' => 'test']);
1102
+
1103
+ $this->assertTrue($passedRightValue, '-> exit code 1 was passed in the console.terminate event');
1104
+ }
1105
+
1106
+ /**
1107
+ * @expectedException \LogicException
1108
+ * @expectedExceptionMessage An option with shortcut "e" already exists.
1109
+ */
1110
+ public function testAddingOptionWithDuplicateShortcut()
1111
+ {
1112
+ $dispatcher = new EventDispatcher();
1113
+ $application = new Application();
1114
+ $application->setAutoExit(false);
1115
+ $application->setCatchExceptions(false);
1116
+ $application->setDispatcher($dispatcher);
1117
+
1118
+ $application->getDefinition()->addOption(new InputOption('--env', '-e', InputOption::VALUE_REQUIRED, 'Environment'));
1119
+
1120
+ $application
1121
+ ->register('foo')
1122
+ ->setAliases(['f'])
1123
+ ->setDefinition([new InputOption('survey', 'e', InputOption::VALUE_REQUIRED, 'My option with a shortcut.')])
1124
+ ->setCode(function (InputInterface $input, OutputInterface $output) {})
1125
+ ;
1126
+
1127
+ $input = new ArrayInput(['command' => 'foo']);
1128
+ $output = new NullOutput();
1129
+
1130
+ $application->run($input, $output);
1131
+ }
1132
+
1133
+ /**
1134
+ * @expectedException \LogicException
1135
+ * @dataProvider getAddingAlreadySetDefinitionElementData
1136
+ */
1137
+ public function testAddingAlreadySetDefinitionElementData($def)
1138
+ {
1139
+ $application = new Application();
1140
+ $application->setAutoExit(false);
1141
+ $application->setCatchExceptions(false);
1142
+ $application
1143
+ ->register('foo')
1144
+ ->setDefinition([$def])
1145
+ ->setCode(function (InputInterface $input, OutputInterface $output) {})
1146
+ ;
1147
+
1148
+ $input = new ArrayInput(['command' => 'foo']);
1149
+ $output = new NullOutput();
1150
+ $application->run($input, $output);
1151
+ }
1152
+
1153
+ public function getAddingAlreadySetDefinitionElementData()
1154
+ {
1155
+ return [
1156
+ [new InputArgument('command', InputArgument::REQUIRED)],
1157
+ [new InputOption('quiet', '', InputOption::VALUE_NONE)],
1158
+ [new InputOption('query', 'q', InputOption::VALUE_NONE)],
1159
+ ];
1160
+ }
1161
+
1162
+ public function testGetDefaultHelperSetReturnsDefaultValues()
1163
+ {
1164
+ $application = new Application();
1165
+ $application->setAutoExit(false);
1166
+ $application->setCatchExceptions(false);
1167
+
1168
+ $helperSet = $application->getHelperSet();
1169
+
1170
+ $this->assertTrue($helperSet->has('formatter'));
1171
+ }
1172
+
1173
+ public function testAddingSingleHelperSetOverwritesDefaultValues()
1174
+ {
1175
+ $application = new Application();
1176
+ $application->setAutoExit(false);
1177
+ $application->setCatchExceptions(false);
1178
+
1179
+ $application->setHelperSet(new HelperSet([new FormatterHelper()]));
1180
+
1181
+ $helperSet = $application->getHelperSet();
1182
+
1183
+ $this->assertTrue($helperSet->has('formatter'));
1184
+
1185
+ // no other default helper set should be returned
1186
+ $this->assertFalse($helperSet->has('dialog'));
1187
+ $this->assertFalse($helperSet->has('progress'));
1188
+ }
1189
+
1190
+ public function testOverwritingDefaultHelperSetOverwritesDefaultValues()
1191
+ {
1192
+ $application = new CustomApplication();
1193
+ $application->setAutoExit(false);
1194
+ $application->setCatchExceptions(false);
1195
+
1196
+ $application->setHelperSet(new HelperSet([new FormatterHelper()]));
1197
+
1198
+ $helperSet = $application->getHelperSet();
1199
+
1200
+ $this->assertTrue($helperSet->has('formatter'));
1201
+
1202
+ // no other default helper set should be returned
1203
+ $this->assertFalse($helperSet->has('dialog'));
1204
+ $this->assertFalse($helperSet->has('progress'));
1205
+ }
1206
+
1207
+ public function testGetDefaultInputDefinitionReturnsDefaultValues()
1208
+ {
1209
+ $application = new Application();
1210
+ $application->setAutoExit(false);
1211
+ $application->setCatchExceptions(false);
1212
+
1213
+ $inputDefinition = $application->getDefinition();
1214
+
1215
+ $this->assertTrue($inputDefinition->hasArgument('command'));
1216
+
1217
+ $this->assertTrue($inputDefinition->hasOption('help'));
1218
+ $this->assertTrue($inputDefinition->hasOption('quiet'));
1219
+ $this->assertTrue($inputDefinition->hasOption('verbose'));
1220
+ $this->assertTrue($inputDefinition->hasOption('version'));
1221
+ $this->assertTrue($inputDefinition->hasOption('ansi'));
1222
+ $this->assertTrue($inputDefinition->hasOption('no-ansi'));
1223
+ $this->assertTrue($inputDefinition->hasOption('no-interaction'));
1224
+ }
1225
+
1226
+ public function testOverwritingDefaultInputDefinitionOverwritesDefaultValues()
1227
+ {
1228
+ $application = new CustomApplication();
1229
+ $application->setAutoExit(false);
1230
+ $application->setCatchExceptions(false);
1231
+
1232
+ $inputDefinition = $application->getDefinition();
1233
+
1234
+ // check whether the default arguments and options are not returned any more
1235
+ $this->assertFalse($inputDefinition->hasArgument('command'));
1236
+
1237
+ $this->assertFalse($inputDefinition->hasOption('help'));
1238
+ $this->assertFalse($inputDefinition->hasOption('quiet'));
1239
+ $this->assertFalse($inputDefinition->hasOption('verbose'));
1240
+ $this->assertFalse($inputDefinition->hasOption('version'));
1241
+ $this->assertFalse($inputDefinition->hasOption('ansi'));
1242
+ $this->assertFalse($inputDefinition->hasOption('no-ansi'));
1243
+ $this->assertFalse($inputDefinition->hasOption('no-interaction'));
1244
+
1245
+ $this->assertTrue($inputDefinition->hasOption('custom'));
1246
+ }
1247
+
1248
+ public function testSettingCustomInputDefinitionOverwritesDefaultValues()
1249
+ {
1250
+ $application = new Application();
1251
+ $application->setAutoExit(false);
1252
+ $application->setCatchExceptions(false);
1253
+
1254
+ $application->setDefinition(new InputDefinition([new InputOption('--custom', '-c', InputOption::VALUE_NONE, 'Set the custom input definition.')]));
1255
+
1256
+ $inputDefinition = $application->getDefinition();
1257
+
1258
+ // check whether the default arguments and options are not returned any more
1259
+ $this->assertFalse($inputDefinition->hasArgument('command'));
1260
+
1261
+ $this->assertFalse($inputDefinition->hasOption('help'));
1262
+ $this->assertFalse($inputDefinition->hasOption('quiet'));
1263
+ $this->assertFalse($inputDefinition->hasOption('verbose'));
1264
+ $this->assertFalse($inputDefinition->hasOption('version'));
1265
+ $this->assertFalse($inputDefinition->hasOption('ansi'));
1266
+ $this->assertFalse($inputDefinition->hasOption('no-ansi'));
1267
+ $this->assertFalse($inputDefinition->hasOption('no-interaction'));
1268
+
1269
+ $this->assertTrue($inputDefinition->hasOption('custom'));
1270
+ }
1271
+
1272
+ public function testRunWithDispatcher()
1273
+ {
1274
+ $application = new Application();
1275
+ $application->setAutoExit(false);
1276
+ $application->setDispatcher($this->getDispatcher());
1277
+
1278
+ $application->register('foo')->setCode(function (InputInterface $input, OutputInterface $output) {
1279
+ $output->write('foo.');
1280
+ });
1281
+
1282
+ $tester = new ApplicationTester($application);
1283
+ $tester->run(['command' => 'foo']);
1284
+ $this->assertEquals('before.foo.after.'.PHP_EOL, $tester->getDisplay());
1285
+ }
1286
+
1287
+ /**
1288
+ * @expectedException \LogicException
1289
+ * @expectedExceptionMessage error
1290
+ */
1291
+ public function testRunWithExceptionAndDispatcher()
1292
+ {
1293
+ $application = new Application();
1294
+ $application->setDispatcher($this->getDispatcher());
1295
+ $application->setAutoExit(false);
1296
+ $application->setCatchExceptions(false);
1297
+
1298
+ $application->register('foo')->setCode(function (InputInterface $input, OutputInterface $output) {
1299
+ throw new \RuntimeException('foo');
1300
+ });
1301
+
1302
+ $tester = new ApplicationTester($application);
1303
+ $tester->run(['command' => 'foo']);
1304
+ }
1305
+
1306
+ public function testRunDispatchesAllEventsWithException()
1307
+ {
1308
+ $application = new Application();
1309
+ $application->setDispatcher($this->getDispatcher());
1310
+ $application->setAutoExit(false);
1311
+
1312
+ $application->register('foo')->setCode(function (InputInterface $input, OutputInterface $output) {
1313
+ $output->write('foo.');
1314
+
1315
+ throw new \RuntimeException('foo');
1316
+ });
1317
+
1318
+ $tester = new ApplicationTester($application);
1319
+ $tester->run(['command' => 'foo']);
1320
+ $this->assertContains('before.foo.error.after.', $tester->getDisplay());
1321
+ }
1322
+
1323
+ public function testRunDispatchesAllEventsWithExceptionInListener()
1324
+ {
1325
+ $dispatcher = $this->getDispatcher();
1326
+ $dispatcher->addListener('console.command', function () {
1327
+ throw new \RuntimeException('foo');
1328
+ });
1329
+
1330
+ $application = new Application();
1331
+ $application->setDispatcher($dispatcher);
1332
+ $application->setAutoExit(false);
1333
+
1334
+ $application->register('foo')->setCode(function (InputInterface $input, OutputInterface $output) {
1335
+ $output->write('foo.');
1336
+ });
1337
+
1338
+ $tester = new ApplicationTester($application);
1339
+ $tester->run(['command' => 'foo']);
1340
+ $this->assertContains('before.error.after.', $tester->getDisplay());
1341
+ }
1342
+
1343
+ public function testRunWithError()
1344
+ {
1345
+ $application = new Application();
1346
+ $application->setAutoExit(false);
1347
+ $application->setCatchExceptions(false);
1348
+
1349
+ $application->register('dym')->setCode(function (InputInterface $input, OutputInterface $output) {
1350
+ $output->write('dym.');
1351
+
1352
+ throw new \Error('dymerr');
1353
+ });
1354
+
1355
+ $tester = new ApplicationTester($application);
1356
+
1357
+ try {
1358
+ $tester->run(['command' => 'dym']);
1359
+ $this->fail('Error expected.');
1360
+ } catch (\Error $e) {
1361
+ $this->assertSame('dymerr', $e->getMessage());
1362
+ }
1363
+ }
1364
+
1365
+ public function testRunAllowsErrorListenersToSilenceTheException()
1366
+ {
1367
+ $dispatcher = $this->getDispatcher();
1368
+ $dispatcher->addListener('console.error', function (ConsoleErrorEvent $event) {
1369
+ $event->getOutput()->write('silenced.');
1370
+
1371
+ $event->setExitCode(0);
1372
+ });
1373
+
1374
+ $dispatcher->addListener('console.command', function () {
1375
+ throw new \RuntimeException('foo');
1376
+ });
1377
+
1378
+ $application = new Application();
1379
+ $application->setDispatcher($dispatcher);
1380
+ $application->setAutoExit(false);
1381
+
1382
+ $application->register('foo')->setCode(function (InputInterface $input, OutputInterface $output) {
1383
+ $output->write('foo.');
1384
+ });
1385
+
1386
+ $tester = new ApplicationTester($application);
1387
+ $tester->run(['command' => 'foo']);
1388
+ $this->assertContains('before.error.silenced.after.', $tester->getDisplay());
1389
+ $this->assertEquals(ConsoleCommandEvent::RETURN_CODE_DISABLED, $tester->getStatusCode());
1390
+ }
1391
+
1392
+ public function testConsoleErrorEventIsTriggeredOnCommandNotFound()
1393
+ {
1394
+ $dispatcher = new EventDispatcher();
1395
+ $dispatcher->addListener('console.error', function (ConsoleErrorEvent $event) {
1396
+ $this->assertNull($event->getCommand());
1397
+ $this->assertInstanceOf(CommandNotFoundException::class, $event->getError());
1398
+ $event->getOutput()->write('silenced command not found');
1399
+ });
1400
+
1401
+ $application = new Application();
1402
+ $application->setDispatcher($dispatcher);
1403
+ $application->setAutoExit(false);
1404
+
1405
+ $tester = new ApplicationTester($application);
1406
+ $tester->run(['command' => 'unknown']);
1407
+ $this->assertContains('silenced command not found', $tester->getDisplay());
1408
+ $this->assertEquals(1, $tester->getStatusCode());
1409
+ }
1410
+
1411
+ public function testErrorIsRethrownIfNotHandledByConsoleErrorEvent()
1412
+ {
1413
+ $application = new Application();
1414
+ $application->setAutoExit(false);
1415
+ $application->setCatchExceptions(false);
1416
+ $application->setDispatcher(new EventDispatcher());
1417
+
1418
+ $application->register('dym')->setCode(function (InputInterface $input, OutputInterface $output) {
1419
+ new \UnknownClass();
1420
+ });
1421
+
1422
+ $tester = new ApplicationTester($application);
1423
+
1424
+ try {
1425
+ $tester->run(['command' => 'dym']);
1426
+ $this->fail('->run() should rethrow PHP errors if not handled via ConsoleErrorEvent.');
1427
+ } catch (\Error $e) {
1428
+ $this->assertSame($e->getMessage(), 'Class \'UnknownClass\' not found');
1429
+ }
1430
+ }
1431
+
1432
+ /**
1433
+ * @expectedException \LogicException
1434
+ * @expectedExceptionMessage error
1435
+ */
1436
+ public function testRunWithErrorAndDispatcher()
1437
+ {
1438
+ $application = new Application();
1439
+ $application->setDispatcher($this->getDispatcher());
1440
+ $application->setAutoExit(false);
1441
+ $application->setCatchExceptions(false);
1442
+
1443
+ $application->register('dym')->setCode(function (InputInterface $input, OutputInterface $output) {
1444
+ $output->write('dym.');
1445
+
1446
+ throw new \Error('dymerr');
1447
+ });
1448
+
1449
+ $tester = new ApplicationTester($application);
1450
+ $tester->run(['command' => 'dym']);
1451
+ $this->assertContains('before.dym.error.after.', $tester->getDisplay(), 'The PHP Error did not dispached events');
1452
+ }
1453
+
1454
+ public function testRunDispatchesAllEventsWithError()
1455
+ {
1456
+ $application = new Application();
1457
+ $application->setDispatcher($this->getDispatcher());
1458
+ $application->setAutoExit(false);
1459
+
1460
+ $application->register('dym')->setCode(function (InputInterface $input, OutputInterface $output) {
1461
+ $output->write('dym.');
1462
+
1463
+ throw new \Error('dymerr');
1464
+ });
1465
+
1466
+ $tester = new ApplicationTester($application);
1467
+ $tester->run(['command' => 'dym']);
1468
+ $this->assertContains('before.dym.error.after.', $tester->getDisplay(), 'The PHP Error did not dispached events');
1469
+ }
1470
+
1471
+ public function testRunWithErrorFailingStatusCode()
1472
+ {
1473
+ $application = new Application();
1474
+ $application->setDispatcher($this->getDispatcher());
1475
+ $application->setAutoExit(false);
1476
+
1477
+ $application->register('dus')->setCode(function (InputInterface $input, OutputInterface $output) {
1478
+ $output->write('dus.');
1479
+
1480
+ throw new \Error('duserr');
1481
+ });
1482
+
1483
+ $tester = new ApplicationTester($application);
1484
+ $tester->run(['command' => 'dus']);
1485
+ $this->assertSame(1, $tester->getStatusCode(), 'Status code should be 1');
1486
+ }
1487
+
1488
+ public function testRunWithDispatcherSkippingCommand()
1489
+ {
1490
+ $application = new Application();
1491
+ $application->setDispatcher($this->getDispatcher(true));
1492
+ $application->setAutoExit(false);
1493
+
1494
+ $application->register('foo')->setCode(function (InputInterface $input, OutputInterface $output) {
1495
+ $output->write('foo.');
1496
+ });
1497
+
1498
+ $tester = new ApplicationTester($application);
1499
+ $exitCode = $tester->run(['command' => 'foo']);
1500
+ $this->assertContains('before.after.', $tester->getDisplay());
1501
+ $this->assertEquals(ConsoleCommandEvent::RETURN_CODE_DISABLED, $exitCode);
1502
+ }
1503
+
1504
+ public function testRunWithDispatcherAccessingInputOptions()
1505
+ {
1506
+ $noInteractionValue = null;
1507
+ $quietValue = null;
1508
+
1509
+ $dispatcher = $this->getDispatcher();
1510
+ $dispatcher->addListener('console.command', function (ConsoleCommandEvent $event) use (&$noInteractionValue, &$quietValue) {
1511
+ $input = $event->getInput();
1512
+
1513
+ $noInteractionValue = $input->getOption('no-interaction');
1514
+ $quietValue = $input->getOption('quiet');
1515
+ });
1516
+
1517
+ $application = new Application();
1518
+ $application->setDispatcher($dispatcher);
1519
+ $application->setAutoExit(false);
1520
+
1521
+ $application->register('foo')->setCode(function (InputInterface $input, OutputInterface $output) {
1522
+ $output->write('foo.');
1523
+ });
1524
+
1525
+ $tester = new ApplicationTester($application);
1526
+ $tester->run(['command' => 'foo', '--no-interaction' => true]);
1527
+
1528
+ $this->assertTrue($noInteractionValue);
1529
+ $this->assertFalse($quietValue);
1530
+ }
1531
+
1532
+ public function testRunWithDispatcherAddingInputOptions()
1533
+ {
1534
+ $extraValue = null;
1535
+
1536
+ $dispatcher = $this->getDispatcher();
1537
+ $dispatcher->addListener('console.command', function (ConsoleCommandEvent $event) use (&$extraValue) {
1538
+ $definition = $event->getCommand()->getDefinition();
1539
+ $input = $event->getInput();
1540
+
1541
+ $definition->addOption(new InputOption('extra', null, InputOption::VALUE_REQUIRED));
1542
+ $input->bind($definition);
1543
+
1544
+ $extraValue = $input->getOption('extra');
1545
+ });
1546
+
1547
+ $application = new Application();
1548
+ $application->setDispatcher($dispatcher);
1549
+ $application->setAutoExit(false);
1550
+
1551
+ $application->register('foo')->setCode(function (InputInterface $input, OutputInterface $output) {
1552
+ $output->write('foo.');
1553
+ });
1554
+
1555
+ $tester = new ApplicationTester($application);
1556
+ $tester->run(['command' => 'foo', '--extra' => 'some test value']);
1557
+
1558
+ $this->assertEquals('some test value', $extraValue);
1559
+ }
1560
+
1561
+ public function testSetRunCustomDefaultCommand()
1562
+ {
1563
+ $command = new \FooCommand();
1564
+
1565
+ $application = new Application();
1566
+ $application->setAutoExit(false);
1567
+ $application->add($command);
1568
+ $application->setDefaultCommand($command->getName());
1569
+
1570
+ $tester = new ApplicationTester($application);
1571
+ $tester->run([], ['interactive' => false]);
1572
+ $this->assertEquals('called'.PHP_EOL, $tester->getDisplay(), 'Application runs the default set command if different from \'list\' command');
1573
+
1574
+ $application = new CustomDefaultCommandApplication();
1575
+ $application->setAutoExit(false);
1576
+
1577
+ $tester = new ApplicationTester($application);
1578
+ $tester->run([], ['interactive' => false]);
1579
+
1580
+ $this->assertEquals('called'.PHP_EOL, $tester->getDisplay(), 'Application runs the default set command if different from \'list\' command');
1581
+ }
1582
+
1583
+ public function testSetRunCustomDefaultCommandWithOption()
1584
+ {
1585
+ $command = new \FooOptCommand();
1586
+
1587
+ $application = new Application();
1588
+ $application->setAutoExit(false);
1589
+ $application->add($command);
1590
+ $application->setDefaultCommand($command->getName());
1591
+
1592
+ $tester = new ApplicationTester($application);
1593
+ $tester->run(['--fooopt' => 'opt'], ['interactive' => false]);
1594
+
1595
+ $this->assertEquals('called'.PHP_EOL.'opt'.PHP_EOL, $tester->getDisplay(), 'Application runs the default set command if different from \'list\' command');
1596
+ }
1597
+
1598
+ public function testSetRunCustomSingleCommand()
1599
+ {
1600
+ $command = new \FooCommand();
1601
+
1602
+ $application = new Application();
1603
+ $application->setAutoExit(false);
1604
+ $application->add($command);
1605
+ $application->setDefaultCommand($command->getName(), true);
1606
+
1607
+ $tester = new ApplicationTester($application);
1608
+
1609
+ $tester->run([]);
1610
+ $this->assertContains('called', $tester->getDisplay());
1611
+
1612
+ $tester->run(['--help' => true]);
1613
+ $this->assertContains('The foo:bar command', $tester->getDisplay());
1614
+ }
1615
+
1616
+ /**
1617
+ * @requires function posix_isatty
1618
+ */
1619
+ public function testCanCheckIfTerminalIsInteractive()
1620
+ {
1621
+ $application = new CustomDefaultCommandApplication();
1622
+ $application->setAutoExit(false);
1623
+
1624
+ $tester = new ApplicationTester($application);
1625
+ $tester->run(['command' => 'help']);
1626
+
1627
+ $this->assertFalse($tester->getInput()->hasParameterOption(['--no-interaction', '-n']));
1628
+
1629
+ $inputStream = $tester->getInput()->getStream();
1630
+ $this->assertEquals($tester->getInput()->isInteractive(), @posix_isatty($inputStream));
1631
+ }
1632
+
1633
+ public function testRunLazyCommandService()
1634
+ {
1635
+ $container = new ContainerBuilder();
1636
+ $container->addCompilerPass(new AddConsoleCommandPass());
1637
+ $container
1638
+ ->register('lazy-command', LazyCommand::class)
1639
+ ->addTag('console.command', ['command' => 'lazy:command'])
1640
+ ->addTag('console.command', ['command' => 'lazy:alias'])
1641
+ ->addTag('console.command', ['command' => 'lazy:alias2']);
1642
+ $container->compile();
1643
+
1644
+ $application = new Application();
1645
+ $application->setCommandLoader($container->get('console.command_loader'));
1646
+ $application->setAutoExit(false);
1647
+
1648
+ $tester = new ApplicationTester($application);
1649
+
1650
+ $tester->run(['command' => 'lazy:command']);
1651
+ $this->assertSame("lazy-command called\n", $tester->getDisplay(true));
1652
+
1653
+ $tester->run(['command' => 'lazy:alias']);
1654
+ $this->assertSame("lazy-command called\n", $tester->getDisplay(true));
1655
+
1656
+ $tester->run(['command' => 'lazy:alias2']);
1657
+ $this->assertSame("lazy-command called\n", $tester->getDisplay(true));
1658
+
1659
+ $command = $application->get('lazy:command');
1660
+ $this->assertSame(['lazy:alias', 'lazy:alias2'], $command->getAliases());
1661
+ }
1662
+
1663
+ /**
1664
+ * @expectedException \Symfony\Component\Console\Exception\CommandNotFoundException
1665
+ */
1666
+ public function testGetDisabledLazyCommand()
1667
+ {
1668
+ $application = new Application();
1669
+ $application->setCommandLoader(new FactoryCommandLoader(['disabled' => function () { return new DisabledCommand(); }]));
1670
+ $application->get('disabled');
1671
+ }
1672
+
1673
+ public function testHasReturnsFalseForDisabledLazyCommand()
1674
+ {
1675
+ $application = new Application();
1676
+ $application->setCommandLoader(new FactoryCommandLoader(['disabled' => function () { return new DisabledCommand(); }]));
1677
+ $this->assertFalse($application->has('disabled'));
1678
+ }
1679
+
1680
+ public function testAllExcludesDisabledLazyCommand()
1681
+ {
1682
+ $application = new Application();
1683
+ $application->setCommandLoader(new FactoryCommandLoader(['disabled' => function () { return new DisabledCommand(); }]));
1684
+ $this->assertArrayNotHasKey('disabled', $application->all());
1685
+ }
1686
+
1687
+ protected function getDispatcher($skipCommand = false)
1688
+ {
1689
+ $dispatcher = new EventDispatcher();
1690
+ $dispatcher->addListener('console.command', function (ConsoleCommandEvent $event) use ($skipCommand) {
1691
+ $event->getOutput()->write('before.');
1692
+
1693
+ if ($skipCommand) {
1694
+ $event->disableCommand();
1695
+ }
1696
+ });
1697
+ $dispatcher->addListener('console.terminate', function (ConsoleTerminateEvent $event) use ($skipCommand) {
1698
+ $event->getOutput()->writeln('after.');
1699
+
1700
+ if (!$skipCommand) {
1701
+ $event->setExitCode(ConsoleCommandEvent::RETURN_CODE_DISABLED);
1702
+ }
1703
+ });
1704
+ $dispatcher->addListener('console.error', function (ConsoleErrorEvent $event) {
1705
+ $event->getOutput()->write('error.');
1706
+
1707
+ $event->setError(new \LogicException('error.', $event->getExitCode(), $event->getError()));
1708
+ });
1709
+
1710
+ return $dispatcher;
1711
+ }
1712
+
1713
+ public function testErrorIsRethrownIfNotHandledByConsoleErrorEventWithCatchingEnabled()
1714
+ {
1715
+ $application = new Application();
1716
+ $application->setAutoExit(false);
1717
+ $application->setDispatcher(new EventDispatcher());
1718
+
1719
+ $application->register('dym')->setCode(function (InputInterface $input, OutputInterface $output) {
1720
+ new \UnknownClass();
1721
+ });
1722
+
1723
+ $tester = new ApplicationTester($application);
1724
+
1725
+ try {
1726
+ $tester->run(['command' => 'dym']);
1727
+ $this->fail('->run() should rethrow PHP errors if not handled via ConsoleErrorEvent.');
1728
+ } catch (\Error $e) {
1729
+ $this->assertSame($e->getMessage(), 'Class \'UnknownClass\' not found');
1730
+ }
1731
+ }
1732
+
1733
+ /**
1734
+ * @expectedException \RuntimeException
1735
+ * @expectedExceptionMessage foo
1736
+ */
1737
+ public function testThrowingErrorListener()
1738
+ {
1739
+ $dispatcher = $this->getDispatcher();
1740
+ $dispatcher->addListener('console.error', function (ConsoleErrorEvent $event) {
1741
+ throw new \RuntimeException('foo');
1742
+ });
1743
+
1744
+ $dispatcher->addListener('console.command', function () {
1745
+ throw new \RuntimeException('bar');
1746
+ });
1747
+
1748
+ $application = new Application();
1749
+ $application->setDispatcher($dispatcher);
1750
+ $application->setAutoExit(false);
1751
+ $application->setCatchExceptions(false);
1752
+
1753
+ $application->register('foo')->setCode(function (InputInterface $input, OutputInterface $output) {
1754
+ $output->write('foo.');
1755
+ });
1756
+
1757
+ $tester = new ApplicationTester($application);
1758
+ $tester->run(['command' => 'foo']);
1759
+ }
1760
+ }
1761
+
1762
+ class CustomApplication extends Application
1763
+ {
1764
+ /**
1765
+ * Overwrites the default input definition.
1766
+ *
1767
+ * @return InputDefinition An InputDefinition instance
1768
+ */
1769
+ protected function getDefaultInputDefinition()
1770
+ {
1771
+ return new InputDefinition([new InputOption('--custom', '-c', InputOption::VALUE_NONE, 'Set the custom input definition.')]);
1772
+ }
1773
+
1774
+ /**
1775
+ * Gets the default helper set with the helpers that should always be available.
1776
+ *
1777
+ * @return HelperSet A HelperSet instance
1778
+ */
1779
+ protected function getDefaultHelperSet()
1780
+ {
1781
+ return new HelperSet([new FormatterHelper()]);
1782
+ }
1783
+ }
1784
+
1785
+ class CustomDefaultCommandApplication extends Application
1786
+ {
1787
+ /**
1788
+ * Overwrites the constructor in order to set a different default command.
1789
+ */
1790
+ public function __construct()
1791
+ {
1792
+ parent::__construct();
1793
+
1794
+ $command = new \FooCommand();
1795
+ $this->add($command);
1796
+ $this->setDefaultCommand($command->getName());
1797
+ }
1798
+ }
1799
+
1800
+ class LazyCommand extends Command
1801
+ {
1802
+ public function execute(InputInterface $input, OutputInterface $output)
1803
+ {
1804
+ $output->writeln('lazy-command called');
1805
+ }
1806
+ }
1807
+
1808
+ class DisabledCommand extends Command
1809
+ {
1810
+ public function isEnabled()
1811
+ {
1812
+ return false;
1813
+ }
1814
+ }