cucumber 1.3.10 → 2.0.0

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 (465) hide show
  1. checksums.yaml +4 -4
  2. data/.coveralls.yml +1 -0
  3. data/.rspec +1 -1
  4. data/.travis.yml +4 -3
  5. data/CONTRIBUTING.md +9 -0
  6. data/Gemfile +9 -2
  7. data/History.md +212 -22
  8. data/LICENSE +2 -2
  9. data/README.md +4 -4
  10. data/Rakefile +10 -1
  11. data/bin/cucumber +1 -5
  12. data/cucumber.gemspec +10 -13
  13. data/cucumber.yml +14 -24
  14. data/examples/{ramaze → i18n/el}/Rakefile +1 -1
  15. data/examples/i18n/el/features/addition.feature +17 -0
  16. data/examples/i18n/el/features/division.feature +10 -0
  17. data/examples/i18n/el/features/step_definitions/calculator_steps.rb +24 -0
  18. data/examples/i18n/el/lib/calculator.rb +14 -0
  19. data/examples/i18n/fr/Rakefile +3 -1
  20. data/examples/i18n/fr/features/step_definitions/calculatrice_steps.rb +2 -2
  21. data/examples/i18n/ht/Rakefile +6 -0
  22. data/examples/i18n/ht/features/adisyon.feature +17 -0
  23. data/examples/i18n/ht/features/divizyon.feature +10 -0
  24. data/examples/i18n/ht/features/step_definitions/kalkilatris_steps.rb +25 -0
  25. data/examples/i18n/ht/lib/kalkilatris.rb +14 -0
  26. data/examples/i18n/zh-CN/features/{step_definitons → step_definitions}/calculator_steps.rb +4 -4
  27. data/examples/tcl/features/step_definitions/fib_steps.rb +1 -1
  28. data/{legacy_features → features/docs}/api/list_step_defs_as_json.feature +14 -14
  29. data/{legacy_features → features/docs}/api/run_cli_main_with_existing_runtime.feature +5 -10
  30. data/features/{backtraces.feature → docs/cli/backtraces.feature} +2 -2
  31. data/features/docs/cli/dry_run.feature +73 -0
  32. data/features/docs/cli/exclude_files.feature +18 -0
  33. data/features/docs/cli/execute_with_tag_filter.feature +117 -0
  34. data/features/docs/cli/randomize.feature +46 -0
  35. data/features/docs/cli/require.feature +27 -0
  36. data/features/docs/cli/run_scenarios_matching_name.feature +104 -0
  37. data/features/docs/cli/run_specific_scenarios.feature +75 -0
  38. data/features/docs/cli/showing_differences.feature +43 -0
  39. data/features/docs/cli/specifying_multiple_formatters.feature +44 -0
  40. data/features/docs/cli/strict_mode.feature +64 -0
  41. data/features/{nested_steps.feature → docs/defining_steps/nested_steps.feature} +52 -6
  42. data/features/{nested_steps_i18n.feature → docs/defining_steps/nested_steps_i18n.feature} +0 -2
  43. data/features/{step_definitions.feature → docs/defining_steps/one_line_step_definitions.feature} +3 -3
  44. data/features/docs/defining_steps/printing_messages.feature +148 -0
  45. data/features/docs/defining_steps/skip_scenario.feature +62 -0
  46. data/features/docs/defining_steps/snippets.feature +56 -0
  47. data/{legacy_features → features/docs/defining_steps}/table_diffing.feature +21 -16
  48. data/features/{transforms.feature → docs/defining_steps/transforms.feature} +2 -2
  49. data/{legacy_features/exception_in_after_block.feature → features/docs/exception_in_after_hook.feature} +25 -26
  50. data/{legacy_features/exception_in_after_step_block.feature → features/docs/exception_in_after_step_hook.feature} +22 -24
  51. data/features/docs/exception_in_around_hook.feature +80 -0
  52. data/{legacy_features/exception_in_before_block.feature → features/docs/exception_in_before_hook.feature} +18 -20
  53. data/features/docs/extending_cucumber/custom_filter.feature +29 -0
  54. data/features/docs/extending_cucumber/custom_formatter.feature +94 -0
  55. data/features/docs/formatters/debug_formatter.feature +47 -0
  56. data/features/{formatter_step_file_colon_line.feature → docs/formatters/formatter_step_file_colon_line.feature} +2 -4
  57. data/features/{html_formatter.feature → docs/formatters/html_formatter.feature} +10 -14
  58. data/features/docs/formatters/json_formatter.feature +760 -0
  59. data/features/docs/formatters/junit_formatter.feature +316 -0
  60. data/features/docs/formatters/pretty_formatter.feature +73 -0
  61. data/features/{progress_formatter.feature → docs/formatters/progress_formatter.feature} +1 -1
  62. data/features/docs/formatters/rerun_formatter.feature +136 -0
  63. data/features/docs/formatters/usage_formatter.feature +102 -0
  64. data/features/docs/getting_started.feature +27 -0
  65. data/features/{background.feature → docs/gherkin/background.feature} +149 -91
  66. data/features/{doc_strings.feature → docs/gherkin/doc_strings.feature} +1 -0
  67. data/features/docs/gherkin/expand_option_for_outlines.feature +46 -0
  68. data/features/docs/gherkin/language_from_header.feature +32 -0
  69. data/features/docs/gherkin/outlines.feature +158 -0
  70. data/features/docs/gherkin/unicode_table.feature +32 -0
  71. data/features/docs/gherkin/using_descriptions.feature +88 -0
  72. data/features/docs/gherkin/using_star_notation.feature +37 -0
  73. data/{legacy_features → features/docs}/post_configuration_hook.feature +17 -18
  74. data/{legacy_features → features/docs}/profiles.feature +30 -36
  75. data/{legacy_features → features/docs}/rake_task.feature +30 -41
  76. data/features/{raketask.feature → docs/raketask.feature} +6 -13
  77. data/{legacy_features/wire_protocol_erb.feature → features/docs/wire_protocol/erb_configuration.feature} +7 -8
  78. data/features/docs/wire_protocol/handle_unexpected_response.feature +30 -0
  79. data/features/docs/wire_protocol/invoke_message.feature +216 -0
  80. data/features/docs/wire_protocol/readme.md +26 -0
  81. data/features/docs/wire_protocol/snippets_message.feature +51 -0
  82. data/features/docs/wire_protocol/step_matches_message.feature +81 -0
  83. data/{legacy_features/wire_protocol_table_diffing.feature → features/docs/wire_protocol/table_diffing.feature} +19 -12
  84. data/{legacy_features/wire_protocol_tags.feature → features/docs/wire_protocol/tags.feature} +7 -7
  85. data/{legacy_features/wire_protocol_timeouts.feature → features/docs/wire_protocol/timeouts.feature} +7 -6
  86. data/{legacy_features → features/docs}/work_in_progress.feature +52 -54
  87. data/features/docs/writing_support_code/after_hooks.feature +80 -0
  88. data/{legacy_features → features/docs/writing_support_code}/around_hooks.feature +56 -28
  89. data/features/docs/writing_support_code/before_hook.feature +65 -0
  90. data/features/docs/writing_support_code/hook_order.feature +61 -0
  91. data/features/{load_path.feature → docs/writing_support_code/load_path.feature} +3 -0
  92. data/features/docs/writing_support_code/state.feature +32 -0
  93. data/features/docs/writing_support_code/tagged_hooks.feature +95 -0
  94. data/features/lib/step_definitions/aruba_steps.rb +22 -0
  95. data/features/lib/step_definitions/cucumber_steps.rb +50 -0
  96. data/features/{step_definitions → lib/step_definitions}/iso-8859-1_steps.rb +3 -15
  97. data/features/lib/step_definitions/json_steps.rb +7 -0
  98. data/features/lib/step_definitions/junit_steps.rb +13 -0
  99. data/features/lib/step_definitions/language_steps.rb +4 -5
  100. data/features/lib/step_definitions/profile_steps.rb +15 -0
  101. data/features/lib/step_definitions/ruby_steps.rb +3 -0
  102. data/features/lib/step_definitions/wire_steps.rb +58 -0
  103. data/features/lib/support/env.rb +21 -0
  104. data/{legacy_features → features/lib}/support/fake_wire_server.rb +10 -7
  105. data/features/{support → lib/support}/feature_factory.rb +1 -1
  106. data/features/lib/support/normalise_output.rb +33 -0
  107. data/gem_tasks/cov.rake +5 -0
  108. data/gem_tasks/cucumber.rake +3 -8
  109. data/gem_tasks/rspec.rake +0 -2
  110. data/lib/cucumber/ast.rb +8 -25
  111. data/lib/cucumber/cli/configuration.rb +33 -37
  112. data/lib/cucumber/cli/main.rb +14 -27
  113. data/lib/cucumber/cli/options.rb +22 -60
  114. data/lib/cucumber/cli/profile_loader.rb +1 -1
  115. data/lib/cucumber/configuration.rb +4 -0
  116. data/lib/cucumber/constantize.rb +7 -6
  117. data/lib/cucumber/core_ext/instance_exec.rb +7 -38
  118. data/lib/cucumber/core_ext/proc.rb +1 -1
  119. data/lib/cucumber/encoding.rb +5 -0
  120. data/lib/cucumber/errors.rb +21 -10
  121. data/lib/cucumber/file_specs.rb +37 -0
  122. data/lib/cucumber/filters/activate_steps.rb +33 -0
  123. data/lib/cucumber/filters/apply_after_hooks.rb +9 -0
  124. data/lib/cucumber/filters/apply_after_step_hooks.rb +12 -0
  125. data/lib/cucumber/filters/apply_around_hooks.rb +12 -0
  126. data/lib/cucumber/filters/apply_before_hooks.rb +9 -0
  127. data/lib/cucumber/filters/gated_receiver.rb +25 -0
  128. data/lib/cucumber/filters/prepare_world.rb +45 -0
  129. data/lib/cucumber/filters/quit.rb +28 -0
  130. data/lib/cucumber/filters/randomizer.rb +40 -0
  131. data/lib/cucumber/filters/tag_limits/test_case_index.rb +31 -0
  132. data/lib/cucumber/filters/tag_limits/verifier.rb +59 -0
  133. data/lib/cucumber/filters/tag_limits.rb +45 -0
  134. data/lib/cucumber/filters.rb +9 -0
  135. data/lib/cucumber/formatter/ansicolor.rb +0 -8
  136. data/lib/cucumber/formatter/console.rb +66 -36
  137. data/lib/cucumber/formatter/debug.rb +10 -8
  138. data/lib/cucumber/formatter/fanout.rb +27 -0
  139. data/lib/cucumber/formatter/gherkin_formatter_adapter.rb +122 -12
  140. data/lib/cucumber/formatter/html.rb +67 -18
  141. data/lib/cucumber/formatter/ignore_missing_messages.rb +20 -0
  142. data/lib/cucumber/formatter/interceptor.rb +17 -3
  143. data/lib/cucumber/formatter/json.rb +1 -1
  144. data/lib/cucumber/formatter/junit.rb +105 -5
  145. data/lib/cucumber/formatter/legacy_api/adapter.rb +1060 -0
  146. data/lib/cucumber/formatter/legacy_api/ast.rb +376 -0
  147. data/lib/cucumber/formatter/legacy_api/results.rb +51 -0
  148. data/lib/cucumber/formatter/legacy_api/runtime_facade.rb +30 -0
  149. data/lib/cucumber/formatter/pretty.rb +16 -8
  150. data/lib/cucumber/formatter/progress.rb +10 -0
  151. data/lib/cucumber/formatter/rerun.rb +14 -71
  152. data/lib/cucumber/formatter/unicode.rb +8 -21
  153. data/lib/cucumber/formatter/usage.rb +7 -1
  154. data/lib/cucumber/hooks.rb +97 -0
  155. data/lib/cucumber/language_support/language_methods.rb +0 -54
  156. data/lib/cucumber/{ast/table.rb → multiline_argument/data_table.rb} +77 -84
  157. data/lib/cucumber/multiline_argument/doc_string.rb +10 -0
  158. data/lib/cucumber/multiline_argument.rb +74 -0
  159. data/lib/cucumber/platform.rb +21 -20
  160. data/lib/cucumber/project_initializer.rb +43 -0
  161. data/lib/cucumber/rake/task.rb +3 -54
  162. data/lib/cucumber/rb_support/rb_hook.rb +2 -2
  163. data/lib/cucumber/rb_support/rb_language.rb +4 -34
  164. data/lib/cucumber/rb_support/rb_step_definition.rb +11 -2
  165. data/lib/cucumber/rb_support/rb_transform.rb +3 -1
  166. data/lib/cucumber/rb_support/rb_world.rb +13 -20
  167. data/lib/cucumber/rb_support/snippet.rb +61 -20
  168. data/lib/cucumber/rspec/doubles.rb +9 -6
  169. data/lib/cucumber/running_test_case.rb +115 -0
  170. data/lib/cucumber/runtime/after_hooks.rb +24 -0
  171. data/lib/cucumber/runtime/before_hooks.rb +23 -0
  172. data/lib/cucumber/runtime/for_programming_languages.rb +14 -10
  173. data/lib/cucumber/runtime/step_hooks.rb +22 -0
  174. data/lib/cucumber/runtime/support_code.rb +78 -21
  175. data/lib/cucumber/runtime/user_interface.rb +4 -0
  176. data/lib/cucumber/runtime.rb +153 -98
  177. data/lib/cucumber/step_match.rb +27 -3
  178. data/lib/cucumber/term/ansicolor.rb +1 -9
  179. data/lib/cucumber/wire_support/wire_language.rb +23 -9
  180. data/lib/cucumber/wire_support/wire_packet.rb +1 -1
  181. data/lib/cucumber/wire_support/wire_protocol/requests.rb +13 -5
  182. data/lib/cucumber/wire_support/wire_step_definition.rb +1 -8
  183. data/lib/cucumber.rb +8 -6
  184. data/spec/cucumber/cli/configuration_spec.rb +165 -134
  185. data/spec/cucumber/cli/main_spec.rb +36 -99
  186. data/spec/cucumber/cli/options_spec.rb +238 -272
  187. data/spec/cucumber/cli/profile_loader_spec.rb +18 -7
  188. data/spec/cucumber/configuration_spec.rb +3 -3
  189. data/spec/cucumber/constantize_spec.rb +2 -1
  190. data/spec/cucumber/core_ext/instance_exec_spec.rb +4 -0
  191. data/spec/cucumber/core_ext/proc_spec.rb +32 -43
  192. data/spec/cucumber/file_specs_spec.rb +60 -0
  193. data/spec/cucumber/filters/activate_steps_spec.rb +57 -0
  194. data/spec/cucumber/filters/gated_receiver_spec.rb +47 -0
  195. data/spec/cucumber/filters/tag_limits/test_case_index_spec.rb +38 -0
  196. data/spec/cucumber/filters/tag_limits/verifier_spec.rb +57 -0
  197. data/spec/cucumber/filters/tag_limits_spec.rb +59 -0
  198. data/spec/cucumber/formatter/ansicolor_spec.rb +11 -10
  199. data/spec/cucumber/formatter/debug_spec.rb +64 -0
  200. data/spec/cucumber/formatter/duration_spec.rb +6 -6
  201. data/spec/cucumber/formatter/html_spec.rb +233 -39
  202. data/spec/cucumber/formatter/interceptor_spec.rb +38 -31
  203. data/spec/cucumber/formatter/junit_spec.rb +213 -151
  204. data/spec/cucumber/formatter/legacy_api/adapter_spec.rb +2090 -0
  205. data/spec/cucumber/formatter/pretty_spec.rb +481 -49
  206. data/spec/cucumber/formatter/progress_spec.rb +63 -16
  207. data/spec/cucumber/formatter/rerun_spec.rb +107 -0
  208. data/spec/cucumber/formatter/spec_helper.rb +32 -17
  209. data/spec/cucumber/hooks_spec.rb +30 -0
  210. data/spec/cucumber/{ast/table_spec.rb → multiline_argument/data_table_spec.rb} +128 -208
  211. data/spec/cucumber/project_initializer_spec.rb +87 -0
  212. data/spec/cucumber/rake/forked_spec.rb +13 -22
  213. data/spec/cucumber/rb_support/rb_language_spec.rb +78 -69
  214. data/spec/cucumber/rb_support/rb_step_definition_spec.rb +90 -44
  215. data/spec/cucumber/rb_support/rb_transform_spec.rb +24 -3
  216. data/spec/cucumber/rb_support/regexp_argument_matcher_spec.rb +6 -4
  217. data/spec/cucumber/rb_support/snippet_spec.rb +47 -38
  218. data/spec/cucumber/running_test_case_spec.rb +83 -0
  219. data/spec/cucumber/runtime/for_programming_languages_spec.rb +18 -13
  220. data/spec/cucumber/runtime/support_code_spec.rb +29 -29
  221. data/spec/cucumber/runtime_spec.rb +35 -34
  222. data/spec/cucumber/step_match_spec.rb +30 -20
  223. data/spec/cucumber/wire_support/configuration_spec.rb +8 -5
  224. data/spec/cucumber/wire_support/connection_spec.rb +12 -8
  225. data/spec/cucumber/wire_support/wire_exception_spec.rb +14 -8
  226. data/spec/cucumber/wire_support/wire_language_spec.rb +8 -9
  227. data/spec/cucumber/wire_support/wire_packet_spec.rb +17 -13
  228. data/spec/cucumber/world/pending_spec.rb +36 -36
  229. data/spec/simplecov_setup.rb +18 -0
  230. data/spec/spec_helper.rb +6 -13
  231. metadata +348 -350
  232. data/.gitattributes +0 -1
  233. data/.ruby-version +0 -1
  234. data/examples/python/README.textile +0 -8
  235. data/examples/python/Rakefile +0 -4
  236. data/examples/python/features/fibonacci.feature +0 -19
  237. data/examples/python/features/step_definitions/fib_steps.py +0 -11
  238. data/examples/python/lib/fib.py +0 -7
  239. data/examples/ramaze/README.textile +0 -7
  240. data/examples/ramaze/app.rb +0 -21
  241. data/examples/ramaze/features/add.feature +0 -11
  242. data/examples/ramaze/features/step_definitions/add_steps.rb +0 -15
  243. data/examples/ramaze/features/support/env.rb +0 -32
  244. data/examples/ramaze/layout/default.html.erb +0 -8
  245. data/examples/ramaze/view/index.html.erb +0 -5
  246. data/examples/ruby2python/README.textile +0 -8
  247. data/examples/ruby2python/Rakefile +0 -4
  248. data/examples/ruby2python/features/fibonacci.feature +0 -19
  249. data/examples/ruby2python/features/step_definitions/fib_steps.rb +0 -7
  250. data/examples/ruby2python/features/support/env.rb +0 -21
  251. data/examples/ruby2python/lib/fib.py +0 -7
  252. data/examples/v8/Rakefile +0 -6
  253. data/examples/v8/features/fibonacci.feature +0 -43
  254. data/examples/v8/features/step_definitions/fib_steps.js +0 -49
  255. data/examples/v8/features/support/env.js +0 -14
  256. data/examples/v8/lib/fibonacci.js +0 -19
  257. data/features/.cucumber/stepdefs.json +0 -627
  258. data/features/assertions.feature +0 -73
  259. data/features/autoformat_profile_output.feature +0 -23
  260. data/features/before_hook.feature +0 -43
  261. data/features/bootstrap.feature +0 -27
  262. data/features/custom_formatter.feature +0 -41
  263. data/features/drb_server_integration.feature +0 -63
  264. data/features/execute_with_tag_filter.feature +0 -63
  265. data/features/formatter_callbacks.feature +0 -189
  266. data/features/json_formatter.feature +0 -338
  267. data/features/parsing.feature +0 -18
  268. data/features/pretty_formatter.feature +0 -31
  269. data/features/rerun_formatter.feature +0 -35
  270. data/features/run_specific_scenarios.feature +0 -47
  271. data/features/stats_formatters.feature +0 -73
  272. data/features/step_definitions/cucumber-features/cucumber_ruby_mappings.rb +0 -197
  273. data/features/step_definitions/cucumber_steps.rb +0 -55
  274. data/features/step_definitions/drb_steps.rb +0 -3
  275. data/features/support/env.rb +0 -57
  276. data/features/tagged_hooks.feature +0 -59
  277. data/fixtures/json/features/background.feature +0 -7
  278. data/fixtures/json/features/embed.feature +0 -4
  279. data/fixtures/json/features/one_passing_one_failing.feature +0 -11
  280. data/fixtures/json/features/step_definitions/steps.rb +0 -32
  281. data/fixtures/json/features/tables.feature +0 -13
  282. data/fixtures/junit/features/one_passing_one_failing.feature +0 -8
  283. data/fixtures/junit/features/pending.feature +0 -7
  284. data/fixtures/junit/features/scenario_outline.feature +0 -9
  285. data/fixtures/junit/features/some_subdirectory/one_passing_one_failing.feature +0 -8
  286. data/fixtures/junit/features/step_definitions/steps.rb +0 -11
  287. data/fixtures/self_test/README.textile +0 -6
  288. data/fixtures/self_test/Rakefile +0 -6
  289. data/fixtures/self_test/features/call_undefined_step_from_step_def.feature +0 -7
  290. data/fixtures/self_test/features/failing_expectation.feature +0 -4
  291. data/fixtures/self_test/features/lots_of_undefined.feature +0 -8
  292. data/fixtures/self_test/features/multiline_name.feature +0 -27
  293. data/fixtures/self_test/features/outline_sample.feature +0 -15
  294. data/fixtures/self_test/features/sample.feature +0 -21
  295. data/fixtures/self_test/features/search_sample.feature +0 -32
  296. data/fixtures/self_test/features/step_definitions/sample_steps.rb +0 -84
  297. data/fixtures/self_test/features/support/bubble_256x256.png +0 -0
  298. data/fixtures/self_test/features/support/env.rb +0 -26
  299. data/fixtures/self_test/features/tags_sample.feature +0 -17
  300. data/fixtures/self_test/features/tons_of_cukes.feature +0 -52
  301. data/fixtures/self_test/features/undefined_multiline_args.feature +0 -12
  302. data/fixtures/self_test/list-of-features.txt +0 -1
  303. data/fixtures/steps_library/features/step_definitions/steps_lib1.rb +0 -8
  304. data/fixtures/steps_library/features/step_definitions/steps_lib2.rb +0 -8
  305. data/fixtures/tickets/Rakefile +0 -20
  306. data/fixtures/tickets/features/172.feature +0 -28
  307. data/fixtures/tickets/features/177/1.feature +0 -28
  308. data/fixtures/tickets/features/177/2.feature +0 -20
  309. data/fixtures/tickets/features/177/3.feature +0 -18
  310. data/fixtures/tickets/features/180.feature +0 -7
  311. data/fixtures/tickets/features/229/tagged_hooks.feature +0 -8
  312. data/fixtures/tickets/features/229/tagged_hooks.rb +0 -14
  313. data/fixtures/tickets/features/236.feature +0 -13
  314. data/fixtures/tickets/features/241.feature +0 -12
  315. data/fixtures/tickets/features/246.feature +0 -4
  316. data/fixtures/tickets/features/248.feature +0 -11
  317. data/fixtures/tickets/features/270/back.feature +0 -14
  318. data/fixtures/tickets/features/270/back.steps.rb +0 -14
  319. data/fixtures/tickets/features/272/hooks.feature +0 -26
  320. data/fixtures/tickets/features/272/hooks_steps.rb +0 -53
  321. data/fixtures/tickets/features/279/py_string_indent.feature +0 -25
  322. data/fixtures/tickets/features/279/py_string_indent.steps.rb +0 -12
  323. data/fixtures/tickets/features/279/wrong.feature_ +0 -11
  324. data/fixtures/tickets/features/301/filter_background_tagged_hooks.feature +0 -6
  325. data/fixtures/tickets/features/301/filter_background_tagged_hooks_steps.rb +0 -12
  326. data/fixtures/tickets/features/306/only_background.feature +0 -4
  327. data/fixtures/tickets/features/around_timeout.feature +0 -6
  328. data/fixtures/tickets/features/gherkin_67.feature +0 -12
  329. data/fixtures/tickets/features/gherkin_68.feature +0 -4
  330. data/fixtures/tickets/features/half_manual.feature +0 -11
  331. data/fixtures/tickets/features/lib/eatting_machine.rb +0 -18
  332. data/fixtures/tickets/features/lib/pantry.rb +0 -20
  333. data/fixtures/tickets/features/scenario_outline.feature +0 -95
  334. data/fixtures/tickets/features/step_definitons/246_steps.rb +0 -3
  335. data/fixtures/tickets/features/step_definitons/248_steps.rb +0 -15
  336. data/fixtures/tickets/features/step_definitons/around_timeout_steps.rb +0 -9
  337. data/fixtures/tickets/features/step_definitons/half_manual_steps.rb +0 -11
  338. data/fixtures/tickets/features/step_definitons/scenario_outline_steps.rb +0 -42
  339. data/fixtures/tickets/features/step_definitons/tickets_steps.rb +0 -88
  340. data/fixtures/tickets/features/table_diffing.feature +0 -13
  341. data/fixtures/tickets/features/tickets.feature +0 -28
  342. data/fixtures/tickets/features.html +0 -138
  343. data/gem_tasks/yard/default/layout/html/bubble_32x32.png +0 -0
  344. data/gem_tasks/yard/default/layout/html/footer.erb +0 -5
  345. data/gem_tasks/yard/default/layout/html/index.erb +0 -1
  346. data/gem_tasks/yard/default/layout/html/layout.erb +0 -25
  347. data/gem_tasks/yard/default/layout/html/logo.erb +0 -1
  348. data/gem_tasks/yard/default/layout/html/setup.rb +0 -4
  349. data/gem_tasks/yard.rake +0 -40
  350. data/legacy_features/README.md +0 -14
  351. data/legacy_features/announce.feature +0 -152
  352. data/legacy_features/bug_371.feature +0 -32
  353. data/legacy_features/bug_464.feature +0 -16
  354. data/legacy_features/bug_475.feature +0 -42
  355. data/legacy_features/bug_585_tab_indentation.feature +0 -22
  356. data/legacy_features/bug_600.feature +0 -73
  357. data/legacy_features/cucumber_cli.feature +0 -584
  358. data/legacy_features/cucumber_cli_outlines.feature +0 -117
  359. data/legacy_features/default_snippets.feature +0 -43
  360. data/legacy_features/diffing.feature +0 -25
  361. data/legacy_features/drb_server_integration.feature +0 -174
  362. data/legacy_features/exclude_files.feature +0 -20
  363. data/legacy_features/expand.feature +0 -60
  364. data/legacy_features/junit_formatter.feature +0 -214
  365. data/legacy_features/language_from_header.feature +0 -30
  366. data/legacy_features/listener_debugger_formatter.feature +0 -42
  367. data/legacy_features/multiline_names.feature +0 -44
  368. data/legacy_features/report_called_undefined_steps.feature +0 -35
  369. data/legacy_features/rerun_formatter.feature +0 -52
  370. data/legacy_features/simplest.feature +0 -11
  371. data/legacy_features/snippet.feature +0 -23
  372. data/legacy_features/snippets_when_using_star_keyword.feature +0 -38
  373. data/legacy_features/step_definitions/cucumber_steps.rb +0 -179
  374. data/legacy_features/step_definitions/extra_steps.rb +0 -2
  375. data/legacy_features/step_definitions/simplest_steps.rb +0 -3
  376. data/legacy_features/step_definitions/wire_steps.rb +0 -34
  377. data/legacy_features/support/env.rb +0 -161
  378. data/legacy_features/support/env.rb.simplest +0 -7
  379. data/legacy_features/table_mapping.feature +0 -34
  380. data/legacy_features/transform.feature +0 -245
  381. data/legacy_features/unicode_table.feature +0 -35
  382. data/legacy_features/wire_protocol.feature +0 -332
  383. data/lib/README.rdoc +0 -12
  384. data/lib/cucumber/ast/background.rb +0 -116
  385. data/lib/cucumber/ast/comment.rb +0 -31
  386. data/lib/cucumber/ast/doc_string.rb +0 -61
  387. data/lib/cucumber/ast/empty_background.rb +0 -33
  388. data/lib/cucumber/ast/examples.rb +0 -49
  389. data/lib/cucumber/ast/feature.rb +0 -99
  390. data/lib/cucumber/ast/features.rb +0 -38
  391. data/lib/cucumber/ast/has_steps.rb +0 -74
  392. data/lib/cucumber/ast/location.rb +0 -41
  393. data/lib/cucumber/ast/multiline_argument.rb +0 -30
  394. data/lib/cucumber/ast/names.rb +0 -13
  395. data/lib/cucumber/ast/outline_table.rb +0 -194
  396. data/lib/cucumber/ast/scenario.rb +0 -103
  397. data/lib/cucumber/ast/scenario_outline.rb +0 -146
  398. data/lib/cucumber/ast/step.rb +0 -122
  399. data/lib/cucumber/ast/step_collection.rb +0 -92
  400. data/lib/cucumber/ast/step_invocation.rb +0 -196
  401. data/lib/cucumber/ast/tags.rb +0 -28
  402. data/lib/cucumber/ast/tree_walker.rb +0 -191
  403. data/lib/cucumber/ast/visitor.rb +0 -11
  404. data/lib/cucumber/broadcaster.rb +0 -13
  405. data/lib/cucumber/cli/drb_client.rb +0 -43
  406. data/lib/cucumber/feature_file.rb +0 -94
  407. data/lib/cucumber/formatter/ordered_xml_markup.rb +0 -24
  408. data/lib/cucumber/js_support/js_dsl.js +0 -57
  409. data/lib/cucumber/js_support/js_language.rb +0 -185
  410. data/lib/cucumber/js_support/js_snippets.rb +0 -27
  411. data/lib/cucumber/parser/gherkin_builder.rb +0 -284
  412. data/lib/cucumber/parser.rb +0 -2
  413. data/lib/cucumber/py_support/py_dsl.py +0 -10
  414. data/lib/cucumber/py_support/py_language.py +0 -10
  415. data/lib/cucumber/py_support/py_language.rb +0 -80
  416. data/lib/cucumber/runtime/features_loader.rb +0 -62
  417. data/lib/cucumber/runtime/results.rb +0 -64
  418. data/lib/cucumber/step_mother.rb +0 -10
  419. data/spec/cucumber/ast/background_spec.rb +0 -122
  420. data/spec/cucumber/ast/doc_string_spec.rb +0 -40
  421. data/spec/cucumber/ast/feature_factory.rb +0 -72
  422. data/spec/cucumber/ast/feature_spec.rb +0 -63
  423. data/spec/cucumber/ast/features_spec.rb +0 -51
  424. data/spec/cucumber/ast/outline_table_spec.rb +0 -21
  425. data/spec/cucumber/ast/scenario_outline_spec.rb +0 -74
  426. data/spec/cucumber/ast/step_spec.rb +0 -68
  427. data/spec/cucumber/ast/tree_walker_spec.rb +0 -19
  428. data/spec/cucumber/broadcaster_spec.rb +0 -15
  429. data/spec/cucumber/cli/drb_client_spec.rb +0 -76
  430. data/spec/cucumber/rake/rcov_spec.rb +0 -71
  431. data/spec/cucumber/runtime/results_spec.rb +0 -81
  432. data/spec/cucumber/wire_support/wire_step_definition_spec.rb +0 -20
  433. /data/examples/i18n/ar/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  434. /data/examples/i18n/bg/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  435. /data/examples/i18n/ca/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  436. /data/examples/i18n/cs/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  437. /data/examples/i18n/da/features/{step_definitons → step_definitions}/lommeregner_steps.rb +0 -0
  438. /data/examples/i18n/de/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  439. /data/examples/i18n/en/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  440. /data/examples/i18n/eo/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  441. /data/examples/i18n/es/features/{step_definitons → step_definitions}/calculador_steps.rb +0 -0
  442. /data/examples/i18n/fi/features/{step_definitons → step_definitions}/laskin_steps.rb +0 -0
  443. /data/examples/i18n/he/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  444. /data/examples/i18n/hi/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  445. /data/examples/i18n/hu/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  446. /data/examples/i18n/id/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  447. /data/examples/i18n/it/features/{step_definitons → step_definitions}/calcolatrice_steps.rb +0 -0
  448. /data/examples/i18n/ja/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  449. /data/examples/i18n/ko/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  450. /data/examples/i18n/lt/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  451. /data/examples/i18n/lv/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  452. /data/examples/i18n/no/features/{step_definitons → step_definitions}/kalkulator_steps.rb +0 -0
  453. /data/examples/i18n/pl/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  454. /data/examples/i18n/ro/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  455. /data/examples/i18n/ru/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  456. /data/examples/i18n/sk/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  457. /data/examples/i18n/sr-Cyrl/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  458. /data/examples/i18n/sr-Latn/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  459. /data/examples/i18n/sv/features/{step_definitons → step_definitions}/kalkulator_steps.rb +0 -0
  460. /data/examples/i18n/tr/features/{step_definitons → step_definitions}/hesap_makinesi_adimlari.rb +0 -0
  461. /data/examples/i18n/uk/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  462. /data/examples/i18n/uz/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  463. /data/examples/i18n/zh-TW/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  464. /data/features/{nested_steps_with_second_arg.feature → docs/defining_steps/nested_steps_with_second_arg.feature} +0 -0
  465. /data/features/{iso-8859-1.feature → docs/iso-8859-1.feature} +0 -0
