cucumber 2.99.0 → 3.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 (395) hide show
  1. checksums.yaml +4 -4
  2. data/.cucumberproignore +6 -0
  3. data/.gitattributes +32 -0
  4. data/.github/ISSUE_TEMPLATE.md +1 -1
  5. data/.github/PULL_REQUEST_TEMPLATE.md +1 -0
  6. data/.rubocop.yml +13 -0
  7. data/.rubocop_todo.yml +991 -0
  8. data/.travis.yml +56 -10
  9. data/{History.md → CHANGELOG.md} +166 -32
  10. data/CONTRIBUTING.md +21 -1
  11. data/Gemfile +18 -5
  12. data/README.md +13 -4
  13. data/Rakefile +12 -2
  14. data/appveyor.yml +27 -0
  15. data/bin/cucumber +2 -1
  16. data/cucumber.gemspec +15 -10
  17. data/cucumber.yml +10 -11
  18. data/examples/i18n/Rakefile +1 -1
  19. data/examples/i18n/ar/features/step_definitions/calculator_steps.rb +8 -3
  20. data/examples/i18n/ar/lib/calculator.rb +2 -2
  21. data/examples/i18n/bg/features/step_definitions/calculator_steps.rb +6 -6
  22. data/examples/i18n/bg/features/support/env.rb +6 -1
  23. data/examples/i18n/bg/lib/calculator.rb +2 -1
  24. data/examples/i18n/ca/features/step_definitions/calculator_steps.rb +10 -5
  25. data/examples/i18n/ca/lib/calculadora.rb +2 -2
  26. data/examples/i18n/cs/features/step_definitions/calculator_steps.rb +10 -5
  27. data/examples/i18n/cs/lib/calculator.rb +3 -3
  28. data/examples/i18n/da/features/step_definitions/lommeregner_steps.rb +10 -5
  29. data/examples/i18n/da/lib/lommeregner.rb +2 -2
  30. data/examples/i18n/de/features/step_definitions/calculator_steps.rb +10 -5
  31. data/examples/i18n/de/lib/calculator.rb +2 -2
  32. data/examples/i18n/el/features/step_definitions/calculator_steps.rb +10 -5
  33. data/examples/i18n/el/lib/calculator.rb +2 -2
  34. data/examples/i18n/en/features/step_definitions/calculator_steps.rb +9 -4
  35. data/examples/i18n/en/lib/calculator.rb +2 -2
  36. data/examples/i18n/en-lol/features/step_definitions/cucumbrz_steps.rb +4 -4
  37. data/examples/i18n/en-lol/features/support/env.rb +6 -2
  38. data/examples/i18n/en-lol/lib/basket.rb +2 -2
  39. data/examples/i18n/en-lol/lib/belly.rb +2 -2
  40. data/examples/i18n/eo/features/step_definitions/calculator_steps.rb +9 -4
  41. data/examples/i18n/eo/lib/calculator.rb +2 -2
  42. data/examples/i18n/es/features/step_definitions/calculador_steps.rb +10 -5
  43. data/examples/i18n/es/lib/calculador.rb +2 -2
  44. data/examples/i18n/et/features/step_definitions/kalkulaator_steps.rb +10 -5
  45. data/examples/i18n/et/lib/kalkulaator.rb +3 -3
  46. data/examples/i18n/fi/features/step_definitions/laskin_steps.rb +9 -4
  47. data/examples/i18n/fi/lib/laskin.rb +1 -1
  48. data/examples/i18n/fr/features/step_definitions/calculatrice_steps.rb +8 -8
  49. data/examples/i18n/fr/features/support/env.rb +7 -2
  50. data/examples/i18n/fr/lib/calculatrice.rb +2 -2
  51. data/examples/i18n/he/features/step_definitions/calculator_steps.rb +10 -5
  52. data/examples/i18n/he/lib/calculator.rb +1 -1
  53. data/examples/i18n/hi/features/step_definitions/calculator_steps.rb +9 -4
  54. data/examples/i18n/hi/lib/calculator.rb +1 -1
  55. data/examples/i18n/ht/features/step_definitions/kalkilatris_steps.rb +9 -5
  56. data/examples/i18n/ht/lib/kalkilatris.rb +2 -2
  57. data/examples/i18n/hu/features/step_definitions/calculator_steps.rb +10 -5
  58. data/examples/i18n/hu/lib/calculator.rb +1 -1
  59. data/examples/i18n/id/features/step_definitions/calculator_steps.rb +10 -5
  60. data/examples/i18n/id/lib/calculator.rb +2 -2
  61. data/examples/i18n/it/features/step_definitions/calcolatrice_steps.rb +10 -5
  62. data/examples/i18n/it/lib/calcolatrice.rb +3 -3
  63. data/examples/i18n/ja/features/step_definitions/calculator_steps.rb +3 -3
  64. data/examples/i18n/ja/features/support/env.rb +7 -2
  65. data/examples/i18n/ja/lib/calculator.rb +2 -2
  66. data/examples/i18n/ko/features/step_definitions/calculator_steps.rb +10 -5
  67. data/examples/i18n/ko/lib/calculator.rb +2 -2
  68. data/examples/i18n/lt/features/step_definitions/calculator_steps.rb +10 -5
  69. data/examples/i18n/lt/lib/calculator.rb +2 -2
  70. data/examples/i18n/lv/features/step_definitions/calculator_steps.rb +10 -5
  71. data/examples/i18n/lv/lib/calculator.rb +2 -2
  72. data/examples/i18n/no/features/step_definitions/kalkulator_steps.rb +3 -3
  73. data/examples/i18n/no/features/support/env.rb +7 -2
  74. data/examples/i18n/no/lib/kalkulator.rb +2 -2
  75. data/examples/i18n/pl/features/step_definitions/calculator_steps.rb +10 -5
  76. data/examples/i18n/pl/features/support/env.rb +6 -1
  77. data/examples/i18n/pl/lib/calculator.rb +2 -2
  78. data/examples/i18n/pt/features/step_definitions/calculadora_steps.rb +3 -3
  79. data/examples/i18n/pt/features/support/env.rb +7 -2
  80. data/examples/i18n/pt/lib/calculadora.rb +1 -1
  81. data/examples/i18n/ro/features/step_definitions/calculator_steps.rb +11 -6
  82. data/examples/i18n/ro/lib/calculator.rb +1 -1
  83. data/examples/i18n/ru/features/step_definitions/calculator_steps.rb +5 -5
  84. data/examples/i18n/ru/features/support/env.rb +6 -1
  85. data/examples/i18n/ru/lib/calculator.rb +2 -1
  86. data/examples/i18n/sk/features/step_definitions/calculator_steps.rb +10 -5
  87. data/examples/i18n/sk/lib/calculator.rb +2 -2
  88. data/examples/i18n/sr-Cyrl/features/step_definitions/calculator_steps.rb +3 -3
  89. data/examples/i18n/sr-Cyrl/features/support/env.rb +7 -2
  90. data/examples/i18n/sr-Cyrl/lib/calculator.rb +2 -2
  91. data/examples/i18n/sr-Latn/features/step_definitions/calculator_steps.rb +10 -5
  92. data/examples/i18n/sr-Latn/lib/calculator.rb +2 -2
  93. data/examples/i18n/sv/features/step_definitions/kalkulator_steps.rb +9 -4
  94. data/examples/i18n/sv/lib/kalkulator.rb +2 -2
  95. data/examples/i18n/tr/features/step_definitions/hesap_makinesi_adimlari.rb +10 -5
  96. data/examples/i18n/tr/lib/hesap_makinesi.rb +2 -2
  97. data/examples/i18n/uk/features/step_definitions/calculator_steps.rb +4 -4
  98. data/examples/i18n/uk/features/support/env.rb +6 -1
  99. data/examples/i18n/uk/lib/calculator.rb +2 -1
  100. data/examples/i18n/uz/features/step_definitions/calculator_steps.rb +4 -4
  101. data/examples/i18n/uz/features/support/env.rb +6 -1
  102. data/examples/i18n/uz/lib/calculator.rb +2 -1
  103. data/examples/i18n/zh-CN/features/step_definitions/calculator_steps.rb +11 -6
  104. data/examples/i18n/zh-CN/lib/calculator.rb +2 -2
  105. data/examples/i18n/zh-TW/features/step_definitions/calculator_steps.rb +10 -5
  106. data/examples/i18n/zh-TW/lib/calculator.rb +2 -2
  107. data/examples/rspec_doubles/features/step_definitions/calvin_steps.rb +3 -3
  108. data/examples/sinatra/features/step_definitions/add_steps.rb +4 -4
  109. data/examples/sinatra/features/support/env.rb +6 -1
  110. data/examples/tcl/features/step_definitions/fib_steps.rb +2 -2
  111. data/examples/tcl/features/support/env.rb +2 -1
  112. data/examples/test_unit/features/step_definitions/test_unit_steps.rb +4 -4
  113. data/examples/watir/features/step_definitions/search_steps.rb +6 -5
  114. data/examples/watir/features/support/env.rb +5 -1
  115. data/examples/watir/features/support/screenshots.rb +5 -5
  116. data/features/docs/api/list_step_defs_as_json.feature +21 -7
  117. data/features/docs/api/listen_for_events.feature +9 -8
  118. data/features/docs/api/run_cli_main_with_existing_runtime.feature +1 -0
  119. data/features/docs/cli/dry_run.feature +3 -0
  120. data/features/docs/cli/execute_with_tag_filter.feature +8 -6
  121. data/features/docs/cli/fail_fast.feature +2 -0
  122. data/features/docs/cli/help.feature +8 -0
  123. data/features/docs/{gherkin/language_help.feature → cli/i18n.feature} +6 -6
  124. data/features/docs/cli/randomize.feature +2 -2
  125. data/features/docs/cli/retry_failing_tests.feature +75 -15
  126. data/features/docs/cli/run_scenarios_matching_name.feature +1 -0
  127. data/features/docs/cli/specifying_multiple_formatters.feature +3 -0
  128. data/features/docs/cli/strict_mode.feature +6 -0
  129. data/features/docs/defining_steps/ambiguous_steps.feature +89 -0
  130. data/features/docs/defining_steps/nested_steps.feature +5 -1
  131. data/features/docs/defining_steps/nested_steps_i18n.feature +3 -0
  132. data/features/docs/defining_steps/nested_steps_with_second_arg.feature +2 -0
  133. data/features/docs/defining_steps/printing_messages.feature +1 -2
  134. data/features/docs/defining_steps/skip_scenario.feature +1 -34
  135. data/features/docs/defining_steps/snippets.feature +18 -18
  136. data/features/docs/events/gherkin_source_read_event.feature +43 -0
  137. data/features/docs/events/step_activated_event.feature +36 -0
  138. data/features/docs/events/step_definition_registered_event.feature +29 -0
  139. data/features/docs/events/test_case_finished_event.feature +35 -0
  140. data/features/docs/events/test_case_started_event.feature +54 -0
  141. data/features/docs/events/test_run_finished_event.feature +40 -0
  142. data/features/docs/events/test_run_started_event.feature +41 -0
  143. data/features/docs/events/test_step_finished_event.feature +47 -0
  144. data/features/docs/events/test_step_started_event.feature +43 -0
  145. data/features/docs/exception_in_after_hook.feature +3 -2
  146. data/features/docs/exception_in_after_step_hook.feature +2 -0
  147. data/features/docs/exception_in_around_hook.feature +2 -0
  148. data/features/docs/exception_in_before_hook.feature +3 -1
  149. data/features/docs/extending_cucumber/custom_formatter.feature +12 -48
  150. data/features/docs/formatters/json_formatter.feature +4 -4
  151. data/features/docs/formatters/junit_formatter.feature +7 -6
  152. data/features/docs/formatters/pretty_formatter.feature +1 -0
  153. data/features/docs/formatters/progress_formatter.feature +1 -0
  154. data/features/docs/formatters/rerun_formatter.feature +2 -0
  155. data/features/docs/formatters/summary_formatter.feature +35 -0
  156. data/features/docs/formatters/usage_formatter.feature +3 -0
  157. data/features/docs/getting_started.feature +2 -1
  158. data/features/docs/gherkin/background.feature +5 -5
  159. data/features/docs/gherkin/doc_strings.feature +2 -0
  160. data/features/docs/gherkin/expand_option_for_outlines.feature +1 -0
  161. data/features/docs/gherkin/outlines.feature +6 -4
  162. data/features/docs/gherkin/unicode_table.feature +2 -1
  163. data/features/docs/gherkin/using_descriptions.feature +1 -0
  164. data/features/docs/gherkin/using_star_notation.feature +1 -1
  165. data/features/docs/post_configuration_hook.feature +1 -17
  166. data/features/docs/rake_task.feature +5 -0
  167. data/features/docs/raketask.feature +3 -1
  168. data/features/docs/work_in_progress.feature +5 -2
  169. data/features/docs/writing_support_code/after_step_hooks.feature +3 -1
  170. data/features/docs/writing_support_code/around_hooks.feature +6 -0
  171. data/features/docs/writing_support_code/before_hook.feature +1 -0
  172. data/features/docs/writing_support_code/hook_order.feature +3 -1
  173. data/features/docs/writing_support_code/parameter_types.feature +53 -0
  174. data/features/docs/writing_support_code/tagged_hooks.feature +1 -1
  175. data/features/docs/writing_support_code/world.feature +129 -0
  176. data/features/lib/step_definitions/aruba_steps.rb +5 -10
  177. data/features/lib/step_definitions/cli_steps.rb +4 -0
  178. data/features/lib/step_definitions/cucumber_steps.rb +9 -12
  179. data/features/lib/step_definitions/iso-8859-1_steps.rb +9 -5
  180. data/features/lib/step_definitions/json_steps.rb +2 -1
  181. data/features/lib/step_definitions/junit_steps.rb +2 -1
  182. data/features/lib/step_definitions/language_steps.rb +3 -2
  183. data/features/lib/step_definitions/profile_steps.rb +7 -6
  184. data/features/lib/step_definitions/retry_steps.rb +33 -13
  185. data/features/lib/step_definitions/ruby_steps.rb +2 -1
  186. data/features/lib/support/env.rb +3 -2
  187. data/features/lib/support/fake_wire_server.rb +17 -3
  188. data/features/lib/support/feature_factory.rb +2 -1
  189. data/features/lib/support/normalise_output.rb +14 -12
  190. data/features/lib/support/parameter_types.rb +5 -0
  191. data/gem_tasks/contributors.rake +10 -6
  192. data/gem_tasks/cov.rake +1 -0
  193. data/gem_tasks/downloads.rb +1 -0
  194. data/gem_tasks/environment.rake +2 -5
  195. data/gem_tasks/examples.rake +3 -2
  196. data/gem_tasks/fix_cr_lf.rake +19 -7
  197. data/gem_tasks/flog.rake +4 -3
  198. data/gem_tasks/rspec.rake +2 -1
  199. data/gem_tasks/sass.rake +2 -1
  200. data/lib/autotest/cucumber.rb +1 -0
  201. data/lib/autotest/cucumber_mixin.rb +17 -16
  202. data/lib/autotest/cucumber_rails.rb +1 -0
  203. data/lib/autotest/cucumber_rails_rspec.rb +1 -0
  204. data/lib/autotest/cucumber_rails_rspec2.rb +1 -0
  205. data/lib/autotest/cucumber_rspec.rb +1 -0
  206. data/lib/autotest/cucumber_rspec2.rb +1 -0
  207. data/lib/autotest/discover.rb +3 -2
  208. data/lib/cucumber/cli/configuration.rb +12 -21
  209. data/lib/cucumber/cli/main.rb +8 -7
  210. data/lib/cucumber/cli/options.rb +341 -217
  211. data/lib/cucumber/cli/profile_loader.rb +26 -21
  212. data/lib/cucumber/cli/rerun_file.rb +1 -0
  213. data/lib/cucumber/configuration.rb +54 -37
  214. data/lib/cucumber/constantize.rb +2 -1
  215. data/lib/cucumber/core_ext/string.rb +2 -1
  216. data/lib/cucumber/deprecate.rb +4 -3
  217. data/lib/cucumber/encoding.rb +1 -0
  218. data/lib/cucumber/errors.rb +3 -1
  219. data/lib/cucumber/events/gherkin_source_read.rb +17 -0
  220. data/lib/cucumber/events/{step_match.rb → step_activated.rb} +5 -2
  221. data/lib/cucumber/events/step_definition_registered.rb +24 -0
  222. data/lib/cucumber/events/test_case_finished.rb +18 -0
  223. data/lib/cucumber/events/test_case_started.rb +15 -0
  224. data/lib/cucumber/events/test_run_finished.rb +12 -0
  225. data/lib/cucumber/events/test_run_started.rb +16 -0
  226. data/lib/cucumber/events/test_step_finished.rb +20 -0
  227. data/lib/cucumber/events/test_step_started.rb +17 -0
  228. data/lib/cucumber/events.rb +23 -3
  229. data/lib/cucumber/file_specs.rb +1 -0
  230. data/lib/cucumber/filters/activate_steps.rb +8 -3
  231. data/lib/cucumber/filters/apply_after_hooks.rb +1 -0
  232. data/lib/cucumber/filters/apply_after_step_hooks.rb +1 -0
  233. data/lib/cucumber/filters/apply_around_hooks.rb +1 -0
  234. data/lib/cucumber/filters/apply_before_hooks.rb +1 -0
  235. data/lib/cucumber/filters/broadcast_test_run_started_event.rb +27 -0
  236. data/lib/cucumber/filters/gated_receiver.rb +1 -0
  237. data/lib/cucumber/filters/prepare_world.rb +1 -0
  238. data/lib/cucumber/filters/quit.rb +1 -0
  239. data/lib/cucumber/filters/randomizer.rb +1 -0
  240. data/lib/cucumber/filters/retry.rb +4 -4
  241. data/lib/cucumber/filters/tag_limits/test_case_index.rb +1 -0
  242. data/lib/cucumber/filters/tag_limits/verifier.rb +2 -1
  243. data/lib/cucumber/filters/tag_limits.rb +4 -3
  244. data/lib/cucumber/filters.rb +3 -0
  245. data/lib/cucumber/formatter/ansicolor.rb +9 -11
  246. data/lib/cucumber/formatter/backtrace_filter.rb +21 -8
  247. data/lib/cucumber/formatter/console.rb +72 -66
  248. data/lib/cucumber/formatter/console_counts.rb +44 -0
  249. data/lib/cucumber/formatter/console_issues.rb +58 -0
  250. data/lib/cucumber/formatter/duration.rb +2 -1
  251. data/lib/cucumber/formatter/duration_extractor.rb +1 -0
  252. data/lib/cucumber/formatter/fail_fast.rb +4 -2
  253. data/lib/cucumber/formatter/fanout.rb +1 -0
  254. data/lib/cucumber/formatter/hook_query_visitor.rb +1 -0
  255. data/lib/cucumber/formatter/html.rb +175 -249
  256. data/lib/cucumber/formatter/html_builder.rb +120 -0
  257. data/lib/cucumber/formatter/ignore_missing_messages.rb +1 -0
  258. data/lib/cucumber/formatter/inline-js.js +30 -0
  259. data/lib/cucumber/formatter/interceptor.rb +3 -2
  260. data/lib/cucumber/formatter/io.rb +2 -1
  261. data/lib/cucumber/formatter/json.rb +33 -30
  262. data/lib/cucumber/formatter/json_pretty.rb +1 -0
  263. data/lib/cucumber/formatter/junit.rb +26 -24
  264. data/lib/cucumber/formatter/legacy_api/adapter.rb +81 -69
  265. data/lib/cucumber/formatter/legacy_api/ast.rb +27 -22
  266. data/lib/cucumber/formatter/legacy_api/results.rb +7 -8
  267. data/lib/cucumber/formatter/legacy_api/runtime_facade.rb +1 -0
  268. data/lib/cucumber/formatter/pretty.rb +24 -18
  269. data/lib/cucumber/formatter/progress.rb +55 -13
  270. data/lib/cucumber/formatter/rerun.rb +15 -18
  271. data/lib/cucumber/formatter/stepdefs.rb +1 -0
  272. data/lib/cucumber/formatter/steps.rb +2 -1
  273. data/lib/cucumber/formatter/summary.rb +43 -20
  274. data/lib/cucumber/formatter/unicode.rb +2 -1
  275. data/lib/cucumber/formatter/usage.rb +33 -28
  276. data/lib/cucumber/gherkin/data_table_parser.rb +1 -0
  277. data/lib/cucumber/gherkin/formatter/ansi_escapes.rb +2 -1
  278. data/lib/cucumber/gherkin/formatter/escaping.rb +2 -1
  279. data/lib/cucumber/gherkin/i18n.rb +1 -0
  280. data/lib/cucumber/gherkin/steps_parser.rb +1 -0
  281. data/lib/cucumber/{rb_support/rb_dsl.rb → glue/dsl.rb} +41 -30
  282. data/lib/cucumber/glue/hook.rb +43 -0
  283. data/lib/cucumber/glue/invoke_in_world.rb +70 -0
  284. data/lib/cucumber/glue/proto_world.rb +220 -0
  285. data/lib/cucumber/{rb_support/rb_language.rb → glue/registry_and_more.rb} +60 -90
  286. data/lib/cucumber/{rb_support → glue}/snippet.rb +64 -26
  287. data/lib/cucumber/glue/step_definition.rb +143 -0
  288. data/lib/cucumber/glue/world_factory.rb +23 -0
  289. data/lib/cucumber/hooks.rb +9 -8
  290. data/lib/cucumber/load_path.rb +1 -0
  291. data/lib/cucumber/multiline_argument/data_table/diff_matrices.rb +158 -0
  292. data/lib/cucumber/multiline_argument/data_table.rb +47 -181
  293. data/lib/cucumber/multiline_argument/doc_string.rb +1 -0
  294. data/lib/cucumber/multiline_argument.rb +6 -15
  295. data/lib/cucumber/platform.rb +4 -5
  296. data/lib/cucumber/project_initializer.rb +3 -2
  297. data/lib/cucumber/rake/task.rb +19 -14
  298. data/lib/cucumber/rspec/disable_option_parser.rb +2 -1
  299. data/lib/cucumber/rspec/doubles.rb +2 -1
  300. data/lib/cucumber/running_test_case.rb +3 -27
  301. data/lib/cucumber/runtime/after_hooks.rb +2 -1
  302. data/lib/cucumber/runtime/before_hooks.rb +1 -0
  303. data/lib/cucumber/runtime/for_programming_languages.rb +2 -36
  304. data/lib/cucumber/runtime/step_hooks.rb +1 -0
  305. data/lib/cucumber/runtime/support_code.rb +21 -16
  306. data/lib/cucumber/runtime/user_interface.rb +10 -16
  307. data/lib/cucumber/runtime.rb +49 -32
  308. data/lib/cucumber/step_argument.rb +1 -2
  309. data/lib/cucumber/step_definition_light.rb +2 -0
  310. data/lib/cucumber/step_definitions.rb +1 -0
  311. data/lib/cucumber/step_match.rb +30 -15
  312. data/lib/cucumber/step_match_search.rb +3 -3
  313. data/lib/cucumber/term/ansicolor.rb +2 -1
  314. data/lib/cucumber/unit.rb +1 -0
  315. data/lib/cucumber/version +1 -1
  316. data/lib/cucumber.rb +1 -13
  317. data/lib/simplecov_setup.rb +2 -1
  318. data/scripts/invite-collaborator +40 -0
  319. data/scripts/update-changelog +86 -0
  320. data/spec/cucumber/cli/configuration_spec.rb +109 -98
  321. data/spec/cucumber/cli/main_spec.rb +8 -7
  322. data/spec/cucumber/cli/options_spec.rb +114 -79
  323. data/spec/cucumber/cli/profile_loader_spec.rb +25 -5
  324. data/spec/cucumber/cli/rerun_spec.rb +21 -20
  325. data/spec/cucumber/configuration_spec.rb +48 -47
  326. data/spec/cucumber/constantize_spec.rb +3 -2
  327. data/spec/cucumber/events_spec.rb +9 -0
  328. data/spec/cucumber/file_specs_spec.rb +26 -25
  329. data/spec/cucumber/filters/activate_steps_spec.rb +25 -22
  330. data/spec/cucumber/filters/gated_receiver_spec.rb +7 -6
  331. data/spec/cucumber/filters/retry_spec.rb +42 -23
  332. data/spec/cucumber/filters/tag_limits/test_case_index_spec.rb +12 -11
  333. data/spec/cucumber/filters/tag_limits/verifier_spec.rb +15 -14
  334. data/spec/cucumber/filters/tag_limits_spec.rb +9 -8
  335. data/spec/cucumber/formatter/ansicolor_spec.rb +10 -9
  336. data/spec/cucumber/formatter/backtrace_filter_spec.rb +32 -0
  337. data/spec/cucumber/formatter/console_counts_spec.rb +14 -0
  338. data/spec/cucumber/formatter/duration_spec.rb +4 -3
  339. data/spec/cucumber/formatter/fail_fast_spec.rb +27 -27
  340. data/spec/cucumber/formatter/html_spec.rb +65 -60
  341. data/spec/cucumber/formatter/interceptor_spec.rb +1 -0
  342. data/spec/cucumber/formatter/json_spec.rb +71 -97
  343. data/spec/cucumber/formatter/junit_spec.rb +46 -47
  344. data/spec/cucumber/formatter/legacy_api/adapter_spec.rb +134 -141
  345. data/spec/cucumber/formatter/pretty_spec.rb +105 -117
  346. data/spec/cucumber/formatter/progress_spec.rb +22 -21
  347. data/spec/cucumber/formatter/rerun_spec.rb +70 -64
  348. data/spec/cucumber/formatter/spec_helper.rb +14 -12
  349. data/spec/cucumber/{rb_support/rb_world_spec.rb → glue/proto_world_spec.rb} +22 -6
  350. data/spec/cucumber/glue/registry_and_more_spec.rb +213 -0
  351. data/spec/cucumber/{rb_support → glue}/snippet_spec.rb +62 -25
  352. data/spec/cucumber/glue/step_definition_spec.rb +207 -0
  353. data/spec/cucumber/hooks_spec.rb +5 -4
  354. data/spec/cucumber/multiline_argument/data_table_spec.rb +179 -129
  355. data/spec/cucumber/project_initializer_spec.rb +12 -11
  356. data/spec/cucumber/rake/forked_spec.rb +22 -17
  357. data/spec/cucumber/rake/task_spec.rb +21 -20
  358. data/spec/cucumber/running_test_case_spec.rb +36 -35
  359. data/spec/cucumber/runtime/for_programming_languages_spec.rb +2 -30
  360. data/spec/cucumber/runtime/support_code_spec.rb +1 -0
  361. data/spec/cucumber/runtime_spec.rb +3 -2
  362. data/spec/cucumber/step_argument_spec.rb +6 -5
  363. data/spec/cucumber/step_match_search_spec.rb +32 -41
  364. data/spec/cucumber/step_match_spec.rb +34 -33
  365. data/spec/cucumber/world/pending_spec.rb +12 -11
  366. data/spec/spec_helper.rb +1 -0
  367. data/spec/support/standard_step_actions.rb +2 -1
  368. metadata +132 -61
  369. data/features/docs/formatters/debug_formatter.feature +0 -47
  370. data/features/docs/formatters/formatter_step_file_colon_line.feature +0 -44
  371. data/features/docs/writing_support_code/transforms.feature +0 -98
  372. data/features/lib/step_definitions/wire_steps.rb +0 -58
  373. data/gem_tasks/cucumber.rake +0 -25
  374. data/lib/cucumber/ast.rb +0 -13
  375. data/lib/cucumber/core_ext/instance_exec.rb +0 -70
  376. data/lib/cucumber/events/after_test_case.rb +0 -25
  377. data/lib/cucumber/events/after_test_step.rb +0 -30
  378. data/lib/cucumber/events/before_test_case.rb +0 -18
  379. data/lib/cucumber/events/before_test_step.rb +0 -23
  380. data/lib/cucumber/events/bus.rb +0 -86
  381. data/lib/cucumber/events/finished_testing.rb +0 -9
  382. data/lib/cucumber/formatter/debug.rb +0 -35
  383. data/lib/cucumber/formatter/event_bus_report.rb +0 -38
  384. data/lib/cucumber/rb_support/rb_hook.rb +0 -19
  385. data/lib/cucumber/rb_support/rb_step_definition.rb +0 -131
  386. data/lib/cucumber/rb_support/rb_transform.rb +0 -59
  387. data/lib/cucumber/rb_support/rb_world.rb +0 -149
  388. data/spec/cucumber/core_ext/instance_exec_spec.rb +0 -4
  389. data/spec/cucumber/events/bus_spec.rb +0 -94
  390. data/spec/cucumber/formatter/debug_spec.rb +0 -64
  391. data/spec/cucumber/formatter/event_bus_report_spec.rb +0 -88
  392. data/spec/cucumber/rb_support/rb_language_spec.rb +0 -243
  393. data/spec/cucumber/rb_support/rb_step_definition_spec.rb +0 -199
  394. data/spec/cucumber/rb_support/rb_transform_spec.rb +0 -46
  395. data/spec/cucumber_spec.rb +0 -39
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'cucumber/formatter/legacy_api/adapter'
2
3
  require 'cucumber/core'
