busser-behave 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (418) hide show
  1. checksums.yaml +7 -0
  2. data/.cane +0 -0
  3. data/.gitignore +17 -0
  4. data/.tailor +4 -0
  5. data/.travis.yml +11 -0
  6. data/CHANGELOG.md +3 -0
  7. data/Gemfile +3 -0
  8. data/LICENSE +15 -0
  9. data/README.md +41 -0
  10. data/Rakefile +68 -0
  11. data/busser-behave.gemspec +30 -0
  12. data/features/plugin_install_command.feature +11 -0
  13. data/features/plugin_list_command.feature +8 -0
  14. data/features/support/env.rb +13 -0
  15. data/features/test_command.feature +31 -0
  16. data/lib/busser/behave/version.rb +26 -0
  17. data/lib/busser/runner_plugin/behave.rb +37 -0
  18. data/vendor/behave/CHANGES.rst +483 -0
  19. data/vendor/behave/LICENSE +23 -0
  20. data/vendor/behave/MANIFEST.in +37 -0
  21. data/vendor/behave/PROJECT_INFO.rst +21 -0
  22. data/vendor/behave/README.rst +112 -0
  23. data/vendor/behave/VERSION.txt +1 -0
  24. data/vendor/behave/behave.ini +22 -0
  25. data/vendor/behave/behave/__init__.py +30 -0
  26. data/vendor/behave/behave/__main__.py +187 -0
  27. data/vendor/behave/behave/_stepimport.py +185 -0
  28. data/vendor/behave/behave/_types.py +134 -0
  29. data/vendor/behave/behave/api/__init__.py +7 -0
  30. data/vendor/behave/behave/api/async_step.py +283 -0
  31. data/vendor/behave/behave/capture.py +227 -0
  32. data/vendor/behave/behave/compat/__init__.py +5 -0
  33. data/vendor/behave/behave/compat/collections.py +20 -0
  34. data/vendor/behave/behave/configuration.py +788 -0
  35. data/vendor/behave/behave/contrib/__init__.py +0 -0
  36. data/vendor/behave/behave/contrib/scenario_autoretry.py +73 -0
  37. data/vendor/behave/behave/formatter/__init__.py +12 -0
  38. data/vendor/behave/behave/formatter/_builtins.py +39 -0
  39. data/vendor/behave/behave/formatter/_registry.py +135 -0
  40. data/vendor/behave/behave/formatter/ansi_escapes.py +91 -0
  41. data/vendor/behave/behave/formatter/base.py +200 -0
  42. data/vendor/behave/behave/formatter/formatters.py +57 -0
  43. data/vendor/behave/behave/formatter/json.py +253 -0
  44. data/vendor/behave/behave/formatter/null.py +12 -0
  45. data/vendor/behave/behave/formatter/plain.py +158 -0
  46. data/vendor/behave/behave/formatter/pretty.py +351 -0
  47. data/vendor/behave/behave/formatter/progress.py +287 -0
  48. data/vendor/behave/behave/formatter/rerun.py +114 -0
  49. data/vendor/behave/behave/formatter/sphinx_steps.py +372 -0
  50. data/vendor/behave/behave/formatter/sphinx_util.py +118 -0
  51. data/vendor/behave/behave/formatter/steps.py +497 -0
  52. data/vendor/behave/behave/formatter/tags.py +178 -0
  53. data/vendor/behave/behave/i18n.py +614 -0
  54. data/vendor/behave/behave/importer.py +102 -0
  55. data/vendor/behave/behave/json_parser.py +264 -0
  56. data/vendor/behave/behave/log_capture.py +233 -0
  57. data/vendor/behave/behave/matchers.py +402 -0
  58. data/vendor/behave/behave/model.py +1737 -0
  59. data/vendor/behave/behave/model_core.py +416 -0
  60. data/vendor/behave/behave/model_describe.py +105 -0
  61. data/vendor/behave/behave/parser.py +615 -0
  62. data/vendor/behave/behave/reporter/__init__.py +0 -0
  63. data/vendor/behave/behave/reporter/base.py +45 -0
  64. data/vendor/behave/behave/reporter/junit.py +473 -0
  65. data/vendor/behave/behave/reporter/summary.py +94 -0
  66. data/vendor/behave/behave/runner.py +753 -0
  67. data/vendor/behave/behave/runner_util.py +417 -0
  68. data/vendor/behave/behave/step_registry.py +112 -0
  69. data/vendor/behave/behave/tag_expression.py +111 -0
  70. data/vendor/behave/behave/tag_matcher.py +465 -0
  71. data/vendor/behave/behave/textutil.py +137 -0
  72. data/vendor/behave/behave/userdata.py +130 -0
  73. data/vendor/behave/behave4cmd0/__all_steps__.py +12 -0
  74. data/vendor/behave/behave4cmd0/__init__.py +5 -0
  75. data/vendor/behave/behave4cmd0/__setup.py +11 -0
  76. data/vendor/behave/behave4cmd0/command_shell.py +216 -0
  77. data/vendor/behave/behave4cmd0/command_shell_proc.py +256 -0
  78. data/vendor/behave/behave4cmd0/command_steps.py +532 -0
  79. data/vendor/behave/behave4cmd0/command_util.py +147 -0
  80. data/vendor/behave/behave4cmd0/failing_steps.py +49 -0
  81. data/vendor/behave/behave4cmd0/log/__init__.py +1 -0
  82. data/vendor/behave/behave4cmd0/log/steps.py +395 -0
  83. data/vendor/behave/behave4cmd0/note_steps.py +29 -0
  84. data/vendor/behave/behave4cmd0/passing_steps.py +36 -0
  85. data/vendor/behave/behave4cmd0/pathutil.py +146 -0
  86. data/vendor/behave/behave4cmd0/setup_command_shell.py +24 -0
  87. data/vendor/behave/behave4cmd0/textutil.py +304 -0
  88. data/vendor/behave/bin/behave +44 -0
  89. data/vendor/behave/bin/behave.cmd +10 -0
  90. data/vendor/behave/bin/behave.junit_filter.py +85 -0
  91. data/vendor/behave/bin/behave.step_durations.py +163 -0
  92. data/vendor/behave/bin/behave2cucumber_json.py +63 -0
  93. data/vendor/behave/bin/behave_cmd.py +44 -0
  94. data/vendor/behave/bin/convert_i18n_yaml.py +77 -0
  95. data/vendor/behave/bin/explore_platform_encoding.py +24 -0
  96. data/vendor/behave/bin/i18n.yml +621 -0
  97. data/vendor/behave/bin/invoke +8 -0
  98. data/vendor/behave/bin/invoke.cmd +9 -0
  99. data/vendor/behave/bin/json.format.py +167 -0
  100. data/vendor/behave/bin/jsonschema_validate.py +122 -0
  101. data/vendor/behave/bin/make_localpi.py +279 -0
  102. data/vendor/behave/bin/project_bootstrap.sh +30 -0
  103. data/vendor/behave/bin/toxcmd.py +270 -0
  104. data/vendor/behave/bin/toxcmd3.py +270 -0
  105. data/vendor/behave/conftest.py +27 -0
  106. data/vendor/behave/docs/Makefile +154 -0
  107. data/vendor/behave/docs/_static/agogo.css +501 -0
  108. data/vendor/behave/docs/_static/behave_logo.png +0 -0
  109. data/vendor/behave/docs/_static/behave_logo1.png +0 -0
  110. data/vendor/behave/docs/_static/behave_logo2.png +0 -0
  111. data/vendor/behave/docs/_static/behave_logo3.png +0 -0
  112. data/vendor/behave/docs/_themes/LICENSE +45 -0
  113. data/vendor/behave/docs/_themes/kr/layout.html +17 -0
  114. data/vendor/behave/docs/_themes/kr/relations.html +19 -0
  115. data/vendor/behave/docs/_themes/kr/static/flasky.css_t +480 -0
  116. data/vendor/behave/docs/_themes/kr/static/small_flask.css +90 -0
  117. data/vendor/behave/docs/_themes/kr/theme.conf +7 -0
  118. data/vendor/behave/docs/_themes/kr_small/layout.html +22 -0
  119. data/vendor/behave/docs/_themes/kr_small/static/flasky.css_t +287 -0
  120. data/vendor/behave/docs/_themes/kr_small/theme.conf +10 -0
  121. data/vendor/behave/docs/api.rst +408 -0
  122. data/vendor/behave/docs/appendix.rst +19 -0
  123. data/vendor/behave/docs/behave.rst +640 -0
  124. data/vendor/behave/docs/behave.rst-template +86 -0
  125. data/vendor/behave/docs/behave_ecosystem.rst +81 -0
  126. data/vendor/behave/docs/comparison.rst +85 -0
  127. data/vendor/behave/docs/conf.py +293 -0
  128. data/vendor/behave/docs/context_attributes.rst +66 -0
  129. data/vendor/behave/docs/django.rst +192 -0
  130. data/vendor/behave/docs/formatters.rst +61 -0
  131. data/vendor/behave/docs/gherkin.rst +673 -0
  132. data/vendor/behave/docs/index.rst +57 -0
  133. data/vendor/behave/docs/install.rst +60 -0
  134. data/vendor/behave/docs/more_info.rst +184 -0
  135. data/vendor/behave/docs/new_and_noteworthy.rst +18 -0
  136. data/vendor/behave/docs/new_and_noteworthy_v1.2.4.rst +11 -0
  137. data/vendor/behave/docs/new_and_noteworthy_v1.2.5.rst +814 -0
  138. data/vendor/behave/docs/new_and_noteworthy_v1.2.6.rst +255 -0
  139. data/vendor/behave/docs/parse_builtin_types.rst +59 -0
  140. data/vendor/behave/docs/philosophy.rst +235 -0
  141. data/vendor/behave/docs/regular_expressions.rst +71 -0
  142. data/vendor/behave/docs/related.rst +14 -0
  143. data/vendor/behave/docs/test_domains.rst +62 -0
  144. data/vendor/behave/docs/tutorial.rst +636 -0
  145. data/vendor/behave/docs/update_behave_rst.py +100 -0
  146. data/vendor/behave/etc/json/behave.json-schema +172 -0
  147. data/vendor/behave/etc/junit.xml/behave_junit.xsd +103 -0
  148. data/vendor/behave/etc/junit.xml/junit-4.xsd +92 -0
  149. data/vendor/behave/examples/async_step/README.txt +8 -0
  150. data/vendor/behave/examples/async_step/behave.ini +14 -0
  151. data/vendor/behave/examples/async_step/features/async_dispatch.feature +8 -0
  152. data/vendor/behave/examples/async_step/features/async_run.feature +6 -0
  153. data/vendor/behave/examples/async_step/features/environment.py +28 -0
  154. data/vendor/behave/examples/async_step/features/steps/async_dispatch_steps.py +26 -0
  155. data/vendor/behave/examples/async_step/features/steps/async_steps34.py +10 -0
  156. data/vendor/behave/examples/async_step/features/steps/async_steps35.py +10 -0
  157. data/vendor/behave/examples/async_step/testrun_example.async_dispatch.txt +11 -0
  158. data/vendor/behave/examples/async_step/testrun_example.async_run.txt +9 -0
  159. data/vendor/behave/examples/env_vars/README.rst +26 -0
  160. data/vendor/behave/examples/env_vars/behave.ini +15 -0
  161. data/vendor/behave/examples/env_vars/behave_run.output_example.txt +12 -0
  162. data/vendor/behave/examples/env_vars/features/env_var.feature +6 -0
  163. data/vendor/behave/examples/env_vars/features/steps/env_var_steps.py +38 -0
  164. data/vendor/behave/features/README.txt +12 -0
  165. data/vendor/behave/features/background.feature +392 -0
  166. data/vendor/behave/features/capture_stderr.feature +172 -0
  167. data/vendor/behave/features/capture_stdout.feature +125 -0
  168. data/vendor/behave/features/cmdline.lang_list.feature +33 -0
  169. data/vendor/behave/features/configuration.default_paths.feature +116 -0
  170. data/vendor/behave/features/context.global_params.feature +35 -0
  171. data/vendor/behave/features/context.local_params.feature +17 -0
  172. data/vendor/behave/features/directory_layout.advanced.feature +147 -0
  173. data/vendor/behave/features/directory_layout.basic.feature +75 -0
  174. data/vendor/behave/features/directory_layout.basic2.feature +87 -0
  175. data/vendor/behave/features/environment.py +53 -0
  176. data/vendor/behave/features/exploratory_testing.with_table.feature +141 -0
  177. data/vendor/behave/features/feature.description.feature +0 -0
  178. data/vendor/behave/features/feature.exclude_from_run.feature +96 -0
  179. data/vendor/behave/features/formatter.help.feature +30 -0
  180. data/vendor/behave/features/formatter.json.feature +420 -0
  181. data/vendor/behave/features/formatter.progress3.feature +235 -0
  182. data/vendor/behave/features/formatter.rerun.feature +296 -0
  183. data/vendor/behave/features/formatter.steps.feature +181 -0
  184. data/vendor/behave/features/formatter.steps_catalog.feature +100 -0
  185. data/vendor/behave/features/formatter.steps_doc.feature +140 -0
  186. data/vendor/behave/features/formatter.steps_usage.feature +404 -0
  187. data/vendor/behave/features/formatter.tags.feature +134 -0
  188. data/vendor/behave/features/formatter.tags_location.feature +183 -0
  189. data/vendor/behave/features/formatter.user_defined.feature +196 -0
  190. data/vendor/behave/features/i18n.unicode_problems.feature +445 -0
  191. data/vendor/behave/features/logcapture.clear_handlers.feature +114 -0
  192. data/vendor/behave/features/logcapture.feature +188 -0
  193. data/vendor/behave/features/logcapture.filter.feature +130 -0
  194. data/vendor/behave/features/logging.no_capture.feature +99 -0
  195. data/vendor/behave/features/logging.setup_format.feature +157 -0
  196. data/vendor/behave/features/logging.setup_level.feature +168 -0
  197. data/vendor/behave/features/logging.setup_with_configfile.feature +137 -0
  198. data/vendor/behave/features/parser.background.sad_cases.feature +129 -0
  199. data/vendor/behave/features/parser.feature.sad_cases.feature +144 -0
  200. data/vendor/behave/features/runner.abort_by_user.feature +305 -0
  201. data/vendor/behave/features/runner.continue_after_failed_step.feature +136 -0
  202. data/vendor/behave/features/runner.default_format.feature +175 -0
  203. data/vendor/behave/features/runner.dry_run.feature +184 -0
  204. data/vendor/behave/features/runner.feature_listfile.feature +223 -0
  205. data/vendor/behave/features/runner.hook_errors.feature +382 -0
  206. data/vendor/behave/features/runner.multiple_formatters.feature +285 -0
  207. data/vendor/behave/features/runner.scenario_autoretry.feature +131 -0
  208. data/vendor/behave/features/runner.select_files_by_regexp.example.feature +71 -0
  209. data/vendor/behave/features/runner.select_files_by_regexp.feature +84 -0
  210. data/vendor/behave/features/runner.select_scenarios_by_file_location.feature +403 -0
  211. data/vendor/behave/features/runner.select_scenarios_by_name.feature +289 -0
  212. data/vendor/behave/features/runner.select_scenarios_by_tag.feature +225 -0
  213. data/vendor/behave/features/runner.stop_after_failure.feature +122 -0
  214. data/vendor/behave/features/runner.tag_logic.feature +67 -0
  215. data/vendor/behave/features/runner.unknown_formatter.feature +23 -0
  216. data/vendor/behave/features/runner.use_stage_implementations.feature +126 -0
  217. data/vendor/behave/features/scenario.description.feature +171 -0
  218. data/vendor/behave/features/scenario.exclude_from_run.feature +217 -0
  219. data/vendor/behave/features/scenario_outline.basics.feature +100 -0
  220. data/vendor/behave/features/scenario_outline.improved.feature +177 -0
  221. data/vendor/behave/features/scenario_outline.name_annotation.feature +157 -0
  222. data/vendor/behave/features/scenario_outline.parametrized.feature +401 -0
  223. data/vendor/behave/features/scenario_outline.tagged_examples.feature +118 -0
  224. data/vendor/behave/features/step.async_steps.feature +225 -0
  225. data/vendor/behave/features/step.duplicated_step.feature +106 -0
  226. data/vendor/behave/features/step.execute_steps.feature +59 -0
  227. data/vendor/behave/features/step.execute_steps.with_table.feature +65 -0
  228. data/vendor/behave/features/step.import_other_step_module.feature +103 -0
  229. data/vendor/behave/features/step.pending_steps.feature +128 -0
  230. data/vendor/behave/features/step.undefined_steps.feature +307 -0
  231. data/vendor/behave/features/step.use_step_library.feature +44 -0
  232. data/vendor/behave/features/step_dialect.generic_steps.feature +189 -0
  233. data/vendor/behave/features/step_dialect.given_when_then.feature +89 -0
  234. data/vendor/behave/features/step_param.builtin_types.with_float.feature +239 -0
  235. data/vendor/behave/features/step_param.builtin_types.with_integer.feature +305 -0
  236. data/vendor/behave/features/step_param.custom_types.feature +134 -0
  237. data/vendor/behave/features/steps/behave_active_tags_steps.py +86 -0
  238. data/vendor/behave/features/steps/behave_context_steps.py +67 -0
  239. data/vendor/behave/features/steps/behave_model_tag_logic_steps.py +105 -0
  240. data/vendor/behave/features/steps/behave_model_util.py +105 -0
  241. data/vendor/behave/features/steps/behave_select_files_steps.py +83 -0
  242. data/vendor/behave/features/steps/behave_tag_expression_steps.py +166 -0
  243. data/vendor/behave/features/steps/behave_undefined_steps.py +101 -0
  244. data/vendor/behave/features/steps/use_steplib_behave4cmd.py +12 -0
  245. data/vendor/behave/features/summary.undefined_steps.feature +114 -0
  246. data/vendor/behave/features/tags.active_tags.feature +385 -0
  247. data/vendor/behave/features/tags.default_tags.feature +104 -0
  248. data/vendor/behave/features/tags.tag_expression.feature +105 -0
  249. data/vendor/behave/features/userdata.feature +331 -0
  250. data/vendor/behave/invoke.yaml +21 -0
  251. data/vendor/behave/issue.features/README.txt +17 -0
  252. data/vendor/behave/issue.features/environment.py +97 -0
  253. data/vendor/behave/issue.features/issue0030.feature +21 -0
  254. data/vendor/behave/issue.features/issue0031.feature +16 -0
  255. data/vendor/behave/issue.features/issue0032.feature +28 -0
  256. data/vendor/behave/issue.features/issue0035.feature +74 -0
  257. data/vendor/behave/issue.features/issue0040.feature +154 -0
  258. data/vendor/behave/issue.features/issue0041.feature +135 -0
  259. data/vendor/behave/issue.features/issue0042.feature +230 -0
  260. data/vendor/behave/issue.features/issue0044.feature +51 -0
  261. data/vendor/behave/issue.features/issue0046.feature +77 -0
  262. data/vendor/behave/issue.features/issue0052.feature +66 -0
  263. data/vendor/behave/issue.features/issue0059.feature +29 -0
  264. data/vendor/behave/issue.features/issue0063.feature +102 -0
  265. data/vendor/behave/issue.features/issue0064.feature +97 -0
  266. data/vendor/behave/issue.features/issue0065.feature +18 -0
  267. data/vendor/behave/issue.features/issue0066.feature +80 -0
  268. data/vendor/behave/issue.features/issue0067.feature +90 -0
  269. data/vendor/behave/issue.features/issue0069.feature +64 -0
  270. data/vendor/behave/issue.features/issue0072.feature +32 -0
  271. data/vendor/behave/issue.features/issue0073.feature +228 -0
  272. data/vendor/behave/issue.features/issue0075.feature +18 -0
  273. data/vendor/behave/issue.features/issue0077.feature +89 -0
  274. data/vendor/behave/issue.features/issue0080.feature +49 -0
  275. data/vendor/behave/issue.features/issue0081.feature +138 -0
  276. data/vendor/behave/issue.features/issue0083.feature +69 -0
  277. data/vendor/behave/issue.features/issue0084.feature +69 -0
  278. data/vendor/behave/issue.features/issue0085.feature +119 -0
  279. data/vendor/behave/issue.features/issue0092.feature +66 -0
  280. data/vendor/behave/issue.features/issue0096.feature +173 -0
  281. data/vendor/behave/issue.features/issue0099.feature +130 -0
  282. data/vendor/behave/issue.features/issue0109.feature +60 -0
  283. data/vendor/behave/issue.features/issue0111.feature +53 -0
  284. data/vendor/behave/issue.features/issue0112.feature +64 -0
  285. data/vendor/behave/issue.features/issue0114.feature +118 -0
  286. data/vendor/behave/issue.features/issue0116.feature +71 -0
  287. data/vendor/behave/issue.features/issue0125.feature +49 -0
  288. data/vendor/behave/issue.features/issue0127.feature +64 -0
  289. data/vendor/behave/issue.features/issue0139.feature +67 -0
  290. data/vendor/behave/issue.features/issue0142.feature +37 -0
  291. data/vendor/behave/issue.features/issue0143.feature +54 -0
  292. data/vendor/behave/issue.features/issue0145.feature +63 -0
  293. data/vendor/behave/issue.features/issue0148.feature +105 -0
  294. data/vendor/behave/issue.features/issue0152.feature +52 -0
  295. data/vendor/behave/issue.features/issue0159.feature +74 -0
  296. data/vendor/behave/issue.features/issue0162.feature +86 -0
  297. data/vendor/behave/issue.features/issue0171.feature +16 -0
  298. data/vendor/behave/issue.features/issue0172.feature +51 -0
  299. data/vendor/behave/issue.features/issue0175.feature +91 -0
  300. data/vendor/behave/issue.features/issue0177.feature +40 -0
  301. data/vendor/behave/issue.features/issue0181.feature +36 -0
  302. data/vendor/behave/issue.features/issue0184.feature +144 -0
  303. data/vendor/behave/issue.features/issue0186.feature +12 -0
  304. data/vendor/behave/issue.features/issue0188.feature +60 -0
  305. data/vendor/behave/issue.features/issue0191.feature +178 -0
  306. data/vendor/behave/issue.features/issue0194.feature +215 -0
  307. data/vendor/behave/issue.features/issue0197.feature +11 -0
  308. data/vendor/behave/issue.features/issue0216.feature +129 -0
  309. data/vendor/behave/issue.features/issue0226.feature +51 -0
  310. data/vendor/behave/issue.features/issue0228.feature +41 -0
  311. data/vendor/behave/issue.features/issue0230.feature +46 -0
  312. data/vendor/behave/issue.features/issue0231.feature +77 -0
  313. data/vendor/behave/issue.features/issue0238.feature +52 -0
  314. data/vendor/behave/issue.features/issue0251.feature +15 -0
  315. data/vendor/behave/issue.features/issue0280.feature +118 -0
  316. data/vendor/behave/issue.features/issue0288.feature +95 -0
  317. data/vendor/behave/issue.features/issue0300.feature +49 -0
  318. data/vendor/behave/issue.features/issue0302.feature +91 -0
  319. data/vendor/behave/issue.features/issue0309.feature +52 -0
  320. data/vendor/behave/issue.features/issue0330.feature +124 -0
  321. data/vendor/behave/issue.features/issue0349.feature +9 -0
  322. data/vendor/behave/issue.features/issue0361.feature +79 -0
  323. data/vendor/behave/issue.features/issue0383.feature +76 -0
  324. data/vendor/behave/issue.features/issue0384.feature +103 -0
  325. data/vendor/behave/issue.features/issue0385.feature +109 -0
  326. data/vendor/behave/issue.features/issue0424.feature +66 -0
  327. data/vendor/behave/issue.features/issue0446.feature +116 -0
  328. data/vendor/behave/issue.features/issue0449.feature +42 -0
  329. data/vendor/behave/issue.features/issue0453.feature +42 -0
  330. data/vendor/behave/issue.features/issue0457.feature +65 -0
  331. data/vendor/behave/issue.features/issue0462.feature +38 -0
  332. data/vendor/behave/issue.features/issue0476.feature +39 -0
  333. data/vendor/behave/issue.features/issue0487.feature +92 -0
  334. data/vendor/behave/issue.features/issue0506.feature +77 -0
  335. data/vendor/behave/issue.features/issue0510.feature +51 -0
  336. data/vendor/behave/issue.features/requirements.txt +12 -0
  337. data/vendor/behave/issue.features/steps/ansi_steps.py +20 -0
  338. data/vendor/behave/issue.features/steps/behave_hooks_steps.py +10 -0
  339. data/vendor/behave/issue.features/steps/use_steplib_behave4cmd.py +13 -0
  340. data/vendor/behave/more.features/formatter.json.validate_output.feature +37 -0
  341. data/vendor/behave/more.features/steps/tutorial_steps.py +16 -0
  342. data/vendor/behave/more.features/steps/use_steplib_behave4cmd.py +7 -0
  343. data/vendor/behave/more.features/tutorial.feature +6 -0
  344. data/vendor/behave/py.requirements/README.txt +5 -0
  345. data/vendor/behave/py.requirements/all.txt +16 -0
  346. data/vendor/behave/py.requirements/basic.txt +21 -0
  347. data/vendor/behave/py.requirements/develop.txt +28 -0
  348. data/vendor/behave/py.requirements/docs.txt +6 -0
  349. data/vendor/behave/py.requirements/json.txt +7 -0
  350. data/vendor/behave/py.requirements/more_py26.txt +8 -0
  351. data/vendor/behave/py.requirements/testing.txt +10 -0
  352. data/vendor/behave/pytest.ini +24 -0
  353. data/vendor/behave/setup.cfg +29 -0
  354. data/vendor/behave/setup.py +118 -0
  355. data/vendor/behave/setuptools_behave.py +130 -0
  356. data/vendor/behave/tasks/__behave.py +45 -0
  357. data/vendor/behave/tasks/__init__.py +55 -0
  358. data/vendor/behave/tasks/__main__.py +70 -0
  359. data/vendor/behave/tasks/_setup.py +135 -0
  360. data/vendor/behave/tasks/_vendor/README.rst +35 -0
  361. data/vendor/behave/tasks/_vendor/invoke.zip +0 -0
  362. data/vendor/behave/tasks/_vendor/path.py +1725 -0
  363. data/vendor/behave/tasks/_vendor/pathlib.py +1280 -0
  364. data/vendor/behave/tasks/_vendor/six.py +868 -0
  365. data/vendor/behave/tasks/clean.py +246 -0
  366. data/vendor/behave/tasks/docs.py +97 -0
  367. data/vendor/behave/tasks/requirements.txt +17 -0
  368. data/vendor/behave/tasks/test.py +192 -0
  369. data/vendor/behave/test/__init__.py +0 -0
  370. data/vendor/behave/test/_importer_candidate.py +3 -0
  371. data/vendor/behave/test/reporters/__init__.py +0 -0
  372. data/vendor/behave/test/reporters/test_summary.py +240 -0
  373. data/vendor/behave/test/test_ansi_escapes.py +73 -0
  374. data/vendor/behave/test/test_configuration.py +172 -0
  375. data/vendor/behave/test/test_formatter.py +265 -0
  376. data/vendor/behave/test/test_formatter_progress.py +39 -0
  377. data/vendor/behave/test/test_formatter_rerun.py +97 -0
  378. data/vendor/behave/test/test_formatter_tags.py +57 -0
  379. data/vendor/behave/test/test_importer.py +151 -0
  380. data/vendor/behave/test/test_log_capture.py +29 -0
  381. data/vendor/behave/test/test_matchers.py +236 -0
  382. data/vendor/behave/test/test_model.py +871 -0
  383. data/vendor/behave/test/test_parser.py +1590 -0
  384. data/vendor/behave/test/test_runner.py +1074 -0
  385. data/vendor/behave/test/test_step_registry.py +96 -0
  386. data/vendor/behave/test/test_tag_expression.py +506 -0
  387. data/vendor/behave/test/test_tag_expression2.py +462 -0
  388. data/vendor/behave/test/test_tag_matcher.py +729 -0
  389. data/vendor/behave/test/test_userdata.py +184 -0
  390. data/vendor/behave/tests/README.txt +12 -0
  391. data/vendor/behave/tests/__init__.py +0 -0
  392. data/vendor/behave/tests/api/__ONLY_PY34_or_newer.txt +0 -0
  393. data/vendor/behave/tests/api/__init__.py +0 -0
  394. data/vendor/behave/tests/api/_test_async_step34.py +130 -0
  395. data/vendor/behave/tests/api/_test_async_step35.py +75 -0
  396. data/vendor/behave/tests/api/test_async_step.py +18 -0
  397. data/vendor/behave/tests/api/testing_support.py +94 -0
  398. data/vendor/behave/tests/api/testing_support_async.py +21 -0
  399. data/vendor/behave/tests/issues/test_issue0336.py +66 -0
  400. data/vendor/behave/tests/issues/test_issue0449.py +55 -0
  401. data/vendor/behave/tests/issues/test_issue0453.py +62 -0
  402. data/vendor/behave/tests/issues/test_issue0458.py +54 -0
  403. data/vendor/behave/tests/issues/test_issue0495.py +65 -0
  404. data/vendor/behave/tests/unit/__init__.py +0 -0
  405. data/vendor/behave/tests/unit/test_behave4cmd_command_shell_proc.py +135 -0
  406. data/vendor/behave/tests/unit/test_capture.py +280 -0
  407. data/vendor/behave/tests/unit/test_model_core.py +56 -0
  408. data/vendor/behave/tests/unit/test_textutil.py +267 -0
  409. data/vendor/behave/tools/test-features/background.feature +9 -0
  410. data/vendor/behave/tools/test-features/environment.py +8 -0
  411. data/vendor/behave/tools/test-features/french.feature +11 -0
  412. data/vendor/behave/tools/test-features/outline.feature +39 -0
  413. data/vendor/behave/tools/test-features/parse.feature +10 -0
  414. data/vendor/behave/tools/test-features/step-data.feature +60 -0
  415. data/vendor/behave/tools/test-features/steps/steps.py +120 -0
  416. data/vendor/behave/tools/test-features/tags.feature +18 -0
  417. data/vendor/behave/tox.ini +159 -0
  418. metadata +562 -0
