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
@@ -13,7 +13,7 @@ module Cucumber
13
13
  before(:each) do
14
14
  Cucumber::Term::ANSIColor.coloring = false
15
15
  @out = StringIO.new
16
- @formatter = Pretty.new(step_mother, @out, {})
16
+ @formatter = Pretty.new(runtime, @out, {})
17
17
  end
18
18
 
19
19
  describe "given a single feature" do
@@ -21,21 +21,19 @@ module Cucumber
21
21
  run_defined_feature
22
22
  end
23
23
 
24
- describe "basic feature" do
24
+ describe "with a scenario with no steps" do
25
25
  define_feature <<-FEATURE
26
- Feature: Bananas
27
- In order to find my inner monkey
28
- As a human
29
- I must eat bananas
26
+ Feature: Banana party
27
+
28
+ Scenario: Monkey eats banana
30
29
  FEATURE
31
30
 
32
- it "prints out the feature description" do
33
- @out.string.should include "Feature: Bananas"
34
- @out.string.should include "I must eat bananas"
31
+ it "outputs the scenario name" do
32
+ expect(@out.string).to include "Scenario: Monkey eats banana"
35
33
  end
36
-
37
34
  end
38
35
 
36
+
39
37
  describe "with a scenario" do
40
38
  define_feature <<-FEATURE
41
39
  Feature: Banana party
@@ -45,10 +43,35 @@ module Cucumber
45
43
  FEATURE
46
44
 
47
45
  it "outputs the scenario name" do
48
- @out.string.should include "Scenario: Monkey eats banana"
46
+ expect(@out.string).to include "Scenario: Monkey eats banana"
47
+ end
48
+
49
+ it "outputs the step" do
50
+ expect(@out.string).to include "Given there are bananas"
51
+ end
52
+ end
53
+
54
+ describe "with a background" do
55
+ define_feature <<-FEATURE
56
+ Feature: Banana party
57
+
58
+ Background:
59
+ Given a tree
60
+
61
+ Scenario: Monkey eats banana
62
+ Given there are bananas
63
+ FEATURE
64
+
65
+ it "outputs the gherkin" do
66
+ expect(@out.string).to include(self.class.feature_content)
67
+ end
68
+
69
+ it "outputs the scenario name" do
70
+ expect(@out.string).to include "Scenario: Monkey eats banana"
49
71
  end
72
+
50
73
  it "outputs the step" do
51
- @out.string.should include "Given there are bananas"
74
+ expect(@out.string).to include "Given there are bananas"
52
75
  end
53
76
  end
54
77
 
@@ -81,16 +104,73 @@ module Cucumber
81
104
  | carrots |
82
105
  OUTPUT
83
106
  lines.split("\n").each do |line|
84
- @out.string.should include line.strip
107
+ expect(@out.string).to include line.strip
85
108
  end
86
109
  end
110
+
87
111
  it "has 4 undefined scenarios" do
88
- @out.string.should include "4 scenarios (4 undefined)"
112
+ expect(@out.string).to include "4 scenarios (4 undefined)"
89
113
  end
114
+
90
115
  it "has 4 undefined steps" do
91
- @out.string.should include "4 steps (4 undefined)"
116
+ expect(@out.string).to include "4 steps (4 undefined)"
92
117
  end
93
118
 
