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,7 +1,9 @@
1
+ # frozen_string_literal: true
1
2
  require 'forwardable'
2
3
  require 'cucumber/gherkin/data_table_parser'
3
4
  require 'cucumber/gherkin/formatter/escaping'
4
5
  require 'cucumber/core/ast/describes_itself'
6
+ require 'cucumber/multiline_argument/data_table/diff_matrices'
5
7
 
6
8
  module Cucumber
7
9
  module MultilineArgument
@@ -25,38 +27,10 @@ module Cucumber
25
27
  # This will store <tt>[['a', 'b'], ['c', 'd']]</tt> in the <tt>data</tt> variable.
26
28
  #
27
29
  class DataTable
28
- class Different < StandardError
29
- def initialize(table)
30
- super("Tables were not identical:\n#{table}")
31
- end
32
- end
33
-
34
- class Builder
35
- attr_reader :rows
36
-
37
- def initialize
38
- @rows = []
39
- end
40
-
41
- def row(row)
42
- @rows << row
43
- end
44
-
45
- def eof
46
- end
47
- end
48
-
49
- include Enumerable
50
30
  include Core::Ast::DescribesItself
51
- extend Forwardable
52
-
53
- NULL_CONVERSIONS = Hash.new({ :strict => false, :proc => lambda{ |cell_value| cell_value } }).freeze
54
-
55
- attr_accessor :file
56
- def_delegator :@ast_table, :location
57
31
 
58
32
  def self.default_arg_name #:nodoc:
59
- "table"
33
+ 'table'
60
34
  end
61
35
 
62
36
  class << self
@@ -67,11 +41,12 @@ module Cucumber
67
41
  when String
68
42
  parse(data, location)
69
43
  else
70
- raise ArgumentError, "expected data to be a String or an Array."
44
+ raise ArgumentError, 'expected data to be a String or an Array.'
71
45
  end
72
46
  end
73
47
 
74
48
  private
49
+
75
50
  def parse(text, location = Core::Ast::Location.of_caller)
76
51
  builder = Builder.new
77
52
  parser = Cucumber::Gherkin::DataTableParser.new(builder)
@@ -84,13 +59,30 @@ module Cucumber
84
59
  end
85
60
  end
86
61
 
62
+ class Builder
63
+ attr_reader :rows
64
+
65
+ def initialize
66
+ @rows = []
67
+ end
68
+
69
+ def row(row)
70
+ @rows << row
71
+ end
72
+
73
+ def eof
74
+ end
75
+ end
76
+
77
+
78
+ NULL_CONVERSIONS = Hash.new({ :strict => false, :proc => lambda{ |cell_value| cell_value } }).freeze
87
79
 
88
80
  # @param data [Core::Ast::DataTable] the data for the table
89
81
  # @param conversion_procs [Hash] see map_columns!
90
82
  # @param header_mappings [Hash] see map_headers!
91
83
  # @param header_conversion_proc [Proc] see map_headers!
92
84
  def initialize(data, conversion_procs = NULL_CONVERSIONS.dup, header_mappings = {}, header_conversion_proc = nil)
93
- raise ArgumentError, "data must be a Core::Ast::DataTable" unless data.kind_of? Core::Ast::DataTable
85
+ raise ArgumentError, 'data must be a Core::Ast::DataTable' unless data.is_a? Core::Ast::DataTable
94
86
  ast_table = data
95
87
  # Verify that it's square
96
88
  ast_table.transpose
@@ -109,6 +101,12 @@ module Cucumber
109
101
  dup
110
102
  end
111
103
 
104
+ attr_accessor :file
105
+
106
+ def location
107
+ @ast_table.location
108
+ end
109
+
112
110
  # Creates a copy of this table, inheriting any column and header mappings
113
111
  # registered with #map_column! and #map_headers!.
114
112
  #
@@ -161,8 +159,10 @@ module Cucumber
161
159
  # [{:foo => '2', :bar => '3', :foo_bar => '5'}, {:foo => '7', :bar => '9', :foo_bar => '16'}]
162
160
  #
163
161
  def symbolic_hashes
164
- @header_conversion_proc = lambda { |h| symbolize_key(h) }
165
- @symbolic_hashes ||= build_hashes
162
+ @symbolic_hashes ||=
163
+ self.hashes.map do |string_hash|
164
+ Hash[string_hash.map{ |a,b| [symbolize_key(a), b] }]
165
+ end
166
166
  end
