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,3 +1,4 @@
1
+ @spawn
1
2
  Feature: Cucumber --work-in-progress switch
2
3
  In order to ensure that feature scenarios do not pass until they are expected to
3
4
  Developers should be able to run cucumber in a mode that
@@ -5,124 +6,119 @@ Feature: Cucumber --work-in-progress switch
5
6
  - will not fail otherwise
6
7
 
7
8
  Background: A passing and a pending feature
8
- Given a standard Cucumber project directory structure
9
- Given a file named "features/wip.feature" with:
9
+ Given the standard step definitions
10
+ And a file named "features/wip.feature" with:
10
11
  """
11
12
  Feature: WIP
12
13
  @failing
13
14
  Scenario: Failing
14
- Given a failing step
15
+ Given this step raises an error
15
16
 
16
17
  @undefined
17
18
  Scenario: Undefined
18
- Given an undefined step
19
+ Given this step is undefined
19
20
 
20
21
  @pending
21
22
  Scenario: Pending
22
- Given a pending step
23
+ Given this step is pending
23
24
 
24
25
  @passing
25
26
  Scenario: Passing
26
- Given a passing step
27
+ Given this step passes
27
28
  """
28
29
  And a file named "features/passing_outline.feature" with:
29
30
  """
30
31
  Feature: Not WIP
31
32
  Scenario Outline: Passing
32
- Given a <what> step
33
-
34
- Examples:
35
- | what |
36
- | passing |
37
- """
38
- And a file named "features/step_definitions/steps.rb" with:
39
- """
40
- Given /^a failing step$/ do
41
- raise "I fail"
42
- end
33
+ Given this step <what>
43
34
 
44
- Given /^a passing step$/ do
45
- end
46
-
47
- Given /^a pending step$/ do
48
- pending
49
- end
35
+ Examples:
36
+ | what |
37
+ | passes |
50
38
  """
51
39
 
52
40
  Scenario: Pass with Failing Scenarios
53
- When I run cucumber -q -w -t @failing features/wip.feature
54
- Then STDERR should be empty
55
- Then it should pass with
41
+ When I run `cucumber -q -w -t @failing features/wip.feature`
42
+ Then the stderr should not contain anything
43
+ Then it should pass with:
56
44
  """
57
45
  Feature: WIP
58
46
 
59
47
  @failing
60
48
  Scenario: Failing
61
- Given a failing step
62
- I fail (RuntimeError)
63
- ./features/step_definitions/steps.rb:2:in `/^a failing step$/'
64
- features/wip.feature:4:in `Given a failing step'
65
-
49
+ Given this step raises an error
50
+ error (RuntimeError)
51
+ ./features/step_definitions/steps.rb:2:in `/^this step raises an error$/'
52
+ features/wip.feature:4:in `Given this step raises an error'
53
+
66
54
  Failing Scenarios:
67
55
  cucumber features/wip.feature:3
68
56
 
69
57
  1 scenario (1 failed)
70
58
  1 step (1 failed)
71
-
59
+ """
60
+ And the output should contain:
61
+ """
72
62
  The --wip switch was used, so the failures were expected. All is good.
73
63
 
74
64
  """
75
65
 
76
66
  Scenario: Pass with Undefined Scenarios
77
- When I run cucumber -q -w -t @undefined features/wip.feature
78
- Then it should pass with
67
+ When I run `cucumber -q -w -t @undefined features/wip.feature`
68
+ Then it should pass with:
79
69
  """
80
70
  Feature: WIP
81
71
 
82
72
  @undefined
83
73
  Scenario: Undefined
84
- Given an undefined step
74
+ Given this step is undefined
85
75
 
86
76
  1 scenario (1 undefined)
87
77
  1 step (1 undefined)
88
-
78
+ """
79
+ And the output should contain:
80
+ """
89
81
  The --wip switch was used, so the failures were expected. All is good.
90
82
 
91
83
  """
92
84
 
93
85
  Scenario: Pass with Undefined Scenarios