119
+ context 'when the examples table header is wider than the rows' do
120
+ define_feature <<-FEATURE
121
+ Feature: Monkey Business
122
+
123
+ Scenario Outline: Types of monkey
124
+ Given there are <Types of monkey>
125
+
126
+ Examples:
127
+ | Types of monkey |
128
+ | Hominidae |
129
+ FEATURE
130
+
131
+ it "outputs the scenario outline" do
132
+ lines = <<-OUTPUT
133
+ Examples:
134
+ | Types of monkey |
135
+ | Hominidae |
136
+ OUTPUT
137
+ lines.split("\n").each do |line|
138
+ expect(@out.string).to include line.strip
139
+ end
140
+ end
141
+ end
142
+ end
143
+
144
+ # To ensure https://rspec.lighthouseapp.com/projects/16211/tickets/475 remains fixed.
145
+ describe "with a scenario outline with a pystring" do
146
+ define_feature <<-FEATURE
147
+ Feature:
148
+ Scenario Outline: Monkey eats a balanced diet
149
+ Given a multiline string:
150
+ """
151
+ Monkeys eat <things>
152
+ """
153
+
154
+ Examples:
155
+ | things |
156
+ | apples |
157
+ FEATURE
158
+
159
+ it "outputs the scenario outline" do
160
+ lines = <<-OUTPUT
161
+ Given a multiline string:
162
+ """
163
+ Monkeys eat <things>
164
+ """
165
+
166
+ Examples:
167
+ | things |
168
+ | apples |
169
+ OUTPUT
170
+ lines.split("\n").each do |line|
171
+ expect(@out.string).to include line.strip
172
+ end
173
+ end
94
174
  end
95
175
 
96
176
  describe "with a step with a py string" do
@@ -105,7 +185,7 @@ module Cucumber
105
185
  FEATURE
106
186
 
107
187
  it "displays the pystring nested" do
108
- @out.string.should include <<OUTPUT
188
+ expect(@out.string).to include <<OUTPUT
109
189
  """
110
190
  foo
111
191
  """
@@ -125,7 +205,7 @@ OUTPUT
125
205
  FEATURE
126
206
 
127
207
  it "displays the multiline string" do
128
- @out.string.should include <<OUTPUT
208
+ expect(@out.string).to include <<OUTPUT
129
209
  Given there are monkeys:
130
210
  | name |
131
211
  | foo |
@@ -149,14 +229,15 @@ OUTPUT
149
229
  FEATURE
150
230
 
151
231
  it "displays the table for the background" do
152
- @out.string.should include <<OUTPUT
232
+ expect(@out.string).to include <<OUTPUT
153
233
  Given table:
154
234
  | a | b |
155
235
  | c | d |
156
236
  OUTPUT
157
237
  end
238
+
158
239
  it "displays the table for the scenario" do
159
- @out.string.should include <<OUTPUT
240
+ expect(@out.string).to include <<OUTPUT
160
241
  Given another table:
161
242
  | e | f |
162
243
  | g | h |
@@ -181,19 +262,110 @@ OUTPUT
181
262
  FEATURE
182
263
 
183
264
  it "displays the background py string" do
184
- @out.string.should include <<OUTPUT
265
+ expect(@out.string).to include <<OUTPUT
185
266
  Given stuff:
186
267
  """
187
268
  foo
188
269
  """
189
270
  OUTPUT
190
271
  end
272
+
191
273
  it "displays the scenario py string" do
192
- @out.string.should include <<OUTPUT
274
+ expect(@out.string).to include <<OUTPUT
193
275
  Given more stuff:
194
276
  """
195
277
  bar
196
278
  """