@@ -1,8 +1,16 @@
1
1
  Feature: Background
2
- In order to provide a context to my scenarios within a feature
3
- As a feature editor
4
- I want to write a background section in my features.
5
2
 
3
+ Often you find that several scenarios in the same feature start with
4
+ a common context.
5
+
6
+ Cucumber provides a mechanism for this, by providing a `Background` keyword
7
+ where you can specify steps that should be run before each scenario in the
8
+ feature. Typically these will be `Given` steps, but you can use any steps
9
+ that you need to.
10
+
11
+ **Hint:** if you find that some of the scenarios don't fit the background,
12
+ consider splitting them into a separate feature.
13
+
6
14
  Background:
7
15
  Given a file named "features/passing_background.feature" with:
8
16
  """
@@ -42,7 +50,7 @@ Feature: Background
42
50
  Feature: Background tagged Before on Outline
43
51
 
44
52
  Background:
45
- Given passing without a table
53
+ Given this step passes
46
54
 
47
55
  Scenario Outline: passing background
48
56
  Then I should have '<count>' cukes
@@ -56,7 +64,7 @@ Feature: Background
56
64
  Feature: Failing background sample
57
65
 
58
66
  Background:
59
- Given failing without a table
67
+ Given this step raises an error
60
68
  And '10' cukes
61
69
 
62
70
  Scenario: failing background
@@ -70,7 +78,7 @@ Feature: Background
70
78
  Feature: Failing background with scenario outlines sample
71
79
 
72
80
  Background:
73
- Given failing without a table
81
+ Given this step raises an error
74
82
 
75
83
  Scenario Outline: failing background
76
84
  Then I should have '<count>' cukes
@@ -89,7 +97,7 @@ Feature: Background
89
97
  Feature: Pending background sample
90
98
 
91
99
  Background:
92
- Given pending
100
+ Given this step is pending
93
101
 
94
102
  Scenario: pending background
95
103
  Then I should have '10' cukes
@@ -102,7 +110,7 @@ Feature: Background
102
110
  Feature: Failing background after previously successful background sample
103
111
 
104
112
  Background:
105
- Given passing without a table
113
+ Given this step passes
106
114
  And '10' global cukes
107
115
 
108
116
  Scenario: passing background
@@ -111,6 +119,29 @@ Feature: Background
111
119
  Scenario: failing background
112
120
  Then I should have '10' global cukes
113
121
  """