94
- When I run cucumber -q -w -t @pending features/wip.feature
95
- Then it should pass with
86
+ When I run `cucumber -q -w -t @pending features/wip.feature`
87
+ Then it should pass with:
96
88
  """
97
89
  Feature: WIP
98
90
 
99
91
  @pending
100
92
  Scenario: Pending
101
- Given a pending step
93
+ Given this step is pending
102
94
  TODO (Cucumber::Pending)
103
- ./features/step_definitions/steps.rb:9:in `/^a pending step$/'
104
- features/wip.feature:12:in `Given a pending step'
95
+ ./features/step_definitions/steps.rb:3:in `/^this step is pending$/'
96
+ features/wip.feature:12:in `Given this step is pending'
105
97
 
106
98
  1 scenario (1 pending)
107
99
  1 step (1 pending)
108
-
100
+ """
101
+ And the output should contain:
102
+ """
109
103
  The --wip switch was used, so the failures were expected. All is good.
110
104
 
111
105
  """
112
106
 
113
107
  Scenario: Fail with Passing Scenarios
114
- When I run cucumber -q -w -t @passing features/wip.feature
115
- Then it should fail with
108
+ When I run `cucumber -q -w -t @passing features/wip.feature`
109
+ Then it should fail with:
116
110
  """
117
111
  Feature: WIP
118
112
 
119
113
  @passing
120
114
  Scenario: Passing
121
- Given a passing step
115
+ Given this step passes
122
116
 
123
117
  1 scenario (1 passed)
124
118
  1 step (1 passed)
125
-
119
+ """
120
+ And the output should contain:
121
+ """
126
122
  The --wip switch was used, so I didn't expect anything to pass. These scenarios passed:
127
123
  (::) passed scenarios (::)
128
124
 
@@ -132,25 +128,27 @@ Feature: Cucumber --work-in-progress switch
132
128
  """
133
129
 
134
130
  Scenario: Fail with Passing Scenario Outline
135
- When I run cucumber -q -w features/passing_outline.feature
136
- Then it should fail with
131
+ When I run `cucumber -q -w features/passing_outline.feature`
132
+ Then it should fail with:
137
133
  """
138
134
  Feature: Not WIP
139
135
 
140
136
  Scenario Outline: Passing
141
- Given a <what> step
142
-
137
+ Given this step <what>
138
+
143
139
  Examples:
144
- | what |
145
- | passing |
140
+ | what |
141
+ | passes |
146
142
 
147
143
  1 scenario (1 passed)
148
144
  1 step (1 passed)
149
-
145
+ """
146
+ And the output should contain:
147
+ """
150
148
  The --wip switch was used, so I didn't expect anything to pass. These scenarios passed:
151
149
  (::) passed scenarios (::)
152
150
 
153
- features/passing_outline.feature:7:in `| passing |'
151
+ features/passing_outline.feature:7:in `Scenario Outline: Passing, Examples (#1)'
154
152
 
155
153
 
156
154
  """
@@ -0,0 +1,80 @@
1
+ Feature: After Hooks
2
+
3
+ After hooks can be used to clean up any state you've altered during your
4
+ scenario, or to check the status of the scenario and act accordingly.
5
+
6
+ You can ask a scenario whether it has failed, for example.
7
+
8
+ Mind you, even if it hasn't failed yet, you can still make the scenario
9
+ fail if your After hook throws an error.
10
+
11
+ Background:
12
+ Given the standard step definitions
13
+
14
+ Scenario: Check the failed status of a scenario in a hook
15
+ Given a file named "features/support/debug_hook.rb" with:
16
+ """
17
+ After do |scenario|
18
+ if scenario.failed?
19
+ puts "eek"
20
+ end
21
+ end
22
+ """
23
+ And a file named "features/fail.feature" with:
24
+ """
25
+ Feature:
26
+ Scenario:
27
+ Given this step fails
28
+ """
29
+ When I run `cucumber -f progress`
30
+ Then the output should contain:
31
+ """
32
+ eek
33
+ """
34
+
35
+ Scenario: Make a scenario fail from an After hook
36
+ Given a file named "features/support/bad_hook.rb" with:
37
+ """
38
+ After do
39
+ fail 'yikes'
40
+ end
41
+ """
42
+ And a file named "features/pass.feature" with:
43
+ """
44
+ Feature:
45
+ Scenario:
46
+ Given this step passes
47
+ """
48
+ When I run `cucumber -f pretty`
49
+ Then it should fail with:
50
+ """
51
+ Scenario: # features/pass.feature:2
52
+ Given this step passes # features/step_definitions/steps.rb:1
53
+ yikes (RuntimeError)
54
+ ./features/support/bad_hook.rb:2:in `After'
55
+ """
56
+
57
+ Scenario: After hooks are executed in reverse order of definition
58
+ Given a file named "features/support/hooks.rb" with:
59
+ """
60
+ After do
61
+ puts "First"
62
+ end
63
+
64
+ After do
65
+ puts "Second"
66
+ end
67
+ """
68
+ And a file named "features/pass.feature" with:
69
+ """
70
+ Feature:
71
+ Scenario:
72
+ Given this step passes
73
+ """
74
+ When I run `cucumber -f progress`
75
+ Then the output should contain:
76
+ """
77
+ Second
78
+
79
+ First
80
+ """
@@ -1,14 +1,15 @@
1
+ @spawn
1
2
  Feature: Around hooks