3
4
  require 'cucumber/core/gherkin/writer'
@@ -13,9 +14,10 @@ module Cucumber
13
14
  include Core::Gherkin::Writer
14
15
  include Core
15
16
 
16
- let(:report) { Adapter.new(formatter, runtime.results, runtime.configuration) }
17
+ let!(:report) { Adapter.new(formatter, runtime.results, runtime.configuration) }
17
18
  let(:formatter) { double('formatter').as_null_object }
18
19
  let(:runtime) { Runtime.new }
20
+ let(:events) { runtime.configuration.event_bus }
19
21
  let(:step_match_search) { SimpleStepDefinitionSearch.new }
20
22
 
21
23
  Failure = Class.new(StandardError)
@@ -57,7 +59,7 @@ module Cucumber
57
59
  source_location
58
60
  end
59
61
 
60
- def invoke(pseudo_method, arguments, &block)
62
+ def invoke(_pseudo_method, _arguments, &_block)
61
63
  @proc.call
62
64
  end
63
65
  end
@@ -104,10 +106,12 @@ module Cucumber
104
106
  step 'passing'
105
107
  end
106
108
  end
107
- end,
109
+ end
108
110
  ]
109
- runner = Core::Test::Runner.new(report)
111
+ runner = Core::Test::Runner.new(events)
110
112
  compile gherkin_docs, runner, default_filters
