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 'spec_helper'
2
3
  require 'tmpdir'
3
4
 
@@ -9,7 +10,7 @@ module Cucumber
9
10
  allow(command_line_config).to receive(:puts)
10
11
  end
11
12
 
12
- context "no files created" do
13
+ context 'no files created' do
13
14
  around(:example) do |example|
14
15
 
15
16
  dir = Dir.mktmpdir
@@ -23,29 +24,29 @@ module Cucumber
23
24
  end
24
25
  end
25
26
 
26
- it "should create features directory" do
27
+ it 'should create features directory' do
27
28
  expect(command_line_config).to receive(:puts).with %r(^\s+create\s+features$)
28
29
  command_line_config.run
29
30
  end
30
31
 
31
- it "should create step_definitions directory" do
32
+ it 'should create step_definitions directory' do
32
33
  expect(command_line_config).to receive(:puts).with %r(^\s+create\s+features/step_definitions$)
33
34
  command_line_config.run
34
35
  end
35
36
 
36
- it "should create support directory" do
37
+ it 'should create support directory' do
37
38
  expect(command_line_config).to receive(:puts).with %r(^\s+create\s+features/support$)
38
39
  command_line_config.run
39
40
  end
40
41
 
41
- it "should create env.rb directory" do
42
+ it 'should create env.rb directory' do
42
43
  expect(command_line_config).to receive(:puts).with %r(^\s+create\s+features/support/env.rb$)
43
44
  command_line_config.run
44
45
  end
45
46
 
46
47
  end
47
48
 
48
- context "files created" do
49
+ context 'files created' do
49
50
  around(:example) do |example|
50
51
  dir = Dir.mktmpdir
51
52
  FileUtils.mkdir_p "#{dir}/features"
@@ -62,26 +63,26 @@ module Cucumber
62
63
  end
63
64
  end
64
65
 
65
- it "should not create features directory" do
66
+ it 'should not create features directory' do
66
67
  expect(command_line_config).to receive(:puts).with %r(^\s+exist\s+features$)
67
68
  command_line_config.run
68
69
  end
69
70
 
70
- it "should not create step_definitions directory" do
71
+ it 'should not create step_definitions directory' do
71
72
  expect(command_line_config).to receive(:puts).with %r(^\s+exist\s+features/step_definitions$)
72
73
  command_line_config.run
73
74
  end
74
75
 
75
- it "should not create support directory" do
76
+ it 'should not create support directory' do
76
77
  expect(command_line_config).to receive(:puts).with %r(^\s+exist\s+features/support$)
77
78
  command_line_config.run
78
79
  end
79
80
 
80
- it "should not create env.rb directory" do
81
+ it 'should not create env.rb directory' do
81
82
  expect(command_line_config).to receive(:puts).with %r(^\s+exist\s+features/support/env.rb$)
82
83
  command_line_config.run
83
84
  end
84
85
 
85
86
  end
86
87
  end
87
- end
88
+ end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'spec_helper'
2
3
  require 'cucumber/rake/task'
3
4
  require 'rake'
@@ -10,42 +11,46 @@ module Cucumber
10
11
  let(:cucumber_opts) { ['--cuke-option'] }
11
12
  let(:feature_files) { ['./some.feature'] }
12
13
 
13
- context "when running with bundler" do
14
+ context 'when running with bundler' do
14
15
  let(:bundler) { true }
15
16
 
16
17
  subject { Task::ForkedCucumberRunner.new(
17
18
  libs, binary, cucumber_opts, bundler, feature_files) }
18
19
 
19
- it "does use bundler if bundler is set to true" do
20
+ it 'does use bundler if bundler is set to true' do
20
21
  expect(subject.use_bundler).to be true
21
22
  end
22
23
 
23
- it "uses bundle exec to find cucumber and libraries" do
24
- expect(subject.cmd).to eq [Cucumber::RUBY_BINARY,
25
- '-S',
26
- 'bundle',
27
- 'exec',
28
- 'cucumber',
29
- '--cuke-option'] + feature_files
24
+ it 'uses bundle exec to find cucumber and libraries' do
25
+ expect(subject.cmd).to eq [
26
+ Cucumber::RUBY_BINARY,
27
+ '-S',
28
+ 'bundle',
29
+ 'exec',
30
+ 'cucumber',
31
+ '--cuke-option'
32
+ ] + feature_files
30
33
  end