3
+
2
4
  In order to support transactional scenarios for database libraries
3
5
  that provide only a block syntax for transactions, Cucumber should
4
6
  permit definition of Around hooks.
5
7
 
6
8
  Scenario: A single Around hook
7
- Given a standard Cucumber project directory structure
8
- And a file named "features/step_definitions/steps.rb" with:
9
+ Given a file named "features/step_definitions/steps.rb" with:
9
10
  """
10
11
  Then /^the hook is called$/ do
11
- $hook_called.should == true
12
+ expect($hook_called).to be true
12
13
  end
13
14
  """
14
15
  And a file named "features/support/hooks.rb" with:
@@ -24,8 +25,8 @@ Feature: Around hooks
24
25
  Scenario: using hook
25
26
  Then the hook is called
26
27
  """
27
- When I run cucumber features/f.feature
28
- Then it should pass with
28
+ When I run `cucumber features/f.feature`
29
+ Then it should pass with:
29
30
  """
30
31
  Feature: Around hooks
31
32
 
@@ -38,11 +39,10 @@ Feature: Around hooks
38
39
  """
39
40
 
40
41
  Scenario: Multiple Around hooks
41
- Given a standard Cucumber project directory structure
42
- And a file named "features/step_definitions/steps.rb" with:
42
+ Given a file named "features/step_definitions/steps.rb" with:
43
43
  """
44
44
  Then /^the hooks are called in the correct order$/ do
45
- $hooks_called.should == ['A', 'B', 'C']
45
+ expect($hooks_called).to eq ['A', 'B', 'C']
46
46
  end
47
47
  """
48
48
  And a file named "features/support/hooks.rb" with:
@@ -71,8 +71,8 @@ Feature: Around hooks
71
71
  Scenario: using multiple hooks
72
72
  Then the hooks are called in the correct order
73
73
  """
74
- When I run cucumber features/f.feature
75
- Then it should pass with
74
+ When I run `cucumber features/f.feature`
75
+ Then it should pass with:
76
76
  """
77
77
  Feature: Around hooks
78
78
 
@@ -85,11 +85,10 @@ Feature: Around hooks
85
85
  """
86
86
 
87
87
  Scenario: Mixing Around, Before, and After hooks
88
- Given a standard Cucumber project directory structure
89
- And a file named "features/step_definitions/steps.rb" with:
88
+ Given a file named "features/step_definitions/steps.rb" with:
90
89
  """
91
90
  Then /^the Around hook is called around Before and After hooks$/ do
92
- $hooks_called.should == ['Around', 'Before']
91
+ expect($hooks_called).to eq ['Around', 'Before']
93
92
  end
94
93
  """
95
94
  And a file named "features/support/hooks.rb" with:
@@ -99,7 +98,7 @@ Feature: Around hooks
99
98
  $hooks_called << 'Around'
100
99
  block.call
101
100
  $hooks_called << 'Around'
102
- $hooks_called.should == ['Around', 'Before', 'After', 'Around']
101
+ $hooks_called.should == ['Around', 'Before', 'After', 'Around'] #TODO: Find out why this fails using the new rspec expect syntax.
103
102
  end
104
103
 
105
104
  Before do |scenario|
@@ -110,7 +109,7 @@ Feature: Around hooks
110
109
  After do |scenario|
111
110
  $hooks_called ||= []
112
111
  $hooks_called << 'After'
113
- $hooks_called.should == ['Around', 'Before', 'After']
112
+ expect($hooks_called).to eq ['Around', 'Before', 'After']
114
113
  end
115
114
  """
116
115
  And a file named "features/f.feature" with:
@@ -119,8 +118,8 @@ Feature: Around hooks
119
118
  Scenario: Mixing Around, Before, and After hooks
120
119
  Then the Around hook is called around Before and After hooks
121
120
  """
122
- When I run cucumber features/f.feature
123
- Then it should pass with
121
+ When I run `cucumber features/f.feature`
122
+ Then it should pass with:
124
123
  """
125
124
  Feature: Around hooks
126
125
 
@@ -133,11 +132,10 @@ Feature: Around hooks
133
132
  """