113
+ events.test_run_finished
114
+ # rubocop:disable AlignArray
111
115
  expect( formatter.legacy_messages ).to eq [
112
116
  :before_features,
113
117
  :before_feature,
@@ -144,68 +148,9 @@ module Cucumber
144
148
  :after_steps,
145
149
  :after_feature_element,
146
150
  :after_feature,
147
- :after_features,
148
- ]
149
- end
150
-
151
- it 'a scenario with no steps' do
152
- execute_gherkin do
153
- feature do
154
- scenario
155
- end
156
- end
157
-
158
- expect( formatter.legacy_messages ).to eq [
159
- :before_features,
160
- :before_feature,
161
- :before_tags,
162
- :after_tags,
163
- :feature_name,
164
- :before_feature_element,
165
- :before_tags,
166
- :after_tags,
167
- :scenario_name,
168
- :after_feature_element,
169
- :after_feature,
170
- :after_features,
171
- ]
172
- end
173
-
174
- it 'a scenario with no steps coming after another scenario' do
175
- execute_gherkin do
176
- feature do
177
- scenario do
178
- step 'passing'
179
- end
180
- scenario
181
- end
182
- end
183
- expect( formatter.legacy_messages ).to eq [
184
- :before_features,
185
- :before_feature,
186
- :before_tags,
187
- :after_tags,
188
- :feature_name,
189
- :before_feature_element,
190
- :before_tags,
191
- :after_tags,
192
- :scenario_name,
193
- :before_steps,
194
- :before_step,
195
- :before_step_result,
196
- :step_name,
197
- :after_step_result,
198
- :after_step,
199
- :after_steps,
200
- :after_feature_element,
201
- :before_feature_element,
202
- :before_tags,
203
- :after_tags,
204
- :scenario_name,
205
- :after_feature_element,
206
- :after_feature,
207
- :after_features,
151
+ :after_features
208
152
  ]