31
34
  end
32
35
 
33
- context "when running without bundler" do
36
+ context 'when running without bundler' do
34
37
  let(:bundler) { false }
35
38
 
36
39
  subject { Task::ForkedCucumberRunner.new(
37
40
  libs, binary, cucumber_opts, bundler, feature_files) }
38
41
 
39
- it "does not use bundler if bundler is set to false" do
42
+ it 'does not use bundler if bundler is set to false' do
40
43
  expect(subject.use_bundler).to be false
41
44
  end
42
45
 
43
- it "uses well known cucumber location and specified libraries" do
44
- expect(subject.cmd).to eq [Cucumber::RUBY_BINARY,
45
- "-I",
46
- "\"lib\"",
47
- "\"#{Cucumber::BINARY }\"",
48
- "--cuke-option"] + feature_files
46
+ it 'uses well known cucumber location and specified libraries' do
47
+ expect(subject.cmd).to eq [
48
+ Cucumber::RUBY_BINARY,
49
+ '-I',
50
+ '"lib"',
51
+ "\"#{Cucumber::BINARY}\"",
52
+ '--cuke-option'
53
+ ] + feature_files
49
54
  end
50
55
  end
51
56
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'spec_helper'
2
3
  require 'cucumber/rake/task'
3
4
  require 'rake'
@@ -6,75 +7,75 @@ module Cucumber
6
7
  module Rake
7
8
  describe Task do
8
9
 
9
- describe "#cucumber_opts" do
10
+ describe '#cucumber_opts' do
10
11
  before { subject.cucumber_opts = opts }
11
12
 
12
- context "when set via array" do
13
+ context 'when set via array' do
13
14
  let(:opts) { %w[ foo bar ] }
14
15
  it { expect(subject.cucumber_opts).to be opts }
15
16
  end
16
17
 
17
- context "when set via space-delimited string" do
18
- let(:opts) { "foo bar" }
18
+ context 'when set via space-delimited string' do
19
+ let(:opts) { 'foo bar' }
19
20
  it { expect(subject.cucumber_opts).to eq %w[ foo bar ] }
20
21
  end
21
22
  end
22
23
 
23
- describe "#cucumber_opts_with_profile" do
24
+ describe '#cucumber_opts_with_profile' do
24
25
  before do
25
26
  subject.cucumber_opts = opts
26
27
  subject.profile = profile
27
28
  end
28
29
 
29
- context "with cucumber_opts" do
30
+ context 'with cucumber_opts' do
30
31
  let(:opts) { %w[ foo bar ] }
31
32
 
32
- context "without profile" do
33
+ context 'without profile' do
33
34
  let(:profile) { nil }
34
35
 
35
- it "should return just cucumber_opts" do
36
+ it 'should return just cucumber_opts' do
36
37
  expect(subject.cucumber_opts_with_profile).to be opts
37
38
  end
38
39
  end
39
40
 
40
- context "with profile" do
41
- let(:profile) { "fancy" }
41
+ context 'with profile' do
42
+ let(:profile) { 'fancy' }
42
43
 
43
- it "should combine opts and profile into an array, prepending --profile option" do
44
+ it 'should combine opts and profile into an array, prepending --profile option' do
44
45
  expect(subject.cucumber_opts_with_profile).to eq %w[ foo bar --profile fancy ]
45
46
  end
46
47
  end
47
48
 
48
- context "with multiple profiles" do
49
+ context 'with multiple profiles' do
49
50
  let(:profile) { %w[ fancy pants ] }
50
51
 
51
- it "should combine opts and each profile into an array, prepending --profile option" do
52
+ it 'should combine opts and each profile into an array, prepending --profile option' do
52
53
  expect(subject.cucumber_opts_with_profile).to eq %w[ foo bar --profile fancy --profile pants ]
53
54
  end
54
55
  end
55
56
  end
56
57
 
57
- context "without cucumber_opts" do
58
+ context 'without cucumber_opts' do
58
59
  let(:opts) { nil }
59
60
 
60
- context "without profile" do
61
+ context 'without profile' do
61
62
  let(:profile) { nil }
62
63
 
63
64
  it { expect(subject.cucumber_opts_with_profile).to eq [] }
64
65
  end
65
66
 
