busser-behave 0.1.3

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 (418) hide show
  1. checksums.yaml +7 -0
  2. data/.cane +0 -0
  3. data/.gitignore +17 -0
  4. data/.tailor +4 -0
  5. data/.travis.yml +11 -0
  6. data/CHANGELOG.md +3 -0
  7. data/Gemfile +3 -0
  8. data/LICENSE +15 -0
  9. data/README.md +41 -0
  10. data/Rakefile +68 -0
  11. data/busser-behave.gemspec +30 -0
  12. data/features/plugin_install_command.feature +11 -0
  13. data/features/plugin_list_command.feature +8 -0
  14. data/features/support/env.rb +13 -0
  15. data/features/test_command.feature +31 -0
  16. data/lib/busser/behave/version.rb +26 -0
  17. data/lib/busser/runner_plugin/behave.rb +37 -0
  18. data/vendor/behave/CHANGES.rst +483 -0
  19. data/vendor/behave/LICENSE +23 -0
  20. data/vendor/behave/MANIFEST.in +37 -0
  21. data/vendor/behave/PROJECT_INFO.rst +21 -0
  22. data/vendor/behave/README.rst +112 -0
  23. data/vendor/behave/VERSION.txt +1 -0
  24. data/vendor/behave/behave.ini +22 -0
  25. data/vendor/behave/behave/__init__.py +30 -0
  26. data/vendor/behave/behave/__main__.py +187 -0
  27. data/vendor/behave/behave/_stepimport.py +185 -0
  28. data/vendor/behave/behave/_types.py +134 -0
  29. data/vendor/behave/behave/api/__init__.py +7 -0
  30. data/vendor/behave/behave/api/async_step.py +283 -0
  31. data/vendor/behave/behave/capture.py +227 -0
  32. data/vendor/behave/behave/compat/__init__.py +5 -0
  33. data/vendor/behave/behave/compat/collections.py +20 -0
  34. data/vendor/behave/behave/configuration.py +788 -0
  35. data/vendor/behave/behave/contrib/__init__.py +0 -0
  36. data/vendor/behave/behave/contrib/scenario_autoretry.py +73 -0
  37. data/vendor/behave/behave/formatter/__init__.py +12 -0
  38. data/vendor/behave/behave/formatter/_builtins.py +39 -0
  39. data/vendor/behave/behave/formatter/_registry.py +135 -0
  40. data/vendor/behave/behave/formatter/ansi_escapes.py +91 -0
  41. data/vendor/behave/behave/formatter/base.py +200 -0
  42. data/vendor/behave/behave/formatter/formatters.py +57 -0
  43. data/vendor/behave/behave/formatter/json.py +253 -0
  44. data/vendor/behave/behave/formatter/null.py +12 -0
  45. data/vendor/behave/behave/formatter/plain.py +158 -0
  46. data/vendor/behave/behave/formatter/pretty.py +351 -0
  47. data/vendor/behave/behave/formatter/progress.py +287 -0
  48. data/vendor/behave/behave/formatter/rerun.py +114 -0
  49. data/vendor/behave/behave/formatter/sphinx_steps.py +372 -0
  50. data/vendor/behave/behave/formatter/sphinx_util.py +118 -0
  51. data/vendor/behave/behave/formatter/steps.py +497 -0
  52. data/vendor/behave/behave/formatter/tags.py +178 -0
  53. data/vendor/behave/behave/i18n.py +614 -0
  54. data/vendor/behave/behave/importer.py +102 -0
  55. data/vendor/behave/behave/json_parser.py +264 -0
  56. data/vendor/behave/behave/log_capture.py +233 -0
  57. data/vendor/behave/behave/matchers.py +402 -0
  58. data/vendor/behave/behave/model.py +1737 -0
  59. data/vendor/behave/behave/model_core.py +416 -0
  60. data/vendor/behave/behave/model_describe.py +105 -0
  61. data/vendor/behave/behave/parser.py +615 -0
  62. data/vendor/behave/behave/reporter/__init__.py +0 -0
  63. data/vendor/behave/behave/reporter/base.py +45 -0
  64. data/vendor/behave/behave/reporter/junit.py +473 -0
  65. data/vendor/behave/behave/reporter/summary.py +94 -0
  66. data/vendor/behave/behave/runner.py +753 -0
  67. data/vendor/behave/behave/runner_util.py +417 -0
  68. data/vendor/behave/behave/step_registry.py +112 -0
  69. data/vendor/behave/behave/tag_expression.py +111 -0
  70. data/vendor/behave/behave/tag_matcher.py +465 -0
  71. data/vendor/behave/behave/textutil.py +137 -0
  72. data/vendor/behave/behave/userdata.py +130 -0
  73. data/vendor/behave/behave4cmd0/__all_steps__.py +12 -0
  74. data/vendor/behave/behave4cmd0/__init__.py +5 -0
  75. data/vendor/behave/behave4cmd0/__setup.py +11 -0
  76. data/vendor/behave/behave4cmd0/command_shell.py +216 -0
  77. data/vendor/behave/behave4cmd0/command_shell_proc.py +256 -0
  78. data/vendor/behave/behave4cmd0/command_steps.py +532 -0
  79. data/vendor/behave/behave4cmd0/command_util.py +147 -0
  80. data/vendor/behave/behave4cmd0/failing_steps.py +49 -0
  81. data/vendor/behave/behave4cmd0/log/__init__.py +1 -0
  82. data/vendor/behave/behave4cmd0/log/steps.py +395 -0
  83. data/vendor/behave/behave4cmd0/note_steps.py +29 -0
  84. data/vendor/behave/behave4cmd0/passing_steps.py +36 -0
  85. data/vendor/behave/behave4cmd0/pathutil.py +146 -0
  86. data/vendor/behave/behave4cmd0/setup_command_shell.py +24 -0
  87. data/vendor/behave/behave4cmd0/textutil.py +304 -0
  88. data/vendor/behave/bin/behave +44 -0
  89. data/vendor/behave/bin/behave.cmd +10 -0
  90. data/vendor/behave/bin/behave.junit_filter.py +85 -0
  91. data/vendor/behave/bin/behave.step_durations.py +163 -0
  92. data/vendor/behave/bin/behave2cucumber_json.py +63 -0
  93. data/vendor/behave/bin/behave_cmd.py +44 -0
  94. data/vendor/behave/bin/convert_i18n_yaml.py +77 -0
  95. data/vendor/behave/bin/explore_platform_encoding.py +24 -0
  96. data/vendor/behave/bin/i18n.yml +621 -0
  97. data/vendor/behave/bin/invoke +8 -0
  98. data/vendor/behave/bin/invoke.cmd +9 -0
  99. data/vendor/behave/bin/json.format.py +167 -0
  100. data/vendor/behave/bin/jsonschema_validate.py +122 -0
  101. data/vendor/behave/bin/make_localpi.py +279 -0
  102. data/vendor/behave/bin/project_bootstrap.sh +30 -0
  103. data/vendor/behave/bin/toxcmd.py +270 -0
  104. data/vendor/behave/bin/toxcmd3.py +270 -0
  105. data/vendor/behave/conftest.py +27 -0
  106. data/vendor/behave/docs/Makefile +154 -0
  107. data/vendor/behave/docs/_static/agogo.css +501 -0
  108. data/vendor/behave/docs/_static/behave_logo.png +0 -0
  109. data/vendor/behave/docs/_static/behave_logo1.png +0 -0
  110. data/vendor/behave/docs/_static/behave_logo2.png +0 -0
  111. data/vendor/behave/docs/_static/behave_logo3.png +0 -0
  112. data/vendor/behave/docs/_themes/LICENSE +45 -0
  113. data/vendor/behave/docs/_themes/kr/layout.html +17 -0
  114. data/vendor/behave/docs/_themes/kr/relations.html +19 -0
  115. data/vendor/behave/docs/_themes/kr/static/flasky.css_t +480 -0
  116. data/vendor/behave/docs/_themes/kr/static/small_flask.css +90 -0
  117. data/vendor/behave/docs/_themes/kr/theme.conf +7 -0
  118. data/vendor/behave/docs/_themes/kr_small/layout.html +22 -0
  119. data/vendor/behave/docs/_themes/kr_small/static/flasky.css_t +287 -0
  120. data/vendor/behave/docs/_themes/kr_small/theme.conf +10 -0
  121. data/vendor/behave/docs/api.rst +408 -0
  122. data/vendor/behave/docs/appendix.rst +19 -0
  123. data/vendor/behave/docs/behave.rst +640 -0
  124. data/vendor/behave/docs/behave.rst-template +86 -0
  125. data/vendor/behave/docs/behave_ecosystem.rst +81 -0
  126. data/vendor/behave/docs/comparison.rst +85 -0
  127. data/vendor/behave/docs/conf.py +293 -0
  128. data/vendor/behave/docs/context_attributes.rst +66 -0
  129. data/vendor/behave/docs/django.rst +192 -0
  130. data/vendor/behave/docs/formatters.rst +61 -0
  131. data/vendor/behave/docs/gherkin.rst +673 -0
  132. data/vendor/behave/docs/index.rst +57 -0
  133. data/vendor/behave/docs/install.rst +60 -0
  134. data/vendor/behave/docs/more_info.rst +184 -0
  135. data/vendor/behave/docs/new_and_noteworthy.rst +18 -0
  136. data/vendor/behave/docs/new_and_noteworthy_v1.2.4.rst +11 -0
  137. data/vendor/behave/docs/new_and_noteworthy_v1.2.5.rst +814 -0
  138. data/vendor/behave/docs/new_and_noteworthy_v1.2.6.rst +255 -0
  139. data/vendor/behave/docs/parse_builtin_types.rst +59 -0
  140. data/vendor/behave/docs/philosophy.rst +235 -0
  141. data/vendor/behave/docs/regular_expressions.rst +71 -0
  142. data/vendor/behave/docs/related.rst +14 -0
  143. data/vendor/behave/docs/test_domains.rst +62 -0
  144. data/vendor/behave/docs/tutorial.rst +636 -0
  145. data/vendor/behave/docs/update_behave_rst.py +100 -0
  146. data/vendor/behave/etc/json/behave.json-schema +172 -0
  147. data/vendor/behave/etc/junit.xml/behave_junit.xsd +103 -0
  148. data/vendor/behave/etc/junit.xml/junit-4.xsd +92 -0
  149. data/vendor/behave/examples/async_step/README.txt +8 -0
  150. data/vendor/behave/examples/async_step/behave.ini +14 -0
  151. data/vendor/behave/examples/async_step/features/async_dispatch.feature +8 -0
  152. data/vendor/behave/examples/async_step/features/async_run.feature +6 -0
  153. data/vendor/behave/examples/async_step/features/environment.py +28 -0
  154. data/vendor/behave/examples/async_step/features/steps/async_dispatch_steps.py +26 -0
  155. data/vendor/behave/examples/async_step/features/steps/async_steps34.py +10 -0
  156. data/vendor/behave/examples/async_step/features/steps/async_steps35.py +10 -0
  157. data/vendor/behave/examples/async_step/testrun_example.async_dispatch.txt +11 -0
  158. data/vendor/behave/examples/async_step/testrun_example.async_run.txt +9 -0
  159. data/vendor/behave/examples/env_vars/README.rst +26 -0
  160. data/vendor/behave/examples/env_vars/behave.ini +15 -0
  161. data/vendor/behave/examples/env_vars/behave_run.output_example.txt +12 -0
  162. data/vendor/behave/examples/env_vars/features/env_var.feature +6 -0
  163. data/vendor/behave/examples/env_vars/features/steps/env_var_steps.py +38 -0
  164. data/vendor/behave/features/README.txt +12 -0
  165. data/vendor/behave/features/background.feature +392 -0
  166. data/vendor/behave/features/capture_stderr.feature +172 -0
  167. data/vendor/behave/features/capture_stdout.feature +125 -0
  168. data/vendor/behave/features/cmdline.lang_list.feature +33 -0
  169. data/vendor/behave/features/configuration.default_paths.feature +116 -0
  170. data/vendor/behave/features/context.global_params.feature +35 -0
  171. data/vendor/behave/features/context.local_params.feature +17 -0
  172. data/vendor/behave/features/directory_layout.advanced.feature +147 -0
  173. data/vendor/behave/features/directory_layout.basic.feature +75 -0
  174. data/vendor/behave/features/directory_layout.basic2.feature +87 -0
  175. data/vendor/behave/features/environment.py +53 -0
  176. data/vendor/behave/features/exploratory_testing.with_table.feature +141 -0
  177. data/vendor/behave/features/feature.description.feature +0 -0
  178. data/vendor/behave/features/feature.exclude_from_run.feature +96 -0
  179. data/vendor/behave/features/formatter.help.feature +30 -0
  180. data/vendor/behave/features/formatter.json.feature +420 -0
  181. data/vendor/behave/features/formatter.progress3.feature +235 -0
  182. data/vendor/behave/features/formatter.rerun.feature +296 -0
  183. data/vendor/behave/features/formatter.steps.feature +181 -0
  184. data/vendor/behave/features/formatter.steps_catalog.feature +100 -0
  185. data/vendor/behave/features/formatter.steps_doc.feature +140 -0
  186. data/vendor/behave/features/formatter.steps_usage.feature +404 -0
  187. data/vendor/behave/features/formatter.tags.feature +134 -0
  188. data/vendor/behave/features/formatter.tags_location.feature +183 -0
  189. data/vendor/behave/features/formatter.user_defined.feature +196 -0
  190. data/vendor/behave/features/i18n.unicode_problems.feature +445 -0
  191. data/vendor/behave/features/logcapture.clear_handlers.feature +114 -0
  192. data/vendor/behave/features/logcapture.feature +188 -0
  193. data/vendor/behave/features/logcapture.filter.feature +130 -0
  194. data/vendor/behave/features/logging.no_capture.feature +99 -0
  195. data/vendor/behave/features/logging.setup_format.feature +157 -0
  196. data/vendor/behave/features/logging.setup_level.feature +168 -0
  197. data/vendor/behave/features/logging.setup_with_configfile.feature +137 -0
  198. data/vendor/behave/features/parser.background.sad_cases.feature +129 -0
  199. data/vendor/behave/features/parser.feature.sad_cases.feature +144 -0
  200. data/vendor/behave/features/runner.abort_by_user.feature +305 -0
  201. data/vendor/behave/features/runner.continue_after_failed_step.feature +136 -0
  202. data/vendor/behave/features/runner.default_format.feature +175 -0
  203. data/vendor/behave/features/runner.dry_run.feature +184 -0
  204. data/vendor/behave/features/runner.feature_listfile.feature +223 -0
  205. data/vendor/behave/features/runner.hook_errors.feature +382 -0
  206. data/vendor/behave/features/runner.multiple_formatters.feature +285 -0
  207. data/vendor/behave/features/runner.scenario_autoretry.feature +131 -0
  208. data/vendor/behave/features/runner.select_files_by_regexp.example.feature +71 -0
  209. data/vendor/behave/features/runner.select_files_by_regexp.feature +84 -0
  210. data/vendor/behave/features/runner.select_scenarios_by_file_location.feature +403 -0
  211. data/vendor/behave/features/runner.select_scenarios_by_name.feature +289 -0
  212. data/vendor/behave/features/runner.select_scenarios_by_tag.feature +225 -0
  213. data/vendor/behave/features/runner.stop_after_failure.feature +122 -0
  214. data/vendor/behave/features/runner.tag_logic.feature +67 -0
  215. data/vendor/behave/features/runner.unknown_formatter.feature +23 -0
  216. data/vendor/behave/features/runner.use_stage_implementations.feature +126 -0
  217. data/vendor/behave/features/scenario.description.feature +171 -0
  218. data/vendor/behave/features/scenario.exclude_from_run.feature +217 -0
  219. data/vendor/behave/features/scenario_outline.basics.feature +100 -0
  220. data/vendor/behave/features/scenario_outline.improved.feature +177 -0
  221. data/vendor/behave/features/scenario_outline.name_annotation.feature +157 -0
  222. data/vendor/behave/features/scenario_outline.parametrized.feature +401 -0
  223. data/vendor/behave/features/scenario_outline.tagged_examples.feature +118 -0
  224. data/vendor/behave/features/step.async_steps.feature +225 -0
  225. data/vendor/behave/features/step.duplicated_step.feature +106 -0
  226. data/vendor/behave/features/step.execute_steps.feature +59 -0
  227. data/vendor/behave/features/step.execute_steps.with_table.feature +65 -0
  228. data/vendor/behave/features/step.import_other_step_module.feature +103 -0
  229. data/vendor/behave/features/step.pending_steps.feature +128 -0
  230. data/vendor/behave/features/step.undefined_steps.feature +307 -0
  231. data/vendor/behave/features/step.use_step_library.feature +44 -0
  232. data/vendor/behave/features/step_dialect.generic_steps.feature +189 -0
  233. data/vendor/behave/features/step_dialect.given_when_then.feature +89 -0
  234. data/vendor/behave/features/step_param.builtin_types.with_float.feature +239 -0
  235. data/vendor/behave/features/step_param.builtin_types.with_integer.feature +305 -0
  236. data/vendor/behave/features/step_param.custom_types.feature +134 -0
  237. data/vendor/behave/features/steps/behave_active_tags_steps.py +86 -0
  238. data/vendor/behave/features/steps/behave_context_steps.py +67 -0
  239. data/vendor/behave/features/steps/behave_model_tag_logic_steps.py +105 -0
  240. data/vendor/behave/features/steps/behave_model_util.py +105 -0
  241. data/vendor/behave/features/steps/behave_select_files_steps.py +83 -0
  242. data/vendor/behave/features/steps/behave_tag_expression_steps.py +166 -0
  243. data/vendor/behave/features/steps/behave_undefined_steps.py +101 -0
  244. data/vendor/behave/features/steps/use_steplib_behave4cmd.py +12 -0
  245. data/vendor/behave/features/summary.undefined_steps.feature +114 -0
  246. data/vendor/behave/features/tags.active_tags.feature +385 -0
  247. data/vendor/behave/features/tags.default_tags.feature +104 -0
  248. data/vendor/behave/features/tags.tag_expression.feature +105 -0
  249. data/vendor/behave/features/userdata.feature +331 -0
  250. data/vendor/behave/invoke.yaml +21 -0
  251. data/vendor/behave/issue.features/README.txt +17 -0
  252. data/vendor/behave/issue.features/environment.py +97 -0
  253. data/vendor/behave/issue.features/issue0030.feature +21 -0
  254. data/vendor/behave/issue.features/issue0031.feature +16 -0
  255. data/vendor/behave/issue.features/issue0032.feature +28 -0
  256. data/vendor/behave/issue.features/issue0035.feature +74 -0
  257. data/vendor/behave/issue.features/issue0040.feature +154 -0
  258. data/vendor/behave/issue.features/issue0041.feature +135 -0
  259. data/vendor/behave/issue.features/issue0042.feature +230 -0
  260. data/vendor/behave/issue.features/issue0044.feature +51 -0
  261. data/vendor/behave/issue.features/issue0046.feature +77 -0
  262. data/vendor/behave/issue.features/issue0052.feature +66 -0
  263. data/vendor/behave/issue.features/issue0059.feature +29 -0
  264. data/vendor/behave/issue.features/issue0063.feature +102 -0
  265. data/vendor/behave/issue.features/issue0064.feature +97 -0
  266. data/vendor/behave/issue.features/issue0065.feature +18 -0
  267. data/vendor/behave/issue.features/issue0066.feature +80 -0
  268. data/vendor/behave/issue.features/issue0067.feature +90 -0
  269. data/vendor/behave/issue.features/issue0069.feature +64 -0
  270. data/vendor/behave/issue.features/issue0072.feature +32 -0
  271. data/vendor/behave/issue.features/issue0073.feature +228 -0
  272. data/vendor/behave/issue.features/issue0075.feature +18 -0
  273. data/vendor/behave/issue.features/issue0077.feature +89 -0
  274. data/vendor/behave/issue.features/issue0080.feature +49 -0
  275. data/vendor/behave/issue.features/issue0081.feature +138 -0
  276. data/vendor/behave/issue.features/issue0083.feature +69 -0
  277. data/vendor/behave/issue.features/issue0084.feature +69 -0
  278. data/vendor/behave/issue.features/issue0085.feature +119 -0
  279. data/vendor/behave/issue.features/issue0092.feature +66 -0
  280. data/vendor/behave/issue.features/issue0096.feature +173 -0
  281. data/vendor/behave/issue.features/issue0099.feature +130 -0
  282. data/vendor/behave/issue.features/issue0109.feature +60 -0
  283. data/vendor/behave/issue.features/issue0111.feature +53 -0
  284. data/vendor/behave/issue.features/issue0112.feature +64 -0
  285. data/vendor/behave/issue.features/issue0114.feature +118 -0
  286. data/vendor/behave/issue.features/issue0116.feature +71 -0
  287. data/vendor/behave/issue.features/issue0125.feature +49 -0
  288. data/vendor/behave/issue.features/issue0127.feature +64 -0
  289. data/vendor/behave/issue.features/issue0139.feature +67 -0
  290. data/vendor/behave/issue.features/issue0142.feature +37 -0
  291. data/vendor/behave/issue.features/issue0143.feature +54 -0
  292. data/vendor/behave/issue.features/issue0145.feature +63 -0
  293. data/vendor/behave/issue.features/issue0148.feature +105 -0
  294. data/vendor/behave/issue.features/issue0152.feature +52 -0
  295. data/vendor/behave/issue.features/issue0159.feature +74 -0
  296. data/vendor/behave/issue.features/issue0162.feature +86 -0
  297. data/vendor/behave/issue.features/issue0171.feature +16 -0
  298. data/vendor/behave/issue.features/issue0172.feature +51 -0
  299. data/vendor/behave/issue.features/issue0175.feature +91 -0
  300. data/vendor/behave/issue.features/issue0177.feature +40 -0
  301. data/vendor/behave/issue.features/issue0181.feature +36 -0
  302. data/vendor/behave/issue.features/issue0184.feature +144 -0
  303. data/vendor/behave/issue.features/issue0186.feature +12 -0
  304. data/vendor/behave/issue.features/issue0188.feature +60 -0
  305. data/vendor/behave/issue.features/issue0191.feature +178 -0
  306. data/vendor/behave/issue.features/issue0194.feature +215 -0
  307. data/vendor/behave/issue.features/issue0197.feature +11 -0
  308. data/vendor/behave/issue.features/issue0216.feature +129 -0
  309. data/vendor/behave/issue.features/issue0226.feature +51 -0
  310. data/vendor/behave/issue.features/issue0228.feature +41 -0
  311. data/vendor/behave/issue.features/issue0230.feature +46 -0
  312. data/vendor/behave/issue.features/issue0231.feature +77 -0
  313. data/vendor/behave/issue.features/issue0238.feature +52 -0
  314. data/vendor/behave/issue.features/issue0251.feature +15 -0
  315. data/vendor/behave/issue.features/issue0280.feature +118 -0
  316. data/vendor/behave/issue.features/issue0288.feature +95 -0
  317. data/vendor/behave/issue.features/issue0300.feature +49 -0
  318. data/vendor/behave/issue.features/issue0302.feature +91 -0
  319. data/vendor/behave/issue.features/issue0309.feature +52 -0
  320. data/vendor/behave/issue.features/issue0330.feature +124 -0
  321. data/vendor/behave/issue.features/issue0349.feature +9 -0
  322. data/vendor/behave/issue.features/issue0361.feature +79 -0
  323. data/vendor/behave/issue.features/issue0383.feature +76 -0
  324. data/vendor/behave/issue.features/issue0384.feature +103 -0
  325. data/vendor/behave/issue.features/issue0385.feature +109 -0
  326. data/vendor/behave/issue.features/issue0424.feature +66 -0
  327. data/vendor/behave/issue.features/issue0446.feature +116 -0
  328. data/vendor/behave/issue.features/issue0449.feature +42 -0
  329. data/vendor/behave/issue.features/issue0453.feature +42 -0
  330. data/vendor/behave/issue.features/issue0457.feature +65 -0
  331. data/vendor/behave/issue.features/issue0462.feature +38 -0
  332. data/vendor/behave/issue.features/issue0476.feature +39 -0
  333. data/vendor/behave/issue.features/issue0487.feature +92 -0
  334. data/vendor/behave/issue.features/issue0506.feature +77 -0
  335. data/vendor/behave/issue.features/issue0510.feature +51 -0
  336. data/vendor/behave/issue.features/requirements.txt +12 -0
  337. data/vendor/behave/issue.features/steps/ansi_steps.py +20 -0
  338. data/vendor/behave/issue.features/steps/behave_hooks_steps.py +10 -0
  339. data/vendor/behave/issue.features/steps/use_steplib_behave4cmd.py +13 -0
  340. data/vendor/behave/more.features/formatter.json.validate_output.feature +37 -0
  341. data/vendor/behave/more.features/steps/tutorial_steps.py +16 -0
  342. data/vendor/behave/more.features/steps/use_steplib_behave4cmd.py +7 -0
  343. data/vendor/behave/more.features/tutorial.feature +6 -0
  344. data/vendor/behave/py.requirements/README.txt +5 -0
  345. data/vendor/behave/py.requirements/all.txt +16 -0
  346. data/vendor/behave/py.requirements/basic.txt +21 -0
  347. data/vendor/behave/py.requirements/develop.txt +28 -0
  348. data/vendor/behave/py.requirements/docs.txt +6 -0
  349. data/vendor/behave/py.requirements/json.txt +7 -0
  350. data/vendor/behave/py.requirements/more_py26.txt +8 -0
  351. data/vendor/behave/py.requirements/testing.txt +10 -0
  352. data/vendor/behave/pytest.ini +24 -0
  353. data/vendor/behave/setup.cfg +29 -0
  354. data/vendor/behave/setup.py +118 -0
  355. data/vendor/behave/setuptools_behave.py +130 -0
  356. data/vendor/behave/tasks/__behave.py +45 -0
  357. data/vendor/behave/tasks/__init__.py +55 -0
  358. data/vendor/behave/tasks/__main__.py +70 -0
  359. data/vendor/behave/tasks/_setup.py +135 -0
  360. data/vendor/behave/tasks/_vendor/README.rst +35 -0
  361. data/vendor/behave/tasks/_vendor/invoke.zip +0 -0
  362. data/vendor/behave/tasks/_vendor/path.py +1725 -0
  363. data/vendor/behave/tasks/_vendor/pathlib.py +1280 -0
  364. data/vendor/behave/tasks/_vendor/six.py +868 -0
  365. data/vendor/behave/tasks/clean.py +246 -0
  366. data/vendor/behave/tasks/docs.py +97 -0
  367. data/vendor/behave/tasks/requirements.txt +17 -0
  368. data/vendor/behave/tasks/test.py +192 -0
  369. data/vendor/behave/test/__init__.py +0 -0
  370. data/vendor/behave/test/_importer_candidate.py +3 -0
  371. data/vendor/behave/test/reporters/__init__.py +0 -0
  372. data/vendor/behave/test/reporters/test_summary.py +240 -0
  373. data/vendor/behave/test/test_ansi_escapes.py +73 -0
  374. data/vendor/behave/test/test_configuration.py +172 -0
  375. data/vendor/behave/test/test_formatter.py +265 -0
  376. data/vendor/behave/test/test_formatter_progress.py +39 -0
  377. data/vendor/behave/test/test_formatter_rerun.py +97 -0
  378. data/vendor/behave/test/test_formatter_tags.py +57 -0
  379. data/vendor/behave/test/test_importer.py +151 -0
  380. data/vendor/behave/test/test_log_capture.py +29 -0
  381. data/vendor/behave/test/test_matchers.py +236 -0
  382. data/vendor/behave/test/test_model.py +871 -0
  383. data/vendor/behave/test/test_parser.py +1590 -0
  384. data/vendor/behave/test/test_runner.py +1074 -0
  385. data/vendor/behave/test/test_step_registry.py +96 -0
  386. data/vendor/behave/test/test_tag_expression.py +506 -0
  387. data/vendor/behave/test/test_tag_expression2.py +462 -0
  388. data/vendor/behave/test/test_tag_matcher.py +729 -0
  389. data/vendor/behave/test/test_userdata.py +184 -0
  390. data/vendor/behave/tests/README.txt +12 -0
  391. data/vendor/behave/tests/__init__.py +0 -0
  392. data/vendor/behave/tests/api/__ONLY_PY34_or_newer.txt +0 -0
  393. data/vendor/behave/tests/api/__init__.py +0 -0
  394. data/vendor/behave/tests/api/_test_async_step34.py +130 -0
  395. data/vendor/behave/tests/api/_test_async_step35.py +75 -0
  396. data/vendor/behave/tests/api/test_async_step.py +18 -0
  397. data/vendor/behave/tests/api/testing_support.py +94 -0
  398. data/vendor/behave/tests/api/testing_support_async.py +21 -0
  399. data/vendor/behave/tests/issues/test_issue0336.py +66 -0
  400. data/vendor/behave/tests/issues/test_issue0449.py +55 -0
  401. data/vendor/behave/tests/issues/test_issue0453.py +62 -0
  402. data/vendor/behave/tests/issues/test_issue0458.py +54 -0
  403. data/vendor/behave/tests/issues/test_issue0495.py +65 -0
  404. data/vendor/behave/tests/unit/__init__.py +0 -0
  405. data/vendor/behave/tests/unit/test_behave4cmd_command_shell_proc.py +135 -0
  406. data/vendor/behave/tests/unit/test_capture.py +280 -0
  407. data/vendor/behave/tests/unit/test_model_core.py +56 -0
  408. data/vendor/behave/tests/unit/test_textutil.py +267 -0
  409. data/vendor/behave/tools/test-features/background.feature +9 -0
  410. data/vendor/behave/tools/test-features/environment.py +8 -0
  411. data/vendor/behave/tools/test-features/french.feature +11 -0
  412. data/vendor/behave/tools/test-features/outline.feature +39 -0
  413. data/vendor/behave/tools/test-features/parse.feature +10 -0
  414. data/vendor/behave/tools/test-features/step-data.feature +60 -0
  415. data/vendor/behave/tools/test-features/steps/steps.py +120 -0
  416. data/vendor/behave/tools/test-features/tags.feature +18 -0
  417. data/vendor/behave/tox.ini +159 -0
  418. metadata +562 -0