122
+ And a file named "features/failing_background_after_success_outline.feature" with:
123
+ """
124
+ Feature: Failing background after previously successful background sample
125
+
126
+ Background:
127
+ Given this step passes
128
+ And '10' global cukes
129
+
130
+ Scenario Outline: passing background
131
+ Then I should have '<count>' global cukes
132
+
133
+ Examples:
134
+ | count |
135
+ | 10 |
136
+
137
+ Scenario Outline: failing background
138
+ Then I should have '<count>' global cukes
139
+
140
+ Examples:
141
+ | count |
142
+ | 10 |
143
+
144
+ """
114
145
  And a file named "features/multiline_args_background.feature" with:
115
146
  """
116
147
  Feature: Passing background with multiline args
@@ -145,37 +176,27 @@ Feature: Background
145
176
  I sleep all night and I test all day
146
177
  \"\"\"
147
178
  """
148
- And a file named "features/step_definitions/steps.rb" with:
179
+ And the standard step definitions
180
+ And a file named "features/step_definitions/cuke_steps.rb" with:
149
181
  """
150
- def flunker
151
- raise "FAIL"
152
- end
153
-
154
182
  Given /^'(.+)' cukes$/ do |cukes| x=1
155
183
  raise "We already have #{@cukes} cukes!" if @cukes
156
184
  @cukes = cukes
157
185
  end
158
186
 
159
- Given(/^passing without a table$/) do
160
- end
161
-
162
- Given /^failing without a table$/ do x=1
163
- flunker
164
- end
165
-
166
187
  Given /^'(.+)' global cukes$/ do |cukes| x=1
167
188
  $scenario_runs ||= 0
168
- flunker if $scenario_runs >= 1
189
+ raise 'FAIL' if $scenario_runs >= 1
169
190
  $cukes = cukes
170
191
  $scenario_runs += 1
171
192
  end
172
193
 
173
194
  Then /^I should have '(.+)' global cukes$/ do |cukes| x=1
174
- $cukes.should == cukes
195
+ expect($cukes).to eq cukes
175
196
  end
176
197
 
177
198
  Then /^I should have '(.+)' cukes$/ do |cukes| x=1
178
- @cukes.should == cukes
199
+ expect(@cukes).to eq cukes
179
200
  end
180
201
 
181
202
  Before('@background_tagged_before_on_outline') do
@@ -183,7 +204,7 @@ Feature: Background
183
204
  end
184
205
 
185
206
  After('@background_tagged_before_on_outline') do
186
- @cukes.should == '888'
207
+ expect(@cukes).to eq '888'
187
208
  end
188
209
  """
