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,44 @@
1
+ #!/usr/bin/env python
2
+ # -*- coding: utf-8 -*-
3
+
4
+ from __future__ import absolute_import
5
+ # -- ENSURE: Use local path during development.
6
+ import sys
7
+ import os.path
8
+
9
+ # ----------------------------------------------------------------------------
10
+ # SETUP PATHS:
11
+ # ----------------------------------------------------------------------------
12
+ NAME = "behave"
13
+ HERE = os.path.dirname(__file__)
14
+ TOP = os.path.join(HERE, "..")
15
+ if os.path.isdir(os.path.join(TOP, NAME)):
16
+ sys.path.insert(0, os.path.abspath(TOP))
17
+
18
+ # ----------------------------------------------------------------------------
19
+ # BEHAVE-TWEAKS:
20
+ # ----------------------------------------------------------------------------
21
+ def setup_behave():
22
+ """
23
+ Apply tweaks, extensions and patches to "behave".
24
+ """
25
+ from behave.configuration import Configuration
26
+ # -- DISABLE: Timings to simplify issue.features/ tests.
27
+ # Configuration.defaults["format0"] = "pretty"
28
+ # Configuration.defaults["format0"] = "progress"
29
+ Configuration.defaults["show_timings"] = False
30
+
31
+ def behave_main0():
32
+ # from behave.configuration import Configuration
33
+ from behave.__main__ import main as behave_main
34
+ setup_behave()
35
+ return behave_main()
36
+
37
+ # ----------------------------------------------------------------------------
38
+ # MAIN:
39
+ # ----------------------------------------------------------------------------
40
+ if __name__ == "__main__":
41
+ if "COVERAGE_PROCESS_START" in os.environ:
42
+ import coverage
43
+ coverage.process_startup()
44
+ sys.exit(behave_main0())
@@ -0,0 +1,10 @@
1
+ @echo off
2
+ REM ==========================================================================
3
+ REM BEHAVE
4
+ REM ==========================================================================
5
+
6
+ setlocal
7
+ set HERE=%~dp0
8
+ if not defined PYTHON set PYTHON=python
9
+
10
+ %PYTHON% %HERE%behave %*
@@ -0,0 +1,85 @@
1
+ #!/usr/bin/env python
2
+ """
3
+ Filter JUnit XML reports to show only a subset of all information.
4
+
5
+ JUNIT XML SCHEMA:
6
+
7
+ element:testsuite: failures="..." errors="..."
8
+ +-- element:testcase: name="..." status="..."
9
+ """
10
+
11
+ from __future__ import absolute_import, print_function, with_statement
12
+ import os.path
13
+ import sys
14
+ import argparse
15
+ from fnmatch import fnmatch
16
+ from xml.etree import ElementTree as ET
17
+ from xml.dom import minidom
18
+ from behave.textutil import indent
19
+
20
+ __author = "Jens Engel"
21
+ __status__ = "prototype"
22
+
23
+ NAME = os.path.basename(__file__)
24
+ VERSION = "0.1.0"
25
+ REPORT_DIR = "reports"
26
+
27
+ def xml_prettify(elem):
28
+ """Return a pretty-printed XML string for the XML element."""
29
+ text = ET.tostring(elem, "utf-8")
30
+ reparsed = minidom.parseString(text)
31
+ return reparsed.toprettyxml(indent=" ")
32
+
33
+ def xml_select_testcases_with_status(tree, status):
34
+ return tree.findall(".//testcase[@status='%s']" % status)
35
+
36
+ def path_select_files(paths, pattern="*.xml"):
37
+ if not paths:
38
+ paths = [REPORT_DIR]
39
+
40
+ selected = []
41
+ for pathname in paths:
42
+ if os.path.isdir(pathname):
43
+ for root, dirs, files in os.walk(pathname):
44
+ for filename in files:
45
+ if fnmatch(filename, pattern):
46
+ filename2 = os.path.join(root, filename)
47
+ selected.append(os.path.normpath(filename2))
48
+ elif os.path.isfile(pathname) and fnmatch(pathname, pattern):
49
+ selected.append(pathname)
50
+ return selected
51
+
52
+ def report_testcases(filename, testcases):
53
+ print(u"REPORT: {0}".format(filename))
54
+ for xml_testcase in testcases:
55
+ print(" TESTCASE: {0}".format(xml_testcase.get("name")))
56
+ xml_text = indent(xml_prettify(xml_testcase), " ")
57
+ print(xml_text)
58
+
59
+ def main(args=None):
60
+ """Filter JUnit XML reports to show only a subset of all information."""
61
+ if args is None:
62
+ args = sys.argv[1:]
63
+
64
+ parser = argparse.ArgumentParser(prog=NAME,
65
+ description=main.__doc__)
66
+ parser.add_argument("-s", "--status", default="failed", required=False,
67
+ choices=["passed", "failed", "skipped"],
68
+ help="Status to select (passed, failed, skipped).")
69
+ parser.add_argument("xml_file", nargs="*",
70
+ help="XML file(s) or directory with XML files.")
71
+ parser.add_argument("--version", action="version", version=VERSION)
72
+
73
+ options = parser.parse_args(args)
74
+
75
+ xml_files = options.xml_file
76
+ xml_reports = path_select_files(xml_files)
77
+ for xml_filename in xml_reports:
78
+ tree = ET.parse(xml_filename)
79
+ testcases = xml_select_testcases_with_status(tree, options.status)
80
+ if testcases:
81
+ report_testcases(xml_filename, testcases)
82
+ return 0
83
+
84
+ if __name__ == "__main__":
85
+ sys.exit(main())
@@ -0,0 +1,163 @@
1
+ #!/usr/bin/env python
2
+ # -*- coding: utf-8 -*-
3
+ """
4
+ Utility script to retrieve duration information from behave JSON output.
5
+
6
+ REQUIRES: Python >= 2.6 (json module is part of Python standard library)
7
+ LICENSE: BSD
8
+ """
9
+
10
+ from __future__ import absolute_import
11
+
12
+ __author__ = "Jens Engel"
13
+ __copyright__ = "(c) 2013 by Jens Engel"
14
+ __license__ = "BSD"
15
+ VERSION = "0.1.0"
16
+
17
+ # -- IMPORTS:
18
+ from behave import json_parser
19
+ from behave.model import ScenarioOutline
20
+ from optparse import OptionParser
21
+ from operator import attrgetter
22
+ import os.path
23
+ import sys
24
+
25
+
26
+ # ----------------------------------------------------------------------------
27
+ # FUNCTIONS:
28
+ # ----------------------------------------------------------------------------
29
+ class StepDurationData(object):
30
+ def __init__(self, step=None):
31
+ self.step_name = None
32
+ self.min_duration = sys.maxint
33
+ self.max_duration = 0
34
+ self.durations = []
35
+ self.step = step
36
+ if step:
37
+ self.process_step(step)
38
+
39
+ @staticmethod
40
+ def make_step_name(step):
41
+ step_name = "%s %s" % (step.step_type.capitalize(), step.name)
42
+ return step_name
43
+
44
+ def process_step(self, step):
45
+ step_name = self.make_step_name(step)
46
+ if not self.step_name:
47
+ self.step_name = step_name
48
+ if self.min_duration > step.duration:
49
+ self.min_duration = step.duration
50
+ if self.max_duration < step.duration:
51
+ self.max_duration = step.duration
52
+ self.durations.append(step.duration)
53
+
54
+
55
+ class BehaveDurationData(object):
56
+ def __init__(self):
57
+ self.step_registry = {}
58
+ self.all_steps = []
59
+ self.all_scenarios = []
60
+
61
+
62
+ def process_features(self, features):
63
+ for feature in features:
64
+ self.process_feature(feature)
65
+
66
+ def process_feature(self, feature):
67
+ if feature.background:
68
+ self.process_background(feature.background)
69
+ for scenario in feature.scenarios:
70
+ if isinstance(scenario, ScenarioOutline):
71
+ self.process_scenario_outline(scenario)
72
+ else:
73
+ self.process_scenario(scenario)
74
+
75
+ def process_step(self, step):
76
+ step_name = StepDurationData.make_step_name(step)
77
+ known_step = self.step_registry.get(step_name, None)
78
+ if known_step:
79
+ known_step.process_step(step)
80
+ else:
81
+ step_data = StepDurationData(step)
82
+ self.step_registry[step_name] = step_data
83
+ self.all_steps.append(step)
84
+
85
+ def process_background(self, scenario):
86
+ for step in scenario:
87
+ self.process_step(step)
88
+
89
+ def process_scenario(self, scenario):
90
+ for step in scenario:
91
+ self.process_step(step)
92
+
93
+ def process_scenario_outline(self, scenario_outline):
94
+ for scenario in scenario_outline:
95
+ self.process_scenario(scenario)
96
+
97
+ def report_step_durations(self, limit=None, min_duration=None, ostream=sys.stdout):
98
+ step_datas = list(self.step_registry.values())
99
+ steps_size = len(step_datas)
100
+ steps_by_longest_duration_first = sorted(step_datas,
101
+ key=attrgetter("max_duration"),
102
+ reverse=True)
103
+ ostream.write("STEP DURATIONS (longest first, size=%d):\n" % steps_size)
104
+ ostream.write("-" * 80)
105
+ ostream.write("\n")
106
+ for index, step in enumerate(steps_by_longest_duration_first):
107
+ ostream.write("% 4d. %9.6fs %s" % \
108
+ (index+1, step.max_duration, step.step_name))
109
+ calls = len(step.durations)
110
+ if calls > 1:
111
+ ostream.write(" (%d calls, min: %.6fs)\n" % (calls, step.min_duration))
112
+ else:
113
+ ostream.write("\n")
114
+ if ((limit and index+1 >= limit) or
115
+ (step.max_duration < min_duration)):
116
+ remaining = steps_size - (index+1)
117
+ ostream.write("...\nSkip remaining %d steps.\n" % remaining)
118
+ break
119
+
120
+
121
+ # ----------------------------------------------------------------------------
122
+ # MAIN FUNCTION:
123
+ # ----------------------------------------------------------------------------
124
+ def main(args=None):
125
+ if args is None:
126
+ args = sys.argv[1:]
127
+
128
+ usage_ = """%prog [OPTIONS] JsonFile
129
+ Read behave JSON data file and extract steps with longest duration."""
130
+ parser = OptionParser(usage=usage_, version=VERSION)
131
+ parser.add_option("-e", "--encoding", dest="encoding",
132
+ default="UTF-8",
133
+ help="Encoding to use (default: %default).")
134
+ parser.add_option("-l", "--limit", dest="limit", type="int",
135
+ help="Max. number of steps (default: %default).")
136
+ parser.add_option("-m", "--min", dest="min_duration", default="0",
137
+ help="Min. duration threshold (default: %default).")
138
+ options, filenames = parser.parse_args(args)
139
+ if not filenames:
140
+ parser.error("OOPS, no filenames provided.")
141
+ elif len(filenames) > 1:
142
+ parser.error("OOPS: Can only process one JSON file.")
143
+ min_duration = float(options.min_duration)
144
+ if min_duration < 0:
145
+ min_duration = None
146
+ json_filename = filenames[0]
147
+ if not os.path.exists(json_filename):
148
+ parser.error("JSON file '%s' not found" % json_filename)
149
+
150
+ # -- NORMAL PROCESSING: Read JSON, extract step durations and report them.
151
+ features = json_parser.parse(json_filename)
152
+ processor = BehaveDurationData()
153
+ processor.process_features(features)
154
+ processor.report_step_durations(options.limit, min_duration)
155
+ sys.stdout.write("Detected %d features.\n" % len(features))
156
+ return 0
157
+
158
+
159
+ # ----------------------------------------------------------------------------
160
+ # AUTO-MAIN:
161
+ # ----------------------------------------------------------------------------
162
+ if __name__ == "__main__":
163
+ sys.exit(main())
@@ -0,0 +1,63 @@
1
+ #!/usr/bin/env python
2
+ # =============================================================================
3
+ # CONVERT: behave JSON dialect to cucumber JSON dialect
4
+ # =============================================================================
5
+ # STATUS: __PROTOTYPE__
6
+ # REQUIRES: Python >= 2.6
7
+ # REQUIRES: https://github.com/behalfinc/b2c/
8
+ # SEE: https://github.com/behave/behave/issues/267#issuecomment-249607191
9
+ # =============================================================================
10
+ """
11
+ Convert a file with behave JSON data into a file with cucumber JSON data.
12
+ Note that both JSON dialects differ slightly.
13
+ """
14
+
15
+ from __future__ import print_function
16
+ import json
17
+ import sys
18
+ import os.path
19
+ try:
20
+ import b2c
21
+ except ImportError:
22
+ print("REQUIRE: https://github.com/behalfinc/b2c/ (not installed yet)")
23
+ print("INSTALL: pip install b2c")
24
+ sys.exit(2)
25
+
26
+
27
+ NAME = os.path.basename(__file__)
28
+
29
+ def convert_behave_to_cucumber_json(behave_filename, cucumber_filename,
30
+ encoding="UTF-8", pretty=True):
31
+ """Convert behave JSON dialect into cucumber JSON dialect.
32
+
33
+ .. param behave_filename: Input filename with behave JSON data.
34
+ .. param cucumber_filename: Output filename with cucumber JSON data.
35
+ """
36
+ dump_kwargs = {"encoding": encoding}
37
+ if pretty:
38
+ dump_kwargs.update(indent=2, sort_keys=True)
39
+
40
+ with open(behave_filename, "r") as behave_json:
41
+ with open(cucumber_filename, "w+") as output_file:
42
+ cucumber_json = b2c.convert(json.load(behave_json, encoding))
43
+ # cucumber_text = json.dumps(cucumber_json, **dump_kwargs)
44
+ # output_file.write(cucumber_text)
45
+ json.dump(cucumber_json, output_file, **dump_kwargs)
46
+ return 0
47
+
48
+ def main(args=None):
49
+ """Main function to run the script."""
50
+ if args is None:
51
+ args = sys.argv[1:]
52
+ if len(args) != 2:
53
+ print("USAGE: %s BEHAVE_FILE.json CUCUMBER_FILE.json" % NAME)
54
+ print("Converts behave JSON dialect to cucumber JSON dialect.")
55
+ return 1
56
+
57
+ behave_filename = args[0]
58
+ cucumber_filename = args[1]
59
+ return convert_behave_to_cucumber_json(behave_filename, cucumber_filename)
60
+
61
+ # -- AUTO-MAIN:
62
+ if __name__ == "__main__":
63
+ sys.exit(main())
@@ -0,0 +1,44 @@
1
+ #!/usr/bin/env python
2
+ # -*- coding: utf-8 -*-
3
+
4
+ from __future__ import absolute_import
5
+ # -- ENSURE: Use local path during development.
6
+ import sys
7
+ import os.path
8
+
9
+ # ----------------------------------------------------------------------------
10
+ # SETUP PATHS:
11
+ # ----------------------------------------------------------------------------
12
+ NAME = "behave"
13
+ HERE = os.path.dirname(__file__)
14
+ TOP = os.path.join(HERE, "..")
15
+ if os.path.isdir(os.path.join(TOP, NAME)):
16
+ sys.path.insert(0, os.path.abspath(TOP))
17
+
18
+ # ----------------------------------------------------------------------------
19
+ # BEHAVE-TWEAKS:
20
+ # ----------------------------------------------------------------------------
21
+ def setup_behave():
22
+ """
23
+ Apply tweaks, extensions and patches to "behave".
24
+ """
25
+ from behave.configuration import Configuration
26
+ # -- DISABLE: Timings to simplify issue.features/ tests.
27
+ # Configuration.defaults["format0"] = "pretty"
28
+ # Configuration.defaults["format0"] = "progress"
29
+ Configuration.defaults["show_timings"] = False
30
+
31
+ def behave_main0():
32
+ # from behave.configuration import Configuration
33
+ from behave.__main__ import main as behave_main
34
+ setup_behave()
35
+ return behave_main()
36
+
37
+ # ----------------------------------------------------------------------------
38
+ # MAIN:
39
+ # ----------------------------------------------------------------------------
40
+ if __name__ == "__main__":
41
+ if "COVERAGE_PROCESS_START" in os.environ:
42
+ import coverage
43
+ coverage.process_startup()
44
+ sys.exit(behave_main0())
@@ -0,0 +1,77 @@
1
+ #!/usr/bin/env python
2
+ # -*- coding: UTF-8 -*-
3
+ # USAGE: convert_i18n_yaml.py [--data=i18n.yml] behave/i18n.py
4
+ """
5
+ Generates I18N python module based on YAML description (i18n.yml).
6
+
7
+ REQUIRES:
8
+ * argparse
9
+ * six
10
+ * PyYAML
11
+ """
12
+
13
+ from __future__ import absolute_import, print_function
14
+ import argparse
15
+ import os.path
16
+ import six
17
+ import sys
18
+ import pprint
19
+ import yaml
20
+
21
+ HERE = os.path.dirname(__file__)
22
+ NAME = os.path.basename(__file__)
23
+ __version__ = "1.0"
24
+
25
+ def yaml_normalize(data):
26
+ for part in data:
27
+ keywords = data[part]
28
+ for k in keywords:
29
+ v = keywords[k]
30
+ # bloody YAML parser returns a mixture of unicode and str
31
+ if not isinstance(v, six.text_type):
32
+ v = v.decode("UTF-8")
33
+ keywords[k] = v.split("|")
34
+ return data
35
+
36
+ def main(args=None):
37
+ if args is None:
38
+ args = sys.argv[1:]
39
+ parser = argparse.ArgumentParser(prog=NAME,
40
+ description="Generate python module i18n from YAML based data")
41
+ parser.add_argument("-d", "--data", dest="yaml_file",
42
+ default=os.path.join(HERE, "i18n.yml"),
43
+ help="Path to i18n.yml file (YAML file).")
44
+ parser.add_argument("output_file", default="stdout",
45
+ help="Filename of Python I18N module (as output).")
46
+ parser.add_argument("--version", action="version", version=__version__)
47
+
48
+ options = parser.parse_args(args)
49
+ if not os.path.isfile(options.yaml_file):
50
+ parser.error("YAML file not found: %s" % options.yaml_file)
51
+
52
+ # -- STEP 1: Load YAML data.
53
+ languages = yaml.load(open(options.yaml_file))
54
+ languages = yaml_normalize(languages)
55
+
56
+ # -- STEP 2: Generate python module with i18n data.
57
+ contents = u"""# -*- coding: UTF-8 -*-
58
+ # -- FILE GENERATED BY: convert_i18n_yaml.py with i18n.yml
59
+ # pylint: disable=line-too-long
60
+
61
+ languages = \\
62
+ """
63
+ if options.output_file in ("-", "stdout"):
64
+ i18n_py = sys.stdout
65
+ should_close = False
66
+ else:
67
+ i18n_py = open(options.output_file, "w")
68
+ should_close = True
69
+ i18n_py.write(contents.encode("UTF-8"))
70
+ i18n_py.write(pprint.pformat(languages).encode("UTF-8"))
71
+ i18n_py.write(u"\n")
72
+ if should_close:
73
+ i18n_py.close()
74
+ return 0
75
+
76
+ if __name__ == "__main__":
77
+ sys.exit(main())