66
- context "with profile" do
67
- let(:profile) { "fancy" }
67
+ context 'with profile' do
68
+ let(:profile) { 'fancy' }
68
69
 
69
- it "should combine opts and profile into an array, prepending --profile option" do
70
+ it 'should combine opts and profile into an array, prepending --profile option' do
70
71
  expect(subject.cucumber_opts_with_profile).to eq %w[ --profile fancy ]
71
72
  end
72
73
  end
73
74
 
74
- context "with multiple profiles" do
75
+ context 'with multiple profiles' do
75
76
  let(:profile) { %w[ fancy pants ] }
76
77
 
77
- it "should combine opts and each profile into an array, prepending --profile option" do
78
+ it 'should combine opts and each profile into an array, prepending --profile option' do
78
79
  expect(subject.cucumber_opts_with_profile).to eq %w[ --profile fancy --profile pants ]
79
80
  end
80
81
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'cucumber/running_test_case'
2
3
  require 'cucumber/core'
3
4
  require 'cucumber/core/gherkin/writer'
@@ -20,42 +21,42 @@ module Cucumber
20
21
  compile [gherkin_doc], receiver
21
22
  end
22
23
 
23
- context "for a regular scenario" do
24
+ context 'for a regular scenario' do
24
25
  let(:gherkin_doc) do
25
26
  gherkin do
26
- feature "feature name" do
27
- scenario "scenario name" do
28
- step "passing"
27
+ feature 'feature name' do
28
+ scenario 'scenario name' do
29
+ step 'passing'
29
30
  end
30
31
  end
31
32
  end
32
33
  end
33
34
 
34
- it "sets the scenario name correctly" do
35
- expect(wrapped_test_case.name).to eq "scenario name"
35
+ it 'sets the scenario name correctly' do
36
+ expect(wrapped_test_case.name).to eq 'scenario name'
36
37
  end
37
38
 
38
- it "sets the feature name correctly" do
39
- expect(wrapped_test_case.feature.name).to eq "feature name"
39
+ it 'sets the feature name correctly' do
40
+ expect(wrapped_test_case.feature.name).to eq 'feature name'
40
41
  end
41
42
 
42
- it "exposes properties of the test_case" do
43
+ it 'exposes properties of the test_case' do
43
44
  expect(wrapped_test_case.location).to eq core_test_case.location
44
45
  expect(wrapped_test_case.source).to eq core_test_case.source
45
46
  expect(wrapped_test_case.keyword).to eq core_test_case.keyword
46
47
  end
47
48
 
48
- it "exposes properties of the result" do
49
+ it 'exposes properties of the result' do
49
50
  expect(wrapped_test_case.status).to eq result.to_sym
50
51
  end
51
52
  end
52
53
 
53
- context "for a failed scenario" do
54
+ context 'for a failed scenario' do
54
55
  let(:gherkin_doc) do
55
56
  gherkin do
56
- feature "feature name" do
57
- scenario "scenario name" do
58
- step "failed"
57
+ feature 'feature name' do
58
+ scenario 'scenario name' do
59
+ step 'failed'
59
60
  end
60
61
  end
61
62
  end
@@ -67,21 +68,21 @@ module Cucumber
67
68
  self.wrapped_test_case = self.wrapped_test_case.with_result(Core::Test::Result::Failed.new(0, exception))
68
69
  end
69
70
 
70
- it "is failed?" do
71
+ it 'is failed?' do
71
72
  expect(wrapped_test_case.failed?).to be_truthy
72
73
  end
73
74
 
74
- it "exposes the exception" do
75
+ it 'exposes the exception' do
75
76
  expect(wrapped_test_case.exception).to eq exception
76
77
  end
77
78
  end
78
79
 
79
- context "for a passing scenario" do
80
+ context 'for a passing scenario' do
80
81
  let(:gherkin_doc) do
81
82
  gherkin do
82
- feature "feature name" do
83
- scenario "scenario name" do
84
- step "passing"
83
+ feature 'feature name' do
84
+ scenario 'scenario name' do
85
+ step 'passing'
85
86
  end
86
87
  end
87
88
  end
@@ -91,25 +92,25 @@ module Cucumber
91
92
  self.wrapped_test_case = self.wrapped_test_case.with_result(Core::Test::Result::Passed.new(0))
92
93
  end
93
94
 
94
- it "is not failed?" do
95
+ it 'is not failed?' do
95
96
  expect(wrapped_test_case.failed?).to be_falsey