153
+ # rubocop:enable AlignArray
209
154
  end
210
155
 
211
156
  it 'a scenario with one step' do
@@ -216,6 +161,8 @@ module Cucumber
216
161
  end
217
162
  end
218
163
  end
164
+
165
+ # rubocop:disable AlignArray
219
166
  expect( formatter.legacy_messages ).to eq [
220
167
  :before_features,
221
168
  :before_feature,
@@ -235,8 +182,9 @@ module Cucumber
235
182
  :after_steps,
236
183
  :after_feature_element,
237
184
  :after_feature,
238
- :after_features,
185
+ :after_features
239
186
  ]
187
+ # rubocop:enable AlignArray
240
188
  end
241
189
 
242
190
  it 'a scenario with two steps, one of them failing' do
@@ -273,7 +221,7 @@ module Cucumber
273
221
  :after_steps,
274
222
  :after_feature_element,
275
223
  :after_feature,
276
- :after_features,
224
+ :after_features
277
225
  ]
278
226
  end
279
227
 
@@ -288,6 +236,8 @@ module Cucumber
288
236
  end
289
237
  end
290
238
  end
239
+
240
+ # rubocop:disable AlignArray
291
241
  expect( formatter.legacy_messages ).to eq [
292
242
  :before_features,
293
243
  :before_feature,
@@ -319,8 +269,9 @@ module Cucumber
319
269
  :after_steps,
320
270
  :after_feature_element,
321
271
  :after_feature,
322
- :after_features,
272
+ :after_features
323
273
  ]