167
167
 
168
168
  # Converts this table into a Hash where the first column is
@@ -336,80 +336,22 @@ module Cucumber
336
336
  # a Table argument, if you want to compare that table to some actual values.
337
337
  #
338
338
  def diff!(other_table, options={})
339
- options = {
340
- :missing_row => true,
341
- :surplus_row => true,
342
- :missing_col => true,
343
- :surplus_col => false,
344
- :misplaced_col => false
345
- }.merge(options)
346
-
347
339
  other_table = ensure_table(other_table)
348
340
  other_table.convert_headers!
349
341
  other_table.convert_columns!
350
- ensure_green!
351
342
 
352
343
  convert_headers!
353
344
  convert_columns!
354
345
 
355
- original_width = cell_matrix[0].length
356
- @cell_matrix, other_table_cell_matrix = pad_and_match(@cell_matrix, other_table.cell_matrix)
357
- padded_width = cell_matrix[0].length
358
-
359
- missing_col = cell_matrix[0].detect{|cell| cell.status == :undefined}
360
- surplus_col = padded_width > original_width
361
- misplaced_col = cell_matrix[0] != other_table.cell_matrix[0]
362
-
363
- require_diff_lcs
364
- cell_matrix.extend(Diff::LCS)
365
- changes = cell_matrix.diff(other_table_cell_matrix).flatten
366
-
367
- inserted = 0
368
- missing = 0
369
-
370
- row_indices = Array.new(other_table_cell_matrix.length) {|n| n}
371
-
372
- last_change = nil
373
- missing_row_pos = nil
374
- insert_row_pos = nil
375
-
376
- changes.each do |change|
377
- if(change.action == '-')
378
- missing_row_pos = change.position + inserted
379
- cell_matrix[missing_row_pos].each{|cell| cell.status = :undefined}
380
- row_indices.insert(missing_row_pos, nil)
381
- missing += 1
382
- else # '+'
383
- insert_row_pos = change.position + missing
384
- inserted_row = change.element
385
- inserted_row.each{|cell| cell.status = :comment}
386
- cell_matrix.insert(insert_row_pos, inserted_row)
387
- row_indices[insert_row_pos] = nil
388
- inspect_rows(cell_matrix[missing_row_pos], inserted_row) if last_change && last_change.action == '-'
389
- inserted += 1
390
- end
391
- last_change = change
392
- end
346
+ DiffMatrices.new(cell_matrix, other_table.cell_matrix, options).call
347
+ end
393
348
 
394
- other_table_cell_matrix.each_with_index do |other_row, i|
395
- row_index = row_indices.index(i)
396
- row = cell_matrix[row_index] if row_index
397
- if row
398
- (original_width..padded_width).each do |col_index|
399
- surplus_cell = other_row[col_index]
400
- row[col_index].value = surplus_cell.value if row[col_index]
401
- end
402
- end
349
+ class Different < StandardError
350
+ attr_reader :table
351
+ def initialize(table)
352
+ @table = table
353
+ super("Tables were not identical:\n#{table}")
403
354
  end
404
-
405
- clear_cache!
406
- should_raise =
407
- missing_row_pos && options[:missing_row] ||
408
- insert_row_pos && options[:surplus_row] ||
409
- missing_col && options[:missing_col] ||
410
- surplus_col && options[:surplus_col] ||
411
- misplaced_col && options[:misplaced_col]
412
- raise Different.new(self) if should_raise
413
355
  end
414
356
 
415
357
  def to_hash(cells) #:nodoc:
@@ -452,9 +394,7 @@ module Cucumber
452
394
  cells_rows[0][col]
453
395
  end
454
396
 
455
- def cell_matrix #:nodoc:
456
- @cell_matrix
457
- end
397
+ attr_reader :cell_matrix
458
398
 
459
399
  def col_width(col) #:nodoc:
460
400
  columns[col].__send__(:width)
@@ -469,12 +409,13 @@ module Cucumber
469
409
 
470
410
  c = Cucumber::Term::ANSIColor.coloring?
471
411
  Cucumber::Term::ANSIColor.coloring = options[:color]
