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,114 @@
1
+ # -*- coding: utf-8 -*-
2
+ """
3
+ Provides a formatter that simplifies to rerun the failing scenarios
4
+ of the last test run. It writes a text file with the file locations of
5
+ the failing scenarios, like:
6
+
7
+ # -- file:rerun.features
8
+ # RERUN: Failing scenarios during last test run.
9
+ features/alice.feature:10
10
+ features/alice.feature:42
11
+ features/bob.feature:67
12
+
13
+ To rerun the failing scenarios, use:
14
+
15
+ behave @rerun_failing.features
16
+
17
+ Normally, you put the RerunFormatter into the behave configuration file:
18
+
19
+ # -- file:behave.ini
20
+ [behave]
21
+ format = rerun
22
+ outfiles = rerun_failing.features
23
+ """
24
+
25
+ from __future__ import absolute_import
26
+ from datetime import datetime
27
+ from os.path import relpath
28
+ import os
29
+ from behave.formatter.base import Formatter
30
+ from behave.model_core import Status
31
+
32
+
33
+ # -----------------------------------------------------------------------------
34
+ # CLASS: RerunFormatter
35
+ # -----------------------------------------------------------------------------
36
+ class RerunFormatter(Formatter):
37
+ """
38
+ Provides formatter class that emits a summary which scenarios failed
39
+ during the last test run. This output can be used to rerun the tests
40
+ with the failed scenarios.
41
+ """
42
+ name = "rerun"
43
+ description = "Emits scenario file locations of failing scenarios"
44
+
45
+ show_timestamp = False
46
+ show_failed_scenarios_descriptions = False
47
+
48
+ def __init__(self, stream_opener, config):
49
+ super(RerunFormatter, self).__init__(stream_opener, config)
50
+ self.failed_scenarios = []
51
+ self.current_feature = None
52
+
53
+ def reset(self):
54
+ self.failed_scenarios = []
55
+ self.current_feature = None
56
+
57
+ # -- FORMATTER API:
58
+ def feature(self, feature):
59
+ self.current_feature = feature
60
+
61
+ def eof(self):
62
+ """Called at end of a feature."""
63
+ if self.current_feature and self.current_feature.status == Status.failed:
64
+ # -- COLLECT SCENARIO FAILURES:
65
+ for scenario in self.current_feature.walk_scenarios():
66
+ if scenario.status == Status.failed:
67
+ self.failed_scenarios.append(scenario)
68
+
69
+ # -- RESET:
70
+ self.current_feature = None
71
+ assert self.current_feature is None
72
+
73
+ def close(self):
74
+ """Called at end of test run."""
75
+ stream_name = self.stream_opener.name
76
+ if self.failed_scenarios:
77
+ # -- ENSURE: Output stream is open.
78
+ self.stream = self.open()
79
+ self.report_scenario_failures()
80
+ elif stream_name and os.path.exists(stream_name):
81
+ # -- ON SUCCESS: Remove last rerun file with its failures.
82
+ os.remove(self.stream_opener.name)
83
+
84
+ # -- FINALLY:
85
+ self.close_stream()
86
+
87
+ # -- SPECIFIC-API:
88
+ def report_scenario_failures(self):
89
+ assert self.failed_scenarios
90
+ # -- SECTION: Banner
91
+ message = u"# -- RERUN: %d failing scenarios during last test run.\n"
92
+ self.stream.write(message % len(self.failed_scenarios))
93
+ if self.show_timestamp:
94
+ now = datetime.now().replace(microsecond=0)
95
+ self.stream.write("# NOW: %s\n"% now.isoformat(" "))
96
+
97
+ # -- SECTION: Textual summary in comments.
98
+ if self.show_failed_scenarios_descriptions:
99
+ current_feature = None
100
+ for index, scenario in enumerate(self.failed_scenarios):
101
+ if current_feature != scenario.filename:
102
+ if current_feature is not None:
103
+ self.stream.write(u"#\n")
104
+ current_feature = scenario.filename
105
+ short_filename = relpath(scenario.filename, os.getcwd())
106
+ self.stream.write(u"# %s\n" % short_filename)
107
+ self.stream.write(u"# %4d: %s\n" % \
108
+ (scenario.line, scenario.name))
109
+ self.stream.write("\n")
110
+
111
+ # -- SECTION: Scenario file locations, ala: "alice.feature:10"
112
+ for scenario in self.failed_scenarios:
113
+ self.stream.write(u"%s\n" % scenario.location)
114
+ self.stream.write("\n")
@@ -0,0 +1,372 @@
1
+ # -*- coding: utf-8 -*-
2
+ """
3
+ Provides a formatter that generates Sphinx-based documentation
4
+ of available step definitions (step implementations).
5
+
6
+ TODO:
7
+ * Post-processor for step docstrings.
8
+ * Solution for requires: table, text
9
+ * i18n keywords
10
+
11
+ .. seealso::
12
+ http://sphinx-doc.org/
13
+
14
+ .. note:: REQUIRES docutils
15
+ :mod:`docutils` are needed to generate step-label for step references.
16
+ """
17
+
18
+ from __future__ import absolute_import, print_function
19
+ from operator import attrgetter
20
+ import inspect
21
+ import os.path
22
+ import sys
23
+ from behave.formatter.steps import AbstractStepsFormatter
24
+ from behave.formatter import sphinx_util
25
+ from behave.model import Table
26
+ try:
27
+ # -- NEEDED FOR: step-labels (and step-refs)
28
+ from docutils.nodes import fully_normalize_name
29
+ has_docutils = True
30
+ except ImportError:
31
+ has_docutils = False
32
+
33
+
34
+ # -----------------------------------------------------------------------------
35
+ # HELPER CLASS:
36
+ # -----------------------------------------------------------------------------
37
+ class StepsModule(object):
38
+ """
39
+ Value object to keep track of step definitions that belong to same module.
40
+ """
41
+
42
+ def __init__(self, module_name, step_definitions=None):
43
+ self.module_name = module_name
44
+ self.step_definitions = step_definitions or []
45
+ self._name = None
46
+ self._filename = None
47
+
48
+
49
+ @property
50
+ def name(self):
51
+ if self._name is None:
52
+ # -- DISCOVER ON DEMAND: From step definitions (module).
53
+ # REQUIRED: To discover complete canonical module name.
54
+ module = self.module
55
+ if module:
56
+ # -- USED-BY: Imported step libraries.
57
+ module_name = self.module.__name__
58
+ else:
59
+ # -- USED-BY: features/steps/*.py (without __init__.py)
60
+ module_name = self.module_name
61
+ self._name = module_name
62
+ return self._name
63
+
64
+ @property
65
+ def filename(self):
66
+ if not self._filename:
67
+ if self.step_definitions:
68
+ filename = inspect.getfile(self.step_definitions[0].func)
69
+ self._filename = os.path.relpath(filename)
70
+ return self._filename
71
+
72
+ @property
73
+ def module(self):
74
+ if self.step_definitions:
75
+ return inspect.getmodule(self.step_definitions[0].func)
76
+ return sys.modules.get(self.module_name)
77
+
78
+ @property
79
+ def module_doc(self):
80
+ module = self.module
81
+ if module:
82
+ return inspect.getdoc(module)
83
+ return None
84
+
85
+ def append(self, step_definition):
86
+ self.step_definitions.append(step_definition)
87
+
88
+
89
+ # -----------------------------------------------------------------------------
90
+ # CLASS: SphinxStepsDocumentGenerator
91
+ # -----------------------------------------------------------------------------
92
+ class SphinxStepsDocumentGenerator(object):
93
+ """
94
+ Provides document generator class that generates Sphinx-based
95
+ documentation for step definitions. The primary purpose is to:
96
+
97
+ * help the step-library provider/writer
98
+ * simplify self-documentation of step-libraries
99
+
100
+ EXAMPLE:
101
+ step_definitions = ... # Collect from step_registry
102
+ doc_generator = SphinxStepsDocumentGenerator(step_definitions, "output")
103
+ doc_generator.write_docs()
104
+
105
+ .. seealso:: http://sphinx-doc.org/
106
+ """
107
+ default_step_definition_doc = """\
108
+ .. todo::
109
+ Step definition description is missing.
110
+ """
111
+ shows_step_module_info = True
112
+ shows_step_module_overview = True
113
+ make_step_index_entries = True
114
+ make_step_labels = has_docutils
115
+
116
+ document_separator = "# -- DOCUMENT-END " + "-" * 60
117
+ step_document_prefix = "step_module."
118
+ step_heading_prefix = "**Step:** "
119
+
120
+ def __init__(self, step_definitions, destdir=None, stream=None):
121
+ self.step_definitions = step_definitions
122
+ self.destdir = destdir
123
+ self.stream = stream
124
+ self.document = None
125
+
126
+ @property
127
+ def stdout_mode(self):
128
+ """
129
+ Indicates that output towards stdout should be used.
130
+ """
131
+ return self.stream is not None
132
+
133
+ @staticmethod
134
+ def describe_step_definition(step_definition, step_type=None):
135
+ if not step_type:
136
+ step_type = step_definition.step_type or "step"
137
+
138
+ if step_type == "step":
139
+ step_type_text = "Given/When/Then"
140
+ else:
141
+ step_type_text = step_type.capitalize()
142
+ # -- ESCAPE: Some chars required for ReST documents (like backticks)
143
+ step_text = step_definition.string
144
+ if "`" in step_text:
145
+ step_text = step_text.replace("`", r"\`")
146
+ return u"%s %s" % (step_type_text, step_text)
147
+
148
+ def ensure_destdir_exists(self):
149
+ assert self.destdir
150
+ if os.path.isfile(self.destdir):
151
+ print("OOPS: remove %s" % self.destdir)
152
+ os.remove(self.destdir)
153
+ if not os.path.exists(self.destdir):
154
+ os.makedirs(self.destdir)
155
+
156
+ def ensure_document_is_closed(self):
157
+ if self.document and not self.stdout_mode:
158
+ self.document.close()
159
+ self.document = None
160
+
161
+ def discover_step_modules(self):
162
+ step_modules_map = {}
163
+ for step_definition in self.step_definitions:
164
+ assert step_definition.step_type is not None
165
+ step_filename = step_definition.location.filename
166
+ step_module = step_modules_map.get(step_filename, None)
167
+ if not step_module:
168
+ filename = inspect.getfile(step_definition.func)
169
+ module_name = inspect.getmodulename(filename)
170
+ assert module_name, \
171
+ "step_definition: %s" % step_definition.location
172
+ step_module = StepsModule(module_name)
173
+ step_modules_map[step_filename] = step_module
174
+ step_module.append(step_definition)
175
+
176
+ step_modules = sorted(step_modules_map.values(), key=attrgetter("name"))
177
+ for module in step_modules:
178
+ step_definitions = sorted(module.step_definitions,
179
+ key=attrgetter("location"))
180
+ module.step_definitions = step_definitions
181
+ return step_modules
182
+
183
+ def create_document(self, filename):
184
+ if not (filename.endswith(".rst") or filename.endswith(".txt")):
185
+ filename += ".rst"
186
+ if self.stdout_mode:
187
+ stream = self.stream
188
+ document = sphinx_util.DocumentWriter(stream, should_close=False)
189
+ else:
190
+ self.ensure_destdir_exists()
191
+ filename = os.path.join(self.destdir, filename)
192
+ document = sphinx_util.DocumentWriter.open(filename)
193
+ return document
194
+
195
+ def write_docs(self):
196
+ step_modules = self.discover_step_modules()
197
+ self.write_step_module_index(step_modules)
198
+ for step_module in step_modules:
199
+ self.write_step_module(step_module)
200
+ return len(step_modules)
201
+
202
+ def write_step_module_index(self, step_modules, filename="index.rst"):
203
+ document = self.create_document(filename)
204
+ document.write(".. _docid.steps:\n\n")
205
+ document.write_heading("Step Definitions")
206
+ document.write("""\
207
+ The following step definitions are provided here.
208
+
209
+ ----
210
+
211
+ """)
212
+ entries = sorted([self.step_document_prefix + module.name
213
+ for module in step_modules])
214
+ document.write_toctree(entries, maxdepth=1)
215
+ document.close()
216
+ if self.stdout_mode:
217
+ sys.stdout.write("\n%s\n" % self.document_separator)
218
+
219
+ def write_step_module(self, step_module):
220
+ self.ensure_document_is_closed()
221
+ document_name = self.step_document_prefix + step_module.name
222
+ self.document = self.create_document(document_name)
223
+ self.document.write(".. _docid.steps.%s:\n" % step_module.name)
224
+ self.document.write_heading(step_module.name, index_id=step_module.name)
225
+ if self.shows_step_module_info:
226
+ self.document.write(":Module: %s\n" % step_module.name)
227
+ self.document.write(":Filename: %s\n" % step_module.filename)
228
+ self.document.write("\n")
229
+ if step_module.module_doc:
230
+ module_doc = step_module.module_doc.strip()
231
+ self.document.write("%s\n\n" % module_doc)
232
+ if self.shows_step_module_overview:
233
+ self.document.write_heading("Step Overview", level=1)
234
+ self.write_step_module_overview(step_module.step_definitions)
235
+
236
+ self.document.write_heading("Step Definitions", level=1)
237
+ for step_definition in step_module.step_definitions:
238
+ self.write_step_definition(step_definition)
239
+
240
+ # -- FINALLY: Clean up resources.
241
+ self.document.close()
242
+ self.document = None
243
+ if self.stdout_mode:
244
+ sys.stdout.write("\n%s\n" % self.document_separator)
245
+
246
+ def write_step_module_overview(self, step_definitions):
247
+ assert self.document
248
+ headings = [u"Step Definition", u"Given", u"When", u"Then", u"Step"]
249
+ table = Table(headings)
250
+ step_type_cols = {
251
+ # -- pylint: disable=bad-whitespace
252
+ "given": [u" x", u" ", u" ", u" "],
253
+ "when": [u" ", u" x", u" ", u" "],
254
+ "then": [u" ", u" ", u" x", u" "],
255
+ "step": [u" x", u" x", u" x", u" x"],
256
+ }
257
+ for step_definition in step_definitions:
258
+ row = [self.describe_step_definition(step_definition)]
259
+ row.extend(step_type_cols[step_definition.step_type])
260
+ table.add_row(row)
261
+ self.document.write_table(table)
262
+
263
+ @staticmethod
264
+ def make_step_definition_index_id(step_definition):
265
+ if step_definition.step_type == "step":
266
+ index_kinds = ("Given", "When", "Then", "Step")
267
+ else:
268
+ keyword = step_definition.step_type.capitalize()
269
+ index_kinds = (keyword,)
270
+
271
+ schema = "single: %s%s; %s %s"
272
+ index_parts = []
273
+ for index_kind in index_kinds:
274
+ keyword = index_kind
275
+ word = " step"
276
+ if index_kind == "Step":
277
+ keyword = "Given/When/Then"
278
+ word = ""
279
+ part = schema % (index_kind, word, keyword, step_definition.string)
280
+ index_parts.append(part)
281
+ joiner = "\n "
282
+ return joiner + joiner.join(index_parts)
283
+
284
+ def make_step_definition_doc(self, step_definition):
285
+ doc = inspect.getdoc(step_definition.func)
286
+ if not doc:
287
+ doc = self.default_step_definition_doc
288
+ doc = doc.strip()
289
+ return doc
290
+
291
+ def write_step_definition(self, step_definition):
292
+ assert self.document
293
+ step_text = self.describe_step_definition(step_definition)
294
+ if step_text.startswith("* "):
295
+ step_text = step_text[2:]
296
+ index_id = None
297
+ if self.make_step_index_entries:
298
+ index_id = self.make_step_definition_index_id(step_definition)
299
+
300
+ heading = step_text
301
+ step_label = None
302
+ if self.step_heading_prefix:
303
+ heading = self.step_heading_prefix + step_text
304
+ if has_docutils and self.make_step_labels:
305
+ # -- ADD STEP-LABEL (supports: step-refs by name)
306
+ # EXAMPLE: See also :ref:`When my step does "{something}"`.
307
+ step_label = fully_normalize_name(step_text)
308
+ # SKIP-HERE: self.document.write(".. _%s:\n\n" % step_label)
309
+ self.document.write_heading(heading, level=2, index_id=index_id,
310
+ label=step_label)
311
+ step_definition_doc = self.make_step_definition_doc(step_definition)
312
+ self.document.write("%s\n" % step_definition_doc)
313
+ self.document.write("\n")
314
+
315
+
316
+
317
+ # -----------------------------------------------------------------------------
318
+ # CLASS: SphinxStepsFormatter
319
+ # -----------------------------------------------------------------------------
320
+ class SphinxStepsFormatter(AbstractStepsFormatter):
321
+ """
322
+ Provides formatter class that generates Sphinx-based documentation
323
+ for all registered step definitions. The primary purpose is to:
324
+
325
+ * help the step-library provider/writer
326
+ * simplify self-documentation of step-libraries
327
+
328
+ .. note::
329
+ Supports dry-run mode.
330
+ Supports destination directory mode to write multiple documents.
331
+ """
332
+ name = "sphinx.steps"
333
+ description = "Generate sphinx-based documentation for step definitions."
334
+ doc_generator_class = SphinxStepsDocumentGenerator
335
+
336
+ def __init__(self, stream_opener, config):
337
+ super(SphinxStepsFormatter, self).__init__(stream_opener, config)
338
+ self.destdir = stream_opener.name
339
+
340
+ @property
341
+ def step_definitions(self):
342
+ """
343
+ Derive step definitions from step-registry.
344
+ """
345
+ steps = []
346
+ for step_type, step_definitions in self.step_registry.steps.items():
347
+ for step_definition in step_definitions:
348
+ step_definition.step_type = step_type
349
+ steps.append(step_definition)
350
+ return steps
351
+
352
+ # -- FORMATTER-API:
353
+ def close(self):
354
+ """Called at end of test run."""
355
+ if not self.step_registry:
356
+ self.discover_step_definitions()
357
+ self.report()
358
+
359
+ # -- SPECIFIC-API:
360
+ def create_document_generator(self):
361
+ generator_class = self.doc_generator_class
362
+ if self.stdout_mode:
363
+ return generator_class(self.step_definitions, stream=self.stream)
364
+ else:
365
+ return generator_class(self.step_definitions, destdir=self.destdir)
366
+
367
+ def report(self):
368
+ document_generator = self.create_document_generator()
369
+ document_counts = document_generator.write_docs()
370
+ if not self.stdout_mode:
371
+ msg = "%s: Written %s document(s) into directory '%s'.\n"
372
+ sys.stdout.write(msg % (self.name, document_counts, self.destdir))