274
+ # rubocop:enable AlignArray
324
275
  end
325
276
 
326
277
  it 'a feature with a background and an empty scenario' do
@@ -332,6 +283,8 @@ module Cucumber
332
283
  scenario
333
284
  end
334
285
  end
286
+
287
+ # rubocop:disable AlignArray
335
288
  expect( formatter.legacy_messages ).to eq [
336
289
  :before_features,
337
290
  :before_feature,
@@ -354,8 +307,9 @@ module Cucumber
354
307
  :scenario_name,
355
308
  :after_feature_element,
356
309
  :after_feature,
357
- :after_features,
310
+ :after_features
358
311
  ]
312
+ # rubocop:enable AlignArray
359
313
  end
360
314
 
361
315
  it 'a feature with a background and two scenarios' do
@@ -372,6 +326,8 @@ module Cucumber
372
326
  end
373
327
  end
374
328
  end
329
+
330
+ # rubocop:disable AlignArray
375
331
  expect( formatter.legacy_messages ).to eq [
376
332
  :before_features,
377
333
  :before_feature,
@@ -413,8 +369,9 @@ module Cucumber
413
369
  :after_steps,
414
370
  :after_feature_element,
415
371
  :after_feature,
416
- :after_features,
372
+ :after_features
417
373
  ]