472
- formatter = Formatter::Pretty.new(nil, io, options)
412
+ runtime = Struct.new(:configuration).new(Configuration.new)
413
+ formatter = Formatter::Pretty.new(runtime, io, options)
473
414
  formatter.instance_variable_set('@indent', options[:indent])
474
415
  Formatter::LegacyApi::Ast::MultilineArg.for(self).accept(Formatter::Fanout.new([formatter]))
475
416
  Cucumber::Term::ANSIColor.coloring = c
476
417
  io.rewind
477
- s = "\n" + io.read + (" " * (options[:indent] - 2))
418
+ s = "\n" + io.read + (' ' * (options[:indent] - 2))
478
419
  s
479
420
  end
480
421
 
@@ -492,11 +433,10 @@ module Cucumber
492
433
  raw.to_json(*args)
493
434
  end
494
435
 
495
- private
496
-
497
436
  TO_S_PREFIXES = Hash.new(' ')
498
437
  TO_S_PREFIXES[:comment] = '(+) '
499
438
  TO_S_PREFIXES[:undefined] = '(-) '
439
+ private_constant :TO_S_PREFIXES
500
440
 
501
441
  protected
502
442
 
@@ -508,16 +448,6 @@ module Cucumber
508
448
  end
509
449
  end
510
450
 
511
- def inspect_rows(missing_row, inserted_row) #:nodoc:
512
- missing_row.each_with_index do |missing_cell, col|
513
- inserted_cell = inserted_row[col]
514
- if(missing_cell.value != inserted_cell.value && (missing_cell.value.to_s == inserted_cell.value.to_s))
515
- missing_cell.inspect!
516
- inserted_cell.inspect!
517
- end
518
- end
519
- end
520
-
521
451
  def create_cell_matrix(ast_table) #:nodoc:
522
452
  ast_table.raw.map do |raw_row|
523
453
  line = raw_row.line rescue -1
@@ -554,85 +484,21 @@ module Cucumber
554
484
  raise "No headers matched #{pre.inspect}" if mapped_cells.empty?
555
485
  raise "#{mapped_cells.length} headers matched #{pre.inspect}: #{mapped_cells.map { |c| c.value }.inspect}" if mapped_cells.length > 1
556
486
  mapped_cells[0].value = post
557
- if @conversion_procs.has_key?(pre)
487
+ if @conversion_procs.key?(pre)
558
488
  @conversion_procs[post] = @conversion_procs.delete(pre)
559
489
  end
560
490
  end
561
491
  end
562
492
 
563
- def require_diff_lcs #:nodoc:
564
- begin
565
- require 'diff/lcs'
566
- rescue LoadError => e
567
- e.message << "\n Please gem install diff-lcs\n"
568
- raise e
569
- end
570
- end
571
-
572
493
  def clear_cache! #:nodoc:
573
494
  @hashes = @rows_hash = @col_names = @rows = @columns = nil
574
495
  end
575
496
 
576
- # Pads two cell matrices to same column width and matches columns according to header value.
577
- # The first cell matrix is the reference matrix with the second matrix matched against it.
578
- def pad_and_match(a_cell_matrix, other_cell_matrix) #:nodoc:
579
- clear_cache!
580
- cols = a_cell_matrix.transpose
581
- unmatched_cols = other_cell_matrix.transpose
582
-
583
-
584
- header_values = cols.map(&:first)
585
- matched_cols = []
586
-
587
- header_values.each_with_index do |v, i|
588
- mapped_index = unmatched_cols.index{|unmapped_col| unmapped_col.first == v}
589
- if (mapped_index)
590
- matched_cols << unmatched_cols.delete_at(mapped_index)
591
- else
592
- mark_as_missing(cols[i])
593
- empty_col = other_cell_matrix.collect {SurplusCell.new(nil, self, -1)}
594
- empty_col.first.value = v
595
- matched_cols << empty_col
596
- end
597
- end
598
-
599
-
600
- empty_col = cell_matrix.collect {SurplusCell.new(nil, self, -1)}
601
- unmatched_cols.each do
602
- cols << empty_col
603
- end
604
-
605
- return cols.transpose, (matched_cols + unmatched_cols).transpose
606
- end
607
-
608
497
  def ensure_table(table_or_array) #:nodoc:
609
498
  return table_or_array if DataTable === table_or_array
610
499
  DataTable.from(table_or_array)