189
210
 
@@ -263,7 +284,7 @@ Feature: Background
263
284
  Feature: Background tagged Before on Outline
264
285
 
265
286
  Background:
266
- Given passing without a table
287
+ Given this step passes
267
288
 
268
289
  Scenario Outline: passing background
269
290
  Then I should have '<count>' cukes
@@ -286,11 +307,10 @@ Feature: Background
286
307
  Feature: Failing background sample
287
308
 
288
309
  Background:
289
- Given failing without a table
290
- FAIL (RuntimeError)
291
- ./features/step_definitions/steps.rb:2:in `flunker'
292
- ./features/step_definitions/steps.rb:14:in `/^failing without a table$/'
293
- features/failing_background.feature:4:in `Given failing without a table'
310
+ Given this step raises an error
311
+ error (RuntimeError)
312
+ ./features/step_definitions/steps.rb:2:in `/^this step raises an error$/'
313
+ features/failing_background.feature:4:in `Given this step raises an error'
294
314
  And '10' cukes
295
315
 
296
316
  Scenario: failing background
@@ -301,9 +321,10 @@ Feature: Background
301
321
 
302
322
  Failing Scenarios:
303
323
  cucumber features/failing_background.feature:7
324
+ cucumber features/failing_background.feature:10
304
325
 
305
- 2 scenarios (1 failed, 1 skipped)
306
- 6 steps (1 failed, 5 skipped)
326
+ 2 scenarios (2 failed)
327
+ 6 steps (2 failed, 4 skipped)
307
328
  0m0.012s
308
329
 
309
330
  """
@@ -316,11 +337,10 @@ Feature: Background
316
337
  Feature: Failing background with scenario outlines sample
317
338
 
318
339
  Background:
319
- Given failing without a table
320
- FAIL (RuntimeError)
321
- ./features/step_definitions/steps.rb:2:in `flunker'
322
- ./features/step_definitions/steps.rb:14:in `/^failing without a table$/'
323
- features/scenario_outline_failing_background.feature:4:in `Given failing without a table'
340
+ Given this step raises an error
341
+ error (RuntimeError)
342
+ ./features/step_definitions/steps.rb:2:in `/^this step raises an error$/'
343
+ features/scenario_outline_failing_background.feature:4:in `Given this step raises an error'
324
344
 