374
+ # rubocop:enable AlignArray
418
375
  end
419
376
 
420
377
  it 'a feature with a background and one scenario and one scenario outline' do
@@ -435,6 +392,8 @@ module Cucumber
435
392
  end
436
393
  end
437
394
  end
395
+
396
+ # rubocop:disable AlignArray
438
397
  expect( formatter.legacy_messages ).to eq [
439
398
  :before_features,
440
399
  :before_feature,
@@ -495,8 +454,9 @@ module Cucumber
495
454
  :after_examples_array,
496
455
  :after_feature_element,
497
456
  :after_feature,
498
- :after_features,
457
+ :after_features
499
458
  ]
459
+ # rubocop:enable AlignArray
500
460
  end
501
461
 
502
462
  it 'a feature with a background and one scenario outline and one scenario' do
@@ -517,6 +477,8 @@ module Cucumber
517
477
  end
518
478
  end
519
479
  end
480
+
481
+ # rubocop:disable AlignArray
520
482
  expect( formatter.legacy_messages ).to eq [
521
483
  :before_features,
522
484
  :before_feature,
@@ -577,8 +539,9 @@ module Cucumber
577
539
  :after_steps,
578
540
  :after_feature_element,
579
541
  :after_feature,
580
- :after_features,
542
+ :after_features
581
543
  ]
544
+ # rubocop:enable AlignArray
582
545
  end
583
546
 
584
547
  it 'a feature with a background and two scenario outlines' do
@@ -603,6 +566,8 @@ module Cucumber
603
566
  end
604
567
  end
605
568
  end
569
+
570
+ # rubocop:disable AlignArray
606
571
  expect( formatter.legacy_messages ).to eq [
607
572
  :before_features,
608
573
  :before_feature,
@@ -682,8 +647,9 @@ module Cucumber
682
647
  :after_examples_array,
683
648
  :after_feature_element,
684
649
  :after_feature,
685
- :after_features,
650
+ :after_features
686
651
  ]
652
+ # rubocop:enable AlignArray
687
653
  end
688
654
 
689
655
  it 'a feature with a background and one scenario outline with two rows' do
@@ -702,6 +668,8 @@ module Cucumber
702
668
  end
703
669
  end
704
670
  end
671
+
672
+ # rubocop:disable AlignArray
705
673
  expect( formatter.legacy_messages ).to eq [
706
674
  :before_features,
707
675
  :before_feature,
@@ -755,8 +723,9 @@ module Cucumber
755
723
  :after_examples_array,
756
724
  :after_feature_element,
757
725
  :after_feature,
758
- :after_features,
726
+ :after_features
759
727
  ]
728
+ # rubocop:enable AlignArray
760
729
  end
761
730
 
762
731
  it 'a feature with a background and one scenario outline with two examples tables' do
@@ -778,6 +747,8 @@ module Cucumber
778
747
  end
779
748
  end
780
749
  end
750
+
751
+ # rubocop:disable AlignArray
781
752
  expect( formatter.legacy_messages ).to eq [
782
753
  :before_features,
783
754
  :before_feature,
@@ -843,8 +814,9 @@ module Cucumber
843
814
  :after_examples_array,
844
815
  :after_feature_element,
845
816
  :after_feature,
846
- :after_features,
817
+ :after_features
847
818
  ]
819
+ # rubocop:enable AlignArray
848
820
  end
849
821
 
850
822
  it 'a feature with a background with two steps' do
@@ -859,6 +831,8 @@ module Cucumber
859
831
  end
860
832
  end
861
833
  end
834
+
835
+ # rubocop:disable AlignArray
862
836
  expect( formatter.legacy_messages ).to eq [
863
837
  :before_features,
864
838
  :before_feature,
@@ -893,8 +867,9 @@ module Cucumber
893
867
  :after_steps,
894
868
  :after_feature_element,
895
869
  :after_feature,
896
- :after_features,
870
+ :after_features
897
871
  ]
872
+ # rubocop:enable AlignArray
898
873
  end
899
874
 
900
875
  it 'a feature with a background' do
@@ -937,7 +912,7 @@ module Cucumber
937
912
  :after_steps,
938
913
  :after_feature_element,
939
914
  :after_feature,
940
- :after_features,
915
+ :after_features
941
916
  ]
942
917
  end
943
918
 
@@ -953,6 +928,8 @@ module Cucumber
953
928
  end
954
929
  end
955
930
  end
931
+
932
+ # rubocop:disable AlignArray
956
933
  expect( formatter.legacy_messages ).to eq [
957
934
  :before_features,
958
935
  :before_feature,
@@ -991,8 +968,9 @@ module Cucumber
991
968
  :after_examples_array,
992
969
  :after_feature_element,
993
970
  :after_feature,
994
- :after_features,
971
+ :after_features
995
972
  ]
973
+ # rubocop:enable AlignArray
996
974
  end
997
975
 
998
976
  it 'scenario outline after scenario' do
@@ -1010,6 +988,8 @@ module Cucumber
1010
988
  end
1011
989
  end
1012
990
  end
991
+
992
+ # rubocop:disable AlignArray
1013
993
  expect( formatter.legacy_messages ).to eq [
1014
994
  :before_features,
1015
995
  :before_feature,
@@ -1060,8 +1040,9 @@ module Cucumber
1060
1040
  :after_examples_array,
1061
1041
  :after_feature_element,
1062
1042
  :after_feature,
1063
- :after_features,
1043
+ :after_features
1064
1044
  ]
1045
+ # rubocop:enable AlignArray
1065
1046
  end
1066
1047
 
1067
1048
  it 'scenario outline before scenario' do
@@ -1079,6 +1060,8 @@ module Cucumber
1079
1060
  end
1080
1061
  end
1081
1062
  end
1063
+
1064
+ # rubocop:disable AlignArray
1082
1065
  expect( formatter.legacy_messages ).to eq [
1083
1066
  :before_features,
1084
1067
  :before_feature,
@@ -1129,8 +1112,9 @@ module Cucumber
1129
1112
  :after_steps,
1130
1113
  :after_feature_element,
1131
1114
  :after_feature,
1132
- :after_features,
1115
+ :after_features
1133
1116
  ]
1117
+ # rubocop:enable AlignArray
1134
1118
  end
1135
1119
 
1136
1120
  it 'scenario outline two rows' do
@@ -1146,6 +1130,8 @@ module Cucumber
1146
1130
  end
1147
1131
  end
1148
1132
  end
1133
+
1134
+ # rubocop:disable AlignArray
1149
1135
  expect( formatter.legacy_messages ).to eq [
1150
1136
  :before_features,
1151
1137
  :before_feature,
@@ -1189,8 +1175,9 @@ module Cucumber
1189
1175
  :after_examples_array,
1190
1176
  :after_feature_element,
1191
1177
  :after_feature,
1192
- :after_features,
1178
+ :after_features
1193
1179
  ]
1180
+ # rubocop:enable AlignArray
1194
1181
  end
1195
1182
 
1196
1183
  it 'scenario outline two examples tables' do
@@ -1209,6 +1196,8 @@ module Cucumber
1209
1196
  end