611
500
  end
612
501
 
613
- def ensure_array_of_array(array)
614
- Hash === array[0] ? hashes_to_array(array) : array
615
- end
616
-
617
- def hashes_to_array(hashes) #:nodoc:
618
- header = hashes[0].keys.sort
619
- [header] + hashes.map{|hash| header.map{|key| hash[key]}}
620
- end
621
-
622
- def ensure_green! #:nodoc:
623
- each_cell{|cell| cell.status = :passed}
624
- end
625
-
626
- def each_cell(&proc) #:nodoc:
627
- cell_matrix.each{|row| row.each(&proc)}
628
- end
629
-
630
- def mark_as_missing(col) #:nodoc:
631
- col.each do |cell|
632
- cell.status = :undefined
633
- end
634
- end
635
-
636
502
  def symbolize_key(key)
637
503
  key.downcase.tr(' ', '_').to_sym
638
504
  end
@@ -731,7 +597,7 @@ module Cucumber
731
597
  :comment
732
598
  end
733
599
 
734
- def ==(o)
600
+ def ==(_o)
735
601
  true
736
602
  end
737
603
 
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Cucumber
2
3
  module MultilineArgument
3
4
  class DocString < SimpleDelegator
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'delegate'
2
3
  require 'cucumber/multiline_argument/data_table'
3
4
  require 'cucumber/multiline_argument/doc_string'
@@ -10,14 +11,14 @@ module Cucumber
10
11
  builder.wrap(node)
11
12
  end
12
13
 
13
- def from(argument, location=nil)
14
+ def from(argument, location=nil, content_type=nil)
14
15
  location ||= Core::Ast::Location.of_caller
15
16
  case argument
16
17
  when String
17
- doc_string(argument, 'text/plain', location)
18
+ builder.doc_string(Core::Ast::DocString.new(argument, content_type, location))
18
19
  when Array
19
20
  location = location.on_line(argument.first.line..argument.last.line)
20
- data_table(argument.map{ |row| row.cells }, location)
21
+ builder.data_table(argument.map{ |row| row.cells }, location)
21
22
  when DataTable, DocString, None
22
23
  argument
23
24
  when nil
@@ -27,14 +28,6 @@ module Cucumber
27
28
  end
28
29
  end
29
30
 
30
- def doc_string(argument, content_type, location)
31
- builder.doc_string(Core::Ast::DocString.new(argument, content_type, location))
32
- end
33
-
34
- def data_table(data, location)
35
- builder.data_table(Core::Ast::DataTable.new(data, location))
36
- end
37
-
38
31
  private
39
32
 
40
33
  def builder
@@ -48,11 +41,11 @@ module Cucumber
48
41
  @result
49
42
  end
50
43
 
51
- def doc_string(node, *args)
44
+ def doc_string(node, *_args)
52
45
  @result = DocString.new(node)
53
46
  end
54
47
 
55
- def data_table(node, *args)
48
+ def data_table(node, *_args)
56
49
  @result = DataTable.new(node)
57
50
  end
58
51
  end
@@ -67,5 +60,3 @@ module Cucumber
67
60
  end
68
61
  end
69
62
  end
70
-
71
- require 'cucumber/ast'
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  # Detect the platform we're running on so we can tweak behaviour
2
3
  # in various places.
3
4
  require 'rbconfig'
@@ -5,20 +6,18 @@ require 'cucumber/core/platform'
5
6
 
6
7
  module Cucumber
7
8
  unless defined?(Cucumber::VERSION)
8
- VERSION = File.read(File.expand_path("../version", __FILE__))
9
+ VERSION = File.read(File.expand_path('../version', __FILE__))
9
10
  BINARY = File.expand_path(File.dirname(__FILE__) + '/../../bin/cucumber')
10
11
  LIBDIR = File.expand_path(File.dirname(__FILE__) + '/../../lib')
11
12
  RAILS = defined?(Rails)
12
13
  RUBY_BINARY = File.join(RbConfig::CONFIG['bindir'], RbConfig::CONFIG['ruby_install_name'])
13
- RUBY_2_2 = RUBY_VERSION =~ /^2\.2/
14
- RUBY_2_1 = RUBY_VERSION =~ /^2\.1/
15
- RUBY_2_3 = RUBY_VERSION =~ /^2\.3/
14
+ RUBY = defined? RUBY_VERSION
16
15
 