325
345
  Scenario Outline: failing background
326
346
  Then I should have '<count>' cukes
@@ -337,10 +357,11 @@ Feature: Background
337
357
  | 10 |
338
358
 
339
359
  Failing Scenarios:
340
- cucumber features/scenario_outline_failing_background.feature:6
360
+ cucumber features/scenario_outline_failing_background.feature:10
361
+ cucumber features/scenario_outline_failing_background.feature:16
341
362
 
342
- 2 scenarios (1 failed, 1 skipped)
343
- 4 steps (1 failed, 3 skipped)
363
+ 2 scenarios (2 failed)
364
+ 4 steps (2 failed, 2 skipped)
344
365
  0m0.012s
345
366
 
346
367
  """
@@ -352,7 +373,10 @@ Feature: Background
352
373
  Feature: Pending background sample
353
374
 
354
375
  Background:
355
- Given pending
376
+ Given this step is pending
377
+ TODO (Cucumber::Pending)
378
+ ./features/step_definitions/steps.rb:3:in `/^this step is pending$/'
379
+ features/pending_background.feature:4:in `Given this step is pending'
356
380
 
357
381
  Scenario: pending background
358
382
  Then I should have '10' cukes
@@ -360,8 +384,8 @@ Feature: Background
360
384
  Scenario: another pending background
361
385
  Then I should have '10' cukes
362
386
 
363
- 2 scenarios (2 undefined)
364
- 4 steps (2 skipped, 2 undefined)
387
+ 2 scenarios (2 pending)
388
+ 4 steps (2 skipped, 2 pending)
365
389
  0m0.012s
366
390
 
367
391
  """
