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,59 @@
1
+ Feature: Execute Steps within a Step Function (Nested Steps)
2
+
3
+ As a tester
4
+ I want to reuse existing steps and call several ones within another step
5
+ So that I can comply with the the DRY principle.
6
+
7
+ Scenario: Execute a number of simple steps (GOOD CASE)
8
+ Given a new working directory
9
+ And a file named "features/steps/steps.py" with:
10
+ """
11
+ from behave import given, when, then
12
+
13
+ @given(u'I go to the supermarket')
14
+ def step_given_I_go_to_the_supermarket(context):
15
+ context.shopping_cart = {}
16
+
17
+ @when(u'I buy {amount:n} {item:w}')
18
+ def step_when_I_buy(context, amount, item):
19
+ assert amount >= 0
20
+ if not item in context.shopping_cart:
21
+ context.shopping_cart[item] = 0
22
+ context.shopping_cart[item] += amount
23
+
24
+ # -- HERE: Is the interesting functionality.
25
+ @when(u'I buy the usual things')
26
+ def step_when_I_buy_the_usual_things(context):
27
+ context.execute_steps(u'''
28
+ When I buy 2 apples
29
+ And I buy 3 bananas
30
+ ''')
31
+
32
+ @then(u'I have {amount:n} {item:w}')
33
+ def step_then_I_have(context, amount, item):
34
+ actual = context.shopping_cart.get(item, 0)
35
+ assert amount == actual
36
+ """
37
+ And a file named "features/use_nested_steps.feature" with:
38
+ """
39
+ Feature:
40
+ Scenario:
41
+ Given I go to the supermarket
42
+ When I buy the usual things
43
+ Then I have 2 apples
44
+ And I have 3 bananas
45
+ """
46
+ When I run "behave -f plain features/use_nested_steps.feature"
47
+ Then it should pass with:
48
+ """
49
+ 1 feature passed, 0 failed, 0 skipped
50
+ 1 scenario passed, 0 failed, 0 skipped
51
+ 4 steps passed, 0 failed, 0 skipped, 0 undefined
52
+ """
53
+
54
+ @not_implemented
55
+ Scenario: A Nested Step Fails with Assert
56
+
57
+ @not_implemented
58
+ Scenario: A Nested Step Fails with Exception
59
+
@@ -0,0 +1,65 @@
1
+ Feature: Execute nested steps that use a table
2
+
3
+ Scenario:
4
+ Given a new working directory
5
+ And a file named "features/steps/steps.py" with:
6
+ """
7
+ from behave import given, when, then, step
8
+ import six
9
+ @given('the following nested steps')
10
+ def step_given_following_nested_steps(context):
11
+ assert context.text, "ENSURE: multi-line text is provided."
12
+ context.nested_steps = six.text_type(context.text)
13
+
14
+ @step('I execute the nested steps {comment}')
15
+ def step_execute_nested_steps_with_table(context, comment):
16
+ assert context.nested_steps, "ENSURE: nested steps are provided."
17
+ context.execute_steps(context.nested_steps)
18
+
19
+ @then('the step "{expected_step}" was called')
20
+ def then_step_was_called(context, expected_step):
21
+ assert context.steps_called, "ENSURE: steps_called is provided."
22
+ assert expected_step in context.steps_called
23
+
24
+ @then('the table should be equal to')
25
+ def then_table_should_be_equal_to(context):
26
+ assert context.table, "ENSURE: table is provided."
27
+ expected_table = context.table
28
+ actual_table = context.the_table
29
+ assert actual_table == expected_table
30
+
31
+ # -- SPECIAL-STEP:
32
+ @step('I setup an address book with')
33
+ def step_setup_address_book_with_friends(context):
34
+ assert context.table, "ENSURE: table is provided."
35
+ if not hasattr(context, "steps_called"):
36
+ context.steps_called = []
37
+ context.steps_called.append("I setup an address book with")
38
+ context.the_table = context.table
39
+ """
40
+ And a file named "features/execute_nested_steps_with_table.feature" with:
41
+ '''
42
+ Feature:
43
+ Scenario:
44
+ Given the following nested steps:
45
+ """
46
+ When I setup an address book with:
47
+ | Name | Telephone Number |
48
+ | Alice | 555 1111 |
49
+ | Bob | 555 2222 |
50
+ """
51
+ When I execute the nested steps with a table
52
+ Then the step "I setup an address book with" was called
53
+ And the table should be equal to:
54
+ | Name | Telephone Number |
55
+ | Alice | 555 1111 |
56
+ | Bob | 555 2222 |
57
+ '''
58
+ When I run "behave -f plain features/execute_nested_steps_with_table.feature"
59
+ Then it should pass with:
60
+ """
61
+ 1 feature passed, 0 failed, 0 skipped
62
+ 1 scenario passed, 0 failed, 0 skipped
63
+ 4 steps passed, 0 failed, 0 skipped, 0 undefined
64
+ """
65
+
@@ -0,0 +1,103 @@
1
+ Feature: Ensure that a step module can import another step module
2
+
3
+ As a test writer
4
+ I want to import step definitions from another module in a step module
5
+ So that I can reuse other steps and call them directly.
6
+
7
+ . When a step module imports another step module
8
+ . this should not cause AmbiguousStep errors
9
+ . due to duplicated registration of the same step functions.
10
+ .
11
+ . NOTES:
12
+ . * In general you should avoid this case (provided as example here).
13
+ . * Use "context.execute_steps(...)" to avoid importing other step modules
14
+ . * Use step-libraries; this will in general use sane imports of other step modules
15
+
16
+
17
+ Scenario: Step module that imports another step module
18
+ Given a new working directory
19
+ And a file named "features/steps/alice1_steps.py" with:
20
+ """
21
+ from behave import given
22
+
23
+ @given(u'I call Alice')
24
+ def step_call_alice(context):
25
+ pass
26
+ """
27
+ And a file named "features/steps/bob1_steps.py" with:
28
+ """
29
+ from behave import given
30
+ from alice1_steps import step_call_alice
31
+
32
+ @given(u'I call Bob')
33
+ def step_call_bob(context):
34
+ pass
35
+
36
+ @given(u'I call Bob and Alice')
37
+ def step_call_bob_and_alice(context):
38
+ step_call_bob(context)
39
+ step_call_alice(context)
40
+ """
41
+ And a file named "features/example.import_step_module.feature" with:
42
+ """
43
+ Feature:
44
+ Scenario:
45
+ Given I call Bob and Alice
46
+ """
47
+ When I run "behave -f plain --no-timings features/example.import_step_module.feature"
48
+ Then it should pass with:
49
+ """
50
+ 1 scenario passed, 0 failed, 0 skipped
51
+ 1 step passed, 0 failed, 0 skipped, 0 undefined
52
+ """
53
+ And the command output should contain:
54
+ """
55
+ Feature:
56
+ Scenario:
57
+ Given I call Bob and Alice ... passed
58
+ """
59
+
60
+
61
+ Scenario: Step module that imports another step module (cross-wise)
62
+ Given a new working directory
63
+ And a file named "features/steps/alice2_steps.py" with:
64
+ """
65
+ from behave import given
66
+ import bob2_steps # -- BAD: Import other step module, cross-wise.
67
+
68
+ @given(u'I call Alice')
69
+ def step_call_alice(context):
70
+ pass
71
+ """
72
+ And a file named "features/steps/bob2_steps.py" with:
73
+ """
74
+ from behave import given
75
+ import alice2_steps # -- BAD: Import other step module, cross-wise.
76
+
77
+ @given(u'I call Bob')
78
+ def step_call_bob(context):
79
+ pass
80
+ """
81
+ And a file named "features/example.cross_imported_step_modules.feature" with:
82
+ """
83
+ Feature:
84
+ Scenario:
85
+ Given I call Alice
86
+ And I call Bob
87
+ """
88
+ When I run "behave -f plain --no-timings features/example.cross_imported_step_modules.feature"
89
+ Then it should pass with:
90
+ """
91
+ 1 feature passed, 0 failed, 0 skipped
92
+ 1 scenario passed, 0 failed, 0 skipped
93
+ 2 steps passed, 0 failed, 0 skipped, 0 undefined
94
+ """
95
+ And the command output should contain:
96
+ """
97
+ Feature:
98
+ Scenario:
99
+ Given I call Alice ... passed
100
+ And I call Bob ... passed
101
+ """
102
+
103
+
@@ -0,0 +1,128 @@
1
+ Feature: Pending Step (Exists with NotImplementedError Marker)
2
+
3
+ . TERMINOLOGY:
4
+ . * An undefined step is a step without matching step implementation.
5
+ . * A pending step exists,
6
+ . but contains only the undefined step snippet as implementation,
7
+ . that marks it as NotImplemented.
8
+ .
9
+ . RELATED TO:
10
+ . * step.undefined_steps.feature
11
+
12
+
13
+ @setup
14
+ Scenario: Feature Setup
15
+ Given a new working directory
16
+ And a file named "behave.ini" with:
17
+ """
18
+ [behave]
19
+ show_skipped = false
20
+ show_timings = false
21
+ """
22
+ And a file named "features/steps/passing_steps.py" with:
23
+ """
24
+ from behave import step
25
+
26
+ @step('{word:w} step passes')
27
+ def step_passes(context, word):
28
+ pass
29
+
30
+ @step('{word:w} step fails')
31
+ def step_fails(context, word):
32
+ assert False, "XFAIL"
33
+ """
34
+ And a file named "features/steps/pending_steps.py" with:
35
+ """
36
+ from behave import given, when, then
37
+
38
+ @given('a pending step is used')
39
+ def step_pending_given(context):
40
+ raise NotImplementedError('STEP: Given a pending step is used')
41
+
42
+ @when('a pending step is used')
43
+ def step_pending_when(context):
44
+ raise NotImplementedError('STEP: When a pending step is used')
45
+
46
+ @then('a pending step is used')
47
+ def step_pending_then(context):
48
+ raise NotImplementedError('STEP: Then a pending step is used')
49
+ """
50
+ And a file named "features/use_pending_steps.feature" with:
51
+ """
52
+ Feature:
53
+ Scenario: 1
54
+ Given a step passes
55
+ And a pending step is used
56
+ When another step passes
57
+
58
+ Scenario: 2
59
+ Given a step passes
60
+ When a pending step is used
61
+ Then some step passes
62
+
63
+ Scenario: 3
64
+ Given a step passes
65
+ When another step passes
66
+ Then a pending step is used
67
+ """
68
+
69
+ Scenario: Pending given step (not implemented)
70
+ When I run "behave -f plain features/use_pending_steps.feature:2"
71
+ Then it should fail
72
+ And the command output should contain:
73
+ """
74
+ Feature:
75
+ Scenario: 1
76
+ Given a step passes ... passed
77
+ And a pending step is used ... failed
78
+ """
79
+ But the command output should contain:
80
+ """
81
+ NotImplementedError: STEP: Given a pending step is used
82
+ """
83
+ And the command output should contain:
84
+ """
85
+ File "features/steps/pending_steps.py", line 5, in step_pending_given
86
+ raise NotImplementedError('STEP: Given a pending step is used')
87
+ """
88
+
89
+ Scenario: Pending when step (not implemented)
90
+ When I run "behave -f plain features/use_pending_steps.feature:7"
91
+ Then it should fail
92
+ And the command output should contain:
93
+ """
94
+ Feature:
95
+ Scenario: 2
96
+ Given a step passes ... passed
97
+ When a pending step is used ... failed
98
+ """
99
+ But the command output should contain:
100
+ """
101
+ NotImplementedError: STEP: When a pending step is used
102
+ """
103
+ And the command output should contain:
104
+ """
105
+ File "features/steps/pending_steps.py", line 9, in step_pending_when
106
+ raise NotImplementedError('STEP: When a pending step is used')
107
+ """
108
+
109
+ Scenario: Pending then step (not implemented)
110
+ When I run "behave -f plain features/use_pending_steps.feature:12"
111
+ Then it should fail
112
+ And the command output should contain:
113
+ """
114
+ Feature:
115
+ Scenario: 3
116
+ Given a step passes ... passed
117
+ When another step passes ... passed
118
+ Then a pending step is used ... failed
119
+ """
120
+ But the command output should contain:
121
+ """
122
+ NotImplementedError: STEP: Then a pending step is used
123
+ """
124
+ And the command output should contain:
125
+ """
126
+ File "features/steps/pending_steps.py", line 13, in step_pending_then
127
+ raise NotImplementedError('STEP: Then a pending step is used')
128
+ """
@@ -0,0 +1,307 @@
1
+ Feature: Undefined Step
2
+
3
+ . TERMINOLOGY:
4
+ . * An undefined step is a step without matching step implementation.
5
+ .
6
+ . SPECIFICATION:
7
+ . * An undefined step should be reported after the run.
8
+ . * An undefined step should cause its scenario to fail.
9
+ . * If an undefined step is detected the remaining scenario steps are skipped.
10
+ . * All undefined steps in a scenario should be reported (issue #42).
11
+ . * Undefined steps should be detected even after a step fails in a scenario.
12
+ . * Each undefined step should be reported only once.
13
+ . * If a scenario is disabled (by tag expression, etc.),
14
+ . the undefined step discovery should not occur.
15
+ . This allows to prepare scenarios that are not intended to run (yet).
16
+ . * Option --dry-run should discover undefined steps, too.
17
+ .
18
+ . RELATED TO:
19
+ . * issue #42 Multiple undefined steps in same scenario are detected.
20
+
21
+
22
+ @setup
23
+ Scenario: Feature Setup
24
+ Given a new working directory
25
+ And a file named "features/steps/passing_steps.py" with:
26
+ """
27
+ from behave import step
28
+
29
+ @step('a step passes')
30
+ def step_passes(context):
31
+ pass
32
+
33
+ @step('a step fails')
34
+ def step_fails(context):
35
+ assert False, "XFAIL"
36
+ """
37
+ And a file named "features/undefined_last_step.feature" with:
38
+ """
39
+ Feature:
40
+ Scenario:
41
+ Given a step passes
42
+ When an undefined step is used
43
+ """
44
+
45
+ Scenario: An undefined step should be reported
46
+ When I run "behave -f plain -T features/undefined_last_step.feature"
47
+ Then it should fail
48
+ And the command output should contain:
49
+ """
50
+ Feature:
51
+ Scenario:
52
+ Given a step passes ... passed
53
+ When an undefined step is used ... undefined
54
+ """
55
+ And the command output should contain:
56
+ """
57
+ You can implement step definitions for undefined steps with these snippets:
58
+
59
+ @when(u'an undefined step is used')
60
+ def step_impl(context):
61
+ raise NotImplementedError(u'STEP: When an undefined step is used')
62
+ """
63
+ And an undefined-step snippet should exist for "When an undefined step is used"
64
+
65
+
66
+ Scenario: An undefined step should cause its scenario to fail
67
+ When I run "behave -f plain features/undefined_last_step.feature"
68
+ Then it should fail with:
69
+ """
70
+ 0 features passed, 1 failed, 0 skipped
71
+ 0 scenarios passed, 1 failed, 0 skipped
72
+ 1 step passed, 0 failed, 0 skipped, 1 undefined
73
+ """
74
+
75
+
76
+ Scenario: Additional scenario steps after an undefined step are skipped
77
+ Given a file named "features/undefined_step_and_more.feature" with:
78
+ """
79
+ Feature:
80
+ Scenario:
81
+ Given a step passes
82
+ When an undefined step is used
83
+ Then a step passes
84
+ And a step fails
85
+ """
86
+ When I run "behave -f plain -T features/undefined_step_and_more.feature"
87
+ Then it should fail with:
88
+ """
89
+ 0 features passed, 1 failed, 0 skipped
90
+ 0 scenarios passed, 1 failed, 0 skipped
91
+ 1 step passed, 0 failed, 2 skipped, 1 undefined
92
+ """
93
+ And the command output should contain:
94
+ """
95
+ Feature:
96
+ Scenario:
97
+ Given a step passes ... passed
98
+ When an undefined step is used ... undefined
99
+ """
100
+
101
+
102
+ Scenario: Two undefined steps in same scenario should be detected
103
+ Given a file named "features/two_undefined_steps1.feature" with:
104
+ """
105
+ Feature:
106
+ Scenario:
107
+ Given a step passes
108
+ When an undefined step is used
109
+ And a step fails
110
+ Then another undefined step is used
111
+ """
112
+ When I run "behave -f plain -T features/two_undefined_steps1.feature"
113
+ Then it should fail with:
114
+ """
115
+ 0 features passed, 1 failed, 0 skipped
116
+ 0 scenarios passed, 1 failed, 0 skipped
117
+ 1 step passed, 0 failed, 1 skipped, 2 undefined
118
+ """
119
+ And the command output should contain:
120
+ """
121
+ Feature:
122
+ Scenario:
123
+ Given a step passes ... passed
124
+ When an undefined step is used ... undefined
125
+ """
126
+ And undefined-step snippets should exist for:
127
+ | Step |
128
+ | When an undefined step is used |
129
+ | Then another undefined step is used |
130
+ But the command output should not contain:
131
+ """
132
+ And a step fails ... skipped
133
+ Then another undefined step is used ... undefined
134
+ """
135
+
136
+
137
+ Scenario: Two undefined steps in different scenarios
138
+ Given a file named "features/two_undefined_steps2.feature" with:
139
+ """
140
+ Feature:
141
+ Scenario:
142
+ Given a step passes
143
+ When an undefined step is used
144
+
145
+ Scenario:
146
+ Given another undefined step is used
147
+ When a step passes
148
+ """
149
+ When I run "behave -f plain -T features/two_undefined_steps2.feature"
150
+ Then it should fail with:
151
+ """
152
+ 0 features passed, 1 failed, 0 skipped
153
+ 0 scenarios passed, 2 failed, 0 skipped
154
+ 1 step passed, 0 failed, 1 skipped, 2 undefined
155
+ """
156
+ And the command output should contain:
157
+ """
158
+ Feature:
159
+ Scenario:
160
+ Given a step passes ... passed
161
+ When an undefined step is used ... undefined
162
+
163
+ Scenario:
164
+ Given another undefined step is used ... undefined
165
+ """
166
+ And undefined-step snippets should exist for:
167
+ | Step |
168
+ | When an undefined step is used |
169
+ | Given another undefined step is used |
170
+
171
+
172
+ Scenario: Undefined step in Scenario Outline
173
+ Given a file named "features/undefined_step_in_scenario_outline.feature" with:
174
+ """
175
+ Feature:
176
+ Scenario Outline:
177
+ Given a step <outcome1>
178
+ When an undefined step is used
179
+ Then a step <outcome2>
180
+
181
+ Examples:
182
+ | outcome1 | outcome2 |
183
+ | passes | passes |
184
+ | passes | fails |
185
+ | fails | passes |
186
+ | fails | fails |
187
+ """
188
+ When I run "behave -f plain -T features/undefined_step_in_scenario_outline.feature"
189
+ Then it should fail with:
190
+ """
191
+ 0 features passed, 1 failed, 0 skipped
192
+ 0 scenarios passed, 4 failed, 0 skipped
193
+ 2 steps passed, 2 failed, 4 skipped, 4 undefined
194
+ """
195
+ And an undefined-step snippet should exist for "When an undefined step is used"
196
+ And the command output should contain:
197
+ """
198
+ Feature:
199
+ Scenario Outline: -- @1.1
200
+ Given a step passes ... passed
201
+ When an undefined step is used ... undefined
202
+
203
+ Scenario Outline: -- @1.2
204
+ Given a step passes ... passed
205
+ When an undefined step is used ... undefined
206
+
207
+ Scenario Outline: -- @1.3
208
+ Given a step fails ... failed
209
+ Assertion Failed: XFAIL
210
+
211
+ Scenario Outline: -- @1.4
212
+ Given a step fails ... failed
213
+ Assertion Failed: XFAIL
214
+ """
215
+
216
+
217
+ Scenario: Two undefined step in Scenario Outline
218
+ Given a file named "features/two_undefined_step_in_scenario_outline.feature" with:
219
+ """
220
+ Feature:
221
+ Scenario Outline:
222
+ Given a step <outcome1>
223
+ When an undefined step is used
224
+ Then a step <outcome2>
225
+ And another undefined step is used
226
+
227
+ Examples:
228
+ | outcome1 | outcome2 |
229
+ | passes | passes |
230
+ | passes | fails |
231
+ | fails | passes |
232
+ | fails | fails |
233
+ """
234
+ When I run "behave -f plain features/two_undefined_step_in_scenario_outline.feature"
235
+ Then it should fail with:
236
+ """
237
+ 0 features passed, 1 failed, 0 skipped
238
+ 0 scenarios passed, 4 failed, 0 skipped
239
+ 2 steps passed, 2 failed, 4 skipped, 8 undefined
240
+ """
241
+ And undefined-step snippets should exist for:
242
+ | Step |
243
+ | When an undefined step is used |
244
+ | Then another undefined step is used |
245
+
246
+
247
+ Scenario: Undefined steps are detected if scenario is selected via tag
248
+ Given a file named "features/undefined_steps_with_tagged_scenario.feature" with:
249
+ """
250
+ Feature:
251
+
252
+ @selected
253
+ Scenario: S1
254
+ Given a step passes
255
+ And an undefined step Alice
256
+ When a step fails
257
+ Then an undefined step Bob
258
+
259
+ @selected
260
+ Scenario: S2
261
+ Given a step passes
262
+ When an undefined step Charly
263
+
264
+ @not_selected
265
+ Scenario: S3
266
+ Given an undefined step Delta
267
+ Then a step fails
268
+ """
269
+ When I run "behave -f plain --tags=@selected features/undefined_steps_with_tagged_scenario.feature"
270
+ Then it should fail with:
271
+ """
272
+ 0 features passed, 1 failed, 0 skipped
273
+ 0 scenarios passed, 2 failed, 1 skipped
274
+ 2 steps passed, 0 failed, 3 skipped, 3 undefined
275
+ """
276
+ And undefined-step snippets should exist for:
277
+ | Step |
278
+ | Given an undefined step Alice |
279
+ | Then an undefined step Bob |
280
+ | When an undefined step Charly |
281
+ But undefined-step snippets should not exist for:
282
+ | Step |
283
+ | Given a step passes |
284
+ | Given an undefined step Delta |
285
+ | When a step fails |
286
+ | Then a step fails |
287
+
288
+
289
+ Scenario: Undefined steps are detected if --dry-run option is used
290
+ When I run "behave -f plain --dry-run features/undefined_steps_with_tagged_scenario.feature"
291
+ Then it should fail with:
292
+ """
293
+ 0 features passed, 0 failed, 0 skipped, 1 untested
294
+ 0 scenarios passed, 0 failed, 0 skipped, 3 untested
295
+ 0 steps passed, 0 failed, 0 skipped, 4 undefined, 4 untested
296
+ """
297
+ And undefined-step snippets should exist for:
298
+ | Step |
299
+ | Given an undefined step Alice |
300
+ | Then an undefined step Bob |
301
+ | When an undefined step Charly |
302
+ | Given an undefined step Delta |
303
+ But undefined-step snippets should not exist for:
304
+ | Step |
305
+ | Given a step passes |
306
+ | When a step fails |
307
+ | Then a step fails |