17
16
  class << self
18
17
  attr_accessor :use_full_backtrace
19
18
 
20
19
  # @private
21
- def file_mode(m, encoding="UTF-8")
20
+ def file_mode(m, encoding='UTF-8')
22
21
  "#{m}:#{encoding}"
23
22
  end
24
23
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Cucumber
2
3
 
3
4
  # Generates generic file structure for a cucumber project
@@ -26,7 +27,7 @@ module Cucumber
26
27
  :touch
27
28
  end
28
29
 
29
- report_exists(file_name) || return if File.exists?(file_name)
30
+ report_exists(file_name) || return if File.exist?(file_name)
30
31
 
31
32
  report_creating(file_name)
32
33
  FileUtils.send file_type, file_name
@@ -40,4 +41,4 @@ module Cucumber
40
41
  puts " create #{file}"
41
42
  end
42
43
  end
43
- end
44
+ end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'cucumber/platform'
2
3
  require 'cucumber/gherkin/formatter/ansi_escapes'
3
4
  begin
@@ -34,7 +35,7 @@ module Cucumber
34
35
  attr_reader :args
35
36
 
36
37
  def initialize(libs, cucumber_opts, feature_files)
37
- raise "libs must be an Array when running in-process" unless Array === libs
38
+ raise 'libs must be an Array when running in-process' unless Array === libs
38
39
  libs.reverse.each{|lib| $LOAD_PATH.unshift(lib)}