96
97
  end
97
98
 
98
- it "#exception is nil" do
99
+ it '#exception is nil' do
99
100
  expect(wrapped_test_case.exception).to be_nil
100
101
  end
101
102
  end
102
103
 
103
- context "for a scenario outline" do
104
+ context 'for a scenario outline' do
104
105
  let(:gherkin_doc) do
105
106
  gherkin do
106
- feature "feature name" do
107
- scenario_outline "scenario outline name" do
108
- step "passing with <arg1> <arg2>"
107
+ feature 'feature name' do
108
+ scenario_outline 'scenario outline name' do
109
+ step 'passing with <arg1> <arg2>'
109
110
 
110
- examples "examples name" do
111
- row "arg1", "arg2"
112
- row "a", "b"
111
+ examples 'examples name' do
112
+ row 'arg1', 'arg2'
113
+ row 'a', 'b'
113
114
  end
114
115
  end
115
116
  end
@@ -117,21 +118,21 @@ module Cucumber
117
118
  end
118
119
 
119
120
  it "sets the test case's name correctly" do
120
- expect(wrapped_test_case.name).to eq "scenario outline name, examples name (#1)"
121
+ expect(wrapped_test_case.name).to eq 'scenario outline name, examples name (#1)'
121
122
  end
122
123
 
123
- it "sets the feature name correctly" do
124
- expect(wrapped_test_case.feature.name).to eq "feature name"
124
+ it 'sets the feature name correctly' do
125
+ expect(wrapped_test_case.feature.name).to eq 'feature name'
125
126
  end
126
127
 
127
- it "exposes properties of the test_case" do
128
+ it 'exposes properties of the test_case' do
128
129
  expect(wrapped_test_case.location).to eq core_test_case.location
129
130
  expect(wrapped_test_case.source).to eq core_test_case.source
130
131
  expect(wrapped_test_case.keyword).to eq core_test_case.keyword
131
132
  end
132
133
 
133
- it "exposes the examples table row cell values" do
134
- expect(wrapped_test_case.cell_values).to eq ["a", "b"]
134
+ it 'exposes the examples table row cell values' do
135
+ expect(wrapped_test_case.cell_values).to eq %w(a b)
135
136
  end
136
137
 
137
138
  end
@@ -1,36 +1,8 @@
1
+ # frozen_string_literal: true
1
2
  require 'spec_helper'
2
3
 
3
4
  module Cucumber
4
5
  describe Runtime::ForProgrammingLanguages do
5
-
6
- let(:user_interface) { double('user interface') }
7
- subject { Runtime::SupportCode.new(user_interface) }
8
- let(:runtime_facade) { Runtime::ForProgrammingLanguages.new(subject, user_interface) }
9
-
10
- describe "#doc_string" do
11
-
12
- it 'defaults to a blank content-type' do
13
- str = runtime_facade.doc_string('DOC')
14
- expect(str).to be_kind_of(MultilineArgument::DocString)
15
- expect(str.content_type).to eq('')
16
- end
17
-
18
- it 'can have a content type' do
19
- str = runtime_facade.doc_string('DOC','ruby')
20
- expect(str.content_type).to eq('ruby')
21
- end
22
-
23
- end
24
-
25
- describe "#table" do
26
-
27
- it 'produces Ast::Table by #table' do
28
- expect(runtime_facade.table(%{
29
- | account | description | amount |
30
- | INT-100 | Taxi | 114 |
31
- | CUC-101 | Peeler | 22 |
32
- })).to be_kind_of(MultilineArgument::DataTable)
33
- end
34
- end
6
+ it 'should probably be inlined'
35
7
  end
36
8
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'spec_helper'
2
3
 
3
4
  module Cucumber
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'spec_helper'
2
3
 
3
4
  module Cucumber
@@ -5,10 +6,10 @@ module Cucumber
5
6
  subject { Runtime.new(options) }
6
7
  let(:options) { {} }
7
8
 
8
- describe "#features_paths" do
9
+ describe '#features_paths' do
9
10
  let(:options) { {:paths => ['foo/bar/baz.feature', 'foo/bar/features/baz.feature', 'other_features'] } }
10
11
 
11
- it "returns the value from configuration.paths" do
12
+ it 'returns the value from configuration.paths' do
12
13
  expect(subject.features_paths).to eq options[:paths]