134
133
 
135
134
  Scenario: Around hooks with tags
136
- Given a standard Cucumber project directory structure
137
- And a file named "features/step_definitions/steps.rb" with:
135
+ Given a file named "features/step_definitions/steps.rb" with:
138
136
  """
139
137
  Then /^the Around hooks with matching tags are called$/ do
140
- $hooks_called.should == ['one', 'one or two']
138
+ expect($hooks_called).to eq ['one', 'one or two']
141
139
  end
142
140
  """
143
141
  And a file named "features/support/hooks.rb" with:
@@ -173,8 +171,8 @@ Feature: Around hooks
173
171
  Scenario: Around hooks with tags
174
172
  Then the Around hooks with matching tags are called
175
173
  """
176
- When I run cucumber -q -t @one features/f.feature
177
- Then it should pass with
174
+ When I run `cucumber -q -t @one features/f.feature`
175
+ Then it should pass with:
178
176
  """
179
177
  Feature: Around hooks
180
178
 
@@ -188,11 +186,10 @@ Feature: Around hooks
188
186
  """
189
187
 
190
188
  Scenario: Around hooks with scenario outlines
191
- Given a standard Cucumber project directory structure
192
- And a file named "features/step_definitions/steps.rb" with:
189
+ Given a file named "features/step_definitions/steps.rb" with:
193
190
  """
194
191
  Then /^the hook is called$/ do
195
- $hook_called.should == true
192
+ expect($hook_called).to be true
196
193
  end
197
194
  """
198
195
  And a file named "features/support/hooks.rb" with:
@@ -213,13 +210,13 @@ Feature: Around hooks
213
210
  | one |
214
211
  | two |
215
212
  """
216
- When I run cucumber features/f.feature
217
- Then it should pass with
213
+ When I run `cucumber features/f.feature`
214
+ Then it should pass with:
218
215
  """
219
216
  Feature: Around hooks with scenario outlines
220
217
 
221
218
  Scenario Outline: using hook # features/f.feature:2
222
- Then the hook is called # features/step_definitions/steps.rb:1
219
+ Then the hook is called # features/f.feature:3
223
220
 
224
221
  Examples:
225
222
  | Number |
@@ -230,3 +227,34 @@ Feature: Around hooks
230
227
  2 steps (2 passed)
231
228
 
232
229
  """