@@ -0,0 +1,184 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ from __future__ import absolute_import
4
+ from behave.configuration import Configuration
5
+ from behave.userdata import UserData, parse_user_define
6
+ from behave._types import Unknown
7
+ from unittest import TestCase
8
+ from nose.tools import eq_
9
+
10
+
11
+ class TestParseUserDefine(TestCase):
12
+ """Test parse_user_define() function."""
13
+
14
+ def test_parse__name_value(self):
15
+ parts = parse_user_define("person=Alice")
16
+ self.assertEqual(parts, ("person", "Alice"))
17
+
18
+ def test_parse__name_only_for_boolean_flag(self):
19
+ parts = parse_user_define("boolean_flag")
20
+ self.assertEqual(parts, ("boolean_flag", "true"))
21
+
22
+ def test_parse__name_value_with_padded_whitespace(self):
23
+ texts = [
24
+ " person=Alice",
25
+ "person=Alice ",
26
+ "person = Alice",
27
+ ]
28
+ for text in texts:
29
+ parts = parse_user_define(text)
30
+ self.assertEqual(parts, ("person", "Alice"))
31
+
32
+ def test_parse__name_value_with_quoted_name_value_pair(self):
33
+ texts = [
34
+ '"person=Alice and Bob"',
35
+ "'person=Alice and Bob'",
36
+ ]
37
+ for text in texts:
38
+ parts = parse_user_define(text)
39
+ self.assertEqual(parts, ("person", "Alice and Bob"))
40
+
41
+ def test_parse__name_value_with_quoted_value(self):
42
+ texts = [
43
+ 'person="Alice and Bob"',
44
+ "person='Alice and Bob'",
45
+ ]
46
+ for text in texts:
47
+ parts = parse_user_define(text)
48
+ self.assertEqual(parts, ("person", "Alice and Bob"))
49
+
50
+
51
+
52
+
53
+ class TestUserData(TestCase):
54
+ """Test UserData class."""
55
+
56
+ def test_userdata_is_dictlike(self):
57
+ userdata = UserData(name="Foo", number=42)
58
+ value1 = userdata["name"]
59
+ value2 = userdata.get("number")
60
+ value3 = userdata.get("unknown", Unknown)
61
+ assert isinstance(userdata, dict)
62
+ self.assertEqual(value1, "Foo")
63
+ self.assertEqual(value2, 42)
64
+ assert value3 is Unknown
65
+
66
+ def test_getas__with_known_param_and_valid_text(self):
67
+ userdata = UserData(param="42")
68
+ assert "param" in userdata, "ENSURE: known param"
69
+
70
+ value = userdata.getas(int, "param")
71
+ assert isinstance(value, int)
72
+ self.assertEqual(value, 42)
73
+
74
+ def test_getas__with_known_param_and_invalid_text_raises_ValueError(self):
75
+ userdata = UserData(param="__BAD_NUMBER__")
76
+ assert "param" in userdata, "ENSURE: known param"
77
+ self.assertRaises(ValueError, userdata.getas, int, "param")
78
+
79
+ def test_getas__with_known_param_and_preconverted_value(self):
80
+ userdata = UserData(param=42)
81
+ assert "param" in userdata, "ENSURE: known param"
82
+
83
+ value = userdata.getas(int, "param")
84
+ assert isinstance(value, int)
85
+ self.assertEqual(value, 42)
86
+
87
+ def test_getas__with_known_param_and_preconverted_value_and_valuetype(self):
88
+ userdata = UserData(param=42)
89
+ assert "param" in userdata, "ENSURE: known param"
90
+
91
+ def parse_int(text):
92
+ return int(text)
93
+
94
+ value = userdata.getas(parse_int, "param", valuetype=int)
95
+ assert isinstance(value, int)
96
+ self.assertEqual(value, 42)
97
+
98
+ def test_getas__with_unknown_param_without_default_returns_none(self):
99
+ userdata = UserData()
100
+ assert "param" not in userdata, "ENSURE: unknown param"
101
+
102
+ value = userdata.getas(int, "param")
103
+ assert value is None
104
+
105
+ def test_getas__with_unknown_param_returns_default_value(self):
106
+ userdata = UserData()
107
+ assert "param" not in userdata, "ENSURE: unknown param"
108
+
109
+ value = userdata.getas(int, "param", 123)
110
+ assert isinstance(value, int)
111
+ self.assertEqual(value, 123)
112
+
113
+
114
+ def test_getint__with_known_param_and_valid_text(self):
115
+ userdata = UserData(param="42")
116
+ value = userdata.getint("param")
117
+ assert isinstance(value, int)
118
+ self.assertEqual(value, 42)
119
+
120
+ def test_getint__with_known_param_and_invalid_text_raises_ValueError(self):
121
+ userdata = UserData(param="__BAD_NUMBER__")
122
+ self.assertRaises(ValueError, userdata.getint, "param")
123
+
124
+ def test_getint__with_unknown_param_without_default_returns_zero(self):
125
+ userdata = UserData()
126
+ value = userdata.getint("param")
127
+ self.assertEqual(value, 0)
128
+
129
+ def test_getint__with_unknown_param_returns_default_value(self):
130
+ userdata = UserData()
131
+ value = userdata.getint("param", 123)
132
+ assert isinstance(value, int)
133
+ self.assertEqual(value, 123)
134
+
135
+ def test_getfloat__with_known_param_and_valid_text(self):
136
+ for valid_text in ["1.2", "2", "-1E+3", "+2.34E-5"]:
137
+ userdata = UserData(param=valid_text)
138
+ value = userdata.getfloat("param")
139
+ assert isinstance(value, float)
140
+ self.assertEqual(value, float(valid_text))
141
+
142
+ def test_getfloat__with_known_param_and_invalid_text_raises_ValueError(self):
143
+ userdata = UserData(param="__BAD_NUMBER__")
144
+ self.assertRaises(ValueError, userdata.getfloat, "param")
145
+
146
+ def test_getfloat__with_unknown_param_without_default_returns_zero(self):
147
+ userdata = UserData()
148
+ value = userdata.getfloat("param")
149
+ self.assertEqual(value, 0.0)
150
+
151
+ def test_getfloat__with_unknown_param_returns_default_value(self):
152
+ userdata = UserData()
153
+ value = userdata.getint("param", 1.2)
154
+ assert isinstance(value, float)
155
+ self.assertEqual(value, 1.2)
156
+
157
+
158
+ def test_getbool__with_known_param_and_valid_text(self):
159
+ for true_text in ["true", "TRUE", "True", "yes", "on", "1"]:
160
+ userdata = UserData(param=true_text)
161
+ value = userdata.getbool("param")
162
+ assert isinstance(value, bool), "text=%s" % true_text
163
+ self.assertEqual(value, True)
164
+
165
+ for false_text in ["false", "FALSE", "False", "no", "off", "0"]:
166
+ userdata = UserData(param=false_text)
167
+ value = userdata.getbool("param")
168
+ assert isinstance(value, bool), "text=%s" % false_text
169
+ self.assertEqual(value, False)
170
+
171
+ def test_getbool__with_known_param_and_invalid_text_raises_ValueError(self):
172
+ userdata = UserData(param="__BAD_VALUE__")
173
+ self.assertRaises(ValueError, userdata.getbool, "param")
174
+
175
+ def test_getbool__with_unknown_param_without_default_returns_false(self):
176
+ userdata = UserData()
177
+ value = userdata.getfloat("param")
178
+ self.assertEqual(value, False)
179
+
180
+ def test_getbool__with_unknown_param_returns_default_value(self):
181
+ userdata = UserData()
182
+ value = userdata.getint("param", 1.2)
183
+ assert isinstance(value, float)
184
+ self.assertEqual(value, 1.2)
@@ -0,0 +1,12 @@
1
+ This is the new directory root for:
2
+
3
+ * unit tests
4
+ * functional tests (that do not use feature files)
5
+
6
+ The tests here use the :pypi:`pytest` test framework for testing.
7
+
8
+ .. note::
9
+
10
+ Other tests in the collocated "../test/" directory will be eventually
11
+ cleaned and converted in (clean) pytests ;-)
12
+
File without changes
File without changes
@@ -0,0 +1,130 @@
1
+ # -*- coding: UTF-8 -*-
2
+ """
3
+ Unit tests for :mod:`behave.api.async_test`.
4
+ """
5
+
6
+ # -- IMPORTS:
7
+ from __future__ import absolute_import, print_function
8
+ from behave.api.async_step import AsyncContext, use_or_create_async_context
9
+ from behave._stepimport import use_step_import_modules
10
+ from behave.runner import Context, Runner
11
+ import sys
12
+ from mock import Mock
13
+ import pytest
14
+
15
+ from .testing_support import StopWatch, SimpleStepContainer
16
+ from .testing_support_async import AsyncStepTheory
17
+
18
+
19
+ # -----------------------------------------------------------------------------
20
+ # ASYNC STEP EXAMPLES:
21
+ # -----------------------------------------------------------------------------
22
+ # if python_version >= 3.5:
23
+ # @step('an async coroutine step waits "{duration:f}" seconds')
24
+ # @async_run_until_complete
25
+ # async def step_async_step_waits_seconds(context, duration):
26
+ # print("async_step: Should sleep for %.3f seconds" % duration)
27
+ # await asyncio.sleep(duration)
28
+ #
29
+ # if python_version >= 3.4:
30
+ # @step('a tagged-coroutine async step waits "{duration:f}" seconds')
31
+ # @async_run_until_complete
32
+ # @asyncio.coroutine
33
+ # def step_async_step_waits_seconds2(context, duration):
34
+ # print("async_step2: Should sleep for %.3f seconds" % duration)
35
+ # yield from asyncio.sleep(duration)
36
+ #
37
+ # -----------------------------------------------------------------------------
38
+ # TEST MARKERS:
39
+ # -----------------------------------------------------------------------------
40
+ python_version = float("%s.%s" % sys.version_info[:2])
41
+
42
+ # xfail = pytest.mark.xfail
43
+ py34_or_newer = pytest.mark.skipif(python_version < 3.4, reason="Needs Python >= 3.4")
44
+
45
+ # -----------------------------------------------------------------------------
46
+ # TESTSUITE:
47
+ # -----------------------------------------------------------------------------
48
+ @py34_or_newer
49
+ class TestAsyncStepDecorator34(object):
50
+
51
+ def test_step_decorator_async_run_until_complete2(self):
52
+ step_container = SimpleStepContainer()
53
+ with use_step_import_modules(step_container):
54
+ # -- STEP-DEFINITIONS EXAMPLE (as MODULE SNIPPET):
55
+ # VARIANT 2: Use @asyncio.coroutine def step_impl()
56
+ from behave import step
57
+ from behave.api.async_step import async_run_until_complete
58
+ import asyncio
59
+
60
+ @step('a tagged-coroutine async step waits "{duration:f}" seconds')
61
+ @async_run_until_complete
62
+ @asyncio.coroutine
63
+ def step_async_step_waits_seconds2(context, duration):
64
+ yield from asyncio.sleep(duration)
65
+
66
+ # -- USES: async def step_impl(...) as async-step (coroutine)
67
+ AsyncStepTheory.validate(step_async_step_waits_seconds2)
68
+
69
+ # -- RUN ASYNC-STEP: Verify that it is behaving correctly.
70
+ # ENSURE: Execution of async-step matches expected duration.
71
+ context = Context(runner=Runner(config={}))
72
+ with StopWatch() as stop_watch:
73
+ step_async_step_waits_seconds2(context, duration=0.2)
74
+ assert abs(stop_watch.duration - 0.2) <= 0.05
75
+
76
+
77
+ class TestAsyncContext(object):
78
+ @staticmethod
79
+ def make_context():
80
+ return Context(runner=Runner(config={}))
81
+
82
+ def test_use_or_create_async_context__when_missing(self):
83
+ # -- CASE: AsynContext attribute is created with default_name
84
+ context = self.make_context()
85
+ context._push()
86
+
87
+ async_context = use_or_create_async_context(context)
88
+ assert isinstance(async_context, AsyncContext)
89
+ assert async_context.name == "async_context"
90
+ assert getattr(context, "async_context", None) is async_context
91
+
92
+ context._pop()
93
+ assert getattr(context, "async_context", None) is None
94
+
95
+ def test_use_or_create_async_context__when_exists(self):
96
+ # -- CASE: AsynContext attribute exists with default_name
97
+ context = self.make_context()
98
+ async_context0 = context.async_context = AsyncContext()
99
+ assert context.async_context.name == "async_context"
100
+ assert hasattr(context, AsyncContext.default_name)
101
+
102
+ async_context = use_or_create_async_context(context)
103
+ assert isinstance(async_context, AsyncContext)
104
+ assert async_context.name == "async_context"
105
+ assert getattr(context, "async_context", None) is async_context
106
+ assert async_context is async_context0
107
+
108
+ def test_use_or_create_async_context__when_missing_with_name(self):
109
+ # -- CASE: AsynContext attribute is created with own name
110
+ loop0 = Mock()
111
+ context = self.make_context()
112
+ async_context = use_or_create_async_context(context, "acontext", loop=loop0)
113
+ assert isinstance(async_context, AsyncContext)
114
+ assert async_context.name == "acontext"
115
+ assert getattr(context, "acontext", None) is async_context
116
+ assert async_context.loop is loop0
117
+
118
+ def test_use_or_create_async_context__when_exists_with_name(self):
119
+ # -- CASE: AsynContext attribute exists with own name
120
+ loop0 = Mock()
121
+ context = self.make_context()
122
+ async_context0 = context.acontext = AsyncContext(name="acontext", loop=loop0)
123
+ assert context.acontext.name == "acontext"
124
+
125
+ loop1 = Mock()
126
+ async_context = use_or_create_async_context(context, "acontext", loop=loop1)
127
+ assert isinstance(async_context, AsyncContext)
128
+ assert async_context is async_context0
129
+ assert getattr(context, "acontext", None) is async_context
130
+ assert async_context.loop is loop0
@@ -0,0 +1,75 @@
1
+ # -*- coding: UTF-8 -*-
2
+ """
3
+ Unit tests for :mod:`behave.api.async_test` for Python 3.5 (or newer).
4
+ """
5
+
6
+ # -- IMPORTS:
7
+ from __future__ import absolute_import, print_function
8
+ import sys
9
+ from behave._stepimport import use_step_import_modules
10
+ from behave.runner import Context, Runner
11
+ import pytest
12
+
13
+ from .testing_support import StopWatch, SimpleStepContainer
14
+ from .testing_support_async import AsyncStepTheory
15
+
16
+
17
+ # -----------------------------------------------------------------------------
18
+ # SUPPORT:
19
+ # -----------------------------------------------------------------------------
20
+
21
+
22
+ # -----------------------------------------------------------------------------
23
+ # ASYNC STEP EXAMPLES:
24
+ # -----------------------------------------------------------------------------
25
+ # if python_version >= 3.5:
26
+ # @step('an async coroutine step waits "{duration:f}" seconds')
27
+ # @async_run_until_complete
28
+ # async def step_async_step_waits_seconds(context, duration):
29
+ # print("async_step: Should sleep for %.3f seconds" % duration)
30
+ # await asyncio.sleep(duration)
31
+ #
32
+ # if python_version >= 3.4:
33
+ # @step('a tagged-coroutine async step waits "{duration:f}" seconds')
34
+ # @async_run_until_complete
35
+ # @asyncio.coroutine
36
+ # def step_async_step_waits_seconds2(context, duration):
37
+ # print("async_step2: Should sleep for %.3f seconds" % duration)
38
+ # yield from asyncio.sleep(duration)
39
+ #
40
+ # -----------------------------------------------------------------------------
41
+ # TEST MARKERS:
42
+ # -----------------------------------------------------------------------------
43
+ # xfail = pytest.mark.xfail
44
+ python_version = float("%s.%s" % sys.version_info[:2])
45
+ py35_or_newer = pytest.mark.skipif(python_version < 3.5, reason="Needs Python >= 3.5")
46
+
47
+ # -----------------------------------------------------------------------------
48
+ # TESTSUITE:
49
+ # -----------------------------------------------------------------------------
50
+ @py35_or_newer
51
+ class TestAsyncStepDecorator35(object):
52
+
53
+ def test_step_decorator_async_run_until_complete1(self):
54
+ step_container = SimpleStepContainer()
55
+ with use_step_import_modules(step_container):
56
+ # -- STEP-DEFINITIONS EXAMPLE (as MODULE SNIPPET):
57
+ # VARIANT 1: Use async def step_impl()
58
+ from behave import step
59
+ from behave.api.async_step import async_run_until_complete
60
+ import asyncio
61
+
62
+ @step('an async coroutine step waits "{duration:f}" seconds')
63
+ @async_run_until_complete
64
+ async def step_async_step_waits_seconds(context, duration):
65
+ await asyncio.sleep(duration)
66
+
67
+ # -- USES: async def step_impl(...) as async-step (coroutine)
68
+ AsyncStepTheory.validate(step_async_step_waits_seconds)
69
+
70
+ # -- RUN ASYNC-STEP: Verify that it is behaving correctly.
71
+ # ENSURE: Execution of async-step matches expected duration.
72
+ context = Context(runner=Runner(config={}))
73
+ with StopWatch() as stop_watch:
74
+ step_async_step_waits_seconds(context, 0.2)
75
+ assert abs(stop_watch.duration - 0.2) <= 0.05
@@ -0,0 +1,18 @@
1
+ # -*- coding: UTF-8 -*-
2
+ """
3
+ Unit test facade to protect py.test runner from Python 3.4/3.5 grammar changes.
4
+ """
5
+
6
+ from __future__ import absolute_import
7
+ import sys
8
+
9
+ python_version = sys.version_info[:2]
10
+ if python_version >= (3, 5):
11
+ # -- PROTECTED-IMPORT:
12
+ # Older Python version have problems with grammer extensions (async/await).
13
+ from ._test_async_step35 import TestAsyncStepDecorator35
14
+ from ._test_async_step34 import TestAsyncStepDecorator34, TestAsyncContext
15
+ elif (3, 4) <= python_version < (3, 5):
16
+ # -- PROTECTED-IMPORT:
17
+ # Older Python version have problems with grammer extensions (yield-from).
18
+ from ._test_async_step34 import TestAsyncStepDecorator34, TestAsyncContext
@@ -0,0 +1,94 @@
1
+ # -*- coding: UTF-8 -*-
2
+ """
3
+ Test support functionality for other tests.
4
+ """
5
+
6
+ # -- IMPORTS:
7
+ from __future__ import absolute_import
8
+ from behave.step_registry import StepRegistry
9
+ from behave.matchers import ParseMatcher, CFParseMatcher, RegexMatcher
10
+ import time
11
+
12
+
13
+ # -----------------------------------------------------------------------------
14
+ # TEST SUPPORT:
15
+ # -----------------------------------------------------------------------------
16
+ class StopWatch(object):
17
+ def __init__(self):
18
+ self.start_time = None
19
+ self.duration = None
20
+
21
+ def start(self):
22
+ self.start_time = self.now()
23
+ self.duration = None
24
+
25
+ def stop(self):
26
+ self.duration = self.now() - self.start_time
27
+
28
+ @staticmethod
29
+ def now():
30
+ return time.time()
31
+
32
+ @property
33
+ def elapsed(self):
34
+ assert self.start_time is not None
35
+ return self.now() - self.start_time
36
+
37
+ def __enter__(self):
38
+ self.start()
39
+ return self
40
+
41
+ def __exit__(self, exc_type, exc_val, exc_tb):
42
+ self.stop()
43
+
44
+ # -- NEEDED-UNTIL: stepimport functionality is completly provided.
45
+ class MatcherFactory(object):
46
+ matcher_mapping = {
47
+ "parse": ParseMatcher,
48
+ "cfparse": CFParseMatcher,
49
+ "re": RegexMatcher,
50
+ }
51
+ default_matcher = ParseMatcher
52
+
53
+ def __init__(self, matcher_mapping=None, default_matcher=None):
54
+ self.matcher_mapping = matcher_mapping or self.matcher_mapping
55
+ self.default_matcher = default_matcher or self.default_matcher
56
+ self.current_matcher = self.default_matcher
57
+ self.type_registry = {}
58
+ # self.type_registry = ParseMatcher.custom_types.copy()
59
+
60
+ def register_type(self, **kwargs):
61
+ self.type_registry.update(**kwargs)
62
+
63
+ def use_step_matcher(self, name):
64
+ self.current_matcher = self.matcher_mapping[name]
65
+
66
+ def use_default_step_matcher(self, name=None):
67
+ if name:
68
+ self.default_matcher = self.matcher_mapping[name]
69
+ self.current_matcher = self.default_matcher
70
+
71
+ def make_matcher(self, func, step_text, step_type=None):
72
+ return self.current_matcher(func, step_text, step_type=step_type,
73
+ custom_types=self.type_registry)
74
+
75
+ def step_matcher(self, name):
76
+ """
77
+ DEPRECATED, use :method:`~MatcherFactory.use_step_matcher()` instead.
78
+ """
79
+ # -- BACKWARD-COMPATIBLE NAME: Mark as deprecated.
80
+ import warnings
81
+ warnings.warn("Use 'use_step_matcher()' instead",
82
+ PendingDeprecationWarning, stacklevel=2)
83
+ self.use_step_matcher(name)
84
+
85
+
86
+ class SimpleStepContainer(object):
87
+ def __init__(self, step_registry=None):
88
+ if step_registry is None:
89
+ step_registry = StepRegistry()
90
+ matcher_factory = MatcherFactory()
91
+
92
+ self.step_registry = step_registry
93
+ self.step_registry.matcher_factory = matcher_factory
94
+ self.matcher_factory = matcher_factory