@@ -0,0 +1,137 @@
1
+ # -*- coding: utf-8 -*-
2
+ """
3
+ Provides some utility functions related to text processing.
4
+ """
5
+
6
+ from __future__ import absolute_import, print_function
7
+ import codecs
8
+ import os
9
+ import sys
10
+ import six
11
+
12
+ # -----------------------------------------------------------------------------
13
+ # CONSTANTS:
14
+ # -----------------------------------------------------------------------------
15
+ # DEFAULT STRATEGY: For error handling when unicode-strings are converted.
16
+ BEHAVE_UNICODE_ERRORS = os.environ.get("BEHAVE_UNICODE_ERRORS", "replace")
17
+
18
+
19
+ # -----------------------------------------------------------------------------
20
+ # FUNCTIONS:
21
+ # -----------------------------------------------------------------------------
22
+ def make_indentation(indent_size, part=u" "):
23
+ """Creates an indentation prefix string of the given size."""
24
+ return indent_size * part
25
+
26
+
27
+ def indent(text, prefix): # pylint: disable=redefined-outer-name
28
+ """Indent text or a number of text lines (with newline).
29
+
30
+ :param lines: Text lines to indent (as string or list of strings).
31
+ :param prefix: Line prefix to use (as string).
32
+ :return: Indented text (as unicode string).
33
+ """
34
+ lines = text
35
+ newline = u""
36
+ if isinstance(text, six.string_types):
37
+ lines = text.splitlines(True)
38
+ elif lines and not lines[0].endswith("\n"):
39
+ # -- TEXT LINES: Without trailing new-line.
40
+ newline = u"\n"
41
+ # MAYBE: return newline.join([prefix + six.text_type(line, errors="replace")
42
+ return newline.join([prefix + six.text_type(line) for line in lines])
43
+
44
+
45
+ def compute_words_maxsize(words):
46
+ """Compute the maximum word size from a list of words (or strings).
47
+
48
+ :param words: List of words (or strings) to use.
49
+ :return: Maximum size of all words.
50
+ """
51
+ max_size = 0
52
+ for word in words:
53
+ if len(word) > max_size:
54
+ max_size = len(word)
55
+ return max_size
56
+
57
+
58
+ def is_ascii_encoding(encoding):
59
+ """Checks if a given encoding is ASCII."""
60
+ try:
61
+ return codecs.lookup(encoding).name == "ascii"
62
+ except LookupError:
63
+ return False
64
+
65
+ def select_best_encoding(outstream=None):
66
+ """Select the *best* encoding for an output stream/file.
67
+ Uses:
68
+ * ``outstream.encoding`` (if available)
69
+ * ``sys.getdefaultencoding()`` (otherwise)
70
+
71
+ Note: If encoding=ascii, uses encoding=UTF-8
72
+
73
+ :param outstream: Output stream to select encoding for (or: stdout)
74
+ :return: Unicode encoding name (as string) to use (for output stream).
75
+ """
76
+ outstream = outstream or sys.stdout
77
+ encoding = getattr(outstream, "encoding", None) or sys.getdefaultencoding()
78
+ if is_ascii_encoding(encoding):
79
+ # -- REQUIRED-FOR: Python2
80
+ # MAYBE: locale.getpreferredencoding()
81
+ return "utf-8"
82
+ return encoding
83
+
84
+
85
+ def text(value, encoding=None, errors=None):
86
+ """Convert into a unicode string.
87
+
88
+ :param value: Value to convert into a unicode string (bytes, str, object).
89
+ :return: Unicode string
90
+
91
+ SYNDROMES:
92
+ * Convert object to unicode: Has only __str__() method (Python2)
93
+ * Windows: exception-traceback and encoding=unicode-escape are BAD
94
+ * exception-traceback w/ weird encoding or bytes
95
+
96
+ ALTERNATIVES:
97
+ * Use traceback2 for Python2: Provides unicode tracebacks
98
+ """
99
+ if encoding is None:
100
+ encoding = select_best_encoding()
101
+ if errors is None:
102
+ errors = BEHAVE_UNICODE_ERRORS
103
+
104
+ if isinstance(value, six.text_type):
105
+ # -- CASE: ALREADY UNICODE (pass-through, efficiency):
106
+ return value
107
+ elif isinstance(value, six.binary_type):
108
+ # -- CASE: bytes/binary_type (Python2: str)
109
+ try:
110
+ return six.text_type(value, encoding, errors)
111
+ except UnicodeError:
112
+ # -- BEST-EFFORT:
113
+ return six.u(value)
114
+ # elif isinstance(value, bytes):
115
+ # # -- MAYBE: filename, path, etc.
116
+ # try:
117
+ # return value.decode(sys.getfilesystemencoding())
118
+ # except UnicodeError:
119
+ # return value.decode("utf-8", "replace") # MAYBE: "ignore"
120
+ else:
121
+ # -- CASE: CONVERT/CAST OBJECT TO TEXT/STRING
122
+ try:
123
+ if six.PY2:
124
+ try:
125
+ text2 = six.text_type(value)
126
+ except UnicodeError as e:
127
+ # -- NOTE: value has no sane unicode conversion
128
+ # encoding=unicode-escape helps recover from errors.
129
+ data = str(value)
130
+ text2 = six.text_type(data, "unicode-escape", "replace")
131
+ else:
132
+ # PY3: Cast to string/unicode
133
+ text2 = six.text_type(value)
134
+ except UnicodeError as e:
135
+ # Python3: multi-arg call supports only string-like object: str, bytes
136
+ text2 = six.text_type(e)
137
+ return text2
@@ -0,0 +1,130 @@
1
+ # -*- coding: UTF-8 -*-
2
+ """
3
+ Functionality to support user-specific configuration data (userdata).
4
+ """
5
+
6
+ from __future__ import absolute_import
7
+ from behave._types import Unknown
8
+
9
+
10
+ # -----------------------------------------------------------------------------
11
+ # FUNCTIONS:
12
+ # -----------------------------------------------------------------------------
13
+ def parse_bool(text):
14
+ """Parses a boolean text and converts it into boolean value (if possible).
15
+ Supported truth string values:
16
+
17
+ * true: "true", "yes", "on", "1"
18
+ * false: "false", "no", "off", "0"
19
+
20
+ :raises: ValueError, if text is invalid
21
+ """
22
+ from distutils.util import strtobool
23
+ return bool(strtobool(text))
24
+
25
+
26
+ def parse_user_define(text):
27
+ """Parse "{name}={value}" text and return parts as tuple.
28
+ Used for command-line definitions, like "... -D name=value".
29
+
30
+ SUPPORTED SCHEMA:
31
+
32
+ * "{name}={value}"
33
+ * "{name}" (boolean flag; value="true")
34
+ * '"{name}={value}"' (double-quoted name-value pair)
35
+ * "'{name}={value}'" (single-quoted name-value pair)
36
+ * '{name}="{value}"' (double-quoted value)
37
+ * "{name}='{value}'" (single-quoted value)
38
+ * " {name} = {value} " (whitespace padded)
39
+
40
+ .. note:: Leading/trailing Quotes are stripped.
41
+
42
+ :param text: Text to parse (as string).
43
+ :return: (name, value) pair as tuple.
44
+ """
45
+ text = text.strip()
46
+ if "=" in text:
47
+ text = unqote(text)
48
+ name, value = text.split("=", 1)
49
+ name = name.strip()
50
+ value = unqote(value.strip())
51
+ else:
52
+ # -- ASSUMPTION: Boolean definition (as flag)
53
+ name = text
54
+ value = "true"
55
+ return (name, value)
56
+
57
+
58
+ def unqote(text):
59
+ """Strip pair of leading and trailing quotes from text."""
60
+ # -- QUOTED: Strip single-quote or double-quote pair.
61
+ if ((text.startswith('"') and text.endswith('"')) or
62
+ (text.startswith("'") and text.endswith("'"))):
63
+ text = text[1:-1]
64
+ return text
65
+
66
+ # -----------------------------------------------------------------------------
67
+ # CLASSES:
68
+ # -----------------------------------------------------------------------------
69
+ class UserData(dict):
70
+ """Dictionary-like user-data with some additional features:
71
+
72
+ * type-converter methods, similar to configparser.ConfigParser.getint()
73
+
74
+ """
75
+
76
+ def getas(self, convert, name, default=None, valuetype=None):
77
+ """Converts the value of user-data parameter from a string into a
78
+ specific value type.
79
+
80
+ :param convert: Converter function to use (string to value-type).
81
+ :param name: Variable name to use.
82
+ :param default: Default value, used if parameter is not found.
83
+ :param valuetype: Value type(s), needed if convert != valuetype()
84
+ :return: Converted textual value (type: valuetype)
85
+ :return: Default value, if parameter is unknown.
86
+ :raises ValueError: If type conversion fails.
87
+ """
88
+ if valuetype is None:
89
+ # -- ASSUME: Converter function is the type constructor.
90
+ valuetype = convert
91
+
92
+ value = self.get(name, Unknown)
93
+ if value is Unknown:
94
+ return default
95
+ elif isinstance(value, valuetype):
96
+ # -- PRESERVE: Pre-converted value if type matches.
97
+ return value
98
+ else:
99
+ # -- CASE: Textual value (expected)
100
+ # Raise ValueError if parse/conversion fails.
101
+ assert callable(convert)
102
+ return convert(value)
103
+
104
+ def getint(self, name, default=0):
105
+ """Convert parameter value (as string) into a integer value.
106
+ :return: Parameter value as integer number (on success).
107
+ :raises: ValueError, if type conversion fails.
108
+ """
109
+ return self.getas(int, name, default)
110
+
111
+ def getfloat(self, name, default=0.0):
112
+ """Convert parameter value (as string) into a float value.
113
+ :return: Parameter value as float number (on success).
114
+ :raises: ValueError, if type conversion fails.
115
+ """
116
+ return self.getas(float, name, default)
117
+
118
+ def getbool(self, name, default=False):
119
+ """Converts user-data string-value into boolean value (if possible).
120
+ Supported truth string values:
121
+
122
+ * true: "true", "yes", "on", "1"
123
+ * false: "false", "no", "off", "0"
124
+
125
+ :param name: Parameter name (as string).
126
+ :param default: Default value, if parameter is unknown (=False).
127
+ :return: Boolean value of parameter
128
+ :raises: ValueError, if type conversion fails.
129
+ """
130
+ return self.getas(parse_bool, name, default, valuetype=bool)
@@ -0,0 +1,12 @@
1
+ # -*- coding: utf-8 -*-
2
+ """
3
+ Import all step definitions of this step-library.
4
+ Step definitions are automatically registered in "behave.step_registry".
5
+ """
6
+
7
+ from __future__ import absolute_import
8
+
9
+ # -- IMPORT STEP-LIBRARY: behave4cmd0
10
+ import behave4cmd0.command_steps
11
+ import behave4cmd0.note_steps
12
+ import behave4cmd0.log.steps
@@ -0,0 +1,5 @@
1
+ # -*- coding: utf-8 -*-
2
+ """
3
+ Predecessor of behave4cmd library.
4
+ Currently used to provide self-tests for behave.
5
+ """
@@ -0,0 +1,11 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ from __future__ import absolute_import
4
+ import os.path
5
+
6
+ # -----------------------------------------------------------------------------
7
+ # CONSTANTS:
8
+ # -----------------------------------------------------------------------------
9
+ HERE = os.path.dirname(__file__)
10
+ TOP = os.path.join(HERE, "..")
11
+ TOPA = os.path.abspath(TOP)
@@ -0,0 +1,216 @@
1
+ #!/usr/bin/env python
2
+ # -*- coding: utf-8 -*-
3
+ """
4
+ Provide a behave shell to simplify creation of feature files
5
+ and running features, etc.
6
+
7
+ context.command_result = behave_shell.behave(cmdline, cwd=context.workdir)
8
+ behave_shell.create_scenario(scenario_text, cwd=context.workdir)
9
+ behave_shell.create_step_definition(context.text, cwd=context.workdir)
10
+ context.command_result = behave_shell.run_feature_with_formatter(
11
+ context.features[0], formatter=formatter, cwd=context.workdir)
12
+
13
+ """
14
+
15
+ from __future__ import absolute_import, print_function, with_statement
16
+ from behave4cmd0.__setup import TOP
17
+ from behave.textutil import text as _text
18
+ import os.path
19
+ import six
20
+ import subprocess
21
+ import sys
22
+ import shlex
23
+ if six.PY2:
24
+ import codecs
25
+
26
+
27
+ # HERE = os.path.dirname(__file__)
28
+ # TOP = os.path.join(HERE, "..")
29
+
30
+ # -----------------------------------------------------------------------------
31
+ # CLASSES:
32
+ # -----------------------------------------------------------------------------
33
+ class CommandResult(object):
34
+ """
35
+ ValueObject to store the results of a subprocess command call.
36
+ """
37
+ def __init__(self, **kwargs):
38
+ self.command = kwargs.pop("command", None)
39
+ self.returncode = kwargs.pop("returncode", 0)
40
+ self.stdout = kwargs.pop("stdout", "")
41
+ self.stderr = kwargs.pop("stderr", "")
42
+ self._output = None
43
+ if kwargs:
44
+ names = ", ".join(kwargs.keys())
45
+ raise ValueError("Unexpected: %s" % names)
46
+
47
+ @property
48
+ def output(self):
49
+ if self._output is None:
50
+ output = self.stdout
51
+ if self.stderr:
52
+ if self.stdout:
53
+ output += "\n"
54
+ output += self.stderr
55
+ self._output = output
56
+ return self._output
57
+
58
+ @property
59
+ def failed(self):
60
+ return self.returncode != 0
61
+
62
+ def clear(self):
63
+ self.command = None
64
+ self.returncode = 0
65
+ self.stdout = ""
66
+ self.stderr = ""
67
+ self._output = None
68
+
69
+
70
+ class Command(object):
71
+ """
72
+ Helper class to run commands as subprocess,
73
+ collect their output and subprocess returncode.
74
+ """
75
+ DEBUG = False
76
+ COMMAND_MAP = {
77
+ "behave": os.path.normpath("{0}/bin/behave".format(TOP))
78
+ }
79
+ PREPROCESSOR_MAP = {}
80
+ POSTPROCESSOR_MAP = {}
81
+ USE_SHELL = sys.platform.startswith("win")
82
+
83
+ @staticmethod
84
+ def preprocess_command(preprocessors, cmdargs, command=None, cwd="."):
85
+ if not os.path.isdir(cwd):
86
+ return cmdargs
87
+ elif not command:
88
+ command = " ".join(cmdargs)
89
+
90
+ for preprocess in preprocessors:
91
+ cmdargs = preprocess(command, cmdargs, cwd)
92
+ return cmdargs
93
+
94
+ @staticmethod
95
+ def postprocess_command(postprocessors, command_result):
96
+ for postprocess in postprocessors:
97
+ command_result = postprocess(command_result)
98
+ return command_result
99
+
100
+ @classmethod
101
+ def run(cls, command, cwd=".", **kwargs):
102
+ """
103
+ Make a subprocess call, collect its output and returncode.
104
+ Returns CommandResult instance as ValueObject.
105
+ """
106
+ assert isinstance(command, six.string_types)
107
+ command_result = CommandResult()
108
+ command_result.command = command
109
+ use_shell = cls.USE_SHELL
110
+ if "shell" in kwargs:
111
+ use_shell = kwargs.pop("shell")
112
+
113
+ # -- BUILD COMMAND ARGS:
114
+ if six.PY2 and isinstance(command, six.text_type):
115
+ # -- PREPARE-FOR: shlex.split()
116
+ # In PY2, shlex.split() requires bytes string (non-unicode).
117
+ # In PY3, shlex.split() accepts unicode string.
118
+ command = codecs.encode(command, "utf-8")
119
+ cmdargs = shlex.split(command)
120
+
121
+ # -- TRANSFORM COMMAND (optional)
122
+ command0 = cmdargs[0]
123
+ real_command = cls.COMMAND_MAP.get(command0, None)
124
+ if real_command:
125
+ cmdargs0 = real_command.split()
126
+ cmdargs = cmdargs0 + cmdargs[1:]
127
+ preprocessors = cls.PREPROCESSOR_MAP.get(command0)
128
+ if preprocessors:
129
+ cmdargs = cls.preprocess_command(preprocessors, cmdargs, command, cwd)
130
+
131
+
132
+ # -- RUN COMMAND:
133
+ try:
134
+ process = subprocess.Popen(cmdargs,
135
+ stdout=subprocess.PIPE,
136
+ stderr=subprocess.PIPE,
137
+ universal_newlines=True,
138
+ shell=use_shell,
139
+ cwd=cwd, **kwargs)
140
+ out, err = process.communicate()
141
+ if six.PY2: # py3: we get unicode strings, py2 not
142
+ # default_encoding = "UTF-8"
143
+ out = _text(out, process.stdout.encoding)
144
+ err = _text(err, process.stderr.encoding)
145
+ process.poll()
146
+ assert process.returncode is not None
147
+ command_result.stdout = out
148
+ command_result.stderr = err
149
+ command_result.returncode = process.returncode
150
+ if cls.DEBUG:
151
+ print("shell.cwd={0}".format(kwargs.get("cwd", None)))
152
+ print("shell.command: {0}".format(" ".join(cmdargs)))
153
+ print("shell.command.output:\n{0};".format(command_result.output))
154
+ except OSError as e:
155
+ command_result.stderr = u"OSError: %s" % e
156
+ command_result.returncode = e.errno
157
+ assert e.errno != 0
158
+
159
+ postprocessors = cls.POSTPROCESSOR_MAP.get(command0)
160
+ if postprocessors:
161
+ command_result = cls.postprocess_command(postprocessors, command_result)
162
+ return command_result
163
+
164
+
165
+ # -----------------------------------------------------------------------------
166
+ # PREPROCESSOR:
167
+ # -----------------------------------------------------------------------------
168
+ def path_glob(command, cmdargs, cwd="."):
169
+ import glob
170
+ if not glob.has_magic(command):
171
+ return cmdargs
172
+
173
+ assert os.path.isdir(cwd)
174
+ try:
175
+ current_cwd = os.getcwd()
176
+ os.chdir(cwd)
177
+ new_cmdargs = []
178
+ for cmdarg in cmdargs:
179
+ if not glob.has_magic(cmdarg):
180
+ new_cmdargs.append(cmdarg)
181
+ continue
182
+
183
+ more_args = glob.glob(cmdarg)
184
+ if more_args:
185
+ new_cmdargs.extend(more_args)
186
+ else:
187
+ # -- BAD-CASE: Require at least one match.
188
+ # Otherwise, restore original arg.
189
+ new_cmdargs.append(cmdarg)
190
+
191
+ cmdargs = new_cmdargs
192
+ finally:
193
+ os.chdir(current_cwd)
194
+ return cmdargs
195
+
196
+ # -----------------------------------------------------------------------------
197
+ # FUNCTIONS:
198
+ # -----------------------------------------------------------------------------
199
+ def run(command, cwd=".", **kwargs):
200
+ return Command.run(command, cwd=cwd, **kwargs)
201
+
202
+ def behave(cmdline, cwd=".", **kwargs):
203
+ """
204
+ Run behave as subprocess command and return process/shell instance
205
+ with results (collected output, returncode).
206
+ """
207
+ assert isinstance(cmdline, six.string_types)
208
+ return run("behave " + cmdline, cwd=cwd, **kwargs)
209
+
210
+ # -----------------------------------------------------------------------------
211
+ # TEST MAIN:
212
+ # -----------------------------------------------------------------------------
213
+ if __name__ == "__main__":
214
+ command = " ".join(sys.argv[1:])
215
+ output = Command.run(sys.argv[1:])
216
+ print("command: {0}\n{1}\n".format(command, output))