230
+
231
+ Scenario: Around Hooks and the Custom World
232
+ Given a file named "features/step_definitions/steps.rb" with:
233
+ """
234
+ Then /^the world should be available in the hook$/ do
235
+ $previous_world = self
236
+ expect($hook_world).to eq(self)
237
+ end
238
+
239
+ Then /^what$/ do
240
+ expect($hook_world).not_to eq($previous_world)
241
+ end
242
+ """
243
+ And a file named "features/support/hooks.rb" with:
244
+ """
245
+ Around do |scenario, block|
246
+ $hook_world = self
247
+ block.call
248
+ end
249
+ """
250
+ And a file named "features/f.feature" with:
251
+ """
252
+ Feature: Around hooks
253
+ Scenario: using hook
254
+ Then the world should be available in the hook
255
+
256
+ Scenario: using the same hook
257
+ Then what
258
+ """
259
+ When I run `cucumber features/f.feature`
260
+ Then it should pass
@@ -0,0 +1,65 @@
1
+ Feature: Before Hook
2
+
3
+ Scenario: Examine names of scenario and feature
4
+ Given a file named "features/foo.feature" with:
5
+ """
6
+ Feature: Feature name
7
+
8
+ Scenario: Scenario name
9
+ Given a step
10
+ """
11
+ And a file named "features/support/hook.rb" with:
12
+ """
13
+ names = []
14
+ Before do |scenario|
15
+ expect(scenario).to_not respond_to(:scenario_outline)
16
+ names << scenario.feature.name.split("\n").first
17
+ names << scenario.name.split("\n").first
18
+ if(names.size == 2)
19
+ raise "NAMES:\n" + names.join("\n") + "\n"
20
+ end
21
+ end
22
+ """
23
+ When I run `cucumber`
24
+ Then the output should contain:
25
+ """
26
+ NAMES:
27
+ Feature name
28
+ Scenario name
29
+
30
+ """
31
+
32
+ Scenario: Examine names of scenario outline and feature
33
+ Given a file named "features/foo.feature" with:
34
+ """
35
+ Feature: Feature name
36
+
37
+ Scenario Outline: Scenario Outline name
38
+ Given a <placeholder>
39
+
40
+ Examples: Examples Table name
41
+ | <placeholder> |
42
+ | step |
43
+ """
44
+ And a file named "features/support/hook.rb" with:
45
+ """
46
+ names = []
47
+ Before do |scenario|
48
+ names << scenario.scenario_outline.feature.name.split("\n").first
49
+ names << scenario.scenario_outline.name.split("\n").first
50
+ names << scenario.name.split("\n").first
51
+ if(names.size == 3)
52
+ raise "NAMES:\n" + names.join("\n") + "\n"
53
+ end
54
+ end
55
+ """
56
+ When I run `cucumber`
57
+ Then the output should contain:
58
+ """
59
+ NAMES:
60
+ Feature name
61
+ Scenario Outline name, Examples Table name (#1)
62
+ Scenario Outline name, Examples Table name (#1)
63
+
64
+ """
65
+
@@ -0,0 +1,61 @@
1
+ @spawn
2
+ Feature: Hooks execute in defined order
3
+
4
+ Background:
5
+ Given a file named "features/step_definitions/steps.rb" with:
6
+ """
7
+ Given /^background step$/ do; $EventOrder.push(:background_step) end
8
+ Given /^scenario step$/ do; $EventOrder.push(:scenario_step) end
9
+ """
10
+ And a file named "features/support/hooks.rb" with:
11
+ """
12
+ $EventOrder = []
13
+ Around('@around') do |scenario,block|
14
+ $EventOrder.push :around_begin
15
+ block.call
16
+ $EventOrder.push :around_end
17
+ end
18
+ Before('@before') do
19
+ $EventOrder.push :before
20
+ end
21
+ After('@after') do |scenario|
22
+ $EventOrder.push :after
23
+ end
24
+ at_exit {
25
+ puts "Event order: #{$EventOrder.join(' ')}"
26
+ }
27
+ """
28
+ And a file named "features/around_hook_covers_background.feature" with:
29
+ """
30
+ @around
31
+ Feature: Around hooks cover background steps
32
+ Background:
33
+ Given background step
34
+ Scenario:
35
+ Given scenario step
36
+ """
37
+ And a file named "features/all_hook_order.feature" with:
38
+ """
39
+ @around
40
+ @before
41
+ @after
42
+ Feature: All hooks execute in expected order
43
+ Background:
44
+ Given background step
45
+ Scenario:
46
+ Given scenario step
47
+ """
48
+
49
+ Scenario: Around hooks cover background steps
50
+ When I run `cucumber -o /dev/null features/around_hook_covers_background.feature`
51
+ Then the output should contain:
52
+ """
53
+ Event order: around_begin background_step scenario_step around_end
54
+ """
55
+
56
+ Scenario: All hooks execute in expected order
57
+ When I run `cucumber -o /dev/null features/all_hook_order.feature`
58
+ Then the output should contain:
59
+ """
60
+ Event order: around_begin before background_step scenario_step after around_end
61
+ """
@@ -1,5 +1,8 @@
1
1
  Feature: Set up a default load path
2
2
 
3
+ When you're developing a gem, it's convenient if your project's `lib` directory
4
+ is already in the load path. Cucumber does this for you.
5
+
3
6
  Scenario: ./lib is included in the $LOAD_PATH
4
7
  Given a file named "features/support/env.rb" with:
5
8
  """
@@ -0,0 +1,32 @@
1
+ Feature: State
2
+
3
+ You can pass state between step by setting instance variables,
4
+ but those instance variables will be gone when the next scenario runs.
5
+
6
+ Scenario: Set an ivar in one scenario, use it in the next step
7
+ Given a file named "features/test.feature" with:
8
+ """
9
+ Feature:
10
+ Scenario:
11
+ Given I have set @flag = true
12
+ Then @flag should be true
13
+
14
+ Scenario:
15
+ Then @flag should be nil
16
+ """
17
+ And a file named "features/step_definitions/steps.rb" with:
18
+ """
19
+ Given /set @flag/ do
20
+ @flag = true
21
+ end
22
+ Then /flag should be true/ do
23
+ expect(@flag).to be_truthy
24
+ end
25
+ Then /flag should be nil/ do
26
+ expect(@flag).to be_nil
27
+ end
28
+ """
29
+ When I run `cucumber`
30
+ Then it should pass
31
+
32
+