13
14
  end
14
15
  end
@@ -1,18 +1,19 @@
1
+ # frozen_string_literal: true
1
2
  require 'spec_helper'
2
3
  require 'cucumber/step_argument'
3
4
 
4
5
  module Cucumber
5
6
  describe StepArgument do
6
- it "creates 2 arguments" do
7
- arguments = StepArgument.arguments_from(/I (\w+) (\w+)/, "I like fish")
7
+ it 'creates 2 arguments' do
8
+ arguments = StepArgument.arguments_from(/I (\w+) (\w+)/, 'I like fish')
8
9
 
9
- expect(arguments.map{|argument| [argument.val, argument.offset]}).to eq [["like", 2], ["fish", 7]]
10
+ expect(arguments.map{|argument| [argument.val, argument.offset]}).to eq [['like', 2], ['fish', 7]]
10
11
  end
11
12
 
12
- it "creates 2 arguments when first group is optional" do
13
+ it 'creates 2 arguments when first group is optional' do
13
14
  arguments = StepArgument.arguments_from(/should( not)? be flashed '([^']*?)'$/, "I should be flashed 'Login failed.'")
14
15
 
15
- expect(arguments.map{|argument| [argument.val, argument.offset]}).to eq [[nil, nil], ["Login failed.", 21]]
16
+ expect(arguments.map{|argument| [argument.val, argument.offset]}).to eq [[nil, nil], ['Login failed.', 21]]
16
17
  end
17
18
  end
18
19
  end
@@ -1,41 +1,42 @@
1
+ # frozen_string_literal: true
1
2
  require 'cucumber/step_match_search'
2
- require 'cucumber/rb_support/rb_dsl'
3
- require 'cucumber/rb_support/rb_language'
3
+ require 'cucumber/glue/dsl'
4
+ require 'cucumber/glue/registry_and_more'
4
5
  require 'cucumber/configuration'
5
6
 
6
7
  module Cucumber
7
8
  describe StepMatchSearch do
8
9
 
9
- let(:search) { StepMatchSearch.new(rb_language.method(:step_matches), configuration) }
10
- let(:rb_language) { RbSupport::RbLanguage.new(runtime, configuration) }
10
+ let(:search) { StepMatchSearch.new(registry.method(:step_matches), configuration) }
11
+ let(:registry) { Glue::RegistryAndMore.new(runtime, configuration) }
11
12
  let(:runtime) do
12
- # TODO: break out step definitions collection from RbLanguage so we don't need this
13
+ # TODO: break out step definitions collection from Glue::RegistryAndMore so we don't need this
13
14
  :unused
14
15
  end
15
16
  let(:configuration) { Configuration.new(options) }
16
17
  let(:options) { {} }
17
18
  let(:dsl) do
18
19
  # TODO: stop relying on implicit global state
19
- rb_language
20
- Object.new.extend(RbSupport::RbDsl)
20
+ registry
21
+ Object.new.extend(Glue::Dsl)
21
22
  end
22
23
 
23
24
  context 'caching' do
24
- it "caches step match results" do
25
+ it 'caches step match results' do
25
26
  dsl.Given(/it (.*) in (.*)/) { |what, month| }
26
27
 
27
- step_match = search.call("it snows in april").first
28
+ step_match = search.call('it snows in april').first
28
29
 
29
- expect(rb_language).not_to receive(:step_matches)
30
- second_step_match = search.call("it snows in april").first
30
+ expect(registry).not_to receive(:step_matches)
31
+ second_step_match = search.call('it snows in april').first
31
32
 
32
33
  expect(step_match).to equal(second_step_match)
33
34
  end
34
35
  end
35
36
 
36
- describe "resolving step defintion matches" do
37
+ describe 'resolving step defintion matches' do
37
38
 