279
+ OUTPUT
280
+ end
281
+ end
282
+
283
+ describe "with output from hooks" do
284
+ define_feature <<-FEATURE
285
+ Feature:
286
+ Scenario:
287
+ Given this step passes
288
+ Scenario Outline:
289
+ Given this step <status>
290
+ Examples:
291
+ | status |
292
+ | passes |
293
+ FEATURE
294
+
295
+ define_steps do
296
+ Before do
297
+ puts "Before hook"
298
+ end
299
+ AfterStep do
300
+ puts "AfterStep hook"
301
+ end
302
+ After do
303
+ puts "After hook"
304
+ end
305
+ Given(/^this step passes$/) {}
306
+ end
307
+
308
+ it "displays hook output appropriately " do
309
+ expect( @out.string ).to include <<OUTPUT
310
+ Feature:
311
+
312
+ Scenario:
313
+ Before hook
314
+ Given this step passes
315
+ AfterStep hook
316
+ After hook
317
+
318
+ Scenario Outline:
319
+ Given this step <status>
320
+
321
+ Examples:
322
+ | status |
323
+ | passes | Before hook, AfterStep hook, After hook
324
+
325
+ 2 scenarios (2 passed)
326
+ 2 steps (2 passed)
327
+ OUTPUT
328
+ end
329
+ end
330
+
331
+ describe "with background and output from hooks" do
332
+ define_feature <<-FEATURE
333
+ Feature:
334
+ Background:
335
+ Given this step passes
336
+ Scenario:
337
+ Given this step passes
338
+ FEATURE
339
+
340
+ define_steps do
341
+ Before do
342
+ puts "Before hook"
343
+ end
344
+ AfterStep do
345
+ puts "AfterStep hook"
346
+ end
347
+ After do
348
+ puts "After hook"
349
+ end
350
+ Given(/^this step passes$/) {}
351
+ end
352
+
353
+ it "displays hook output appropriately " do
354
+ expect( @out.string ).to include <<OUTPUT
355
+ Feature:
356
+
357
+ Background:
358
+ Before hook
359
+ Given this step passes
360
+ AfterStep hook
361
+
362
+ Scenario:
363
+ Given this step passes
364
+ AfterStep hook
365
+ After hook
366
+
367
+ 1 scenario (1 passed)
368
+ 2 steps (2 passed)
197
369
  OUTPUT
198
370
  end
199
371
  end
@@ -204,7 +376,7 @@ OUTPUT
204
376
  before(:each) do
205
377
  Cucumber::Term::ANSIColor.coloring = false
206
378
  @out = StringIO.new
207
- @formatter = Pretty.new(step_mother, @out, {:no_multiline => true})
379
+ @formatter = Pretty.new(runtime, @out, {:no_multiline => true})
208
380
  end
209
381
 
210
382
  describe "given a single feature" do
@@ -212,21 +384,6 @@ OUTPUT
212
384
  run_defined_feature
213
385
  end
214
386
 
215
- describe "basic feature" do
216
- define_feature <<-FEATURE
217
- Feature: Bananas
218
- In order to find my inner monkey
219
- As a human
220
- I must eat bananas
221
- FEATURE
222
-
223
- it "prints out the feature description" do
224
- @out.string.should include "Feature: Bananas"
225
- @out.string.should include "I must eat bananas"
226
- end
227
-
228
- end
229
-
230
387
  describe "with a scenario" do
231
388
  define_feature <<-FEATURE
232
389
  Feature: Banana party
@@ -236,10 +393,11 @@ OUTPUT
236
393
  FEATURE
237
394
 
238
395
  it "outputs the scenario name" do
239
- @out.string.should include "Scenario: Monkey eats banana"
396
+ expect(@out.string).to include "Scenario: Monkey eats banana"
240
397
  end
398
+
241
399
  it "outputs the step" do
242
- @out.string.should include "Given there are bananas"
400
+ expect(@out.string).to include "Given there are bananas"
243
401
  end
244
402
  end
245
403
 
@@ -272,16 +430,17 @@ OUTPUT
272
430
  | carrots |
273
431
  OUTPUT
274
432
  lines.split("\n").each do |line|
275
- @out.string.should include line.strip
433
+ expect(@out.string).to include line.strip
276
434
  end
277
435
  end
436
+
278
437
  it "has 4 undefined scenarios" do
279
- @out.string.should include "4 scenarios (4 undefined)"
438
+ expect(@out.string).to include "4 scenarios (4 undefined)"
280
439
  end
440
+
281
441
  it "has 4 undefined steps" do
282
- @out.string.should include "4 steps (4 undefined)"
442
+ expect(@out.string).to include "4 steps (4 undefined)"
283
443
  end
284
-
285
444
  end
286
445
 
287
446
  describe "with a step with a py string" do
@@ -296,7 +455,7 @@ OUTPUT
296
455
  FEATURE
297
456
 
298
457
  it "does not display the pystring" do
299
- @out.string.should_not include <<OUTPUT
458
+ expect(@out.string).not_to include <<OUTPUT
300
459
  """
301
460
  foo
302
461
  """
@@ -316,7 +475,7 @@ OUTPUT
316
475
  FEATURE