@@ -374,7 +398,7 @@ Feature: Background
374
398
  Feature: Failing background after previously successful background sample
375
399
 
376
400
  Background:
377
- Given passing without a table
401
+ Given this step passes
378
402
  And '10' global cukes
379
403
 
380
404
  Scenario: passing background
@@ -383,8 +407,7 @@ Feature: Background
383
407
  Scenario: failing background
384
408
  And '10' global cukes
385
409
  FAIL (RuntimeError)
386
- ./features/step_definitions/steps.rb:2:in `flunker'
387
- ./features/step_definitions/steps.rb:19:in `/^'(.+)' global cukes$/'
410
+ ./features/step_definitions/cuke_steps.rb:8:in `/^'(.+)' global cukes$/'
388
411
  features/failing_background_after_success.feature:5:in `And '10' global cukes'
389
412
  Then I should have '10' global cukes
390
413
 
@@ -397,8 +420,85 @@ Feature: Background
397
420
 
398
421
  """
399
422
 
423
+ @spawn
424
+ Scenario: background passes with first outline scenario but fails with second
425
+ When I run `cucumber -q features/failing_background_after_success_outline.feature`
426
+ Then it should fail with exactly:
427
+ """
428
+ Feature: Failing background after previously successful background sample
429
+
430
+ Background:
431
+ Given this step passes
432
+ And '10' global cukes
433
+
434
+ Scenario Outline: passing background
435
+ Then I should have '<count>' global cukes
436
+
437
+ Examples:
438
+ | count |
439
+ | 10 |
440
+
441
+ Scenario Outline: failing background
442
+ Then I should have '<count>' global cukes
443
+
444
+ Examples:
445
+ | count |
446
+ | 10 |
447
+ FAIL (RuntimeError)
448
+ ./features/step_definitions/cuke_steps.rb:8:in `/^'(.+)' global cukes$/'
449
+ features/failing_background_after_success_outline.feature:5:in `And '10' global cukes'
450
+
451
+ Failing Scenarios:
452
+ cucumber features/failing_background_after_success_outline.feature:19
453
+
454
+ 2 scenarios (1 failed, 1 passed)
455
+ 6 steps (1 failed, 1 skipped, 4 passed)
456
+ 0m0.012s
457
+
458
+ """
459
+
460
+ @spawn
461
+ Scenario: background passes with first outline scenario but fails with second (--expand)
462
+ When I run `cucumber -x -q features/failing_background_after_success_outline.feature`
463
+ Then it should fail with exactly:
464
+ """
465
+ Feature: Failing background after previously successful background sample
466
+
467
+ Background:
468
+ Given this step passes
469
+ And '10' global cukes
470
+
471
+ Scenario Outline: passing background
472
+ Then I should have '<count>' global cukes
473
+
474
+ Examples:
475
+
476
+ Scenario: | 10 |
477
+ Then I should have '10' global cukes
478
+
479
+ Scenario Outline: failing background
480
+ Then I should have '<count>' global cukes
481
+
482
+ Examples:
483
+
484
+ Scenario: | 10 |
485
+ And '10' global cukes
486
+ FAIL (RuntimeError)
487
+ ./features/step_definitions/cuke_steps.rb:8:in `/^'(.+)' global cukes$/'
488
+ features/failing_background_after_success_outline.feature:5:in `And '10' global cukes'
489
+ Then I should have '10' global cukes
490
+
491
+ Failing Scenarios:
492
+ cucumber features/failing_background_after_success_outline.feature:19
493
+
494
+ 2 scenarios (1 failed, 1 passed)
495
+ 6 steps (1 failed, 1 skipped, 4 passed)
496
+ 0m0.012s
497
+
498
+ """
499
+
400
500
  Scenario: background with multline args
401
- Given a file named "features/step_definitions/multiline_steps.rb" with:
501
+ Given a file named "features/step_definitions/steps.rb" with:
402
502
  """
