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,104 @@
1
+ Feature: Default Tags
2
+
3
+ As a tester
4
+ I want to define a number of default tags in a configuration file
5
+ So that I do not have to specify these tags each time on the command-line.
6
+
7
+ . NOTES:
8
+ . * default tags are normally used to exclude/disable tag(s)
9
+ . * command-line tags override the default tags
10
+ . * default tags can be disabled by using the following expression
11
+ . on the command-line: behave --tags=-xxx ... (where xxx is an unknown tag)
12
+
13
+
14
+ @setup
15
+ Scenario: Test Setup
16
+ Given a new working directory
17
+ And a file named "features/one.feature" with:
18
+ """
19
+ Feature:
20
+ @not_implemented
21
+ Scenario: Alice
22
+ Given missing step passes
23
+
24
+ @foo
25
+ Scenario: Bob
26
+ Given another step passes
27
+ Then a step passes
28
+ """
29
+ And a file named "features/steps/passing_steps.py" with:
30
+ """
31
+ from behave import step
32
+
33
+ @step('{word:w} step passes')
34
+ def step_passes(context, word):
35
+ pass
36
+ """
37
+
38
+ Scenario: Use default tags with one tag
39
+ Given a file named "behave.ini" with:
40
+ """
41
+ [behave]
42
+ show_skipped = false
43
+ default_tags = -@not_implemented
44
+ """
45
+ When I run "behave -f plain features"
46
+ Then it should pass with:
47
+ """
48
+ 1 scenario passed, 0 failed, 1 skipped
49
+ 2 steps passed, 0 failed, 1 skipped, 0 undefined
50
+ """
51
+ And the command output should contain "Scenario: Bob"
52
+ But the command output should not contain "Scenario: Alice"
53
+
54
+
55
+ Scenario: Override default tag on command-line
56
+ Given a file named "behave.ini" with:
57
+ """
58
+ [behave]
59
+ show_skipped = false
60
+ default_tags = -@not_implemented
61
+ """
62
+ When I run "behave -f plain --tags=not_implemented features"
63
+ Then it should pass with:
64
+ """
65
+ 1 scenario passed, 0 failed, 1 skipped
66
+ 1 step passed, 0 failed, 2 skipped, 0 undefined
67
+ """
68
+ And the command output should contain "Scenario: Alice"
69
+ But the command output should not contain "Scenario: Bob"
70
+
71
+ Scenario: Use default tags with two tags
72
+ Given a file named "behave.ini" with:
73
+ """
74
+ [behave]
75
+ show_skipped = false
76
+ default_tags = -@not_implemented -@xfail
77
+ # tag logic := not @not_implemented and not @xfail
78
+ """
79
+ When I run "behave -f plain features"
80
+ Then it should pass with:
81
+ """
82
+ 1 scenario passed, 0 failed, 1 skipped
83
+ 2 steps passed, 0 failed, 1 skipped, 0 undefined
84
+ """
85
+ And the command output should contain "Scenario: Bob"
86
+ But the command output should not contain "Scenario: Alice"
87
+
88
+
89
+ Scenario: Override default tags on command-line
90
+ Given a file named "behave.ini" with:
91
+ """
92
+ [behave]
93
+ show_skipped = false
94
+ default_tags = -@not_implemented -@xfail
95
+ # tag logic := not @not_implemented and not @xfail
96
+ """
97
+ When I run "behave -f plain --tags=not_implemented,foo features"
98
+ Then it should pass with:
99
+ """
100
+ 2 scenarios passed, 0 failed, 0 skipped
101
+ 3 steps passed, 0 failed, 0 skipped, 0 undefined
102
+ """
103
+ And the command output should contain "Scenario: Alice"
104
+ But the command output should contain "Scenario: Bob"
@@ -0,0 +1,105 @@
1
+ Feature: Tag Expression
2
+
3
+ As a tester
4
+ I want to select a subset of all features/scenarios by using tags
5
+ And I want to include and/or exclude some tags
6
+ So that I can focus on the "important" scenarios (and features).
7
+
8
+ . SPECIFICATION:
9
+ . * a tag expression is a boolean expression
10
+ . * a tag expression supports the operators: and, or, not
11
+ . * a tag expression is structured as:
12
+ . (or_expr1) and (or_expr2) and ...
13
+ .
14
+ . EXAMPLES:
15
+ . | Tag logic | Tag expression | Comment |
16
+ . | @foo | @foo | Select elements with @foo tag |
17
+ . | @foo | foo | Same, '@' is optional. |
18
+ . | not @foo | -@foo | Use minus for "not". |
19
+ . | not @foo | ~foo | Same, use tilde instead of minus |
20
+ . | @foo or @bar | @foo,@bar | Use comma for "or". |
21
+ . | @foo and @bar | @foo @bar | Use space separated terms. |
22
+ . | @foo or not @bar | @foo,-@bar | |
23
+ . | @foo and not @bar | @foo -@bar | |
24
+
25
+
26
+ Scenario: Select @foo
27
+ Given the tag expression "@foo"
28
+ Then the tag expression selects elements with tags:
29
+ | tags | selected? |
30
+ | | no |
31
+ | @foo | yes |
32
+ | @other | no |
33
+ | @foo @other | yes |
34
+
35
+
36
+ Scenario: Tag expression with 0..1 tags
37
+ Given the model elements with name and tags:
38
+ | name | tags | Comment |
39
+ | S0 | | Untagged |
40
+ | S1 | @foo | With 1 tag |
41
+ | S2 | @other | |
42
+ | S3 | @foo @other | With 2 tags |
43
+ And note that "are all combinations of 0..2 tags"
44
+ Then the tag expression selects model elements with:
45
+ | tag expression | selected? | Case comment |
46
+ | | S0, S1, S2, S3 | Select all (empty tag expression) |
47
+ | @foo | S1, S3 | Select @foo |
48
+ | -@foo | S0, S2 | not @foo, selects untagged elements |
49
+ But note that "tag expression variants are also supported"
50
+ And the tag expression selects model elements with:
51
+ | tag expression | selected? | Case comment |
52
+ | foo | S1, S3 | @foo: '@' is optional |
53
+ | -foo | S0, S2 | not @foo: '@' is optional |
54
+ | ~foo | S0, S2 | not @foo: tilde as minus |
55
+ | ~@foo | S0, S2 | not @foo: '~@' is supported |
56
+
57
+
58
+ Scenario: Tag expression with two tags (@foo, @bar)
59
+ Given the model elements with name and tags:
60
+ | name | tags | Comment |
61
+ | S0 | | Untagged |
62
+ | S1 | @foo | With 1 tag |
63
+ | S2 | @bar | |
64
+ | S3 | @other | |
65
+ | S4 | @foo @bar | With 2 tags |
66
+ | S5 | @foo @other | |
67
+ | S6 | @bar @other | |
68
+ | S7 | @foo @bar @other | With 3 tags |
69
+ And note that "are all combinations of 0..3 tags"
70
+ Then the tag expression selects model elements with:
71
+ | tag expression | selected? | Case |
72
+ | | S0, S1, S2, S3, S4, S5, S6, S7 | Select all |
73
+ | @foo,@bar | S1, S2, S4, S5, S6, S7 | @foo or @bar |
74
+ | @foo,-@bar | S0, S1, S3, S4, S5, S7 | @foo or not @bar |
75
+ | -@foo,-@bar | S0, S1, S2, S3, S5, S6 | not @foo or @not @bar |
76
+ | @foo @bar | S4, S7 | @foo and @bar |
77
+ | @foo -@bar | S1, S5 | @foo and not @bar |
78
+ | -@foo -@bar | S0, S3 | not @foo and not @bar |
79
+
80
+
81
+ Scenario: Tag expression with three tags (@foo, @bar, @zap)
82
+ Given the model elements with name and tags:
83
+ | name | tags | Comment |
84
+ | S0 | | Untagged |
85
+ | S1 | @foo | With 1 tag |
86
+ | S2 | @bar | |
87
+ | S3 | @zap | |
88
+ | S4 | @other | |
89
+ | S5 | @foo @bar | With 2 tags |
90
+ | S6 | @foo @zap | |
91
+ | S7 | @foo @other | |
92
+ | S8 | @bar @zap | |
93
+ | S9 | @bar @other | |
94
+ | S10 | @zap @other | |
95
+ | S11 | @foo @bar @zap | With 3 tags |
96
+ | S12 | @foo @bar @other | |
97
+ | S13 | @foo @zap @other | |
98
+ | S14 | @bar @zap @other | |
99
+ | S15 | @foo @bar @zap @other | With 4 tags |
100
+ And note that "are all combinations of 0..4 tags"
101
+ Then the tag expression selects model elements with:
102
+ | tag expression | selected? | Case |
103
+ | @foo,@bar @zap | S6, S8, S11, S13, S14, S15 | (@foo or @bar) and @zap |
104
+ | @foo,@bar -@zap | S1, S2, S5, S7, S9, S12 | (@foo or @bar) and not @zap |
105
+ | @foo,-@bar @zap | S3, S6, S10, S11, S13, S15 | (@foo or not @bar) and @zap |
@@ -0,0 +1,331 @@
1
+ Feature: User-specific Configuration Data (userdata)
2
+
3
+ As a test writer
4
+ I want to provide my own configuration data
5
+ So that the test suite and/or the environment can be adapted to its needs.
6
+
7
+ . MECHANISM:
8
+ . * Use -D name=value (--define) option to specify user data on command-line.
9
+ . * Specify user data in section "behave.userdata" of "behave.ini"
10
+ . * Load/setup user data in before_all() hook (advanced cases)
11
+ .
12
+ . USING USER DATA:
13
+ . * context.config.userdata (as dict)
14
+ .
15
+ . SUPPORTED DATA TYPES (from "behave.ini" and command-line):
16
+ . * string
17
+ . * bool-like (= "true", if definition has no value)
18
+
19
+ @setup
20
+ Scenario: Feature Setup
21
+ Given a new working directory
22
+ And a file named "features/steps/pass_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
+ And a file named "features/steps/userdata_steps.py" with:
31
+ """
32
+ from behave import step
33
+ from hamcrest import assert_that, equal_to
34
+
35
+ @step('the following user-data is provided')
36
+ def step_userdata_is_provided_with_table(context):
37
+ assert context.table, "REQUIRE: table"
38
+ context.table.require_columns(["name", "value"])
39
+ userdata = context.config.userdata
40
+ for row in context.table.rows:
41
+ name = row["name"]
42
+ expected_value = row["value"]
43
+ if name in userdata:
44
+ actual_value = userdata[name]
45
+ assert_that(str(actual_value), equal_to(expected_value))
46
+ else:
47
+ assert False, "MISSING: userdata %s" % name
48
+
49
+ @step('I modify the user-data with')
50
+ def step_modify_userdata_with_table(context):
51
+ assert context.table, "REQUIRE: table"
52
+ context.table.require_columns(["name", "value"])
53
+ userdata = context.config.userdata
54
+ for row in context.table.rows:
55
+ name = row["name"]
56
+ value = row["value"]
57
+ userdata[name] = value
58
+ """
59
+
60
+ @userdata.define
61
+ Scenario: Use define command-line option
62
+ Given a file named "features/userdata_ex1.feature" with:
63
+ """
64
+ Feature:
65
+ Scenario:
66
+ Given the following user-data is provided:
67
+ | name | value |
68
+ | person1 | Alice |
69
+ | person2 | Bob |
70
+ """
71
+ And an empty file named "behave.ini"
72
+ When I run "behave -D person1=Alice --define person2=Bob features/userdata_ex1.feature"
73
+ Then it should pass with:
74
+ """
75
+ 1 scenario passed, 0 failed, 0 skipped
76
+ 1 step passed, 0 failed, 0 skipped, 0 undefined
77
+ """
78
+
79
+ @userdata.define
80
+ Scenario: Duplicated define with other value overrides first value
81
+ Given a file named "features/userdata_ex2.feature" with:
82
+ """
83
+ Feature:
84
+ Scenario:
85
+ Given the following user-data is provided:
86
+ | name | value |
87
+ | person1 | Bob |
88
+ """
89
+ And an empty file named "behave.ini"
90
+ When I run "behave -D person1=Alice -D person1=Bob features/userdata_ex2.feature"
91
+ Then it should pass with:
92
+ """
93
+ 1 scenario passed, 0 failed, 0 skipped
94
+ 1 step passed, 0 failed, 0 skipped, 0 undefined
95
+ """
96
+
97
+ @userdata.define
98
+ Scenario: Use boolean flag as command-line definition
99
+
100
+ Ensure that command-line define without value part is a boolean flag.
101
+
102
+ Given a file named "features/userdata_ex3.feature" with:
103
+ """
104
+ Feature:
105
+ Scenario:
106
+ Given the following user-data is provided:
107
+ | name | value |
108
+ | DEBUG | true |
109
+ """
110
+ And an empty file named "behave.ini"
111
+ When I run "behave -D DEBUG features/userdata_ex3.feature"
112
+ Then it should pass with:
113
+ """
114
+ 1 scenario passed, 0 failed, 0 skipped
115
+ 1 step passed, 0 failed, 0 skipped, 0 undefined
116
+ """
117
+
118
+ @userdata.config
119
+ Scenario: Use user-data from behave configuration file
120
+ Given a file named "behave.ini" with:
121
+ """
122
+ [behave.userdata]
123
+ person1 = Alice
124
+ person2 = Bob
125
+ """
126
+ When I run "behave features/userdata_ex1.feature"
127
+ Then it should pass with:
128
+ """
129
+ 1 scenario passed, 0 failed, 0 skipped
130
+ 1 step passed, 0 failed, 0 skipped, 0 undefined
131
+ """
132
+
133
+ @userdata.config
134
+ Scenario: Override user-data from behave configuration file on command-line
135
+ Given a file named "features/userdata_config2.feature" with:
136
+ """
137
+ Feature:
138
+ Scenario:
139
+ Given the following user-data is provided:
140
+ | name | value |
141
+ | person1 | Charly |
142
+ | person2 | Bob |
143
+ """
144
+ And a file named "behave.ini" with:
145
+ """
146
+ [behave.userdata]
147
+ person1 = Alice
148
+ person2 = Bob
149
+ """
150
+ When I run "behave -D person1=Charly features/userdata_config2.feature"
151
+ Then it should pass with:
152
+ """
153
+ 1 scenario passed, 0 failed, 0 skipped
154
+ 1 step passed, 0 failed, 0 skipped, 0 undefined
155
+ """
156
+
157
+ @userdata.config
158
+ Scenario: Extend user-data from behave configuration file on command-line
159
+ Given a file named "features/userdata_config3.feature" with:
160
+ """
161
+ Feature:
162
+ Scenario:
163
+ Given the following user-data is provided:
164
+ | name | value |
165
+ | person1 | Alice |
166
+ | person2 | Bob |
167
+ | person3 | Charly |
168
+ """
169
+ And a file named "behave.ini" with:
170
+ """
171
+ [behave.userdata]
172
+ person1 = Alice
173
+ person2 = Bob
174
+ """
175
+ When I run "behave -D person3=Charly features/userdata_config3.feature"
176
+ Then it should pass with:
177
+ """
178
+ 1 scenario passed, 0 failed, 0 skipped
179
+ 1 step passed, 0 failed, 0 skipped, 0 undefined
180
+ """
181
+
182
+ @userdata.load
183
+ Scenario: Load user-data configuration in before_all hook (JSON)
184
+ Given an empty file named "behave.ini"
185
+ And a file named "features/environment.py" with:
186
+ """
187
+ import json
188
+ import os.path
189
+
190
+ def before_all(context):
191
+ userdata = context.config.userdata
192
+ configfile = userdata.get("configfile", "userconfig.json")
193
+ if os.path.exists(configfile):
194
+ config = json.load(open(configfile))
195
+ userdata.update(config)
196
+ """
197
+ And a file named "userconfig.json" with:
198
+ """
199
+ {
200
+ "person1": "Anna",
201
+ "person2": "Beatrix"
202
+ }
203
+ """
204
+ And a file named "features/userdata_load1.feature" with:
205
+ """
206
+ Feature:
207
+ Scenario:
208
+ Given the following user-data is provided:
209
+ | name | value |
210
+ | person1 | Anna |
211
+ | person2 | Beatrix |
212
+ """
213
+ When I run "behave features/userdata_load1.feature"
214
+ Then it should pass with:
215
+ """
216
+ 1 scenario passed, 0 failed, 0 skipped
217
+ 1 step passed, 0 failed, 0 skipped, 0 undefined
218
+ """
219
+
220
+ @userdata.load
221
+ Scenario: Load user-data configuration in before_all hook (INI)
222
+ Given a file named "behave.ini" with:
223
+ """
224
+ [behave.userdata]
225
+ configfile = userconfig.ini
226
+ config_section = behave.userdata.more
227
+ """
228
+ And a file named "userconfig.ini" with:
229
+ """
230
+ [behave.userdata.more]
231
+ person1 = Anna2
232
+ person2 = Beatrix2
233
+ """
234
+ And a file named "features/environment.py" with:
235
+ """
236
+ try:
237
+ import configparser
238
+ except:
239
+ import ConfigParser as configparser # -- PY2
240
+
241
+ def before_all(context):
242
+ userdata = context.config.userdata
243
+ configfile = userdata.get("configfile", "userconfig.ini")
244
+ section = userdata.get("config_section", "behave.userdata")
245
+ parser = configparser.SafeConfigParser()
246
+ parser.read(configfile)
247
+ if parser.has_section(section):
248
+ userdata.update(parser.items(section))
249
+ """
250
+ And a file named "features/userdata_load2.feature" with:
251
+ """
252
+ Feature:
253
+ Scenario:
254
+ Given the following user-data is provided:
255
+ | name | value |
256
+ | person1 | Anna2 |
257
+ | person2 | Beatrix2 |
258
+ """
259
+ When I run "behave features/userdata_load2.feature"
260
+ Then it should pass with:
261
+ """
262
+ 1 scenario passed, 0 failed, 0 skipped
263
+ 1 step passed, 0 failed, 0 skipped, 0 undefined
264
+ """
265
+
266
+ @bad_practice
267
+ @userdata.modify
268
+ Scenario: Modified user-data is used by the remaining features/scenarios
269
+
270
+ Given a file named "features/userdata_modify1.feature" with:
271
+ """
272
+ Feature:
273
+ Scenario:
274
+ Given the following user-data is provided:
275
+ | name | value |
276
+ | person1 | Alice |
277
+ | person2 | Bob |
278
+ When I modify the user-data with:
279
+ | name | value |
280
+ | person1 | MODIFIED_VALUE |
281
+ Then the following user-data is provided:
282
+ | name | value |
283
+ | person1 | MODIFIED_VALUE |
284
+ | person2 | Bob |
285
+
286
+ Scenario: Next scenario has modified user-data, too
287
+ Given the following user-data is provided:
288
+ | name | value |
289
+ | person1 | MODIFIED_VALUE |
290
+ | person2 | Bob |
291
+ """
292
+ And a file named "behave.ini" with:
293
+ """
294
+ [behave.userdata]
295
+ person1 = Alice
296
+ person2 = Bob
297
+ """
298
+ When I run "behave features/userdata_modify1.feature"
299
+ Then it should pass with:
300
+ """
301
+ 2 scenarios passed, 0 failed, 0 skipped
302
+ 4 steps passed, 0 failed, 0 skipped, 0 undefined
303
+ """
304
+ But note that "modifying userdata is BAD-PRACTICE, except in before_all() hook"
305
+
306
+ @userdata.case_sensitive
307
+ Scenario: Loaded user-data from configuration should have case-sensitive keys
308
+
309
+ Given a file named "features/userdata_case_sensitive.feature" with:
310
+ """
311
+ Feature:
312
+ Scenario:
313
+ Given the following user-data is provided:
314
+ | name | value |
315
+ | CamelCaseKey | 1 |
316
+ | CAPS_SNAKE_KEY | 2 |
317
+ | lower_snake_key | 3 |
318
+ """
319
+ And a file named "behave.ini" with:
320
+ """
321
+ [behave.userdata]
322
+ CamelCaseKey = 1
323
+ CAPS_SNAKE_KEY = 2
324
+ lower_snake_key = 3
325
+ """
326
+ When I run "behave features/userdata_case_sensitive.feature"
327
+ Then it should pass with:
328
+ """
329
+ 1 scenario passed, 0 failed, 0 skipped
330
+ 1 step passed, 0 failed, 0 skipped, 0 undefined
331
+ """