317
476
 
318
477
  it "does not display the multiline string" do
319
- @out.string.should_not include <<OUTPUT
478
+ expect(@out.string).not_to include <<OUTPUT
320
479
  | name |
321
480
  | foo |
322
481
  | bar |
@@ -339,13 +498,13 @@ OUTPUT
339
498
  FEATURE
340
499
 
341
500
  it "does not display the table for the background" do
342
- @out.string.should_not include <<OUTPUT
501
+ expect(@out.string).not_to include <<OUTPUT
343
502
  | a | b |
344
503
  | c | d |
345
504
  OUTPUT
346
505
  end
347
506
  it "does not display the table for the scenario" do
348
- @out.string.should_not include <<OUTPUT
507
+ expect(@out.string).not_to include <<OUTPUT
349
508
  | e | f |
350
509
  | g | h |
351
510
  OUTPUT
@@ -369,14 +528,14 @@ OUTPUT
369
528
  FEATURE
370
529
 
371
530
  it "does not display the background py string" do
372
- @out.string.should_not include <<OUTPUT
531
+ expect(@out.string).not_to include <<OUTPUT
373
532
  """
374
533
  foo
375
534
  """
376
535
  OUTPUT
377
536
  end
378
537
  it "does not display the scenario py string" do
379
- @out.string.should_not include <<OUTPUT
538
+ expect(@out.string).not_to include <<OUTPUT
380
539
  """
381
540
  bar
382
541
  """
@@ -386,6 +545,279 @@ OUTPUT
386
545
  end
387
546
  end
388
547
 