39
40
  @args = (
40
41
  cucumber_opts +
@@ -45,7 +46,7 @@ module Cucumber
45
46
  def run
46
47
  require 'cucumber/cli/main'
47
48
  failure = Cucumber::Cli::Main.execute(args)
48
- raise "Cucumber failed" if failure
49
+ raise 'Cucumber failed' if failure
49
50
  end
50
51
  end
51
52
 
@@ -60,16 +61,16 @@ module Cucumber
60
61
  @feature_files = feature_files
61
62
  end
62
63
 
63
- def load_path(libs)
64
- ['"%s"' % @libs.join(File::PATH_SEPARATOR)]
64
+ def load_path
65
+ [format('"%s"', @libs.join(File::PATH_SEPARATOR))]
65
66
  end
66
67
 
67
68
  def quoted_binary(cucumber_bin)
68
- ['"%s"' % cucumber_bin]
69
+ [format('"%s"', cucumber_bin)]
69
70
  end
70
71
 
71
72
  def use_bundler
72
- @bundler.nil? ? File.exist?("./Gemfile") && bundler_gem_available? : @bundler
73
+ @bundler.nil? ? File.exist?('./Gemfile') && bundler_gem_available? : @bundler
73
74
  end
74
75
 
75
76
  def bundler_gem_available?
@@ -80,16 +81,20 @@ module Cucumber
80
81
 
81
82
  def cmd
82
83
  if use_bundler
83
- [ Cucumber::RUBY_BINARY, '-S', 'bundle', 'exec', 'cucumber', @cucumber_opts,
84
- @feature_files ].flatten
84
+ [
85
+ Cucumber::RUBY_BINARY,'-S', 'bundle', 'exec', 'cucumber',
86
+ @cucumber_opts, @feature_files
87
+ ].flatten
85
88
  else
86
- [ Cucumber::RUBY_BINARY, '-I', load_path(@libs), quoted_binary(@cucumber_bin),
87
- @cucumber_opts, @feature_files ].flatten
89
+ [
90
+ Cucumber::RUBY_BINARY, '-I', load_path,
91
+ quoted_binary(@cucumber_bin), @cucumber_opts, @feature_files
92
+ ].flatten
88
93
  end
89
94
  end
90
95
 
91
96
  def run
92
- sh cmd.join(" ") do |ok, res|
97
+ sh cmd.join(' ') do |ok, res|
93
98
  if !ok
94
99
  exit res.exitstatus
95
100
  end
@@ -127,7 +132,7 @@ module Cucumber
127
132
  attr_accessor :bundler
128
133
 
129
134
  # Define Cucumber Rake task
130
- def initialize(task_name = "cucumber", desc = "Run Cucumber features")
135
+ def initialize(task_name = 'cucumber', desc = 'Run Cucumber features')
131
136
  @task_name, @desc = task_name, desc
132
137
  @fork = true
133
138
  @libs = ['lib']
@@ -144,7 +149,7 @@ module Cucumber
144
149
  end
145
150
  end
146
151
 
147
- def runner(task_args = nil) #:nodoc:
152
+ def runner(_task_args = nil) #:nodoc:
148
153
  cucumber_opts = [(ENV['CUCUMBER_OPTS'] ? ENV['CUCUMBER_OPTS'].split(/\s+/) : nil) || cucumber_opts_with_profile]
149
154
  if(@fork)
150
155
  return ForkedCucumberRunner.new(libs, binary, cucumber_opts, bundler, feature_files)
@@ -153,7 +158,7 @@ module Cucumber
153
158
  end
154
159
 
155
160
  def cucumber_opts_with_profile #:nodoc:
156
- Array(cucumber_opts).concat Array(@profile).flat_map {|p| ["--profile", p] }
161
+ Array(cucumber_opts).concat Array(@profile).flat_map {|p| ['--profile', p] }
157
162
  end
158
163
 
159
164
  def feature_files #:nodoc:
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'optparse'
2
3
 
3
4
  module Spec #:nodoc:
@@ -7,7 +8,7 @@ module Spec #:nodoc:
7
8
  # will fail when running cucumber)
8
9
  class OptionParser < ::OptionParser #:nodoc:
9
10
  NEUTERED_RSPEC = Object.new
10
- def NEUTERED_RSPEC.method_missing(m, *args); self; end
11
+ def NEUTERED_RSPEC.method_missing(_m, *_args); self; end
11
12
 
12
13
  def self.method_added(m)
13
14
  unless @__neutering_rspec
@@ -1,9 +1,10 @@
1
+ # frozen_string_literal: true
1
2
  require 'rspec/mocks'
2
3
 
3
4
  World(RSpec::Mocks::ExampleMethods)
4
5
 
5
6
  Before do
6
- if RSpec::Mocks::Version::STRING >= "2.9.9"
7
+ if RSpec::Mocks::Version::STRING >= '2.9.9'
7
8
  RSpec::Mocks.setup
8
9
  else
9
10
  RSpec::Mocks.setup(self)
@@ -1,5 +1,5 @@
1
+ # frozen_string_literal: true
1
2
  require 'delegate'
2
- require 'cucumber/deprecate'
3
3
 
4
4
  module Cucumber
5
5
  # Represents the current status of a running test case.
@@ -32,11 +32,11 @@ module Cucumber
32
32
  def feature(feature)
33
33
  end
34
34
 
35
- def scenario(scenario)
35
+ def scenario(_scenario)
36
36
  @factory = Scenario
37
37
  end
38
38
 
39
- def scenario_outline(scenario)
39
+ def scenario_outline(_scenario)
40
40
  @factory = ScenarioOutlineExample
41
41
  end
42
42
 
@@ -80,34 +80,10 @@ module Cucumber
80
80
  !failed?
81
81
  end
82
82
 
83
- def title
84
- Cucumber.deprecate(
85
- "Call #name instead",
86
- "RunningTestCase#title",
87
- "2.9.9")
88
- name
89
- end
90
-
91
- def source_tags
92
- Cucumber.deprecate(
93
- "Call #tags instead",
94
- "RunningTestCase#source_tags",
95
- "2.9.9")
96
- tags
97
- end
98
-
99
83
  def source_tag_names
100
84
  tags.map &:name
101
85
  end
102
86
 
103
- def skip_invoke!
104
- Cucumber.deprecate(
105
- "Call #skip_this_scenario directly (not on any object)",
106
- "RunningTestCase#skip_invoke!",
107
- "2.9.9")
108
- raise Cucumber::Core::Test::Result::Skipped
109
- end
110
-
111
87
  def outline?
112
88
  false
113
89
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Cucumber
2
3
  class Runtime
3
4
  class AfterHooks
@@ -18,7 +19,7 @@ module Cucumber
18
19
  @hooks.map do |hook|
19
20
  action = ->(result) { hook.invoke('After', @scenario.with_result(result)) }
20
21
  Hooks.after_hook(source, hook.location, &action)
21
- end
22
+ end
22
23
  end
23
24
  end
24
25
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'cucumber/hooks'
2
3
 
3
4
  module Cucumber