1210
1197
  end
1211
1198
  end
1199
+
1200
+ # rubocop:disable AlignArray
1212
1201
  expect( formatter.legacy_messages ).to eq [
1213
1202
  :before_features,
1214
1203
  :before_feature,
@@ -1264,8 +1253,9 @@ module Cucumber
1264
1253
  :after_examples_array,
1265
1254
  :after_feature_element,
1266
1255
  :after_feature,
1267
- :after_features,
1256
+ :after_features
1268
1257
  ]
1258
+ # rubocop:enable AlignArray
1269
1259
  end
1270
1260
 
1271
1261
  it 'two scenario outline' do
@@ -1287,6 +1277,8 @@ module Cucumber
1287
1277
  end
1288
1278
  end
1289
1279
  end
1280
+
1281
+ # rubocop:disable AlignArray
1290
1282
  expect( formatter.legacy_messages ).to eq [
1291
1283
  :before_features,
1292
1284
  :before_feature,
@@ -1356,8 +1348,9 @@ module Cucumber
1356
1348
  :after_examples_array,
1357
1349
  :after_feature_element,
1358
1350
  :after_feature,
1359
- :after_features,
1351
+ :after_features
1360
1352
  ]
1353
+ # rubocop:enable AlignArray
1361
1354
  end
1362
1355
 
1363
1356
  it 'failing scenario outline' do
@@ -1372,6 +1365,8 @@ module Cucumber
1372
1365
  end
1373
1366
  end
1374
1367
  end
1368
+
1369
+ # rubocop:disable AlignArray
1375
1370
  expect( formatter.legacy_messages ).to eq [
1376
1371
  :before_features,
1377
1372
  :before_feature,
@@ -1410,8 +1405,9 @@ module Cucumber
1410
1405
  :after_examples_array,
1411
1406
  :after_feature_element,
1412
1407
  :after_feature,
1413
- :after_features,
1408
+ :after_features
1414
1409
  ]
1410
+ # rubocop:enable AlignArray
1415
1411
  end
1416
1412
 
1417
1413
  it 'a feature with a failing background and two scenarios' do
@@ -1428,6 +1424,8 @@ module Cucumber
1428
1424
  end
1429
1425
  end
1430
1426
  end
1427
+
1428
+ # rubocop:disable AlignArray
1431
1429
  expect( formatter.legacy_messages ).to eq [
1432
1430
  :before_features,
1433
1431
  :before_feature,
@@ -1470,8 +1468,9 @@ module Cucumber
1470
1468
  :after_steps,
1471
1469
  :after_feature_element,
1472
1470
  :after_feature,
1473
- :after_features,
1471
+ :after_features
1474
1472
  ]
1473
+ # rubocop:enable AlignArray
1475
1474
  end
1476
1475
 
1477
1476
  context 'in expand mode' do
@@ -1491,6 +1490,8 @@ module Cucumber
1491
1490
  end
1492
1491
  end
1493
1492
  end
1493
+
1494
+ # rubocop:disable AlignArray
1494
1495
  expect( formatter.legacy_messages ).to eq [
1495
1496
  :before_features,
1496
1497
  :before_feature,
@@ -1531,15 +1532,16 @@ module Cucumber
1531
1532
  :after_examples_array,
1532
1533
  :after_feature_element,
1533
1534
  :after_feature,
1534
- :after_features,
1535
+ :after_features
1535
1536
  ]
1537
+ # rubocop:enable AlignArray
1536
1538
  end
1537
1539
  end
1538
1540
 
1539
1541
  context 'with exception in after step hook' do
1540
1542
 
1541
1543
  class FailingAfterStepHook
1542
- def find_after_step_hooks(test_case)
1544
+ def find_after_step_hooks(_test_case)
1543
1545
  failing_hook = HookWrapper.new(proc { raise Failure })
1544
1546
  Runtime::StepHooks.new [failing_hook]
1545
1547
  end
@@ -1558,6 +1560,8 @@ module Cucumber
1558
1560
  end
1559
1561
  end
1560
1562
  end
1563
+
1564
+ # rubocop:disable AlignArray
1561
1565
  expect( formatter.legacy_messages ).to eq([
1562
1566
  :before_features,
1563
1567
  :before_feature,
@@ -1578,8 +1582,9 @@ module Cucumber
1578
1582
  :after_steps,
1579
1583
  :after_feature_element,
1580
1584
  :after_feature,
1581
- :after_features,
1582
- ])
1585
+ :after_features
1586
+ ])
1587
+ # rubocop:enable AlignArray
1583
1588
  end
1584
1589
  end
1585
1590
 
@@ -1605,6 +1610,7 @@ module Cucumber
1605
1610
  end
1606
1611
  end
1607
1612
 
1613
+ # rubocop:disable AlignArray
1608
1614
  expect( formatter.legacy_messages ).to eq([
1609
1615
  :before_features,
1610
1616
  :before_feature,
@@ -1625,8 +1631,9 @@ module Cucumber
1625
1631
  :after_steps,
1626
1632
  :after_feature_element,
1627
1633
  :after_feature,
1628
- :after_features,
1629
- ])
1634
+ :after_features
1635
+ ])
1636
+ # rubocop:enable AlignArray
1630
1637
  end
1631
1638
 
1632
1639
  it 'prints the exception after the background name' do
@@ -1646,6 +1653,7 @@ module Cucumber
1646
1653
  end
1647
1654
  end
1648
1655
 
1656
+ # rubocop:disable AlignArray
1649
1657
  expect( formatter.legacy_messages ).to eq([
1650
1658
  :before_features,
1651
1659
  :before_feature,
@@ -1676,8 +1684,9 @@ module Cucumber
1676
1684
  :after_steps,
1677
1685
  :after_feature_element,
1678
1686
  :after_feature,
1679
- :after_features,
1680
- ])
1687
+ :after_features
1688
+ ])
1689
+ # rubocop:enable AlignArray
1681
1690
  end
1682
1691
 
1683
1692
 
@@ -1699,6 +1708,7 @@ module Cucumber
1699
1708
  end
1700
1709
  end
1701
1710
 
1711
+ # rubocop:disable AlignArray
1702
1712
  expect( formatter.legacy_messages ).to eq([
1703
1713
  :before_features,
1704
1714
  :before_feature,
@@ -1738,8 +1748,9 @@ module Cucumber
1738
1748
  :after_examples_array,
1739
1749
  :after_feature_element,
1740
1750
  :after_feature,
1741
- :after_features,
1751
+ :after_features
1742
1752
  ])
1753
+ # rubocop:enable AlignArray
1743
1754
  end
1744
1755
  end
1745
1756
 
@@ -1768,6 +1779,7 @@ module Cucumber
1768
1779
  end
1769
1780
  end
1770
1781
 
1782
+ # rubocop:disable AlignArray
1771
1783
  expect( formatter.legacy_messages ).to eq([
1772
1784
  :before_features,
1773
1785
  :before_feature,
@@ -1788,8 +1800,9 @@ module Cucumber
1788
1800
  :after_steps,
1789
1801
  :after_feature_element,
1790
1802
  :after_feature,
1791
- :after_features,
1792
- ])
1803
+ :after_features
1804
+ ])
1805
+ # rubocop:enable AlignArray
1793
1806
  end