548
+ context "In --expand mode" do
549
+ let(:runtime) { Runtime.new({:expand => true})}
550
+ before(:each) do
551
+ Cucumber::Term::ANSIColor.coloring = false
552
+ @out = StringIO.new
553
+ @formatter = Pretty.new(runtime, @out, {})
554
+ end
555
+
556
+ describe "given a single feature" do
557
+ before(:each) do
558
+ run_defined_feature
559
+ end
560
+
561
+ describe "with a scenario outline" do
562
+ define_feature <<-FEATURE
563
+ Feature: Fud Pyramid
564
+
565
+ Scenario Outline: Monkey eats a balanced diet
566
+ Given there are <Things>
567
+
568
+ Examples: Fruit
569
+ | Things |
570
+ | apples |
571
+ | bananas |
572
+ Examples: Vegetables
573
+ | Things |
574
+ | broccoli |
575
+ | carrots |
576
+ FEATURE
577
+
578
+ it "outputs the instantiated scenarios" do
579
+ lines = <<-OUTPUT
580
+ Examples: Fruit
581
+ Scenario: | apples |
582
+ Given there are apples
583
+ Scenario: | bananas |
584
+ Given there are bananas
585
+ Examples: Vegetables
586
+ Scenario: | broccoli |
587
+ Given there are broccoli
588
+ Scenario: | carrots |
589
+ Given there are carrots
590
+ OUTPUT
591
+ lines.split("\n").each do |line|
592
+ expect(@out.string).to include line.strip
593
+ end
594
+ end
595
+ end
596
+
597
+ describe "with a scenario outline in en-lol" do
598
+ define_feature <<-FEATURE
599
+ # language: en-lol
600
+ OH HAI: STUFFING
601
+
602
+ MISHUN SRSLY: CUCUMBR
603
+ I CAN HAZ IN TEH BEGINNIN <BEGINNIN> CUCUMBRZ
604
+ WEN I EAT <EAT> CUCUMBRZ
605
+ DEN I HAS <EAT> CUCUMBERZ IN MAH BELLY
606
+ AN IN TEH END <KTHXBAI> CUCUMBRZ KTHXBAI
607
+
608
+ EXAMPLZ:
609
+ | BEGINNIN | EAT | KTHXBAI |
610
+ | 3 | 2 | 1 |
611
+ FEATURE
612
+
613
+ it "outputs localized text" do
614
+ lines = <<-OUTPUT
615
+ OH HAI: STUFFING
616
+
617
+ MISHUN SRSLY: CUCUMBR
618
+ I CAN HAZ IN TEH BEGINNIN <BEGINNIN> CUCUMBRZ
619
+ WEN I EAT <EAT> CUCUMBRZ
620
+ DEN I HAS <EAT> CUCUMBERZ IN MAH BELLY
621
+ AN IN TEH END <KTHXBAI> CUCUMBRZ KTHXBAI
622
+ EXAMPLZ:
623
+ MISHUN: | 3 | 2 | 1 |
624
+ I CAN HAZ IN TEH BEGINNIN 3 CUCUMBRZ
625
+ WEN I EAT 2 CUCUMBRZ
626
+ DEN I HAS 2 CUCUMBERZ IN MAH BELLY
627
+ AN IN TEH END 1 CUCUMBRZ KTHXBAI
628
+ OUTPUT
629
+ lines.split("\n").each do |line|
630
+ expect(@out.string).to include line.strip
631
+ end
632
+ end
633
+ end
634
+ end
635
+ end
636
+
637
+ context "In --expand mode with --source as an option" do
638
+ let(:runtime) { Runtime.new({:expand => true})}
639
+ before(:each) do
640
+ Cucumber::Term::ANSIColor.coloring = false
641
+ @out = StringIO.new
642
+ @formatter = Pretty.new(runtime, @out, {:source => true})
643
+ end
644
+
645
+ describe "given a single feature" do
646
+ before(:each) do
647
+ run_defined_feature
648
+ end
649
+
650
+ describe "with a scenario outline" do
651
+ define_feature <<-FEATURE
652
+ Feature: Fud Pyramid
653
+
654
+ Scenario Outline: Monkey eats a balanced diet
655
+ Given there are <Things>
656
+
657
+ Examples: Fruit
658
+ | Things |
659
+ | apples |
660
+ | bananas |
661
+ Examples: Vegetables
662
+ | Things |
663
+ | broccoli |
664
+ | carrots |
665
+ FEATURE
666
+
667
+ it "includes the source in the output" do
668
+ lines = <<-OUTPUT
669
+ Scenario Outline: Monkey eats a balanced diet # spec.feature:3
670
+ Given there are <Things> # spec.feature:4
671
+ Examples: Fruit
672
+ Scenario: | apples | # spec.feature:8
673
+ Given there are apples # spec.feature:8
674
+ Scenario: | bananas | # spec.feature:9
675
+ Given there are bananas # spec.feature:9
676
+ Examples: Vegetables
677
+ Scenario: | broccoli | # spec.feature:12
678
+ Given there are broccoli # spec.feature:12
679
+ Scenario: | carrots | # spec.feature:13
680
+ Given there are carrots # spec.feature:13
681
+ OUTPUT
682
+ lines.split("\n").each do |line|
683
+ expect(@out.string).to include line.strip
684
+ end
685
+ end
686
+
687
+ context "With very wide cells" do
688
+ define_feature <<-FEATURE
689
+ Feature: Monkey Business
690
+
691
+ Scenario Outline: Types of monkey
692
+ Given there are <Types of monkey>
693
+
694
+ Examples:
695
+ | Types of monkey | Extra |
696
+ | Hominidae | Very long cell content |
697
+ FEATURE
698
+
699
+ it "the scenario line controls the source indentation" do
700
+ lines = <<-OUTPUT
701
+ Examples:
702
+ Scenario: | Hominidae | Very long cell content | # spec.feature:8
703
+ Given there are Hominidae # spec.feature:8
704
+
705
+ OUTPUT
706
+ lines.split("\n").each do |line|
707
+ expect(@out.string).to include line.strip
708
+ end
709
+ end
710
+ end
711
+ end
712
+ end
713
+ end
714
+
715
+ context "snippets contain relevant keyword replacements" do
716
+
717
+ before(:each) do
718
+ Cucumber::Term::ANSIColor.coloring = false
719
+ @out = StringIO.new
720
+ @formatter = Pretty.new(runtime, @out, {snippets: true})
721
+ run_defined_feature
722
+ end
723
+
724
+ describe "With a scenario that has undefined steps" do
725
+ define_feature <<-FEATURE
726
+ Feature: Banana party
727
+
728
+ Scenario: many monkeys eat many things
729
+ Given there are bananas and apples
730
+ And other monkeys are around
731
+ When one monkey eats a banana
732
+ And the other monkeys eat all the apples
733
+ Then bananas remain
734
+ But there are no apples left
735
+ FEATURE
736
+
737
+ it "containes snippets with 'And' or 'But' replaced by previous step name" do
738
+ expect(@out.string).to include("Given(/^there are bananas and apples$/)")
739
+ expect(@out.string).to include("Given(/^other monkeys are around$/)")
740
+ expect(@out.string).to include("When(/^one monkey eats a banana$/)")
741
+ expect(@out.string).to include("When(/^the other monkeys eat all the apples$/)")
742
+ expect(@out.string).to include("Then(/^bananas remain$/)")
743
+ expect(@out.string).to include("Then(/^there are no apples left$/)")
744
+ end
745
+ end
746
+
747
+ describe "With a scenario that uses * and 'But'" do
748
+ define_feature <<-FEATURE
749
+ Feature: Banana party
750
+
751
+ Scenario: many monkeys eat many things
752
+ * there are bananas and apples
753
+ * other monkeys are around
754
+ When one monkey eats a banana
755
+ * the other monkeys eat all the apples
756
+ Then bananas remain
757
+ * there are no apples left
758
+ FEATURE
759
+ it "replaces the first step with 'Given'" do
760
+ expect(@out.string).to include("Given(/^there are bananas and apples$/)")
761
+ end
762
+ it "uses actual keywords as the 'previous' keyword for future replacements" do
763
+ expect(@out.string).to include("Given(/^other monkeys are around$/)")
764
+ expect(@out.string).to include("When(/^the other monkeys eat all the apples$/)")
765
+ expect(@out.string).to include("Then(/^there are no apples left$/)")
766
+ end
767
+ end
768
+
769
+ describe "With a scenario where the only undefined step uses 'And'" do
770
+ define_feature <<-FEATURE
771
+ Feature:
772
+
773
+ Scenario:
774
+ Given this step passes
775
+ Then this step passes
776
+ And this step is undefined
777
+ FEATURE
778
+ define_steps do
779
+ Given(/^this step passes$/) {}
780
+ end
781
+ it "uses actual keyword of the previous passing step for the undefined step" do
782
+ expect(@out.string).to include("Then(/^this step is undefined$/)")
783
+ end
784
+ end
785
+
786
+ describe "With scenarios where the first step is undefined and uses '*'" do
787
+ define_feature <<-FEATURE
788
+ Feature:
789
+
790
+ Scenario:
791
+ * this step is undefined
792
+ Then this step passes
793
+
794
+ Scenario:
795
+ * this step is also undefined
796
+ Then this step passes
797
+ FEATURE
798
+ define_steps do
799
+ Given(/^this step passes$/) {}
800
+ end
801
+ it "uses 'Given' as actual keyword the step in each scenario" do
802
+ expect(@out.string).to include("Given(/^this step is undefined$/)")
803
+ expect(@out.string).to include("Given(/^this step is also undefined$/)")
804
+ end
805
+ end
806
+
807
+ describe "with a scenario in en-lol" do
808
+ define_feature <<-FEATURE
809
+ # language: en-lol
810
+ OH HAI: STUFFING
811
+
812
+ MISHUN: CUCUMBR
813
+ I CAN HAZ IN TEH BEGINNIN CUCUMBRZ
814
+ AN I EAT CUCUMBRZ
815
+ FEATURE
816
+ it "uses actual keyword of the previous passing step for the undefined step" do
817
+ expect(@out.string).to include("ICANHAZ(/^I EAT CUCUMBRZ$/)")
818
+ end
819
+ end
820
+ end
389
821
  end
390
822
  end
391
823
  end