403
503
  Given /^table$/ do |table| x=1
404
504
  @table = table
@@ -409,11 +509,11 @@ Feature: Background
409
509
  end
410
510
 
411
511
  Then /^the table should be$/ do |table| x=1
412
- @table.raw.should == table.raw
512
+ expect(@table.raw).to eq table.raw
413
513
  end
414
514
 
415
515
  Then /^the multiline string should be$/ do |string| x=1
416
- @multiline.should == string
516
+ expect(@multiline).to eq string
417
517
  end
418
518
  """
419
519
  When I run `cucumber -q features/multiline_args_background.feature`
@@ -457,45 +557,3 @@ Feature: Background
457
557
 
458
558
  """
459
559
 
460
- Scenario: https://rspec.lighthouseapp.com/projects/16211/tickets/329
461
- Given a file named "features/only_background_and_hooks.feature" with:
462
- """
463
- Feature: woo yeah
464
-
465
- Background: Whatever
466
- Given whatever
467
-
468
- """
469
- And a file named "features/only_background_and_hooks_steps.rb" with:
470
- """
471
- begin require 'rspec/expectations'; rescue LoadError; require 'spec/expectations'; end
472
-
473
- Before do
474
- $before = true
475
- end
476
-
477
- After do
478
- $after = true
479
- end
480
-
481
- Given(/^whatever$/) { $before.should == true; $step = true }
482
-
483
- at_exit do
484
- $before.should == true
485
- $step.should == true
486
- $after.should == true
487
- end
488
- """
489
- When I run `cucumber features/only_background_and_hooks.feature`
490
- Then it should pass with exactly:
491
- """
492
- Feature: woo yeah
493
-
494
- Background: Whatever # features/only_background_and_hooks.feature:3
495
- Given whatever # features/only_background_and_hooks_steps.rb:11
496
-
497
- 0 scenarios
498
- 1 step (1 passed)
499
- 0m0.012s
500
-
501
- """
@@ -24,6 +24,7 @@ Feature: Doc strings
24
24
  """ruby
25
25
  puts "hello world"
26
26
  """