38
- it "raises Ambiguous error with guess hint when multiple step definitions match" do
39
+ it 'raises Ambiguous error with guess hint when multiple step definitions match' do
39
40
  expected_error = %{Ambiguous match of "Three blind mice":
40
41
 
41
42
  spec/cucumber/step_match_search_spec.rb:\\d+:in `/Three (.*) mice/'
@@ -47,14 +48,14 @@ You can run again with --guess to make Cucumber be more smart about it
47
48
  dsl.Given(/Three blind (.*)/) {|animal|}
48
49
 
49
50
  expect(-> {
50
- search.call("Three blind mice").first
51
+ search.call('Three blind mice').first
51
52
  }).to raise_error(Ambiguous, /#{expected_error}/)
52
53
  end
53
54
 
54
- describe "when --guess is used" do
55
+ describe 'when --guess is used' do
55
56
  let(:options) { {:guess => true} }
56
57
 
57
- it "does not show --guess hint" do
58
+ it 'does not show --guess hint' do
58
59
  expected_error = %{Ambiguous match of "Three cute mice":
59
60
 
60
61
  spec/cucumber/step_match_search_spec.rb:\\d+:in `/Three (.*) mice/'
@@ -65,48 +66,39 @@ spec/cucumber/step_match_search_spec.rb:\\d+:in `/Three cute (.*)/'
65
66
  dsl.Given(/Three cute (.*)/) {|animal|}
66
67
 
67
68
  expect(-> {
68
- search.call("Three cute mice").first
69
+ search.call('Three cute mice').first
69
70
  }).to raise_error(Ambiguous, /#{expected_error}/)
70
71
  end
71
72
 
72
- it "does not raise Ambiguous error when multiple step definitions match" do
73
+ it 'does not raise Ambiguous error when multiple step definitions match' do
73
74
  dsl.Given(/Three (.*) mice/) {|disability|}
74
75
  dsl.Given(/Three (.*)/) {|animal|}
75
76
 
76
77
  expect(-> {
77
- search.call("Three blind mice").first
78
+ search.call('Three blind mice').first
78
79
  }).not_to raise_error
79
80
  end
80
81
 
81
- it "does not raise NoMethodError when guessing from multiple step definitions with nil fields" do
82
- dsl.Given(/Three (.*) mice( cannot find food)?/) {|disability, is_disastrous|}
83
- dsl.Given(/Three (.*)?/) {|animal|}
82
+ it 'picks right step definition when an equal number of capture groups' do
83
+ right = dsl.Given(/Three (.*) mice/) {|disability|}
84
+ _wrong = dsl.Given(/Three (.*)/) {|animal|}
84
85
 
85
- expect(-> {
86
- search.call("Three blind mice").first
87
- }).not_to raise_error
88
- end
89
-
90
- it "picks right step definition when an equal number of capture groups" do
91
- right = dsl.Given(/Three (.*) mice/) {|disability|}
92
- wrong = dsl.Given(/Three (.*)/) {|animal|}
93
-
94
- expect(search.call("Three blind mice").first.step_definition).to eq right
86
+ expect(search.call('Three blind mice').first.step_definition).to eq right
95
87
  end
96
88
 
97
- it "picks right step definition when an unequal number of capture groups" do
98
- right = dsl.Given(/Three (.*) mice ran (.*)/) {|disability|}
99
- wrong = dsl.Given(/Three (.*)/) {|animal|}
89
+ it 'picks right step definition when an unequal number of capture groups' do
90
+ right = dsl.Given(/Three (.*) mice ran (.*)/) {|disability|}
91
+ _wrong = dsl.Given(/Three (.*)/) {|animal|}
100
92
 
101
- expect(search.call("Three blind mice ran far").first.step_definition).to eq right
93
+ expect(search.call('Three blind mice ran far').first.step_definition).to eq right
102
94
  end
103
95
 
104
- it "picks most specific step definition when an unequal number of capture groups" do
105
- general = dsl.Given(/Three (.*) mice ran (.*)/) {|disability|}
106
- specific = dsl.Given(/Three blind mice ran far/) do; end
96
+ it 'picks most specific step definition when an unequal number of capture groups' do
97
+ _general = dsl.Given(/Three (.*) mice ran (.*)/) {|disability|}
98
+ _specific = dsl.Given(/Three blind mice ran far/) do; end
107
99
  more_specific = dsl.Given(/^Three blind mice ran far$/) do; end
108
100
 
109
- expect(search.call("Three blind mice ran far").first.step_definition).to eq more_specific
101
+ expect(search.call('Three blind mice ran far').first.step_definition).to eq more_specific
110
102
  end
111
103
  end
112
104
 
@@ -119,4 +111,3 @@ spec/cucumber/step_match_search_spec.rb:\\d+:in `/Three cute (.*)/'
119
111
  end
120
112
  end
121
113
  end
122
-