1794
1807
  end
1795
1808
 
@@ -1816,6 +1829,7 @@ module Cucumber
1816
1829
  end
1817
1830
  end
1818
1831
 
1832
+ # rubocop:disable AlignArray
1819
1833
  expect( formatter.legacy_messages ).to eq([
1820
1834
  :before_features,
1821
1835
  :before_feature,
@@ -1836,8 +1850,9 @@ module Cucumber
1836
1850
  :exception,
1837
1851
  :after_feature_element,
1838
1852
  :after_feature,
1839
- :after_features,
1853
+ :after_features
1840
1854
  ])
1855
+ # rubocop:enable AlignArray
1841
1856
  end
1842
1857
 
1843
1858
  it 'prints the exception after the examples table row' do
@@ -1858,6 +1873,7 @@ module Cucumber
1858
1873
  end
1859
1874
  end
1860
1875
 
1876
+ # rubocop:disable AlignArray
1861
1877
  expect( formatter.legacy_messages ).to eq([
1862
1878
  :before_features,
1863
1879
  :before_feature,
@@ -1897,8 +1913,9 @@ module Cucumber
1897
1913
  :after_examples_array,
1898
1914
  :after_feature_element,
1899
1915
  :after_feature,
1900
- :after_features,
1916
+ :after_features
1901
1917
  ])
1918
+ # rubocop:enable AlignArray
1902
1919
  end
1903
1920
  end
1904
1921
 
@@ -1925,6 +1942,7 @@ module Cucumber
1925
1942
  end
1926
1943
  end
1927
1944
 
1945
+ # rubocop:disable AlignArray
1928
1946
  expect( formatter.legacy_messages ).to eq([
1929
1947
  :before_features,
1930
1948
  :before_feature,
@@ -1945,40 +1963,9 @@ module Cucumber
1945
1963
  :exception,
1946
1964
  :after_feature_element,
1947
1965
  :after_feature,
1948
- :after_features,
1949
- ])
1950
- end
1951
- end
1952
-
1953
- context 'with an exception in an after hook but no steps' do
1954
- it 'prints the exception after the scenario name' do
1955
- filters = [
1956
- Filters::ActivateSteps.new(step_match_search, runtime.configuration),
1957
- Filters::ApplyAfterHooks.new(FailingAfterHook.new),
1958
- AddBeforeAndAfterHooks.new
1959
- ]
1960
- execute_gherkin(filters) do
1961
- feature do
1962
- scenario do
1963
- end
1964
- end
1965
- end
1966
-
1967
- expect( formatter.legacy_messages ).to eq([
1968
- :before_features,
1969
- :before_feature,
1970
- :before_tags,
1971
- :after_tags,
1972
- :feature_name,
1973
- :before_feature_element,
1974
- :before_tags,
1975
- :after_tags,
1976
- :scenario_name,
1977
- :exception,
1978
- :after_feature_element,
1979
- :after_feature,
1980
- :after_features,
1966
+ :after_features
1981
1967
  ])
1968
+ # rubocop:enable AlignArray
1982
1969
  end
1983
1970
  end
1984
1971
 
@@ -2000,10 +1987,12 @@ module Cucumber
2000
1987
  execute_gherkin(filters) do
2001
1988
  feature do
2002
1989
  scenario do
1990
+ step 'passing'
2003
1991
  end
2004
1992
  end
2005
1993
  end
2006
1994
 
1995
+ # rubocop:disable AlignArray
2007
1996
  expect( formatter.legacy_messages ).to eq([
2008
1997
  :before_features,
2009
1998
  :before_feature,
@@ -2017,8 +2006,9 @@ module Cucumber
2017
2006
  :exception,
2018
2007
  :after_feature_element,
2019
2008
  :after_feature,
2020
- :after_features,
2009
+ :after_features
2021
2010
  ])
2011
+ # rubocop:enable AlignArray
2022
2012
  end
2023
2013
  end
2024
2014
 
@@ -2044,7 +2034,7 @@ module Cucumber
2044
2034
  end
2045
2035
  end
2046
2036
  end
2047
-
2037
+ # rubocop:disable AlignArray
2048
2038
  expect( formatter.legacy_messages ).to eq([
2049
2039
  :before_features,
2050
2040
  :before_feature,
@@ -2065,15 +2055,16 @@ module Cucumber
2065
2055
  :after_steps,
2066
2056
  :after_feature_element,
2067
2057
  :after_feature,
2068
- :after_features,
2058
+ :after_features
2069
2059
  ])
2060
+ # rubocop:enable AlignArray
2070
2061
  end
2071
2062
  end
2072
2063
  end
2073
2064
 
2074
2065
  describe 'before_step_result message' do
2075
2066
  context 'when the step matches' do
2076
- it "sends the step match to the formatter" do
2067
+ it 'sends the step match to the formatter' do
2077
2068
  expect(formatter).to receive(:before_step_result) do |_, step_match, *|
2078
2069
  expect(step_match).to be_a SimpleStepMatch
2079
2070
  end
@@ -2088,7 +2079,7 @@ module Cucumber
2088
2079
  end
2089
2080
 
2090
2081
  context "when the step doesn't match" do
2091
- it "sends a null object to the formatter" do
2082
+ it 'sends a null object to the formatter' do
2092
2083
  end
2093
2084
  end
2094
2085
  end
@@ -2106,7 +2097,7 @@ module Cucumber
2106
2097
  end
2107
2098
  end
2108
2099
 
2109
- context "after_feature_element callback" do
2100
+ context 'after_feature_element callback' do
2110
2101
  it 'passes an object reflecting the status of the scenario' do
2111
2102
  expect( formatter ).to receive(:after_feature_element).once do |scenario|
2112
2103
  expect( scenario ).to be_failed
@@ -2123,7 +2114,7 @@ module Cucumber
2123
2114
  end
2124
2115
 
2125
2116
  context 'in strict mode' do
2126
- let(:runtime) { Runtime.new strict: true }
2117
+ let(:runtime) { Runtime.new strict: Cucumber::Core::Test::Result::StrictConfiguration.new([:undefined]) }
2127
2118
 
2128
2119
  it 'passes an exception to the formatter for undefined steps' do
2129
2120
  expect( formatter ).to receive(:exception) do |exception|
@@ -2156,18 +2147,20 @@ module Cucumber
2156
2147
  ]
2157
2148
  end
2158
2149
 
2159
- def method_missing(message, *args)
2150
+ def method_missing(message, *_args)
2160
2151
  @messages << message
2161
2152
  end
2162
2153
 
2163
- def respond_to_missing?(name, include_private = false)
2154
+ def respond_to_missing?(_name, _include_private = false)
2164
2155
  true
2165
2156
  end
2166
2157
  end
2167
2158
 
2168
2159
  def execute_gherkin(filters = default_filters, &gherkin)
2169
- runner = Core::Test::Runner.new(report)
2160
+ runner = Core::Test::Runner.new(events)
2170
2161
  compile [gherkin(&gherkin)], runner, filters
2162
+ events.test_run_finished
2163
+ self
2171
2164
  end
2172
2165
 
2173
2166
  def default_filters