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,181 @@
1
+ @sequential
2
+ Feature: Steps Formatter (Step Definitions Formatter)
3
+
4
+ As a test writer
5
+ I want to get a quick overview which step definitions exist
6
+ To simplify the writing of feature tests.
7
+
8
+ . SOLUTION: Use StepsFormatter in dry-run mode, like:
9
+ .
10
+ . behave --dry-run -f steps features/
11
+ .
12
+ . NOTE: This formatter is similar to the "stepdefs" formatter in cucumber.
13
+
14
+
15
+ @setup
16
+ Scenario: Feature Setup
17
+ Given a new working directory
18
+ And a file named "features/steps/passing_steps.py" with:
19
+ """
20
+ from behave import step
21
+
22
+ @step('a step passes')
23
+ def step_passes(context):
24
+ pass
25
+
26
+ @step('a step fails')
27
+ def step_fails(context):
28
+ assert False, "XFAIL-STEP"
29
+ """
30
+ And a file named "features/steps/alice_steps.py" with:
31
+ """
32
+ from behave import given, when, then
33
+
34
+ @given('{person} lives in {city}')
35
+ def step_given_person_lives_in_city(context, person, city):
36
+ pass
37
+
38
+ @when('I visit {person}')
39
+ def step_when_visit_person(context, person):
40
+ pass
41
+
42
+ @then('I meet {person} in {city}')
43
+ def step_then_meet_person_in_city(context, person, city):
44
+ pass
45
+ """
46
+ And a file named "features/steps/bob_steps.py" with:
47
+ """
48
+ from behave import given, when, then
49
+
50
+ @given('{person} works for {company}')
51
+ def step_given_person_works_for_company(context, person, company):
52
+ pass
53
+
54
+ @when('I plan a meeting with {person}')
55
+ def step_when_plan_meeting_with_person(context, person):
56
+ pass
57
+
58
+ @then('I meet him at the {company} office')
59
+ def step_then_meet_him_at_company_office(context, company):
60
+ pass
61
+ """
62
+ And an empty file named "features/none.feature"
63
+
64
+
65
+ @usecase.primary
66
+ Scenario: Show available step definitions in dry-run mode
67
+ When I run "behave --dry-run -f steps features/"
68
+ Then it should pass with:
69
+ """
70
+ GIVEN STEP DEFINITIONS[4]:
71
+ Given {person} lives in {city} # features/steps/alice_steps.py:3
72
+ Given {person} works for {company} # features/steps/bob_steps.py:3
73
+ Given a step passes # features/steps/passing_steps.py:3
74
+ Given a step fails # features/steps/passing_steps.py:7
75
+
76
+ WHEN STEP DEFINITIONS[4]:
77
+ When I visit {person} # features/steps/alice_steps.py:7
78
+ When I plan a meeting with {person} # features/steps/bob_steps.py:7
79
+ When a step passes # features/steps/passing_steps.py:3
80
+ When a step fails # features/steps/passing_steps.py:7
81
+
82
+ THEN STEP DEFINITIONS[4]:
83
+ Then I meet {person} in {city} # features/steps/alice_steps.py:11
84
+ Then I meet him at the {company} office # features/steps/bob_steps.py:11
85
+ Then a step passes # features/steps/passing_steps.py:3
86
+ Then a step fails # features/steps/passing_steps.py:7
87
+
88
+ GENERIC STEP DEFINITIONS[2]:
89
+ * a step passes # features/steps/passing_steps.py:3
90
+ * a step fails # features/steps/passing_steps.py:7
91
+ """
92
+ But note that "the GENERIC STEP DEFINITIONS can be used as given/when/then steps"
93
+
94
+
95
+ @usecase.secondary
96
+ Scenario: Show available step definitions in normal mode
97
+ When I run "behave -f steps features/"
98
+ Then it should pass with:
99
+ """
100
+ GIVEN STEP DEFINITIONS[4]:
101
+ Given {person} lives in {city} # features/steps/alice_steps.py:3
102
+ Given {person} works for {company} # features/steps/bob_steps.py:3
103
+ Given a step passes # features/steps/passing_steps.py:3
104
+ Given a step fails # features/steps/passing_steps.py:7
105
+
106
+ WHEN STEP DEFINITIONS[4]:
107
+ When I visit {person} # features/steps/alice_steps.py:7
108
+ When I plan a meeting with {person} # features/steps/bob_steps.py:7
109
+ When a step passes # features/steps/passing_steps.py:3
110
+ When a step fails # features/steps/passing_steps.py:7
111
+
112
+ THEN STEP DEFINITIONS[4]:
113
+ Then I meet {person} in {city} # features/steps/alice_steps.py:11
114
+ Then I meet him at the {company} office # features/steps/bob_steps.py:11
115
+ Then a step passes # features/steps/passing_steps.py:3
116
+ Then a step fails # features/steps/passing_steps.py:7
117
+
118
+ GENERIC STEP DEFINITIONS[2]:
119
+ * a step passes # features/steps/passing_steps.py:3
120
+ * a step fails # features/steps/passing_steps.py:7
121
+ """
122
+
123
+
124
+ @language
125
+ Scenario: Show available step definitions for language=de (German)
126
+ When I run "behave --dry-run -f steps --lang=de features/"
127
+ Then it should pass with:
128
+ """
129
+ GIVEN STEP DEFINITIONS[4]:
130
+ Angenommen {person} lives in {city} # features/steps/alice_steps.py:3
131
+ Angenommen {person} works for {company} # features/steps/bob_steps.py:3
132
+ Angenommen a step passes # features/steps/passing_steps.py:3
133
+ Angenommen a step fails # features/steps/passing_steps.py:7
134
+
135
+ WHEN STEP DEFINITIONS[4]:
136
+ Wenn I visit {person} # features/steps/alice_steps.py:7
137
+ Wenn I plan a meeting with {person} # features/steps/bob_steps.py:7
138
+ Wenn a step passes # features/steps/passing_steps.py:3
139
+ Wenn a step fails # features/steps/passing_steps.py:7
140
+
141
+ THEN STEP DEFINITIONS[4]:
142
+ Dann I meet {person} in {city} # features/steps/alice_steps.py:11
143
+ Dann I meet him at the {company} office # features/steps/bob_steps.py:11
144
+ Dann a step passes # features/steps/passing_steps.py:3
145
+ Dann a step fails # features/steps/passing_steps.py:7
146
+
147
+ GENERIC STEP DEFINITIONS[2]:
148
+ * a step passes # features/steps/passing_steps.py:3
149
+ * a step fails # features/steps/passing_steps.py:7
150
+ """
151
+ But note that "this may fail depending on the language you use with your features"
152
+
153
+
154
+ @language
155
+ Scenario: Show available step definitions for language=fr (French)
156
+ When I run "behave --dry-run -f steps --lang=fr features/"
157
+ Then it should pass with:
158
+ """
159
+ GIVEN STEP DEFINITIONS[4]:
160
+ Soit {person} lives in {city} # features/steps/alice_steps.py:3
161
+ Soit {person} works for {company} # features/steps/bob_steps.py:3
162
+ Soit a step passes # features/steps/passing_steps.py:3
163
+ Soit a step fails # features/steps/passing_steps.py:7
164
+
165
+ WHEN STEP DEFINITIONS[4]:
166
+ Quand I visit {person} # features/steps/alice_steps.py:7
167
+ Quand I plan a meeting with {person} # features/steps/bob_steps.py:7
168
+ Quand a step passes # features/steps/passing_steps.py:3
169
+ Quand a step fails # features/steps/passing_steps.py:7
170
+
171
+ THEN STEP DEFINITIONS[4]:
172
+ Alors I meet {person} in {city} # features/steps/alice_steps.py:11
173
+ Alors I meet him at the {company} office # features/steps/bob_steps.py:11
174
+ Alors a step passes # features/steps/passing_steps.py:3
175
+ Alors a step fails # features/steps/passing_steps.py:7
176
+
177
+ GENERIC STEP DEFINITIONS[2]:
178
+ * a step passes # features/steps/passing_steps.py:3
179
+ * a step fails # features/steps/passing_steps.py:7
180
+ """
181
+ But note that "this may fail depending on the language you use with your features"
@@ -0,0 +1,100 @@
1
+ @sequential
2
+ Feature: Steps Catalog Formatter
3
+
4
+ As a test writer
5
+ I want to get a quick overview how to use a step definition
6
+ By reading the step definition documentation (doc-stings).
7
+ However I am not interested in technical details such as
8
+ source location and step function names.
9
+ Also, I would prefer to view the step as they appear in a feature file.
10
+
11
+ . SOLUTION: Use StepsDocFormatter in dry-run mode, like:
12
+ .
13
+ . behave --dry-run -f steps.catalog features/
14
+
15
+
16
+ @setup
17
+ Scenario: Feature Setup
18
+ Given a new working directory
19
+ And a file named "features/steps/passing_steps.py" with:
20
+ """
21
+ from behave import step
22
+
23
+ @step('a step passes')
24
+ def step_passes(context):
25
+ '''This step always passes.'''
26
+ pass
27
+
28
+ @step('a step fails')
29
+ def step_fails(context):
30
+ '''This step is expected to fail.'''
31
+ assert False, "XFAIL-STEP"
32
+ """
33
+ And a file named "features/steps/alice_steps.py" with:
34
+ """
35
+ from behave import given, when, then
36
+
37
+ @given('{person} lives in {city}')
38
+ def step_given_person_lives_in_city(context, person, city):
39
+ '''
40
+ Setup the data where a person lives and store in the database.
41
+
42
+ :param person: Person's name (as string).
43
+ :param city: City where the person lives (as string).
44
+ '''
45
+ database = getattr(context, "database", None)
46
+ if not database:
47
+ context.database = {}
48
+ context.database[person] = { "city": city }
49
+
50
+ @when('I visit {person}')
51
+ def step_when_visit_person(context, person):
52
+ # -- NO DOC-STRING.
53
+ pass
54
+
55
+ @then('I meet {person} in {city}')
56
+ def step_then_meet_person_in_city(context, person, city):
57
+ '''
58
+ Checks if I can meet the person in the expected city.
59
+
60
+ :param person: Person's name as key (as string).
61
+ :param city: Expected city (as string).
62
+ '''
63
+ person_data = context.database.get(person, None)
64
+ assert person_data is not None, "Person %s not found" % person
65
+ assert person_data["city"] == city
66
+ """
67
+ And an empty file named "features/none.feature"
68
+
69
+
70
+ @usecase.primary
71
+ Scenario: Show documentation of available step definitions in dry-run mode
72
+ When I run "behave --steps-catalog features/"
73
+ Then it should pass with:
74
+ """
75
+ Given {person} lives in {city}
76
+ Setup the data where a person lives and store in the database.
77
+
78
+ :param person: Person's name (as string).
79
+ :param city: City where the person lives (as string).
80
+
81
+ When I visit {person}
82
+
83
+ Then I meet {person} in {city}
84
+ Checks if I can meet the person in the expected city.
85
+
86
+ :param person: Person's name as key (as string).
87
+ :param city: Expected city (as string).
88
+
89
+ Given a step passes
90
+ When a step passes
91
+ Then a step passes
92
+ This step always passes.
93
+
94
+ Given a step fails
95
+ When a step fails
96
+ Then a step fails
97
+ This step is expected to fail.
98
+ """
99
+ But note that "the step definitions are ordered by step type"
100
+ And note that "'When I visit {person}' has no doc-string"
@@ -0,0 +1,140 @@
1
+ @sequential
2
+ Feature: Steps Doc Formatter
3
+
4
+ As a test writer
5
+ I want to get a quick overview how to use a step definition
6
+ By reading the step definition documentation (doc-stings).
7
+
8
+ . SOLUTION: Use StepsDocFormatter in dry-run mode, like:
9
+ .
10
+ . behave --dry-run -f steps.doc features/
11
+
12
+
13
+ @setup
14
+ Scenario: Feature Setup
15
+ Given a new working directory
16
+ And a file named "features/steps/passing_steps.py" with:
17
+ """
18
+ from behave import step
19
+
20
+ @step('a step passes')
21
+ def step_passes(context):
22
+ '''This step always passes.'''
23
+ pass
24
+
25
+ @step('a step fails')
26
+ def step_fails(context):
27
+ '''This step is expected to fail.'''
28
+ assert False, "XFAIL-STEP"
29
+ """
30
+ And a file named "features/steps/alice_steps.py" with:
31
+ """
32
+ from behave import given, when, then
33
+
34
+ @given('{person} lives in {city}')
35
+ def step_given_person_lives_in_city(context, person, city):
36
+ '''
37
+ Setup the data where a person lives and store in the database.
38
+
39
+ :param person: Person's name (as string).
40
+ :param city: City where the person lives (as string).
41
+ '''
42
+ database = getattr(context, "database", None)
43
+ if not database:
44
+ context.database = {}
45
+ context.database[person] = { "city": city }
46
+
47
+ @when('I visit {person}')
48
+ def step_when_visit_person(context, person):
49
+ # -- NO DOC-STRING.
50
+ pass
51
+
52
+ @then('I meet {person} in {city}')
53
+ def step_then_meet_person_in_city(context, person, city):
54
+ '''
55
+ Checks if I can meet the person in the expected city.
56
+
57
+ :param person: Person's name as key (as string).
58
+ :param city: Expected city (as string).
59
+ '''
60
+ person_data = context.database.get(person, None)
61
+ assert person_data is not None, "Person %s not found" % person
62
+ assert person_data["city"] == city
63
+ """
64
+ And an empty file named "features/none.feature"
65
+
66
+
67
+ @usecase.primary
68
+ Scenario: Show documentation of available step definitions in dry-run mode
69
+ When I run "behave --dry-run -f steps.doc features/"
70
+ Then it should pass with:
71
+ """
72
+ @given('{person} lives in {city}')
73
+ Function: step_given_person_lives_in_city()
74
+ Location: features/steps/alice_steps.py:3
75
+ Setup the data where a person lives and store in the database.
76
+
77
+ :param person: Person's name (as string).
78
+ :param city: City where the person lives (as string).
79
+
80
+ @when('I visit {person}')
81
+ Function: step_when_visit_person()
82
+ Location: features/steps/alice_steps.py:16
83
+
84
+ @then('I meet {person} in {city}')
85
+ Function: step_then_meet_person_in_city()
86
+ Location: features/steps/alice_steps.py:21
87
+ Checks if I can meet the person in the expected city.
88
+
89
+ :param person: Person's name as key (as string).
90
+ :param city: Expected city (as string).
91
+
92
+ @step('a step passes')
93
+ Function: step_passes()
94
+ Location: features/steps/passing_steps.py:3
95
+ This step always passes.
96
+
97
+ @step('a step fails')
98
+ Function: step_fails()
99
+ Location: features/steps/passing_steps.py:8
100
+ This step is expected to fail.
101
+ """
102
+ But note that "the step definitions are ordered by file location"
103
+ And note that "@when('I visit {person}') has no doc-string"
104
+
105
+
106
+ @usecase.secondary
107
+ Scenario: Show documentation of available step definitions in normal mode
108
+ When I run "behave -f steps.doc features/"
109
+ Then it should pass with:
110
+ """
111
+ @given('{person} lives in {city}')
112
+ Function: step_given_person_lives_in_city()
113
+ Location: features/steps/alice_steps.py:3
114
+ Setup the data where a person lives and store in the database.
115
+
116
+ :param person: Person's name (as string).
117
+ :param city: City where the person lives (as string).
118
+
119
+ @when('I visit {person}')
120
+ Function: step_when_visit_person()
121
+ Location: features/steps/alice_steps.py:16
122
+
123
+ @then('I meet {person} in {city}')
124
+ Function: step_then_meet_person_in_city()
125
+ Location: features/steps/alice_steps.py:21
126
+ Checks if I can meet the person in the expected city.
127
+
128
+ :param person: Person's name as key (as string).
129
+ :param city: Expected city (as string).
130
+
131
+ @step('a step passes')
132
+ Function: step_passes()
133
+ Location: features/steps/passing_steps.py:3
134
+ This step always passes.
135
+
136
+ @step('a step fails')
137
+ Function: step_fails()
138
+ Location: features/steps/passing_steps.py:8
139
+ This step is expected to fail.
140
+ """
@@ -0,0 +1,404 @@
1
+ @sequential
2
+ Feature: Steps Usage Formatter
3
+
4
+ As a test writer
5
+ I want to get an overview which step definitions are used and where
6
+ To simplify the refactoring of step definitions (and features).
7
+
8
+ . SOLUTION: Use StepsUsageFormatter in dry-run mode, like:
9
+ .
10
+ . behave --dry-run -f steps.usage features/
11
+ .
12
+ . NOTE: This formatter corresponds to the "usage" formatter in cucumber.
13
+
14
+
15
+ @setup
16
+ Scenario: Feature Setup
17
+ Given a new working directory
18
+ And a file named "features/steps/passing_steps.py" with:
19
+ """
20
+ from behave import step
21
+
22
+ @step('{word:w} step passes')
23
+ def step_passes(context, word):
24
+ pass
25
+
26
+ @step('{word:w} step fails')
27
+ def step_passes(context, word):
28
+ assert False, "XFAIL-STEP"
29
+ """
30
+ And a file named "features/steps/unused_steps.py" with:
31
+ """
32
+ from behave import step
33
+
34
+ @step('an unused step')
35
+ def step_unused(context):
36
+ pass
37
+
38
+ @step('another unused step')
39
+ def step_another_unused(context):
40
+ pass
41
+ """
42
+ And a file named "features/steps/alice_steps.py" with:
43
+ """
44
+ from behave import given, when, then
45
+
46
+ @given('{person} lives in {city}')
47
+ def step_given_person_lives_in_city(context, person, city):
48
+ pass
49
+
50
+ @when('I visit {person}')
51
+ def step_when_visit_person(context, person):
52
+ pass
53
+
54
+ @then('I meet {person} in {city}')
55
+ def step_then_meet_person_in_city(context, person, city):
56
+ pass
57
+ """
58
+ And a file named "features/steps/charly_steps.py" with:
59
+ """
60
+ from behave import given, when, then
61
+
62
+ @given('{person} works for {company}')
63
+ def step_given_person_works_for_company(context, person, company):
64
+ pass
65
+
66
+ @when('I plan a meeting with {person}')
67
+ def step_when_plan_meeting_with_person(context, person):
68
+ pass
69
+
70
+ @then('I meet him at the {company} office')
71
+ def step_then_meet_him_at_company_office(context, company):
72
+ pass
73
+ """
74
+ And a file named "features/alice.feature" with:
75
+ """
76
+ Feature:
77
+ Scenario: Visit Alice
78
+ Given Alice lives in Paris
79
+ When I visit Alice
80
+ Then I meet Alice in Paris
81
+
82
+ Scenario: Visit Bob
83
+ Given Bob lives in Berlin
84
+ When I visit Bob
85
+ Then I meet Bob in Berlin
86
+ """
87
+ And a file named "features/bob.feature" with:
88
+ """
89
+ Feature:
90
+ Scenario: Visit Bob
91
+ Given Bob lives in Barcelona
92
+ When I visit Bob
93
+ Then I meet Bob in Barcelona
94
+ And a step passes
95
+ """
96
+ And a file named "features/charly.feature" with:
97
+ """
98
+ Feature:
99
+ Scenario: Meeting with Charly
100
+ Given Charly works for ACME
101
+ When I plan a meeting with Charly
102
+ Then I meet him at the ACME office
103
+ """
104
+
105
+
106
+ @usecase.primary
107
+ Scenario: Show step definitions usage with all features in dry-run mode
108
+ When I run "behave --dry-run -f steps.usage features/"
109
+ Then it should pass with:
110
+ """
111
+ @given('{person} lives in {city}') # features/steps/alice_steps.py:3
112
+ Given Alice lives in Paris # features/alice.feature:3
113
+ Given Bob lives in Berlin # features/alice.feature:8
114
+ Given Bob lives in Barcelona # features/bob.feature:3
115
+
116
+ @when('I visit {person}') # features/steps/alice_steps.py:7
117
+ When I visit Alice # features/alice.feature:4
118
+ When I visit Bob # features/alice.feature:9
119
+ When I visit Bob # features/bob.feature:4
120
+
121
+ @then('I meet {person} in {city}') # features/steps/alice_steps.py:11
122
+ Then I meet Alice in Paris # features/alice.feature:5
123
+ Then I meet Bob in Berlin # features/alice.feature:10
124
+ Then I meet Bob in Barcelona # features/bob.feature:5
125
+
126
+ @given('{person} works for {company}') # features/steps/charly_steps.py:3
127
+ Given Charly works for ACME # features/charly.feature:3
128
+
129
+ @when('I plan a meeting with {person}') # features/steps/charly_steps.py:7
130
+ When I plan a meeting with Charly # features/charly.feature:4
131
+
132
+ @then('I meet him at the {company} office') # features/steps/charly_steps.py:11
133
+ Then I meet him at the ACME office # features/charly.feature:5
134
+
135
+ @step('{word:w} step passes') # features/steps/passing_steps.py:3
136
+ And a step passes # features/bob.feature:6
137
+
138
+ UNUSED STEP DEFINITIONS[3]:
139
+ @step('{word:w} step fails') # features/steps/passing_steps.py:7
140
+ @step('an unused step') # features/steps/unused_steps.py:3
141
+ @step('another unused step') # features/steps/unused_steps.py:7
142
+ """
143
+ And note that "the UNUSED STEP DEFINITIONS are ordered by file location"
144
+ But note that "step definitions from unused_steps.py are not used by any feature"
145
+
146
+
147
+ @usecase.primary
148
+ Scenario: Show step definitions usage with one feature (dry-run mode)
149
+ When I run "behave --dry-run -f steps.usage features/alice.feature"
150
+ Then it should pass with:
151
+ """
152
+ @given('{person} lives in {city}') # features/steps/alice_steps.py:3
153
+ Given Alice lives in Paris # features/alice.feature:3
154
+ Given Bob lives in Berlin # features/alice.feature:8
155
+
156
+ @when('I visit {person}') # features/steps/alice_steps.py:7
157
+ When I visit Alice # features/alice.feature:4
158
+ When I visit Bob # features/alice.feature:9
159
+
160
+ @then('I meet {person} in {city}') # features/steps/alice_steps.py:11
161
+ Then I meet Alice in Paris # features/alice.feature:5
162
+ Then I meet Bob in Berlin # features/alice.feature:10
163
+
164
+ UNUSED STEP DEFINITIONS[7]:
165
+ @given('{person} works for {company}') # features/steps/charly_steps.py:3
166
+ @when('I plan a meeting with {person}') # features/steps/charly_steps.py:7
167
+ @then('I meet him at the {company} office') # features/steps/charly_steps.py:11
168
+ @step('{word:w} step passes') # features/steps/passing_steps.py:3
169
+ @step('{word:w} step fails') # features/steps/passing_steps.py:7
170
+ @step('an unused step') # features/steps/unused_steps.py:3
171
+ @step('another unused step') # features/steps/unused_steps.py:7
172
+ """
173
+ But note that "step definitions from charly_steps.py, passing_steps.py are now no longer used"
174
+
175
+
176
+ @usecase.primary
177
+ Scenario: Show step definitions usage with two features (dry-run mode)
178
+ When I run "behave --dry-run -f steps.usage features/alice.feature features/charly.feature"
179
+ Then it should pass with:
180
+ """
181
+ @given('{person} lives in {city}') # features/steps/alice_steps.py:3
182
+ Given Alice lives in Paris # features/alice.feature:3
183
+ Given Bob lives in Berlin # features/alice.feature:8
184
+
185
+ @when('I visit {person}') # features/steps/alice_steps.py:7
186
+ When I visit Alice # features/alice.feature:4
187
+ When I visit Bob # features/alice.feature:9
188
+
189
+ @then('I meet {person} in {city}') # features/steps/alice_steps.py:11
190
+ Then I meet Alice in Paris # features/alice.feature:5
191
+ Then I meet Bob in Berlin # features/alice.feature:10
192
+
193
+ @given('{person} works for {company}') # features/steps/charly_steps.py:3
194
+ Given Charly works for ACME # features/charly.feature:3
195
+
196
+ @when('I plan a meeting with {person}') # features/steps/charly_steps.py:7
197
+ When I plan a meeting with Charly # features/charly.feature:4
198
+
199
+ @then('I meet him at the {company} office') # features/steps/charly_steps.py:11
200
+ Then I meet him at the ACME office # features/charly.feature:5
201
+
202
+ UNUSED STEP DEFINITIONS[4]:
203
+ @step('{word:w} step passes') # features/steps/passing_steps.py:3
204
+ @step('{word:w} step fails') # features/steps/passing_steps.py:7
205
+ @step('an unused step') # features/steps/unused_steps.py:3
206
+ @step('another unused step') # features/steps/unused_steps.py:7
207
+ """
208
+ But note that "step definitions from passing_steps.py, unused_steps.py are not used by any feature"
209
+
210
+
211
+ @usecase.secondary
212
+ Scenario: Show step definitions usage with all features in normal mode
213
+ When I run "behave -f steps.usage features/"
214
+ Then it should pass with:
215
+ """
216
+ @given('{person} lives in {city}') # features/steps/alice_steps.py:3
217
+ Given Alice lives in Paris # features/alice.feature:3
218
+ Given Bob lives in Berlin # features/alice.feature:8
219
+ Given Bob lives in Barcelona # features/bob.feature:3
220
+
221
+ @when('I visit {person}') # features/steps/alice_steps.py:7
222
+ When I visit Alice # features/alice.feature:4
223
+ When I visit Bob # features/alice.feature:9
224
+ When I visit Bob # features/bob.feature:4
225
+
226
+ @then('I meet {person} in {city}') # features/steps/alice_steps.py:11
227
+ Then I meet Alice in Paris # features/alice.feature:5
228
+ Then I meet Bob in Berlin # features/alice.feature:10
229
+ Then I meet Bob in Barcelona # features/bob.feature:5
230
+
231
+ @given('{person} works for {company}') # features/steps/charly_steps.py:3
232
+ Given Charly works for ACME # features/charly.feature:3
233
+
234
+ @when('I plan a meeting with {person}') # features/steps/charly_steps.py:7
235
+ When I plan a meeting with Charly # features/charly.feature:4
236
+
237
+ @then('I meet him at the {company} office') # features/steps/charly_steps.py:11
238
+ Then I meet him at the ACME office # features/charly.feature:5
239
+
240
+ @step('{word:w} step passes') # features/steps/passing_steps.py:3
241
+ And a step passes # features/bob.feature:6
242
+
243
+ UNUSED STEP DEFINITIONS[3]:
244
+ @step('{word:w} step fails') # features/steps/passing_steps.py:7
245
+ @step('an unused step') # features/steps/unused_steps.py:3
246
+ @step('another unused step') # features/steps/unused_steps.py:7
247
+ """
248
+
249
+ @corner.case
250
+ Scenario: StepsUsageFormatter shows undefined steps
251
+ Given a file named "features/undefined.feature" with:
252
+ """
253
+ Feature: With undefined steps
254
+ Scenario:
255
+ Given a step is undefined
256
+ Then another step is undefined
257
+ """
258
+ When I run "behave --dry-run -f steps.usage features/alice.feature features/undefined.feature"
259
+ Then it should fail with:
260
+ """
261
+ 0 features passed, 0 failed, 0 skipped, 2 untested
262
+ 0 scenarios passed, 0 failed, 0 skipped, 3 untested
263
+ 0 steps passed, 0 failed, 0 skipped, 2 undefined, 6 untested
264
+ """
265
+ And the command output should contain:
266
+ """
267
+ @given('{person} lives in {city}') # features/steps/alice_steps.py:3
268
+ Given Alice lives in Paris # features/alice.feature:3
269
+ Given Bob lives in Berlin # features/alice.feature:8
270
+
271
+ @when('I visit {person}') # features/steps/alice_steps.py:7
272
+ When I visit Alice # features/alice.feature:4
273
+ When I visit Bob # features/alice.feature:9
274
+
275
+ @then('I meet {person} in {city}') # features/steps/alice_steps.py:11
276
+ Then I meet Alice in Paris # features/alice.feature:5
277
+ Then I meet Bob in Berlin # features/alice.feature:10
278
+
279
+ UNUSED STEP DEFINITIONS[7]:
280
+ @given('{person} works for {company}') # features/steps/charly_steps.py:3
281
+ @when('I plan a meeting with {person}') # features/steps/charly_steps.py:7
282
+ @then('I meet him at the {company} office') # features/steps/charly_steps.py:11
283
+ @step('{word:w} step passes') # features/steps/passing_steps.py:3
284
+ @step('{word:w} step fails') # features/steps/passing_steps.py:7
285
+ @step('an unused step') # features/steps/unused_steps.py:3
286
+ @step('another unused step') # features/steps/unused_steps.py:7
287
+
288
+ UNDEFINED STEPS[2]:
289
+ Given a step is undefined # features/undefined.feature:3
290
+ Then another step is undefined # features/undefined.feature:4
291
+ """
292
+
293
+
294
+ @corner.case
295
+ Scenario: StepsUsageFormatter shows all locations of undefined step usage
296
+
297
+ Ensure that all location are shown where an undefined step is used
298
+
299
+ Given a file named "features/undefined_duplicates.feature" with:
300
+ """
301
+ Feature: With undefined steps
302
+
303
+ Scenario: Same undefined step used twice
304
+ Given a step is undefined
305
+ And a step is undefined
306
+ Then a step passes
307
+
308
+ Scenario: Same undefined step used again
309
+ Given a step passes
310
+ And a step is undefined
311
+ """
312
+ When I run "behave --dry-run -f steps.usage features/undefined_duplicates.feature"
313
+ Then it should fail with:
314
+ """
315
+ 0 scenarios passed, 0 failed, 0 skipped, 2 untested
316
+ 0 steps passed, 0 failed, 0 skipped, 3 undefined, 2 untested
317
+ """
318
+ And the command output should contain:
319
+ """
320
+ UNDEFINED STEPS[3]:
321
+ Given a step is undefined # features/undefined_duplicates.feature:4
322
+ And a step is undefined # features/undefined_duplicates.feature:5
323
+ And a step is undefined # features/undefined_duplicates.feature:10
324
+ """
325
+
326
+ @use_outline
327
+ Scenario: Scenario Outlines should not cause duplicated step entries
328
+
329
+ Scenario Outlines generate Scenarios that use the same step multiple times.
330
+ This duplication should not be listed.
331
+
332
+ Given a file named "features/use_scenario_outline.feature" with:
333
+ """
334
+ Feature:
335
+ Scenario Outline:
336
+ Given a step <outcome1>
337
+ When another step <outcome2>
338
+
339
+ Examples:
340
+ | outcome1 | outcome2 |
341
+ | passes | passes |
342
+ | passes | fails |
343
+ """
344
+ When I run "behave --dry-run -f steps.usage features/use_scenario_outline.feature"
345
+ Then it should pass with:
346
+ """
347
+ 0 scenarios passed, 0 failed, 0 skipped, 2 untested
348
+ 0 steps passed, 0 failed, 0 skipped, 0 undefined, 4 untested
349
+ """
350
+ And the command output should contain:
351
+ """
352
+ @step('{word:w} step passes') # features/steps/passing_steps.py:3
353
+ Given a step passes # features/use_scenario_outline.feature:3
354
+ When another step passes # features/use_scenario_outline.feature:4
355
+
356
+ @step('{word:w} step fails') # features/steps/passing_steps.py:7
357
+ When another step fails # features/use_scenario_outline.feature:4
358
+ """
359
+ But the command output should not contain:
360
+ """
361
+ @step('{word:w} step passes') # features/steps/passing_steps.py:3
362
+ Given a step passes # features/use_scenario_outline.feature:3
363
+ When another step passes # features/use_scenario_outline.feature:4
364
+ Given a step passes # features/use_scenario_outline.feature:3
365
+ """
366
+
367
+ @use_outline
368
+ Scenario: Scenario Outlines should not cause duplicated entries for undefined steps
369
+
370
+ Scenario Outlines generate Scenarios that use the same step multiple times.
371
+ This duplication should not be listed.
372
+
373
+ Given a file named "features/scenario_outline_with_undefined.feature" with:
374
+ """
375
+ Feature:
376
+ Scenario Outline:
377
+ Given a step is <status1>
378
+ When another step is <status2>
379
+
380
+ Examples:
381
+ | status1 | status2 |
382
+ | undefined | undefined |
383
+ | undefined | undefined |
384
+ """
385
+ When I run "behave --dry-run -f steps.usage features/scenario_outline_with_undefined.feature"
386
+ Then it should fail with:
387
+ """
388
+ 0 scenarios passed, 0 failed, 0 skipped, 2 untested
389
+ 0 steps passed, 0 failed, 0 skipped, 4 undefined
390
+ """
391
+ And the command output should contain:
392
+ """
393
+ UNDEFINED STEPS[2]:
394
+ Given a step is undefined # features/scenario_outline_with_undefined.feature:3
395
+ When another step is undefined # features/scenario_outline_with_undefined.feature:4
396
+ """
397
+ But the command output should not contain:
398
+ """
399
+ UNDEFINED STEPS[2]:
400
+ Given a step is undefined # features/scenario_outline_with_undefined.feature:3
401
+ Given a step is undefined # features/scenario_outline_with_undefined.feature:3
402
+ When another step is undefined # features/scenario_outline_with_undefined.feature:4
403
+ When another step is undefined # features/scenario_outline_with_undefined.feature:4
404
+ """