27
+ ```
27
28
 
28
29
  You can read the content type from the argument passed into your step definition, as shown
29
30
  in the example below.
@@ -0,0 +1,46 @@
1
+ Feature: Scenario outlines --expand option
2
+
3
+ In order to make it easier to write certain editor plugins and also
4
+ for some people to understand scenarios, Cucumber will expand examples
5
+ in outlines if you add the `--expand` option when running them.
6
+
7
+ Scenario:
8
+ Given a file named "features/test.feature" with:
9
+ """
10
+ Feature:
11
+ Scenario Outline:
12
+ Given the secret code is <code>
13
+ When I guess <guess>
14
+ Then I am <verdict>
15
+
16
+ Examples:
17
+ | code | guess | verdict |
18
+ | blue | blue | right |
19
+ | red | blue | wrong |
20
+ """
21
+ When I run `cucumber -i -q --expand`
22
+ Then the stderr should not contain anything
23
+ And it should pass with:
24
+ """
25
+ Feature:
26
+
27
+ Scenario Outline:
28
+ Given the secret code is <code>
29
+ When I guess <guess>
30
+ Then I am <verdict>
31
+
32
+ Examples:
33
+
34
+ Scenario: | blue | blue | right |
35
+ Given the secret code is blue
36
+ When I guess blue
37
+ Then I am right
38
+
39
+ Scenario: | red | blue | wrong |
40
+ Given the secret code is red
41
+ When I guess blue
42
+ Then I am wrong
43
+
44
+ 2 scenarios (2 undefined)
45
+ 6 steps (6 undefined)
46
+ """
@@ -0,0 +1,32 @@
1
+ Feature: Choosing the language from the feature file header
2
+
3
+ In order to simplify command line and settings in IDEs, Cucumber picks
4
+ up the parser language from a `# language` comment at the beginning of
5
+ any feature file. See the examples below for the exact syntax.
6
+
7
+ Scenario: LOLCAT
8
+ Given a file named "features/lolcat.feature" with:
9
+ """
10
+ # language: en-lol
11
+ OH HAI: STUFFING
12
+ B4: HUNGRY
13
+ I CAN HAZ EMPTY BELLY
14
+ MISHUN: CUKES
15
+ DEN KTHXBAI
16
+ """
17
+ When I run `cucumber -i features/lolcat.feature -q`
18
+ Then it should pass with:
19
+ """
20
+ # language: en-lol
21
+ OH HAI: STUFFING
22
+
23
+ B4: HUNGRY
24
+ I CAN HAZ EMPTY BELLY
25
+
26
+ MISHUN: CUKES
27
+ DEN KTHXBAI
28
+
29
+ 1 scenario (1 undefined)
30
+ 2 steps (2 undefined)
31
+
32
+ """
@@ -0,0 +1,158 @@
1
+ @spawn
2
+ Feature: Scenario outlines
3
+
4
+ Copying and pasting scenarios to use different values quickly
5
+ becomes tedious and repetitive. Scenario outlines allow us to more
6
+ concisely express these examples through the use of a template with
7
+ placeholders, using Scenario Outline, Examples with tables and < >
8
+ delimited parameters.
9
+
10
+ The Scenario Outline steps provide a template which is never directly
11
+ run. A Scenario Outline is run once for each row in the Examples section
12
+ beneath it (not counting the first row).
13
+
14
+ The way this works is via placeholders. Placeholders must be contained
15
+ within < > in the Scenario Outline's steps - see the examples below.
16
+
17
+ **IMPORTANT:** Your step definitions will never have to match a
18
+ placeholder. They will need to match the values that will replace the
19
+ placeholder.
20
+
21
+ Background:
22
+ Given a file named "features/outline_sample.feature" with:
23
+ """
24
+ Feature: Outline Sample
25
+
26
+ Scenario: I have no steps
27
+
28
+ Scenario Outline: Test state
29
+ Given <state> without a table
30
+ Given <other_state> without a table
31
+ Examples: Rainbow colours
32
+ | state | other_state |
33
+ | missing | passing |
34
+ | passing | passing |
35
+ | failing | passing |
36
+ Examples:Only passing
37
+ | state | other_state |
38
+ | passing | passing |
39
+ """
40
+ And a file named "features/step_definitions/steps.rb" with:
41
+ """
42
+ Given(/^passing without a table$/) { }
43
+ Given(/^failing without a table$/) { raise RuntimeError }
44
+ """
45
+
46
+ Scenario: Run scenario outline with filtering on outline name
47
+ When I run `cucumber -q features/outline_sample.feature`
48
+ Then it should fail with:
49
+ """
50
+ Feature: Outline Sample
51
+
52
+ Scenario: I have no steps
53
+
54
+ Scenario Outline: Test state
55
+ Given <state> without a table
56
+ Given <other_state> without a table
57
+
58
+ Examples: Rainbow colours
59
+ | state | other_state |
60
+ | missing | passing |
61
+ | passing | passing |
62
+ | failing | passing |
63
+ RuntimeError (RuntimeError)
64
+ ./features/step_definitions/steps.rb:2:in `/^failing without a table$/'
65
+ features/outline_sample.feature:12:in `Given failing without a table'
66
+ features/outline_sample.feature:6:in `Given <state> without a table'
67
+
68
+ Examples: Only passing
69
+ | state | other_state |
70
+ | passing | passing |
71
+
72
+ Failing Scenarios:
73
+ cucumber features/outline_sample.feature:12
74
+
75
+ 5 scenarios (1 failed, 1 undefined, 3 passed)
76
+ 8 steps (1 failed, 2 skipped, 1 undefined, 4 passed)
77
+ """
78
+
79
+ Scenario: Run scenario outline steps only
80
+ When I run `cucumber -q features/outline_sample.feature:7`
81
+ Then it should fail with:
82
+ """
83
+ Feature: Outline Sample
84
+
85
+ Scenario Outline: Test state
86
+ Given <state> without a table
87
+ Given <other_state> without a table
88
+
89
+ Examples: Rainbow colours
90
+ | state | other_state |
91
+ | missing | passing |
92
+ | passing | passing |
93
+ | failing | passing |
94
+ RuntimeError (RuntimeError)
95
+ ./features/step_definitions/steps.rb:2:in `/^failing without a table$/'
96
+ features/outline_sample.feature:12:in `Given failing without a table'
97
+ features/outline_sample.feature:6:in `Given <state> without a table'
98
+
99
+ Examples: Only passing
100
+ | state | other_state |
101
+ | passing | passing |
102
+
103
+ Failing Scenarios:
104
+ cucumber features/outline_sample.feature:12
105
+
106
+ 4 scenarios (1 failed, 1 undefined, 2 passed)
107
+ 8 steps (1 failed, 2 skipped, 1 undefined, 4 passed)
108
+
109
+ """
110
+
111
+ Scenario: Run single failing scenario outline table row
112
+ When I run `cucumber -q features/outline_sample.feature:12`
113
+ Then it should fail with:
114
+ """
115
+ Feature: Outline Sample
116
+
117
+ Scenario Outline: Test state
118
+ Given <state> without a table
119
+ Given <other_state> without a table
120
+
121
+ Examples: Rainbow colours
122
+ | state | other_state |
123
+ | failing | passing |
124
+ RuntimeError (RuntimeError)
125
+ ./features/step_definitions/steps.rb:2:in `/^failing without a table$/'
126
+ features/outline_sample.feature:12:in `Given failing without a table'
127
+ features/outline_sample.feature:6:in `Given <state> without a table'
128
+
129
+ Failing Scenarios:
130
+ cucumber features/outline_sample.feature:12
131
+
132
+ 1 scenario (1 failed)
133
+ 2 steps (1 failed, 1 skipped)
134
+
135
+ """
136
+
137
+ Scenario: Run all with progress formatter
138
+ When I run `cucumber -q --format progress features/outline_sample.feature`
139
+ Then it should fail with exactly:
140
+ """
141
+ --UU..FF..
142
+
143
+ (::) failed steps (::)
144
+
145
+ RuntimeError (RuntimeError)
146
+ ./features/step_definitions/steps.rb:2:in `/^failing without a table$/'
147
+ features/outline_sample.feature:12:in `Given failing without a table'
148
+ features/outline_sample.feature:6:in `Given <state> without a table'
149
+
150
+ Failing Scenarios:
151
+ cucumber features/outline_sample.feature:12
152
+
153
+ 5 scenarios (1 failed, 1 undefined, 3 passed)
154
+ 8 steps (1 failed, 2 skipped, 1 undefined, 4 passed)
155
+ 0m0.012s
156
+
157
+ """
158
+
@@ -0,0 +1,32 @@
1
+ @spawn
2
+ Feature: Unicode in tables
3
+
4
+ You are free to use unicode in your tables: we've taken care to
5
+ ensure that the tables are properly aligned so that your output is as
6
+ readable as possible.
7
+
8
+ Scenario:
9
+ Given a file named "features/unicode.feature" with:
10
+ """
11
+ Feature: Featuring unicode
12
+
13
+ Scenario: table with unicode
14
+ Given passing
15
+ | Brüno | abc |
16
+ | Bruno | æøå |
17
+ """
18
+ When I run `cucumber -q --dry-run features/unicode.feature`
19
+ Then it should pass with:
20
+ """
21
+ Feature: Featuring unicode
22
+
23
+ Scenario: table with unicode
24
+ Given passing
25
+ | Brüno | abc |
26
+ | Bruno | æøå |
27
+
28
+ 1 scenario (1 undefined)
29
+ 1 step (1 undefined)
30
+
31
+ """
32
+