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,57 @@
1
+ # -*- coding: utf-8 -*-
2
+ """
3
+ Deprecated module. Functionality was split-up into:
4
+
5
+ * behave.formatter._registry (generic core functionality)
6
+ * behave.formatter._builtins (registration of known, builtin formatters)
7
+
8
+ .. since:: 1.2.5a1
9
+ Deprecated, use "behave.formatter._registry" or "behave.formatter._builtin".
10
+ """
11
+
12
+ from __future__ import absolute_import
13
+ import warnings
14
+ from behave.formatter import _registry
15
+
16
+ warnings.simplefilter("once", DeprecationWarning)
17
+ warnings.warn("Use 'behave.formatter._registry' instead.", DeprecationWarning)
18
+
19
+ # -----------------------------------------------------------------------------
20
+ # FORMATTER REGISTRY:
21
+ # -----------------------------------------------------------------------------
22
+ def register_as(formatter_class, name):
23
+ """
24
+ Register formatter class with given name.
25
+
26
+ :param formatter_class: Formatter class to register.
27
+ :param name: Name for this formatter (as identifier).
28
+ """
29
+ warnings.warn("Use behave.formatter._registry.register_as() instead.",
30
+ DeprecationWarning, stacklevel=2)
31
+ _registry.register_as(name, formatter_class)
32
+
33
+
34
+ def register(formatter_class):
35
+ register_as(formatter_class, formatter_class.name)
36
+
37
+
38
+ def get_formatter(config, stream_openers):
39
+ warnings.warn("Use make_formatters() instead",
40
+ DeprecationWarning, stacklevel=2)
41
+ return _registry.make_formatters(config, stream_openers)
42
+
43
+
44
+ # -----------------------------------------------------------------------------
45
+ # SETUP:
46
+ # -----------------------------------------------------------------------------
47
+ def setup_formatters():
48
+ warnings.warn("Use behave.formatter._builtins instead",
49
+ DeprecationWarning, stacklevel=2)
50
+ from behave.formatter import _builtins
51
+ _builtins.setup_formatters()
52
+
53
+
54
+ # -----------------------------------------------------------------------------
55
+ # MODULE-INIT:
56
+ # -----------------------------------------------------------------------------
57
+ # DISABLED: setup_formatters()
@@ -0,0 +1,253 @@
1
+ # -*- coding: utf-8 -*-
2
+ """
3
+ This module provides `JSON`_ formatters for :mod:`behave`:
4
+
5
+ * json: Generates compact JSON output
6
+ * json.pretty: Generates readable JSON output
7
+
8
+ .. _JSON: http://json.org
9
+ """
10
+
11
+ from __future__ import absolute_import
12
+ import base64
13
+ from behave.formatter.base import Formatter
14
+ from behave.model_core import Status
15
+ import six
16
+ try:
17
+ import json
18
+ except ImportError:
19
+ import simplejson as json
20
+
21
+
22
+ # -----------------------------------------------------------------------------
23
+ # CLASS: JSONFormatter
24
+ # -----------------------------------------------------------------------------
25
+ class JSONFormatter(Formatter):
26
+ name = "json"
27
+ description = "JSON dump of test run"
28
+ dumps_kwargs = {}
29
+ split_text_into_lines = True # EXPERIMENT for better readability.
30
+
31
+ json_number_types = six.integer_types + (float,)
32
+ json_scalar_types = json_number_types + (six.text_type, bool, type(None))
33
+
34
+ def __init__(self, stream_opener, config):
35
+ super(JSONFormatter, self).__init__(stream_opener, config)
36
+ # -- ENSURE: Output stream is open.
37
+ self.stream = self.open()
38
+ self.feature_count = 0
39
+ self.current_feature = None
40
+ self.current_feature_data = None
41
+ self.current_scenario = None
42
+ self._step_index = 0
43
+
44
+ def reset(self):
45
+ self.current_feature = None
46
+ self.current_feature_data = None
47
+ self.current_scenario = None
48
+ self._step_index = 0
49
+
50
+ # -- FORMATTER API:
51
+ def uri(self, uri):
52
+ pass
53
+
54
+ def feature(self, feature):
55
+ self.reset()
56
+ self.current_feature = feature
57
+ self.current_feature_data = {
58
+ "keyword": feature.keyword,
59
+ "name": feature.name,
60
+ "tags": list(feature.tags),
61
+ "location": six.text_type(feature.location),
62
+ "status": None, # Not known before feature run.
63
+ }
64
+ element = self.current_feature_data
65
+ if feature.description:
66
+ element["description"] = feature.description
67
+
68
+ def background(self, background):
69
+ element = self.add_feature_element({
70
+ "type": "background",
71
+ "keyword": background.keyword,
72
+ "name": background.name,
73
+ "location": six.text_type(background.location),
74
+ "steps": [],
75
+ })
76
+ if background.name:
77
+ element["name"] = background.name
78
+ self._step_index = 0
79
+
80
+ # -- ADD BACKGROUND STEPS: Support *.feature file regeneration.
81
+ for step_ in background.steps:
82
+ self.step(step_)
83
+
84
+ def scenario(self, scenario):
85
+ self.finish_current_scenario()
86
+ self.current_scenario = scenario
87
+
88
+ element = self.add_feature_element({
89
+ "type": "scenario",
90
+ "keyword": scenario.keyword,
91
+ "name": scenario.name,
92
+ "tags": scenario.tags,
93
+ "location": six.text_type(scenario.location),
94
+ "steps": [],
95
+ "status": None,
96
+ })
97
+ if scenario.description:
98
+ element["description"] = scenario.description
99
+ self._step_index = 0
100
+
101
+ @classmethod
102
+ def make_table(cls, table):
103
+ table_data = {
104
+ "headings": table.headings,
105
+ "rows": [list(row) for row in table.rows]
106
+ }
107
+ return table_data
108
+
109
+ def step(self, step):
110
+ s = {
111
+ "keyword": step.keyword,
112
+ "step_type": step.step_type,
113
+ "name": step.name,
114
+ "location": six.text_type(step.location),
115
+ }
116
+
117
+ if step.text:
118
+ text = step.text
119
+ if self.split_text_into_lines and "\n" in text:
120
+ text = text.splitlines()
121
+ s["text"] = text
122
+ if step.table:
123
+ s["table"] = self.make_table(step.table)
124
+ element = self.current_feature_element
125
+ element["steps"].append(s)
126
+
127
+ def match(self, match):
128
+ args = []
129
+ for argument in match.arguments:
130
+ argument_value = argument.value
131
+ if not isinstance(argument_value, self.json_scalar_types):
132
+ # -- OOPS: Avoid invalid JSON format w/ custom types.
133
+ # Use raw string (original) instead.
134
+ argument_value = argument.original
135
+ assert isinstance(argument_value, self.json_scalar_types)
136
+ arg = {
137
+ "value": argument_value,
138
+ }
139
+ if argument.name:
140
+ arg["name"] = argument.name
141
+ if argument.original != argument_value:
142
+ # -- REDUNDANT DATA COMPRESSION: Suppress for strings.
143
+ arg["original"] = argument.original
144
+ args.append(arg)
145
+
146
+ match_data = {
147
+ "location": six.text_type(match.location) or "",
148
+ "arguments": args,
149
+ }
150
+ if match.location:
151
+ # -- NOTE: match.location=None occurs for undefined steps.
152
+ steps = self.current_feature_element["steps"]
153
+ steps[self._step_index]["match"] = match_data
154
+
155
+ def result(self, result):
156
+ steps = self.current_feature_element["steps"]
157
+ steps[self._step_index]["result"] = {
158
+ "status": result.status.name,
159
+ "duration": result.duration,
160
+ }
161
+ if result.error_message and result.status == Status.failed:
162
+ # -- OPTIONAL: Provided for failed steps.
163
+ error_message = result.error_message
164
+ if self.split_text_into_lines and "\n" in error_message:
165
+ error_message = error_message.splitlines()
166
+ result_element = steps[self._step_index]["result"]
167
+ result_element["error_message"] = error_message
168
+ self._step_index += 1
169
+
170
+ def embedding(self, mime_type, data):
171
+ step = self.current_feature_element["steps"][-1]
172
+ step["embeddings"].append({
173
+ "mime_type": mime_type,
174
+ "data": base64.b64encode(data).replace("\n", ""),
175
+ })
176
+
177
+ def eof(self):
178
+ """
179
+ End of feature
180
+ """
181
+ if not self.current_feature_data:
182
+ return
183
+
184
+ # -- NORMAL CASE: Write collected data of current feature.
185
+ self.finish_current_scenario()
186
+ self.update_status_data()
187
+
188
+ if self.feature_count == 0:
189
+ # -- FIRST FEATURE:
190
+ self.write_json_header()
191
+ else:
192
+ # -- NEXT FEATURE:
193
+ self.write_json_feature_separator()
194
+
195
+ self.write_json_feature(self.current_feature_data)
196
+ self.reset()
197
+ self.feature_count += 1
198
+
199
+ def close(self):
200
+ if self.feature_count == 0:
201
+ # -- FIRST FEATURE: Corner case when no features are provided.
202
+ self.write_json_header()
203
+ self.write_json_footer()
204
+ self.close_stream()
205
+
206
+ # -- JSON-DATA COLLECTION:
207
+ def add_feature_element(self, element):
208
+ assert self.current_feature_data is not None
209
+ if "elements" not in self.current_feature_data:
210
+ self.current_feature_data["elements"] = []
211
+ self.current_feature_data["elements"].append(element)
212
+ return element
213
+
214
+ @property
215
+ def current_feature_element(self):
216
+ assert self.current_feature_data is not None
217
+ return self.current_feature_data["elements"][-1]
218
+
219
+ def update_status_data(self):
220
+ assert self.current_feature
221
+ assert self.current_feature_data
222
+ self.current_feature_data["status"] = self.current_feature.status.name
223
+
224
+ def finish_current_scenario(self):
225
+ if self.current_scenario:
226
+ status_name = self.current_scenario.status.name
227
+ self.current_feature_element["status"] = status_name
228
+
229
+ # -- JSON-WRITER:
230
+ def write_json_header(self):
231
+ self.stream.write("[\n")
232
+
233
+ def write_json_footer(self):
234
+ self.stream.write("\n]\n")
235
+
236
+ def write_json_feature(self, feature_data):
237
+ self.stream.write(json.dumps(feature_data, **self.dumps_kwargs))
238
+ self.stream.flush()
239
+
240
+ def write_json_feature_separator(self):
241
+ self.stream.write(",\n\n")
242
+
243
+
244
+ # -----------------------------------------------------------------------------
245
+ # CLASS: PrettyJSONFormatter
246
+ # -----------------------------------------------------------------------------
247
+ class PrettyJSONFormatter(JSONFormatter):
248
+ """
249
+ Provides readable/comparable textual JSON output.
250
+ """
251
+ name = "json.pretty"
252
+ description = "JSON dump of test run (human readable)"
253
+ dumps_kwargs = {"indent": 2, "sort_keys": True}
@@ -0,0 +1,12 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ from __future__ import absolute_import
4
+ from behave.formatter.base import Formatter
5
+
6
+ class NullFormatter(Formatter):
7
+ """
8
+ Provides formatter that does not output anything.
9
+ Implements the NULL pattern for a formatter (similar like: /dev/null).
10
+ """
11
+ name = "null"
12
+ description = "Provides formatter that does not output anything."
@@ -0,0 +1,158 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ from __future__ import absolute_import
4
+ from behave.formatter.base import Formatter
5
+ from behave.model_describe import ModelPrinter
6
+ from behave.textutil import make_indentation
7
+
8
+
9
+ # -----------------------------------------------------------------------------
10
+ # CLASS: PlainFormatter
11
+ # -----------------------------------------------------------------------------
12
+ class PlainFormatter(Formatter):
13
+ """
14
+ Provides a simple plain formatter without coloring/formatting.
15
+ The formatter displays now also:
16
+
17
+ * multi-line text (doc-strings)
18
+ * table
19
+ * tags (maybe)
20
+ """
21
+ name = "plain"
22
+ description = "Very basic formatter with maximum compatibility"
23
+
24
+ SHOW_MULTI_LINE = True
25
+ SHOW_TAGS = False
26
+ SHOW_ALIGNED_KEYWORDS = False
27
+ DEFAULT_INDENT_SIZE = 2
28
+ RAISE_OUTPUT_ERRORS = True
29
+
30
+ def __init__(self, stream_opener, config, **kwargs):
31
+ super(PlainFormatter, self).__init__(stream_opener, config)
32
+ self.steps = []
33
+ self.show_timings = config.show_timings
34
+ self.show_multiline = config.show_multiline and self.SHOW_MULTI_LINE
35
+ self.show_aligned_keywords = self.SHOW_ALIGNED_KEYWORDS
36
+ self.show_tags = self.SHOW_TAGS
37
+ self.indent_size = self.DEFAULT_INDENT_SIZE
38
+ # -- ENSURE: Output stream is open.
39
+ self.stream = self.open()
40
+ self.printer = ModelPrinter(self.stream)
41
+ # -- LAZY-EVALUATE:
42
+ self._multiline_indentation = None
43
+
44
+ @property
45
+ def multiline_indentation(self):
46
+ if self._multiline_indentation is None:
47
+ offset = 0
48
+ if self.show_aligned_keywords:
49
+ offset = 2
50
+ indentation = make_indentation(3 * self.indent_size + offset)
51
+ self._multiline_indentation = indentation
52
+ return self._multiline_indentation
53
+
54
+ def reset_steps(self):
55
+ self.steps = []
56
+
57
+ def write_tags(self, tags, indent=None):
58
+ if tags and self.show_tags:
59
+ indent = indent or ""
60
+ text = " @".join(tags)
61
+ self.stream.write(u"%s@%s\n" % (indent, text))
62
+
63
+ # -- IMPLEMENT-INTERFACE FOR: Formatter
64
+ def feature(self, feature):
65
+ self.reset_steps()
66
+ self.write_tags(feature.tags)
67
+ self.stream.write(u"%s: %s\n" % (feature.keyword, feature.name))
68
+
69
+ def background(self, background):
70
+ self.reset_steps()
71
+ indent = make_indentation(self.indent_size)
72
+ text = u"%s%s: %s\n" % (indent, background.keyword, background.name)
73
+ self.stream.write(text)
74
+
75
+ def scenario(self, scenario):
76
+ self.reset_steps()
77
+ self.stream.write(u"\n")
78
+ indent = make_indentation(self.indent_size)
79
+ text = u"%s%s: %s\n" % (indent, scenario.keyword, scenario.name)
80
+ self.write_tags(scenario.tags, indent)
81
+ self.stream.write(text)
82
+
83
+ def step(self, step):
84
+ self.steps.append(step)
85
+
86
+ def result(self, result):
87
+ """
88
+ Process the result of a step (after step execution).
89
+
90
+ :param result:
91
+ """
92
+ step = self.steps.pop(0)
93
+ indent = make_indentation(2 * self.indent_size)
94
+ if self.show_aligned_keywords:
95
+ # -- RIGHT-ALIGN KEYWORDS (max. keyword width: 6):
96
+ text = u"%s%6s %s ... " % (indent, step.keyword, step.name)
97
+ else:
98
+ text = u"%s%s %s ... " % (indent, step.keyword, step.name)
99
+ self.stream.write(text)
100
+
101
+ status_text = result.status.name
102
+ if self.show_timings:
103
+ status_text += " in %0.3fs" % step.duration
104
+
105
+ unicode_errors = 0
106
+ if result.error_message:
107
+ try:
108
+ self.stream.write(u"%s\n%s\n" % (status_text, result.error_message))
109
+ except UnicodeError as e:
110
+ unicode_errors += 1
111
+ self.stream.write(u"%s\n" % status_text)
112
+ self.stream.write(u"%s while writing error message: %s\n" % \
113
+ (e.__class__.__name__, e))
114
+ if self.RAISE_OUTPUT_ERRORS:
115
+ raise
116
+ else:
117
+ self.stream.write(u"%s\n" % status_text)
118
+
119
+ if self.show_multiline:
120
+ if step.text:
121
+ try:
122
+ self.doc_string(step.text)
123
+ except UnicodeError as e:
124
+ unicode_errors += 1
125
+ self.stream.write(u"%s while writing docstring: %s\n" % \
126
+ (e.__class__.__name__, e))
127
+ if self.RAISE_OUTPUT_ERRORS:
128
+ raise
129
+ if step.table:
130
+ self.table(step.table)
131
+
132
+ def eof(self):
133
+ self.stream.write("\n")
134
+
135
+ # -- MORE: Formatter helpers
136
+ def doc_string(self, doc_string):
137
+ self.printer.print_docstring(doc_string, self.multiline_indentation)
138
+
139
+ def table(self, table):
140
+ self.printer.print_table(table, self.multiline_indentation)
141
+
142
+
143
+ # -----------------------------------------------------------------------------
144
+ # CLASS: Plain0Formatter
145
+ # -----------------------------------------------------------------------------
146
+ class Plain0Formatter(PlainFormatter):
147
+ """
148
+ Similar to old plain formatter without support for:
149
+
150
+ * multi-line text
151
+ * tables
152
+ * tags
153
+ """
154
+ name = "plain0"
155
+ description = "Very basic formatter with maximum compatibility"
156
+ SHOW_MULTI_LINE = False
157
+ SHOW_TAGS = False
158
+ SHOW_ALIGNED_KEYWORDS = False