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,280 @@
1
+ # -*- coding: UTF-8 -*-
2
+ """
3
+ Unittests for :mod:`behave.capture` module.
4
+ """
5
+
6
+ from __future__ import absolute_import, print_function
7
+ import sys
8
+ from behave.capture import Captured, CaptureController
9
+ from mock import Mock
10
+ import pytest
11
+
12
+ # -----------------------------------------------------------------------------
13
+ # TEST SUPPORT:
14
+ # -----------------------------------------------------------------------------
15
+ def create_capture_controller(config=None):
16
+ if not config:
17
+ config = Mock()
18
+ config.stdout_capture = True
19
+ config.stderr_capture = True
20
+ config.log_capture = True
21
+ config.logging_filter = None
22
+ config.logging_level = "INFO"
23
+ return CaptureController(config)
24
+
25
+ def setup_capture_controller(capture_controller, context=None):
26
+ if not context:
27
+ context = Mock()
28
+ context.aborted = False
29
+ context.config = capture_controller.config
30
+ capture_controller.setup_capture(context)
31
+
32
+
33
+ # -----------------------------------------------------------------------------
34
+ # FIXTURES:
35
+ # -----------------------------------------------------------------------------
36
+ @pytest.fixture
37
+ def capture_controller():
38
+ """Provides a capture_controller that is already setup and automatically
39
+ performs a teardown afterwards.
40
+ """
41
+ capture_controller = create_capture_controller()
42
+ setup_capture_controller(capture_controller)
43
+ yield capture_controller
44
+ # -- CLEANUP:
45
+ capture_controller.teardown_capture()
46
+
47
+
48
+ # -----------------------------------------------------------------------------
49
+ # TEST SUITE:
50
+ # -----------------------------------------------------------------------------
51
+ class TestCaptured(object):
52
+
53
+ def test_default_ctor(self):
54
+ captured = Captured()
55
+ assert captured.stdout == u""
56
+ assert captured.stderr == u""
57
+ assert captured.log_output == u""
58
+ assert not captured
59
+
60
+ def test_ctor_with_params(self):
61
+ captured = Captured(u"STDOUT", u"STDERR", u"LOG_OUTPUT")
62
+ assert captured.stdout == u"STDOUT"
63
+ assert captured.stderr == u"STDERR"
64
+ assert captured.log_output == u"LOG_OUTPUT"
65
+
66
+ captured = Captured(stdout=u"STDOUT")
67
+ assert captured.stdout == u"STDOUT"
68
+ assert captured.stderr == u""
69
+ assert captured.log_output == u""
70
+
71
+ captured = Captured(stderr=u"STDERR")
72
+ assert captured.stdout == u""
73
+ assert captured.stderr == u"STDERR"
74
+ assert captured.log_output == u""
75
+
76
+ captured = Captured(log_output=u"LOG_OUTPUT")
77
+ assert captured.stdout == u""
78
+ assert captured.stderr == u""
79
+ assert captured.log_output == u"LOG_OUTPUT"
80
+
81
+ def test_reset(self):
82
+ captured = Captured("STDOUT", "STDERR", "LOG_OUTPUT")
83
+ captured.reset()
84
+ assert captured.stdout == u""
85
+ assert captured.stderr == u""
86
+ assert captured.log_output == u""
87
+ assert not captured
88
+
89
+ def test_bool_conversion__returns_false_without_captured_output(self):
90
+ captured = Captured()
91
+ assert bool(captured) == False
92
+
93
+ @pytest.mark.parametrize("params", [
94
+ dict(stdout="xxx"),
95
+ dict(stderr="yyy"),
96
+ dict(log_output="zzz"),
97
+ dict(stderr="yyy", log_output="zzz"),
98
+ dict(stdout="xxx", stderr="yyy", log_output="zzz"),
99
+ ])
100
+ def test_bool_conversion__returns_true_with_captured_output(self, params):
101
+ captured = Captured(**params)
102
+ assert bool(captured)
103
+
104
+ @pytest.mark.parametrize("params, expected", [
105
+ (dict(), ""),
106
+ (dict(stdout="STDOUT"), "STDOUT"),
107
+ (dict(stderr="STDERR"), "STDERR"),
108
+ (dict(log_output="LOG_OUTPUT"), "LOG_OUTPUT"),
109
+ (dict(stdout="STDOUT", stderr="STDERR"), "STDOUT\nSTDERR"),
110
+ (dict(stdout="STDOUT", log_output="LOG_OUTPUT"), "STDOUT\nLOG_OUTPUT"),
111
+ (dict(stdout="STDOUT", stderr="STDERR", log_output="LOG_OUTPUT"),
112
+ "STDOUT\nSTDERR\nLOG_OUTPUT"),
113
+ ])
114
+ def test_output__contains_concatenated_parts(self, params, expected):
115
+ captured = Captured(**params)
116
+ assert captured.output == expected
117
+
118
+ def test_add__without_captured_data(self):
119
+ captured1 = Captured()
120
+ captured2 = Captured("STDOUT", "STDERR", "LOG_OUTPUT")
121
+ captured1.add(captured2)
122
+ assert captured1.stdout == "STDOUT"
123
+ assert captured1.stderr == "STDERR"
124
+ assert captured1.log_output == "LOG_OUTPUT"
125
+
126
+ def test_add__with_captured_data(self):
127
+ captured1 = Captured("stdout1", "stderr1", "log_output1")
128
+ captured2 = Captured("STDOUT2", "STDERR2", "LOG_OUTPUT2")
129
+
130
+ captured1.add(captured2)
131
+ assert captured1.stdout == "stdout1\nSTDOUT2"
132
+ assert captured1.stderr == "stderr1\nSTDERR2"
133
+ assert captured1.log_output == "log_output1\nLOG_OUTPUT2"
134
+
135
+ def test_operator_add(self):
136
+ captured1 = Captured("stdout1", "stderr1", "log_output1")
137
+ captured2 = Captured("STDOUT2", "STDERR2", "LOG_OUTPUT2")
138
+
139
+ captured3 = captured1 + captured2
140
+ assert captured3.stdout == "stdout1\nSTDOUT2"
141
+ assert captured3.stderr == "stderr1\nSTDERR2"
142
+ assert captured3.log_output == "log_output1\nLOG_OUTPUT2"
143
+ # -- ENSURE: captured1 is not modified.
144
+ assert captured1.stdout == "stdout1"
145
+ assert captured1.stderr == "stderr1"
146
+ assert captured1.log_output == "log_output1"
147
+ # -- ENSURE: captured2 is not modified.
148
+ assert captured2.stdout == "STDOUT2"
149
+ assert captured2.stderr == "STDERR2"
150
+ assert captured2.log_output == "LOG_OUTPUT2"
151
+
152
+ def test_operator_iadd(self):
153
+ captured1 = Captured("stdout1", "stderr1", "log_output1")
154
+ captured2 = Captured("STDOUT2", "STDERR2", "LOG_OUTPUT2")
155
+
156
+ captured1 += captured2
157
+ assert captured1.stdout == "stdout1\nSTDOUT2"
158
+ assert captured1.stderr == "stderr1\nSTDERR2"
159
+ assert captured1.log_output == "log_output1\nLOG_OUTPUT2"
160
+ # -- ENSURE: captured2 is not modified.
161
+ assert captured2.stdout == "STDOUT2"
162
+ assert captured2.stderr == "STDERR2"
163
+ assert captured2.log_output == "LOG_OUTPUT2"
164
+
165
+ def test_make_report__with_all_sections(self):
166
+ captured = Captured(stdout="xxx", stderr="yyy", log_output="zzz")
167
+ expected = """\
168
+ Captured stdout:
169
+ xxx
170
+
171
+ Captured stderr:
172
+ yyy
173
+
174
+ Captured logging:
175
+ zzz"""
176
+ assert captured.make_report() == expected
177
+
178
+ def test_make_report__should_only_contain_nonempty_data_sections(self):
179
+ captured1 = Captured(stdout="xxx")
180
+ expected = "Captured stdout:\nxxx"
181
+ assert captured1.make_report() == expected
182
+
183
+ captured2 = Captured(stderr="yyy")
184
+ expected = "Captured stderr:\nyyy"
185
+ assert captured2.make_report() == expected
186
+
187
+ captured3 = Captured(log_output="zzz")
188
+ expected = "Captured logging:\nzzz"
189
+ assert captured3.make_report() == expected
190
+
191
+
192
+ class Theory4ActiveCaptureController(object):
193
+ @staticmethod
194
+ def check_invariants(controller):
195
+ if controller.config.capture_stdout:
196
+ assert controller.stdout_capture is not None
197
+ assert sys.stdout is controller.stdout_capture
198
+ else:
199
+ assert controller.stdout_capture is None
200
+ assert sys.stdout is not controller.stdout_capture
201
+
202
+ if controller.config.capture_stderr:
203
+ assert controller.stderr_capture is not None
204
+ assert sys.stderr is controller.stderr_capture
205
+ else:
206
+ assert controller.stderr_capture is None
207
+ assert sys.stderr is not controller.stderr_capture
208
+
209
+ if controller.config.capture_log:
210
+ assert controller.log_capture is not None
211
+ # assert sys.stderr is controller.stderr_capture
212
+ else:
213
+ assert controller.log_capture is None
214
+ # assert sys.stderr is not controller.stderr_capture
215
+
216
+
217
+ class TestCaptureController(object):
218
+
219
+ # @pytest.no_capture
220
+ def test_basics(self):
221
+ capture_controller = create_capture_controller()
222
+ context = Mock()
223
+ context.aborted = False
224
+ context.config = capture_controller.config
225
+
226
+ capture_controller.setup_capture(context)
227
+ # XXX AVOID: Due to pytest capture mode
228
+ # Theory4ActiveCaptureController.check_invariants(capture_controller)
229
+
230
+ capture_controller.start_capture()
231
+ sys.stdout.write("HELLO\n")
232
+ sys.stderr.write("world\n")
233
+ capture_controller.stop_capture()
234
+ assert capture_controller.captured.output == "HELLO\nworld\n"
235
+
236
+ # -- FINALLY:
237
+ capture_controller.teardown_capture()
238
+
239
+ def test_capturing__retrieve_captured_several_times(self, capture_controller):
240
+ capture_controller.start_capture()
241
+ sys.stdout.write("HELLO\n")
242
+ sys.stderr.write("Alice\n")
243
+ assert capture_controller.captured.output == "HELLO\nAlice\n"
244
+
245
+ print("Sam")
246
+ sys.stderr.write("Bob\n")
247
+ capture_controller.stop_capture()
248
+ assert capture_controller.captured.output == "HELLO\nSam\nAlice\nBob\n"
249
+
250
+
251
+ def test_capturing__with_several_start_stop_cycles(self, capture_controller):
252
+ capture_controller.start_capture()
253
+ sys.stdout.write("HELLO\n")
254
+ sys.stderr.write("Alice\n")
255
+ capture_controller.stop_capture()
256
+ assert capture_controller.captured.output == "HELLO\nAlice\n"
257
+
258
+ sys.stdout.write("__UNCAPTURED:stdout;\n")
259
+ sys.stderr.write("__UNCAPTURED:stderr;\n")
260
+
261
+ capture_controller.start_capture()
262
+ sys.stdout.write("Sam\n")
263
+ sys.stderr.write("Bob\n")
264
+ capture_controller.stop_capture()
265
+ assert capture_controller.captured.output == "HELLO\nSam\nAlice\nBob\n"
266
+
267
+
268
+ def test_make_capture_report(self, capture_controller):
269
+ capture_controller.start_capture()
270
+ print("HELLO")
271
+ sys.stderr.write("Alice\n")
272
+ capture_controller.stop_capture()
273
+ report = capture_controller.make_capture_report()
274
+ expected = """\
275
+ Captured stdout:
276
+ HELLO
277
+
278
+ Captured stderr:
279
+ Alice"""
280
+ assert report == expected
@@ -0,0 +1,56 @@
1
+ # -*- coding: UTF-8 -*-
2
+ """
3
+ (Additional) Unit tests for :mod:`behave.model_core` module.
4
+ """
5
+
6
+ from __future__ import print_function
7
+ from behave.model_core import Status
8
+ import pytest
9
+
10
+
11
+ # -----------------------------------------------------------------------------
12
+ # TESTS:
13
+ # -----------------------------------------------------------------------------
14
+ class TestStatus(object):
15
+ """Test Status enum class.
16
+ In addition, checks if it is partly backward compatibility to
17
+ string-based status.
18
+
19
+ EXAMPLE::
20
+
21
+ status = Status.passed
22
+ assert status == "passed"
23
+ assert status != "failed"
24
+ assert status == Status.from_name("passed")
25
+ """
26
+
27
+ @pytest.mark.parametrize("enum_value", list(Status.__members__.values()))
28
+ def test_equals__with_string_value(self, enum_value):
29
+ """Ensure that Status enum value can be compared with a string-status"""
30
+ assert enum_value == enum_value.name
31
+
32
+ @pytest.mark.parametrize("enum_value", list(Status.__members__.values()))
33
+ def test_equals__with_unknown_name(self, enum_value):
34
+ assert enum_value != "__UNKNOWN__"
35
+ assert not (enum_value == "__UNKNOWN__")
36
+
37
+ @pytest.mark.parametrize("enum_value, similar_name", [
38
+ (Status.passed, "Passed"),
39
+ (Status.failed, "FAILED"),
40
+ (Status.passed, "passed1"),
41
+ (Status.failed, "failed2"),
42
+ ])
43
+ def test_equals__with_similar_name(self, enum_value, similar_name):
44
+ assert enum_value != similar_name
45
+
46
+ @pytest.mark.parametrize("enum_value", list(Status.__members__.values()))
47
+ def test_from_name__with_known_names(self, enum_value):
48
+ assert enum_value == Status.from_name(enum_value.name)
49
+
50
+
51
+ @pytest.mark.parametrize("unknown_name", [
52
+ "Passed", "Failed", "passed2", "failed1"
53
+ ])
54
+ def test_from_name__with_unknown_name_raises_lookuperror(self, unknown_name):
55
+ with pytest.raises(LookupError):
56
+ Status.from_name(unknown_name)
@@ -0,0 +1,267 @@
1
+ # -*- coding: UTF-8 -*-
2
+ """
3
+ Unit tests for :mod:`behave.textutil`.
4
+ """
5
+
6
+ from __future__ import absolute_import, print_function
7
+ from behave.textutil import text, is_ascii_encoding, select_best_encoding
8
+ import pytest
9
+ import codecs
10
+ import six
11
+
12
+ # -----------------------------------------------------------------------------
13
+ # TEST SUPPORT:
14
+ # -----------------------------------------------------------------------------
15
+ class ConvertableToUnicode(object):
16
+ """Class that can be converted into a unicode string.
17
+ If parameter is a bytes-string, it is converted into unicode.
18
+
19
+ .. code-block:: python
20
+
21
+ obj1 = ConvertableToUnicode(u"Ärgernis")
22
+ obj2 = ConvertableToUnicode(u"Ärgernis".encode("latin-1")
23
+
24
+ # -- CASE Python2: string is a bytes-string
25
+ text_value21 = unicode(obj1)
26
+ text_value22 = unicode(obj2)
27
+
28
+ # -- CASE Python3: string is a unicode-string
29
+ text_value31 = str(obj1)
30
+ text_value32 = str(obj2)
31
+ """
32
+ encoding = "utf-8"
33
+
34
+ def __init__(self, text, encoding=None):
35
+ self.text = text
36
+ self.encoding = encoding or self.__class__.encoding
37
+
38
+ def __str__(self):
39
+ """Convert into a unicode string."""
40
+ text = self.text
41
+ if isinstance(text, six.binary_type):
42
+ text = codecs.decode(text, self.encoding)
43
+ return text
44
+
45
+ if six.PY2:
46
+ __unicode__ = __str__
47
+ __str__ = lambda self: self.__unicode__().encode(self.encoding)
48
+
49
+ class ConvertableToString(object):
50
+ encoding = "utf-8"
51
+
52
+ def __init__(self, text, encoding=None):
53
+ self.text = text
54
+ self.encoding = encoding or self.__class__.encoding
55
+
56
+ def __str__(self):
57
+ text = self.text
58
+ if isinstance(text, six.binary_type):
59
+ text = codecs.decode(text, self.encoding)
60
+ return text
61
+
62
+ if six.PY2:
63
+ __unicode__ = __str__
64
+
65
+ def __str__(self):
66
+ # MAYBE: self.__unicode__().encode(self.encoding)
67
+ text = self.text
68
+ if isinstance(text, six.text_type):
69
+ text = codecs.encode(text, self.encoding)
70
+ return text
71
+
72
+ class ConvertableToPy2String(object):
73
+ encoding = "utf-8"
74
+
75
+ def __init__(self, text, encoding=None):
76
+ self.text = text
77
+ self.encoding = encoding or self.__class__.encoding
78
+
79
+ def __str__(self):
80
+ text = self.text
81
+ if six.PY2:
82
+ if isinstance(text, six.text_type):
83
+ text = codecs.encode(text, self.encoding)
84
+ else:
85
+ if isinstance(text, six.bytes_type):
86
+ text = codecs.decode(text, self.encoding)
87
+ return text
88
+
89
+ if six.PY2:
90
+ __unicode__ = __str__
91
+
92
+ def __str__(self):
93
+ # MAYBE: self.__unicode__().encode(self.encoding)
94
+ text = self.text
95
+ if isinstance(text, six.text_type):
96
+ text = codecs.encode(text, self.encoding)
97
+ return text
98
+
99
+ # def raise_exception(exception_class, *args):
100
+ # raise exception_class(*args)
101
+ #
102
+ # def catch_raised_exception_and_return_as_text(exception_class, *args, **kwargs):
103
+ # encoding = kwargs.pop("encoding", None)
104
+ # try:
105
+ # raise_exception(*args)
106
+ # except Exception as e:
107
+ # return text(e, encoding=encoding)
108
+
109
+
110
+ # -----------------------------------------------------------------------------
111
+ # TEST SUITE
112
+ # -----------------------------------------------------------------------------
113
+ xfail = pytest.mark.xfail
114
+ requires_python2 = pytest.mark.skipif(not six.PY2, reason="requires python2")
115
+
116
+ UNICODE_TEXT_VALUES1 = [u"Alice", u"Bob"]
117
+ UNICODE_TEXT_VALUES = [u"Café", u"100€ (Euro)", u"Frühaufsteher"]
118
+ BYTES_TEXT_TUPLES_WITH_UTF8_ENCODING = [
119
+ (codecs.encode(_text, "utf-8"), _text) for _text in UNICODE_TEXT_VALUES
120
+ ]
121
+
122
+
123
+ class TestTextConversion(object):
124
+ """Unit tests for the :func:`behave.textutil.text()` function."""
125
+
126
+ @pytest.mark.parametrize("value", UNICODE_TEXT_VALUES)
127
+ def test_text__with_unicode_value(self, value):
128
+ value_id = id(value)
129
+ actual_text = text(value)
130
+ assert actual_text == value
131
+ assert id(actual_text) == value_id # PARANOID check w/ unicode copy.
132
+
133
+ @pytest.mark.parametrize("bytes_value, expected_text",
134
+ BYTES_TEXT_TUPLES_WITH_UTF8_ENCODING)
135
+ def test_text__with_bytes_value(self, bytes_value, expected_text):
136
+ actual_text = text(bytes_value)
137
+ assert actual_text == expected_text
138
+
139
+
140
+ @pytest.mark.parametrize("text_value, encoding", [
141
+ (u"Ärgernis", "UTF-8"),
142
+ (u"Übermut", "UTF-8"),
143
+ ])
144
+ def test_text__with_bytes_value_and_encoding(self, text_value, encoding):
145
+ bytes_value = text_value.encode(encoding)
146
+ assert isinstance(bytes_value, bytes)
147
+
148
+ actual = text(bytes_value, encoding)
149
+ assert isinstance(actual, six.text_type)
150
+ assert actual == text_value
151
+
152
+ def test_text__with_exception_traceback(self): pass
153
+
154
+ @pytest.mark.parametrize("text_value", UNICODE_TEXT_VALUES)
155
+ def test_text__with_object_convertable_to_unicode(self, text_value):
156
+ obj = ConvertableToUnicode(text_value)
157
+ actual_text = text(obj)
158
+ assert actual_text == text_value
159
+ assert isinstance(actual_text, six.text_type)
160
+
161
+ # @pytest.mark.parametrize("expected, text_value, encoding", [
162
+ # (u"Ärgernis", u"Ärgernis".encode("UTF-8"), "UTF-8"),
163
+ # (u"Übermut", u"Übermut".encode("latin-1"), "latin-1"),
164
+ # ])
165
+ # def test_text__with_object_convertable_to_unicode2(self, expected,
166
+ # text_value, encoding):
167
+ # obj = ConvertableToUnicode(text_value, encoding)
168
+ # actual_text = text(obj)
169
+ # assert actual_text == expected
170
+ # assert isinstance(actual_text, six.text_type)
171
+
172
+ @pytest.mark.parametrize("text_value", UNICODE_TEXT_VALUES)
173
+ def test_text__with_object_convertable_to_string(self, text_value):
174
+ obj = ConvertableToString(text_value)
175
+ actual_text = text(obj)
176
+ assert actual_text == text_value
177
+ assert isinstance(actual_text, six.text_type)
178
+
179
+ @xfail
180
+ @requires_python2
181
+ @pytest.mark.parametrize("text_value", UNICODE_TEXT_VALUES)
182
+ def test_text__with_object_convertable_to_py2string_only(self, text_value):
183
+ class ConvertableToPy2String(object):
184
+ """Lacks feature: convertable-to-unicode (only: to-string)"""
185
+ def __init__(self, message=""):
186
+ self.message = message or ""
187
+ if self.message and isinstance(self.message, six.text_type):
188
+ self.message = self.message.encode("UTF-8")
189
+
190
+ def __str__(self):
191
+ # assert isinstance(self.message, str)
192
+ return self.message
193
+
194
+ obj = ConvertableToPy2String(text_value.encode("UTF-8"))
195
+ actual = text(obj)
196
+ print(u"actual: %s" % actual)
197
+ print(u"text_value: %s" % text_value)
198
+ assert actual == text_value
199
+
200
+
201
+ class TestObjectToTextConversion(object):
202
+ """Unit tests for the :func:`behave.textutil.text()` function.
203
+ Explore case with object-to-text conversion.
204
+ """
205
+ ENCODING = "UTF-8"
206
+
207
+ # -- CASE: object=exception
208
+ @pytest.mark.parametrize("message", [
209
+ u"Ärgernis", u"Übermütig"
210
+ ])
211
+ def test_text__with_assert_failed_and_unicode_message(self, message):
212
+ with pytest.raises(AssertionError) as e:
213
+ assert False, message
214
+
215
+ text2 = text(e)
216
+ expected = u"AssertionError: %s" % message
217
+ assert text2.endswith(expected)
218
+
219
+ @requires_python2
220
+ @pytest.mark.parametrize("message", [
221
+ u"Ärgernis", u"Übermütig"
222
+ ])
223
+ def test_text__with_assert_failed_and_bytes_message(self, message):
224
+ # -- ONLY PYTHON2: Use case makes no sense for Python 3.
225
+ bytes_message = message.encode(self.ENCODING)
226
+ with pytest.raises(AssertionError) as e:
227
+ assert False, bytes_message
228
+
229
+ text2 = text(e)
230
+ expected = u"AssertionError: %s" % message
231
+ assert text2.endswith(expected)
232
+
233
+ @pytest.mark.parametrize("exception_class, message", [
234
+ (AssertionError, u"Ärgernis"),
235
+ (RuntimeError, u"Übermütig"),
236
+ ])
237
+ def test_text__with_raised_exception_and_unicode_message(self,
238
+ exception_class,
239
+ message):
240
+ with pytest.raises(exception_class) as e:
241
+ raise exception_class(message)
242
+
243
+ text2 = text(e)
244
+ expected = u"%s: %s" % (exception_class.__name__, message)
245
+ assert isinstance(text2, six.text_type)
246
+ assert text2.endswith(expected)
247
+
248
+ @requires_python2
249
+ @pytest.mark.parametrize("exception_class, message", [
250
+ (AssertionError, u"Ärgernis"),
251
+ (RuntimeError, u"Übermütig"),
252
+ ])
253
+ def test_text__with_raised_exception_and_bytes_message(self, exception_class,
254
+ message):
255
+ # -- ONLY PYTHON2: Use case makes no sense for Python 3.
256
+ bytes_message = message.encode(self.ENCODING)
257
+ with pytest.raises(exception_class) as e:
258
+ raise exception_class(bytes_message)
259
+
260
+ text2 = text(e)
261
+ unicode_message = bytes_message.decode(self.ENCODING)
262
+ expected = u"%s: %s" % (exception_class.__name__, unicode_message)
263
+ assert isinstance(text2, six.text_type)
264
+ assert text2.endswith(expected)
265
+ # -- DIAGNOSTICS:
266
+ print(u"text2: "+ text2)
267
+ print(u"expected: " + expected)