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,184 @@
1
+ @sequential
2
+ Feature: Runner should support a --dry-run option
3
+
4
+ As a tester
5
+ I want to check if behave tests are syntactically correct
6
+ And all step definitions exist
7
+ Before I actually run the tests (by executing steps).
8
+
9
+ . SPECIFICATION: Dry-run mode
10
+ . * Undefined steps are detected
11
+ . * Marks steps as "untested" or "undefined"
12
+ . * Marks scenarios as "untested"
13
+ . * Marks features as "untested"
14
+ . * Causes no failed scenarios, features
15
+ . * Causes failed test-run when undefined steps are found.
16
+
17
+ @setup
18
+ Scenario: Feature Setup
19
+ Given a new working directory
20
+ And a file named "features/steps/steps.py" with:
21
+ """
22
+ from behave import step
23
+
24
+ @step('a step passes')
25
+ def step_passes(context):
26
+ pass
27
+
28
+ @step('a step fails')
29
+ def step_fails(context):
30
+ assert False, "XFAIL"
31
+ """
32
+ And a file named "features/alice.feature" with:
33
+ """
34
+ Feature: Alice
35
+
36
+ @selected
37
+ Scenario: A1
38
+ Given a step passes
39
+ When a step passes
40
+ Then a step passes
41
+
42
+ @other_selected
43
+ Scenario: A2
44
+ Given a step passes
45
+ When a step fails
46
+ Then a step passes
47
+
48
+ @selected
49
+ Scenario: A3
50
+ Given a step passes
51
+
52
+ @selected
53
+ Scenario: A4
54
+ Given a step fails
55
+ """
56
+ And a file named "features/bob.feature" with:
57
+ """
58
+ Feature: Bob
59
+ Scenario: B1
60
+ Given a step passes
61
+ When a step passes
62
+ Then a step passes
63
+
64
+ Scenario: B2
65
+ Given a step passes
66
+ When a step fails
67
+ Then a step passes
68
+ """
69
+ And a file named "features/undefined_steps.feature" with:
70
+ """
71
+ Feature: Undefined Steps
72
+
73
+ @selected
74
+ Scenario: U1
75
+ Given a step passes
76
+ When a step is undefined
77
+ Then a step fails
78
+
79
+ @other_selected
80
+ Scenario: U2 fails
81
+ Given a step is undefined
82
+ When a step passes
83
+ And a step fails
84
+ Then a step is undefined
85
+ """
86
+
87
+
88
+ Scenario: Dry-run one feature should mark feature/scenarios/steps as untested
89
+ When I run "behave -f plain --dry-run features/alice.feature"
90
+ Then it should pass with:
91
+ """
92
+ 0 features passed, 0 failed, 0 skipped, 1 untested
93
+ 0 scenarios passed, 0 failed, 0 skipped, 4 untested
94
+ 0 steps passed, 0 failed, 0 skipped, 0 undefined, 8 untested
95
+ """
96
+ And the command output should contain
97
+ """
98
+ Scenario: A1
99
+ """
100
+ And the command output should contain:
101
+ """
102
+ Scenario: A2
103
+ """
104
+ And the command output should contain:
105
+ """
106
+ Scenario: A3
107
+ """
108
+ And the command output should contain:
109
+ """
110
+ Scenario: A4
111
+ """
112
+ And note that "all scenarios of this feature are contained"
113
+
114
+ Scenario: Dry-run one feature with tags should mark skipped scenario/steps as skipped
115
+ When I run "behave -f plain --dry-run --tags=@selected --no-skipped features/alice.feature"
116
+ Then it should pass with:
117
+ """
118
+ 0 features passed, 0 failed, 0 skipped, 1 untested
119
+ 0 scenarios passed, 0 failed, 1 skipped, 3 untested
120
+ 0 steps passed, 0 failed, 3 skipped, 0 undefined, 5 untested
121
+ """
122
+ And the command output should contain:
123
+ """
124
+ Scenario: A1
125
+ """
126
+ And the command output should contain:
127
+ """
128
+ Scenario: A3
129
+ """
130
+ And the command output should contain:
131
+ """
132
+ Scenario: A4
133
+ """
134
+ But the command output should not contain:
135
+ """
136
+ Scenario: A2
137
+ """
138
+ And note that "only tagged scenarios of this feature are contained (3 of 4)"
139
+
140
+
141
+ Scenario: Dry-run two features
142
+ When I run "behave --dry-run features/alice.feature features/bob.feature"
143
+ Then it should pass with:
144
+ """
145
+ 0 features passed, 0 failed, 0 skipped, 2 untested
146
+ 0 scenarios passed, 0 failed, 0 skipped, 6 untested
147
+ 0 steps passed, 0 failed, 0 skipped, 0 undefined, 14 untested
148
+ """
149
+
150
+ Scenario: Dry-run one feature with undefined steps
151
+ When I run "behave --dry-run features/undefined_steps.feature"
152
+ Then it should fail with:
153
+ """
154
+ 0 features passed, 0 failed, 0 skipped, 1 untested
155
+ 0 scenarios passed, 0 failed, 0 skipped, 2 untested
156
+ 0 steps passed, 0 failed, 0 skipped, 3 undefined, 4 untested
157
+ """
158
+
159
+ Scenario: Dry-run two features, one with undefined steps
160
+ When I run "behave --dry-run features/alice.feature features/undefined_steps.feature"
161
+ Then it should fail with:
162
+ """
163
+ 0 features passed, 0 failed, 0 skipped, 2 untested
164
+ 0 scenarios passed, 0 failed, 0 skipped, 6 untested
165
+ 0 steps passed, 0 failed, 0 skipped, 3 undefined, 12 untested
166
+ """
167
+
168
+ Scenario: Dry-run two features, one with undefined steps and use tags
169
+ When I run "behave --dry-run --tags=@selected features/alice.feature features/undefined_steps.feature"
170
+ Then it should fail with:
171
+ """
172
+ 0 features passed, 0 failed, 0 skipped, 2 untested
173
+ 0 scenarios passed, 0 failed, 2 skipped, 4 untested
174
+ 0 steps passed, 0 failed, 7 skipped, 1 undefined, 7 untested
175
+ """
176
+
177
+ Scenario: Dry-run two features, one with undefined steps and use other tags
178
+ When I run "behave --dry-run --tags=@other_selected features/alice.feature features/undefined_steps.feature"
179
+ Then it should fail with:
180
+ """
181
+ 0 features passed, 0 failed, 0 skipped, 2 untested
182
+ 0 scenarios passed, 0 failed, 4 skipped, 2 untested
183
+ 0 steps passed, 0 failed, 8 skipped, 2 undefined, 5 untested
184
+ """
@@ -0,0 +1,223 @@
1
+ @sequential
2
+ Feature: Feature Listfile (List of feature filenames/directories)
3
+
4
+ As a tester
5
+ I want to run a list of features together
6
+ And I do not want to provide the list each time
7
+ But provide a text file that contains the list of features.
8
+
9
+ . SPECIFICATION: behave file args
10
+ . * Prepend an '@' char (AT) to the feature configfile name to classify it.
11
+ .
12
+ . SPECIFICATION: Feature listfile (text file)
13
+ . * Each line contains a feature filename or directory with features
14
+ . * Feature filenames/dirnames are relative to the feature configfile
15
+ . * Empty lines are removed while reading
16
+ . * Comment lines are removed while reading (start with '#' char)
17
+ . * Wildcards are expanded to select 0..N files or directories.
18
+ . * Wildcards for file locations are not supported (only filenames or dirs).
19
+ .
20
+ . SPECIFICATION: Runner
21
+ . * Feature configfile with unknown/not found feature files
22
+ . cause runner to fail.
23
+ .
24
+ . NOTE: Also supported by Cucumber.
25
+ . RELATED: issue #75
26
+
27
+
28
+ @setup
29
+ Scenario: Test Setup
30
+ Given a new working directory
31
+ And a file named "features/steps/steps.py" with:
32
+ """
33
+ from behave import step
34
+
35
+ @step('a step passes')
36
+ def step_passes(context):
37
+ pass
38
+ """
39
+ And a file named "features/alice.feature" with:
40
+ """
41
+ Feature: Alice
42
+ Scenario:
43
+ Given a step passes
44
+ """
45
+ And a file named "features/bob.feature" with:
46
+ """
47
+ Feature: Bob
48
+ Scenario:
49
+ Given a step passes
50
+ """
51
+
52
+
53
+ Scenario: Use @feature_listfile in WORKDIR directory (above features/)
54
+ Given a file named "alice_and_bob2.txt" with:
55
+ """
56
+ features/alice.feature
57
+ features/bob.feature
58
+ """
59
+ When I run "behave @alice_and_bob2.txt"
60
+ Then it should pass with:
61
+ """
62
+ 2 features passed, 0 failed, 0 skipped
63
+ 2 scenarios passed, 0 failed, 0 skipped
64
+ 2 steps passed, 0 failed, 0 skipped, 0 undefined
65
+ """
66
+
67
+
68
+ Scenario: Use @feature_listfile in features/ subdirectory (Case 2)
69
+ Given a file named "features/alice_and_bob.txt" with:
70
+ """
71
+ alice.feature
72
+ bob.feature
73
+ """
74
+ When I run "behave @features/alice_and_bob.txt"
75
+ Then it should pass with:
76
+ """
77
+ 2 features passed, 0 failed, 0 skipped
78
+ 2 scenarios passed, 0 failed, 0 skipped
79
+ 2 steps passed, 0 failed, 0 skipped, 0 undefined
80
+ """
81
+
82
+ Scenario: Use @feature_listfile with some empty lines
83
+ Given a file named "features/alice_and_bob_with_empty_lines.txt" with:
84
+ """
85
+ alice.feature
86
+
87
+ bob.feature
88
+ """
89
+ When I run "behave @features/alice_and_bob_with_empty_lines.txt"
90
+ Then it should pass with:
91
+ """
92
+ 2 features passed, 0 failed, 0 skipped
93
+ 2 scenarios passed, 0 failed, 0 skipped
94
+ 2 steps passed, 0 failed, 0 skipped, 0 undefined
95
+ """
96
+
97
+ Scenario: Use @feature_listfile with some comment lines
98
+ Given a file named "features/alice_and_bob_with_comment_lines.txt" with:
99
+ """
100
+ alice.feature
101
+ # -- USE: bob (comment line)
102
+ bob.feature
103
+ """
104
+ When I run "behave @features/alice_and_bob_with_comment_lines.txt"
105
+ Then it should pass with:
106
+ """
107
+ 2 features passed, 0 failed, 0 skipped
108
+ 2 scenarios passed, 0 failed, 0 skipped
109
+ 2 steps passed, 0 failed, 0 skipped, 0 undefined
110
+ """
111
+
112
+ Scenario: Use @feature_listfile with wildcards (Case 1)
113
+
114
+ Use feature list-file with wildcard pattern to select features.
115
+
116
+ Given a file named "with_wildcard_feature.txt" with:
117
+ """
118
+ features/a*.feature
119
+ """
120
+ When I run "behave -f plain --no-timings @with_wildcard_feature.txt"
121
+ Then it should pass with:
122
+ """
123
+ 1 feature passed, 0 failed, 0 skipped
124
+ 1 scenario passed, 0 failed, 0 skipped
125
+ """
126
+ And the command output should contain:
127
+ """
128
+ Feature: Alice
129
+
130
+ Scenario:
131
+ Given a step passes ... passed
132
+ """
133
+
134
+ Scenario: Use @feature_listfile with wildcards (Case 2)
135
+
136
+ Use feature list-file with:
137
+ - normal filename
138
+ - wildcard pattern to select features
139
+
140
+ Given a file named "with_wildcard_feature2.txt" with:
141
+ """
142
+ features/alice.feature
143
+ features/b*.feature
144
+ """
145
+ When I run "behave -f plain --no-timings @with_wildcard_feature2.txt"
146
+ Then it should pass with:
147
+ """
148
+ 2 features passed, 0 failed, 0 skipped
149
+ 2 scenarios passed, 0 failed, 0 skipped
150
+ """
151
+ And the command output should contain:
152
+ """
153
+ Feature: Alice
154
+
155
+ Scenario:
156
+ Given a step passes ... passed
157
+
158
+ Feature: Bob
159
+
160
+ Scenario:
161
+ Given a step passes ... passed
162
+ """
163
+
164
+ Scenario: Use @feature_listfile with wildcards for file location (not supported)
165
+
166
+ Note that wildcards are not supported when file locations are used.
167
+
168
+ Given a file named "with_wildcard_location.txt" with:
169
+ """
170
+ features/a*.feature:3
171
+ """
172
+ When I run "behave -f plain --no-timings @with_wildcard_location.txt"
173
+ Then it should fail with:
174
+ """
175
+ ConfigError: No steps directory in '{__WORKDIR__}'
176
+ """
177
+
178
+
179
+ Scenario: Use empty @feature_listfile (Case 1)
180
+ Given an empty file named "empty.txt"
181
+ When I run "behave @empty.txt"
182
+ Then it should fail with:
183
+ """
184
+ No steps directory in '{__WORKDIR__}'
185
+ """
186
+
187
+ Scenario: Use empty @feature_listfile in features subdirectory (Case 2)
188
+ Given an empty file named "features/empty.txt"
189
+ When I run "behave @features/empty.txt"
190
+ Then it should pass with:
191
+ """
192
+ 0 features passed, 0 failed, 0 skipped
193
+ """
194
+
195
+ Scenario: Use @feature_listfile with unknown feature file (Case 1)
196
+ Given a file named "with_unknown_feature.txt" with:
197
+ """
198
+ features/alice.feature
199
+ features/UNKNOWN.feature
200
+ """
201
+ When I run "behave @with_unknown_feature.txt"
202
+ Then it should fail with:
203
+ """
204
+ Error: [Errno 2] No such file or directory: '{__WORKDIR__}/features/UNKNOWN.feature'
205
+ """
206
+
207
+ Scenario: Use @feature_listfile with unknown feature file (Case 2)
208
+ Given a file named "features/with_unknown_feature2.txt" with:
209
+ """
210
+ UNKNOWN.feature
211
+ """
212
+ When I run "behave @features/with_unknown_feature2.txt"
213
+ Then it should fail with:
214
+ """
215
+ Error: [Errno 2] No such file or directory: '{__WORKDIR__}/features/UNKNOWN.feature'
216
+ """
217
+
218
+ Scenario: Use unknown @feature_listfile
219
+ When I run "behave @unknown_feature_configfile.txt"
220
+ Then it should fail with:
221
+ """
222
+ FileNotFoundError: unknown_feature_configfile.txt
223
+ """
@@ -0,0 +1,382 @@
1
+ Feature: Hooks processing in case of errors (exceptions)
2
+
3
+ . SPECIFICATION:
4
+ . * Hook errors in before_all/after_all hook aborts the test run (and fail).
5
+ . * Hook errors in before_feature/after_feature causes the feature to fail.
6
+ . * Hook errors in before_feature causes feature scenarios to be skipped (untested).
7
+ . * Hook errors in before_scenario/after_scenario causes the scenario to fail.
8
+ . * Hook errors in before_scenario causes scenario steps to be skipped (untested).
9
+ . * Hook errors in before_step/after_step causes step to fail.
10
+ . * Hook errors in before_tag/after_tag of a feature causes feature to fail.
11
+ . * Hook errors in before_tag/after_tag of a scenario causes scenario to fail.
12
+ . * If a hook error occurs in a "before_xxx" hook,
13
+ . then the "after_xxx" hook will also be called (to cleanup some stuff).
14
+ .
15
+ . NOTE:
16
+ . The --verbose flag can be used to show the exception traceback.
17
+
18
+ @setup
19
+ Scenario: Feature Setup
20
+ Given a new working directory
21
+ And a file named "features/steps/steps.py" with:
22
+ """
23
+ from behave import step
24
+
25
+ @step(u'{word:w} step passes')
26
+ def step(context, word):
27
+ pass
28
+ """
29
+ And a file named "features/passing.feature" with:
30
+ """
31
+ @foo
32
+ Feature: Alice
33
+ @soo
34
+ Scenario: A1
35
+ Given a step passes
36
+ """
37
+ And a file named "features/environment.py" with:
38
+ """
39
+ from __future__ import print_function
40
+
41
+ def cause_hook_to_fail():
42
+ raise RuntimeError("FAIL")
43
+
44
+ def before_all(context):
45
+ userdata = context.config.userdata
46
+ if userdata.get("HOOK_ERROR_LOC") == "before_all":
47
+ cause_hook_to_fail()
48
+
49
+ def after_all(context):
50
+ userdata = context.config.userdata
51
+ if userdata.get("HOOK_ERROR_LOC") == "before_all":
52
+ print("called_hook:after_all")
53
+ if userdata.get("HOOK_ERROR_LOC") == "after_all":
54
+ cause_hook_to_fail()
55
+
56
+ def before_feature(context, feature):
57
+ userdata = context.config.userdata
58
+ if userdata.get("HOOK_ERROR_LOC") == "before_feature":
59
+ cause_hook_to_fail()
60
+
61
+ def after_feature(context, feature):
62
+ userdata = context.config.userdata
63
+ if userdata.get("HOOK_ERROR_LOC") == "before_feature":
64
+ print("called_hook:after_feature")
65
+ if userdata.get("HOOK_ERROR_LOC") == "after_feature":
66
+ cause_hook_to_fail()
67
+
68
+ def before_scenario(context, scenario):
69
+ userdata = context.config.userdata
70
+ if userdata.get("HOOK_ERROR_LOC") == "before_scenario":
71
+ cause_hook_to_fail()
72
+
73
+ def after_scenario(context, scenario):
74
+ userdata = context.config.userdata
75
+ if userdata.get("HOOK_ERROR_LOC") == "before_scenario":
76
+ print("called_hook:after_scenario")
77
+ if userdata.get("HOOK_ERROR_LOC") == "after_scenario":
78
+ cause_hook_to_fail()
79
+
80
+ def before_step(context, step):
81
+ userdata = context.config.userdata
82
+ if userdata.get("HOOK_ERROR_LOC") == "before_step":
83
+ cause_hook_to_fail()
84
+
85
+ def after_step(context, step):
86
+ userdata = context.config.userdata
87
+ if userdata.get("HOOK_ERROR_LOC") == "before_step":
88
+ print("called_hook:after_step")
89
+ if userdata.get("HOOK_ERROR_LOC") == "after_step":
90
+ cause_hook_to_fail()
91
+
92
+ def before_tag(context, tag):
93
+ userdata = context.config.userdata
94
+ if userdata.get("HOOK_ERROR_LOC") == "before_tag":
95
+ error_tag = userdata.get("HOOK_ERROR_TAG")
96
+ if not error_tag or tag == error_tag:
97
+ cause_hook_to_fail()
98
+
99
+ def after_tag(context, tag):
100
+ userdata = context.config.userdata
101
+ if userdata.get("HOOK_ERROR_LOC") == "before_tag":
102
+ error_tag = userdata.get("HOOK_ERROR_TAG")
103
+ if tag == error_tag:
104
+ print("called_hook:after_tag: tag=%s" % tag)
105
+ if userdata.get("HOOK_ERROR_LOC") == "after_tag":
106
+ error_tag = userdata.get("HOOK_ERROR_TAG")
107
+ if not error_tag or tag == error_tag:
108
+ cause_hook_to_fail()
109
+ """
110
+ And a file named "behave.ini" with:
111
+ """
112
+ [behave]
113
+ show_skipped = false
114
+ show_timings = false
115
+ """
116
+
117
+
118
+ @hook.before_all
119
+ Scenario: Hook error in before_all
120
+ When I run "behave -f plain -D HOOK_ERROR_LOC=before_all features/passing.feature"
121
+ Then it should fail with
122
+ """
123
+ HOOK-ERROR in before_all: RuntimeError: FAIL
124
+
125
+ ABORTED: By user.
126
+ called_hook:after_all
127
+ 0 features passed, 0 failed, 0 skipped, 1 untested
128
+ 0 scenarios passed, 0 failed, 0 skipped, 1 untested
129
+ 0 steps passed, 0 failed, 0 skipped, 0 undefined, 1 untested
130
+ """
131
+ But note that "the after_all hook is called, too"
132
+
133
+
134
+ @hook.after_all
135
+ Scenario: Hook error in after_all
136
+ When I run "behave -f plain -D HOOK_ERROR_LOC=after_all features/passing.feature"
137
+ Then it should fail with:
138
+ """
139
+ Feature: Alice
140
+
141
+ Scenario: A1
142
+ Given a step passes ... passed
143
+
144
+ HOOK-ERROR in after_all: RuntimeError: FAIL
145
+ 1 feature passed, 0 failed, 0 skipped
146
+ 1 scenario passed, 0 failed, 0 skipped
147
+ 1 step passed, 0 failed, 0 skipped, 0 undefined
148
+ """
149
+
150
+
151
+ @hook.before_feature
152
+ Scenario: Hook error in before_feature
153
+ When I run "behave -f plain -D HOOK_ERROR_LOC=before_feature features/passing.feature"
154
+ Then it should fail with:
155
+ """
156
+ HOOK-ERROR in before_feature: RuntimeError: FAIL
157
+ Feature: Alice
158
+ called_hook:after_feature
159
+
160
+ 0 features passed, 1 failed, 0 skipped
161
+ 0 scenarios passed, 0 failed, 0 skipped, 1 untested
162
+ 0 steps passed, 0 failed, 0 skipped, 0 undefined, 1 untested
163
+ """
164
+ But note that "the after_feature hook is called, too."
165
+
166
+
167
+ @hook.after_feature
168
+ Scenario: Hook error in after_feature
169
+ When I run "behave -f plain -D HOOK_ERROR_LOC=after_feature features/passing.feature"
170
+ Then it should fail with:
171
+ """
172
+ Feature: Alice
173
+ Scenario: A1
174
+ Given a step passes ... passed
175
+ HOOK-ERROR in after_feature: RuntimeError: FAIL
176
+
177
+ 0 features passed, 1 failed, 0 skipped
178
+ 1 scenario passed, 0 failed, 0 skipped
179
+ 1 step passed, 0 failed, 0 skipped, 0 undefined
180
+ """
181
+
182
+
183
+ @hook.before_scenario
184
+ Scenario: Hook error in before_scenario
185
+ When I run "behave -f plain -D HOOK_ERROR_LOC=before_scenario features/passing.feature"
186
+ Then it should fail with:
187
+ """
188
+ Feature: Alice
189
+
190
+ HOOK-ERROR in before_scenario: RuntimeError: FAIL
191
+ Scenario: A1
192
+ called_hook:after_scenario
193
+
194
+ Failing scenarios:
195
+ features/passing.feature:4 A1
196
+
197
+ 0 features passed, 1 failed, 0 skipped
198
+ 0 scenarios passed, 1 failed, 0 skipped
199
+ 0 steps passed, 0 failed, 0 skipped, 0 undefined, 1 untested
200
+ """
201
+ But note that "the after_scenario hook is called, too."
202
+
203
+
204
+ @hook.after_scenario
205
+ Scenario: Hook error in after_scenario
206
+ When I run "behave -f plain -D HOOK_ERROR_LOC=after_scenario features/passing.feature"
207
+ Then it should fail with:
208
+ """
209
+ Feature: Alice
210
+
211
+ Scenario: A1
212
+ Given a step passes ... passed
213
+ HOOK-ERROR in after_scenario: RuntimeError: FAIL
214
+
215
+
216
+ Failing scenarios:
217
+ features/passing.feature:4 A1
218
+
219
+ 0 features passed, 1 failed, 0 skipped
220
+ 0 scenarios passed, 1 failed, 0 skipped
221
+ 1 step passed, 0 failed, 0 skipped, 0 undefined
222
+ """
223
+
224
+ @hook.before_step
225
+ Scenario: Hook error in before_step
226
+ When I run "behave -f plain -D HOOK_ERROR_LOC=before_step features/passing.feature"
227
+ Then it should fail with:
228
+ """
229
+ Feature: Alice
230
+
231
+ Scenario: A1
232
+ Given a step passes ... failed
233
+
234
+ Captured stdout:
235
+ HOOK-ERROR in before_step: RuntimeError: FAIL
236
+ called_hook:after_step
237
+
238
+ Failing scenarios:
239
+ features/passing.feature:4 A1
240
+
241
+ 0 features passed, 1 failed, 0 skipped
242
+ 0 scenarios passed, 1 failed, 0 skipped
243
+ 0 steps passed, 1 failed, 0 skipped, 0 undefined
244
+ """
245
+ But note that "the after_step hook is called, too."
246
+
247
+
248
+ @hook.after_step
249
+ Scenario: Hook error in after_step
250
+ When I run "behave -f plain -D HOOK_ERROR_LOC=after_step features/passing.feature"
251
+ Then it should fail with:
252
+ """
253
+ Feature: Alice
254
+
255
+ Scenario: A1
256
+ Given a step passes ... failed
257
+
258
+ Captured stdout:
259
+ HOOK-ERROR in after_step: RuntimeError: FAIL
260
+
261
+ Failing scenarios:
262
+ features/passing.feature:4 A1
263
+
264
+ 0 features passed, 1 failed, 0 skipped
265
+ 0 scenarios passed, 1 failed, 0 skipped
266
+ 0 steps passed, 1 failed, 0 skipped, 0 undefined
267
+ """
268
+
269
+
270
+ @hook.before_tag
271
+ Scenario: Hook error in before_tag for feature
272
+ When I run "behave -f plain -D HOOK_ERROR_LOC=before_tag -D HOOK_ERROR_TAG=foo features/passing.feature"
273
+ Then it should fail with:
274
+ """
275
+ HOOK-ERROR in before_tag(tag=foo): RuntimeError: FAIL
276
+ Feature: Alice
277
+ called_hook:after_tag: tag=foo
278
+
279
+ 0 features passed, 1 failed, 0 skipped
280
+ 0 scenarios passed, 0 failed, 0 skipped, 1 untested
281
+ 0 steps passed, 0 failed, 0 skipped, 0 undefined, 1 untested
282
+ """
283
+ And the command output should contain:
284
+ """
285
+ HOOK-ERROR in before_tag(tag=foo): RuntimeError: FAIL
286
+ Feature: Alice
287
+ """
288
+ But note that "the hook-error in before_tag of the feature causes it to fail and be skipped (untested)"
289
+ And note that "the after_tag hook is still called"
290
+
291
+
292
+ @hook.after_tag
293
+ Scenario: Hook error in after_tag for feature
294
+ When I run "behave -f plain -D HOOK_ERROR_LOC=after_tag -D HOOK_ERROR_TAG=foo features/passing.feature"
295
+ Then it should fail with:
296
+ """
297
+ Feature: Alice
298
+
299
+ Scenario: A1
300
+ Given a step passes ... passed
301
+ HOOK-ERROR in after_tag(tag=foo): RuntimeError: FAIL
302
+
303
+ 0 features passed, 1 failed, 0 skipped
304
+ 1 scenario passed, 0 failed, 0 skipped
305
+ 1 step passed, 0 failed, 0 skipped, 0 undefined
306
+ """
307
+ But note that "the hook-error in after_tag of the scenario causes it to fail"
308
+
309
+
310
+ @hook.before_tag
311
+ Scenario: Hook error in before_tag for scenario
312
+ When I run "behave -f plain -D HOOK_ERROR_LOC=before_tag -D HOOK_ERROR_TAG=soo features/passing.feature"
313
+ Then it should fail with:
314
+ """
315
+ Feature: Alice
316
+ HOOK-ERROR in before_tag(tag=soo): RuntimeError: FAIL
317
+ Scenario: A1
318
+ called_hook:after_tag: tag=soo
319
+
320
+ Failing scenarios:
321
+ features/passing.feature:4 A1
322
+
323
+ 0 features passed, 1 failed, 0 skipped
324
+ 0 scenarios passed, 1 failed, 0 skipped
325
+ 0 steps passed, 0 failed, 0 skipped, 0 undefined, 1 untested
326
+ """
327
+ But note that "the hook-error in before_tag of the scenario causes it to fail and be skipped (untested)"
328
+ And note that "the after_tag hook is still called"
329
+
330
+
331
+ @hook.after_tag
332
+ Scenario: Hook error in after_tag for scenario
333
+ When I run "behave -f plain -D HOOK_ERROR_LOC=after_tag -D HOOK_ERROR_TAG=soo features/passing.feature"
334
+ Then it should fail with:
335
+ """
336
+ Feature: Alice
337
+
338
+ Scenario: A1
339
+ Given a step passes ... passed
340
+ HOOK-ERROR in after_tag(tag=soo): RuntimeError: FAIL
341
+
342
+ Failing scenarios:
343
+ features/passing.feature:4 A1
344
+
345
+ 0 features passed, 1 failed, 0 skipped
346
+ 0 scenarios passed, 1 failed, 0 skipped
347
+ 1 step passed, 0 failed, 0 skipped, 0 undefined
348
+ """
349
+ But note that "the hook-error in after_tag of the scenario causes it to fail"
350
+
351
+
352
+ @skipped.hook.after_feature
353
+ Scenario: Skipped feature with potential hook error (hooks are not run)
354
+
355
+ This goes unnoticed because hooks are not run for a skipped feature/scenario.
356
+ NOTE: Except if before_feature(), before_scenario() hook skips the feature/scenario.
357
+
358
+ When I run "behave -f plain -D HOOK_ERROR_LOC=after_feature -t ~@foo features/passing.feature"
359
+ Then it should pass with:
360
+ """
361
+ 0 features passed, 0 failed, 1 skipped
362
+ 0 scenarios passed, 0 failed, 1 skipped
363
+ 0 steps passed, 0 failed, 1 skipped, 0 undefined
364
+ """
365
+ But note that "hooks are not executed for skipped features/scenarios"
366
+
367
+
368
+ Scenario: Show hook error details (traceback)
369
+ When I run "behave -f plain -D HOOK_ERROR_LOC=before_feature --verbose features/passing.feature"
370
+ Then it should fail with:
371
+ """
372
+ HOOK-ERROR in before_feature: RuntimeError: FAIL
373
+ """
374
+ And the command output should contain:
375
+ """
376
+ self.hooks[name](context, *args)
377
+ File "features/environment.py", line 21, in before_feature
378
+ cause_hook_to_fail()
379
+ File "features/environment.py", line 4, in cause_hook_to_fail
380
+ raise RuntimeError("FAIL")
381
+ """
382
+ But note that "the traceback caused by the hook-error is shown"