cucumber 3.0.0.pre.1 → 3.0.0.pre.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (316) hide show
  1. checksums.yaml +4 -4
  2. data/.cucumberproignore +6 -0
  3. data/.rubocop.yml +13 -0
  4. data/.rubocop_todo.yml +1075 -0
  5. data/.travis.yml +42 -8
  6. data/CONTRIBUTING.md +8 -1
  7. data/Gemfile +16 -10
  8. data/History.md +96 -36
  9. data/README.md +12 -3
  10. data/Rakefile +12 -2
  11. data/appveyor.yml +26 -0
  12. data/cucumber.gemspec +15 -10
  13. data/cucumber.yml +9 -10
  14. data/examples/i18n/Rakefile +1 -1
  15. data/examples/i18n/ar/features/step_definitions/calculator_steps.rb +2 -2
  16. data/examples/i18n/ar/lib/calculator.rb +2 -2
  17. data/examples/i18n/bg/features/step_definitions/calculator_steps.rb +6 -6
  18. data/examples/i18n/ca/features/step_definitions/calculator_steps.rb +4 -4
  19. data/examples/i18n/ca/lib/calculadora.rb +2 -2
  20. data/examples/i18n/cs/features/step_definitions/calculator_steps.rb +4 -4
  21. data/examples/i18n/cs/lib/calculator.rb +3 -3
  22. data/examples/i18n/da/features/step_definitions/lommeregner_steps.rb +4 -4
  23. data/examples/i18n/da/lib/lommeregner.rb +2 -2
  24. data/examples/i18n/de/features/step_definitions/calculator_steps.rb +4 -4
  25. data/examples/i18n/de/lib/calculator.rb +2 -2
  26. data/examples/i18n/el/features/step_definitions/calculator_steps.rb +5 -5
  27. data/examples/i18n/el/lib/calculator.rb +2 -2
  28. data/examples/i18n/en-lol/features/step_definitions/cucumbrz_steps.rb +4 -4
  29. data/examples/i18n/en-lol/lib/basket.rb +2 -2
  30. data/examples/i18n/en-lol/lib/belly.rb +2 -2
  31. data/examples/i18n/en/features/step_definitions/calculator_steps.rb +4 -4
  32. data/examples/i18n/en/lib/calculator.rb +2 -2
  33. data/examples/i18n/eo/features/step_definitions/calculator_steps.rb +4 -4
  34. data/examples/i18n/eo/lib/calculator.rb +2 -2
  35. data/examples/i18n/es/features/step_definitions/calculador_steps.rb +5 -5
  36. data/examples/i18n/es/lib/calculador.rb +2 -2
  37. data/examples/i18n/et/features/step_definitions/kalkulaator_steps.rb +4 -4
  38. data/examples/i18n/et/lib/kalkulaator.rb +3 -3
  39. data/examples/i18n/fi/features/step_definitions/laskin_steps.rb +3 -3
  40. data/examples/i18n/fi/lib/laskin.rb +1 -1
  41. data/examples/i18n/fr/features/step_definitions/calculatrice_steps.rb +8 -8
  42. data/examples/i18n/fr/features/support/env.rb +1 -1
  43. data/examples/i18n/fr/lib/calculatrice.rb +2 -2
  44. data/examples/i18n/he/features/step_definitions/calculator_steps.rb +4 -4
  45. data/examples/i18n/he/lib/calculator.rb +1 -1
  46. data/examples/i18n/hi/features/step_definitions/calculator_steps.rb +3 -3
  47. data/examples/i18n/hi/lib/calculator.rb +1 -1
  48. data/examples/i18n/ht/features/step_definitions/kalkilatris_steps.rb +4 -4
  49. data/examples/i18n/ht/lib/kalkilatris.rb +2 -2
  50. data/examples/i18n/hu/features/step_definitions/calculator_steps.rb +4 -4
  51. data/examples/i18n/hu/lib/calculator.rb +1 -1
  52. data/examples/i18n/id/features/step_definitions/calculator_steps.rb +4 -4
  53. data/examples/i18n/id/lib/calculator.rb +2 -2
  54. data/examples/i18n/it/features/step_definitions/calcolatrice_steps.rb +4 -4
  55. data/examples/i18n/it/lib/calcolatrice.rb +3 -3
  56. data/examples/i18n/ja/features/step_definitions/calculator_steps.rb +3 -3
  57. data/examples/i18n/ja/features/support/env.rb +1 -1
  58. data/examples/i18n/ja/lib/calculator.rb +2 -2
  59. data/examples/i18n/ko/features/step_definitions/calculator_steps.rb +4 -4
  60. data/examples/i18n/ko/lib/calculator.rb +2 -2
  61. data/examples/i18n/lt/features/step_definitions/calculator_steps.rb +4 -4
  62. data/examples/i18n/lt/lib/calculator.rb +2 -2
  63. data/examples/i18n/lv/features/step_definitions/calculator_steps.rb +4 -4
  64. data/examples/i18n/lv/lib/calculator.rb +2 -2
  65. data/examples/i18n/no/features/step_definitions/kalkulator_steps.rb +3 -3
  66. data/examples/i18n/no/features/support/env.rb +1 -1
  67. data/examples/i18n/no/lib/kalkulator.rb +2 -2
  68. data/examples/i18n/pl/features/step_definitions/calculator_steps.rb +4 -4
  69. data/examples/i18n/pl/lib/calculator.rb +2 -2
  70. data/examples/i18n/pt/features/step_definitions/calculadora_steps.rb +3 -3
  71. data/examples/i18n/pt/features/support/env.rb +1 -1
  72. data/examples/i18n/pt/lib/calculadora.rb +1 -1
  73. data/examples/i18n/ro/features/step_definitions/calculator_steps.rb +5 -5
  74. data/examples/i18n/ro/lib/calculator.rb +1 -1
  75. data/examples/i18n/ru/features/step_definitions/calculator_steps.rb +5 -5
  76. data/examples/i18n/sk/features/step_definitions/calculator_steps.rb +4 -4
  77. data/examples/i18n/sk/lib/calculator.rb +2 -2
  78. data/examples/i18n/sr-Cyrl/features/step_definitions/calculator_steps.rb +3 -3
  79. data/examples/i18n/sr-Cyrl/features/support/env.rb +1 -1
  80. data/examples/i18n/sr-Cyrl/lib/calculator.rb +2 -2
  81. data/examples/i18n/sr-Latn/features/step_definitions/calculator_steps.rb +4 -4
  82. data/examples/i18n/sr-Latn/lib/calculator.rb +2 -2
  83. data/examples/i18n/sv/features/step_definitions/kalkulator_steps.rb +3 -3
  84. data/examples/i18n/sv/lib/kalkulator.rb +2 -2
  85. data/examples/i18n/tr/features/step_definitions/hesap_makinesi_adimlari.rb +4 -4
  86. data/examples/i18n/tr/lib/hesap_makinesi.rb +2 -2
  87. data/examples/i18n/uk/features/step_definitions/calculator_steps.rb +4 -4
  88. data/examples/i18n/uz/features/step_definitions/calculator_steps.rb +4 -4
  89. data/examples/i18n/zh-CN/features/step_definitions/calculator_steps.rb +5 -5
  90. data/examples/i18n/zh-CN/lib/calculator.rb +2 -2
  91. data/examples/i18n/zh-TW/features/step_definitions/calculator_steps.rb +4 -4
  92. data/examples/i18n/zh-TW/lib/calculator.rb +2 -2
  93. data/examples/rspec_doubles/features/step_definitions/calvin_steps.rb +3 -3
  94. data/examples/sinatra/features/step_definitions/add_steps.rb +4 -4
  95. data/examples/tcl/features/step_definitions/fib_steps.rb +2 -2
  96. data/examples/test_unit/features/step_definitions/test_unit_steps.rb +4 -4
  97. data/examples/watir/features/step_definitions/search_steps.rb +3 -3
  98. data/examples/watir/features/support/screenshots.rb +5 -5
  99. data/features/docs/api/list_step_defs_as_json.feature +21 -7
  100. data/features/docs/api/listen_for_events.feature +1 -1
  101. data/features/docs/api/run_cli_main_with_existing_runtime.feature +1 -0
  102. data/features/docs/cli/dry_run.feature +3 -0
  103. data/features/docs/cli/execute_with_tag_filter.feature +4 -4
  104. data/features/docs/cli/fail_fast.feature +2 -0
  105. data/features/docs/{gherkin/language_help.feature → cli/i18n.feature} +6 -6
  106. data/features/docs/cli/randomize.feature +2 -2
  107. data/features/docs/cli/retry_failing_tests.feature +28 -3
  108. data/features/docs/cli/run_scenarios_matching_name.feature +1 -0
  109. data/features/docs/cli/specifying_multiple_formatters.feature +3 -0
  110. data/features/docs/cli/strict_mode.feature +6 -0
  111. data/features/docs/defining_steps/nested_steps.feature +5 -1
  112. data/features/docs/defining_steps/nested_steps_i18n.feature +1 -0
  113. data/features/docs/defining_steps/nested_steps_with_second_arg.feature +2 -0
  114. data/features/docs/defining_steps/printing_messages.feature +1 -1
  115. data/features/docs/defining_steps/skip_scenario.feature +1 -0
  116. data/features/docs/defining_steps/snippets.feature +18 -18
  117. data/features/docs/events/gherkin_source_read_event.feature +43 -0
  118. data/features/docs/events/step_activated_event.feature +36 -0
  119. data/features/docs/events/step_definition_registered_event.feature +29 -0
  120. data/features/docs/events/test_case_finished_event.feature +35 -0
  121. data/features/docs/events/test_case_starting_event.feature +54 -0
  122. data/features/docs/events/test_run_finished_event.feature +40 -0
  123. data/features/docs/events/test_run_starting_event.feature +41 -0
  124. data/features/docs/events/test_step_finished_event.feature +47 -0
  125. data/features/docs/events/test_step_starting_event.feature +43 -0
  126. data/features/docs/exception_in_after_hook.feature +3 -2
  127. data/features/docs/exception_in_after_step_hook.feature +2 -0
  128. data/features/docs/exception_in_around_hook.feature +2 -0
  129. data/features/docs/exception_in_before_hook.feature +3 -1
  130. data/features/docs/extending_cucumber/custom_formatter.feature +21 -1
  131. data/features/docs/formatters/json_formatter.feature +4 -4
  132. data/features/docs/formatters/junit_formatter.feature +7 -6
  133. data/features/docs/formatters/pretty_formatter.feature +1 -0
  134. data/features/docs/formatters/progress_formatter.feature +1 -0
  135. data/features/docs/formatters/rerun_formatter.feature +2 -0
  136. data/features/docs/formatters/summary_formatter.feature +1 -0
  137. data/features/docs/formatters/usage_formatter.feature +3 -0
  138. data/features/docs/getting_started.feature +2 -1
  139. data/features/docs/gherkin/background.feature +5 -5
  140. data/features/docs/gherkin/doc_strings.feature +2 -0
  141. data/features/docs/gherkin/expand_option_for_outlines.feature +1 -0
  142. data/features/docs/gherkin/outlines.feature +4 -0
  143. data/features/docs/gherkin/unicode_table.feature +1 -0
  144. data/features/docs/gherkin/using_descriptions.feature +1 -0
  145. data/features/docs/gherkin/using_star_notation.feature +1 -1
  146. data/features/docs/post_configuration_hook.feature +1 -1
  147. data/features/docs/rake_task.feature +5 -0
  148. data/features/docs/raketask.feature +3 -1
  149. data/features/docs/work_in_progress.feature +5 -2
  150. data/features/docs/writing_support_code/after_step_hooks.feature +3 -1
  151. data/features/docs/writing_support_code/around_hooks.feature +6 -0
  152. data/features/docs/writing_support_code/before_hook.feature +1 -0
  153. data/features/docs/writing_support_code/hook_order.feature +3 -1
  154. data/features/docs/writing_support_code/parameter_types.feature +75 -0
  155. data/features/docs/writing_support_code/tagged_hooks.feature +1 -1
  156. data/features/lib/step_definitions/aruba_steps.rb +4 -10
  157. data/features/lib/step_definitions/cli_steps.rb +2 -2
  158. data/features/lib/step_definitions/cucumber_steps.rb +8 -12
  159. data/features/lib/step_definitions/iso-8859-1_steps.rb +2 -2
  160. data/features/lib/step_definitions/json_steps.rb +1 -1
  161. data/features/lib/step_definitions/junit_steps.rb +1 -1
  162. data/features/lib/step_definitions/language_steps.rb +2 -2
  163. data/features/lib/step_definitions/profile_steps.rb +6 -6
  164. data/features/lib/step_definitions/retry_steps.rb +3 -3
  165. data/features/lib/step_definitions/ruby_steps.rb +1 -1
  166. data/features/lib/support/env.rb +1 -1
  167. data/features/lib/support/fake_wire_server.rb +7 -2
  168. data/features/lib/support/feature_factory.rb +1 -1
  169. data/features/lib/support/normalise_output.rb +13 -12
  170. data/features/lib/support/parameter_types.rb +8 -0
  171. data/gem_tasks/contributors.rake +9 -6
  172. data/gem_tasks/environment.rake +1 -5
  173. data/gem_tasks/examples.rake +1 -1
  174. data/gem_tasks/fix_cr_lf.rake +1 -1
  175. data/gem_tasks/flog.rake +2 -2
  176. data/gem_tasks/rspec.rake +1 -1
  177. data/lib/autotest/cucumber_mixin.rb +15 -15
  178. data/lib/autotest/discover.rb +2 -2
  179. data/lib/cucumber/cli/configuration.rb +7 -13
  180. data/lib/cucumber/cli/main.rb +6 -6
  181. data/lib/cucumber/cli/options.rb +163 -126
  182. data/lib/cucumber/cli/profile_loader.rb +24 -20
  183. data/lib/cucumber/configuration.rb +12 -17
  184. data/lib/cucumber/constantize.rb +1 -1
  185. data/lib/cucumber/core_ext/string.rb +1 -1
  186. data/lib/cucumber/deprecate.rb +1 -1
  187. data/lib/cucumber/events.rb +11 -1
  188. data/lib/cucumber/events/gherkin_source_read.rb +17 -0
  189. data/lib/cucumber/events/{step_match.rb → step_activated.rb} +2 -2
  190. data/lib/cucumber/events/step_definition_registered.rb +1 -1
  191. data/lib/cucumber/events/test_case_finished.rb +18 -0
  192. data/lib/cucumber/events/test_case_starting.rb +15 -0
  193. data/lib/cucumber/events/test_run_starting.rb +16 -0
  194. data/lib/cucumber/events/test_step_finished.rb +20 -0
  195. data/lib/cucumber/events/test_step_starting.rb +17 -0
  196. data/lib/cucumber/filters.rb +1 -0
  197. data/lib/cucumber/filters/activate_steps.rb +1 -1
  198. data/lib/cucumber/filters/broadcast_test_run_starting_event.rb +27 -0
  199. data/lib/cucumber/filters/retry.rb +1 -1
  200. data/lib/cucumber/filters/tag_limits.rb +3 -3
  201. data/lib/cucumber/filters/tag_limits/verifier.rb +1 -1
  202. data/lib/cucumber/formatter/ansicolor.rb +8 -11
  203. data/lib/cucumber/formatter/backtrace_filter.rb +19 -7
  204. data/lib/cucumber/formatter/console.rb +16 -19
  205. data/lib/cucumber/formatter/console_counts.rb +8 -21
  206. data/lib/cucumber/formatter/console_issues.rb +30 -9
  207. data/lib/cucumber/formatter/duration.rb +1 -1
  208. data/lib/cucumber/formatter/fail_fast.rb +1 -1
  209. data/lib/cucumber/formatter/html.rb +168 -242
  210. data/lib/cucumber/formatter/html_builder.rb +110 -0
  211. data/lib/cucumber/formatter/inline-js.js +30 -0
  212. data/lib/cucumber/formatter/interceptor.rb +2 -2
  213. data/lib/cucumber/formatter/json.rb +12 -12
  214. data/lib/cucumber/formatter/junit.rb +11 -11
  215. data/lib/cucumber/formatter/legacy_api/adapter.rb +27 -27
  216. data/lib/cucumber/formatter/legacy_api/ast.rb +16 -20
  217. data/lib/cucumber/formatter/legacy_api/results.rb +6 -8
  218. data/lib/cucumber/formatter/pretty.rb +17 -17
  219. data/lib/cucumber/formatter/progress.rb +11 -12
  220. data/lib/cucumber/formatter/rerun.rb +1 -1
  221. data/lib/cucumber/formatter/steps.rb +1 -1
  222. data/lib/cucumber/formatter/unicode.rb +1 -1
  223. data/lib/cucumber/formatter/usage.rb +12 -12
  224. data/lib/cucumber/gherkin/formatter/ansi_escapes.rb +1 -1
  225. data/lib/cucumber/gherkin/formatter/escaping.rb +1 -1
  226. data/lib/cucumber/{rb_support/rb_dsl.rb → glue/dsl.rb} +44 -17
  227. data/lib/cucumber/glue/hook.rb +43 -0
  228. data/lib/cucumber/glue/invoke_in_world.rb +70 -0
  229. data/lib/cucumber/glue/proto_world.rb +225 -0
  230. data/lib/cucumber/{rb_support/rb_language.rb → glue/registry_and_more.rb} +45 -86
  231. data/lib/cucumber/{rb_support → glue}/snippet.rb +62 -25
  232. data/lib/cucumber/glue/step_definition.rb +143 -0
  233. data/lib/cucumber/glue/world_factory.rb +23 -0
  234. data/lib/cucumber/hooks.rb +4 -4
  235. data/lib/cucumber/multiline_argument.rb +2 -2
  236. data/lib/cucumber/multiline_argument/data_table.rb +40 -178
  237. data/lib/cucumber/multiline_argument/data_table/diff_matrices.rb +158 -0
  238. data/lib/cucumber/platform.rb +3 -5
  239. data/lib/cucumber/rake/task.rb +11 -11
  240. data/lib/cucumber/rspec/disable_option_parser.rb +1 -1
  241. data/lib/cucumber/rspec/doubles.rb +1 -1
  242. data/lib/cucumber/running_test_case.rb +2 -2
  243. data/lib/cucumber/runtime.rb +46 -34
  244. data/lib/cucumber/runtime/after_hooks.rb +1 -1
  245. data/lib/cucumber/runtime/for_programming_languages.rb +1 -36
  246. data/lib/cucumber/runtime/support_code.rb +19 -15
  247. data/lib/cucumber/runtime/user_interface.rb +4 -11
  248. data/lib/cucumber/step_argument.rb +0 -2
  249. data/lib/cucumber/step_definition_light.rb +1 -0
  250. data/lib/cucumber/step_match.rb +16 -15
  251. data/lib/cucumber/step_match_search.rb +2 -3
  252. data/lib/cucumber/term/ansicolor.rb +1 -1
  253. data/lib/cucumber/version +1 -1
  254. data/lib/simplecov_setup.rb +1 -1
  255. data/scripts/invite-collaborator +40 -0
  256. data/scripts/update-history +83 -0
  257. data/spec/cucumber/cli/configuration_spec.rb +95 -97
  258. data/spec/cucumber/cli/main_spec.rb +7 -7
  259. data/spec/cucumber/cli/options_spec.rb +112 -78
  260. data/spec/cucumber/cli/profile_loader_spec.rb +24 -5
  261. data/spec/cucumber/cli/rerun_spec.rb +20 -20
  262. data/spec/cucumber/configuration_spec.rb +47 -47
  263. data/spec/cucumber/constantize_spec.rb +2 -2
  264. data/spec/cucumber/events_spec.rb +9 -0
  265. data/spec/cucumber/file_specs_spec.rb +25 -25
  266. data/spec/cucumber/filters/activate_steps_spec.rb +16 -16
  267. data/spec/cucumber/filters/gated_receiver_spec.rb +6 -6
  268. data/spec/cucumber/filters/retry_spec.rb +22 -9
  269. data/spec/cucumber/filters/tag_limits/test_case_index_spec.rb +11 -11
  270. data/spec/cucumber/filters/tag_limits/verifier_spec.rb +14 -14
  271. data/spec/cucumber/filters/tag_limits_spec.rb +8 -8
  272. data/spec/cucumber/formatter/ansicolor_spec.rb +9 -9
  273. data/spec/cucumber/formatter/backtrace_filter_spec.rb +32 -0
  274. data/spec/cucumber/formatter/console_counts_spec.rb +1 -1
  275. data/spec/cucumber/formatter/duration_spec.rb +3 -3
  276. data/spec/cucumber/formatter/fail_fast_spec.rb +21 -21
  277. data/spec/cucumber/formatter/html_spec.rb +58 -58
  278. data/spec/cucumber/formatter/json_spec.rb +44 -46
  279. data/spec/cucumber/formatter/junit_spec.rb +43 -45
  280. data/spec/cucumber/formatter/legacy_api/adapter_spec.rb +43 -43
  281. data/spec/cucumber/formatter/pretty_spec.rb +107 -107
  282. data/spec/cucumber/formatter/progress_spec.rb +20 -20
  283. data/spec/cucumber/formatter/rerun_spec.rb +1 -1
  284. data/spec/cucumber/formatter/spec_helper.rb +6 -5
  285. data/spec/cucumber/{rb_support/rb_world_spec.rb → glue/proto_world_spec.rb} +20 -5
  286. data/spec/cucumber/glue/registry_and_more_spec.rb +213 -0
  287. data/spec/cucumber/{rb_support → glue}/snippet_spec.rb +61 -25
  288. data/spec/cucumber/glue/step_definition_spec.rb +207 -0
  289. data/spec/cucumber/hooks_spec.rb +3 -3
  290. data/spec/cucumber/multiline_argument/data_table_spec.rb +177 -133
  291. data/spec/cucumber/project_initializer_spec.rb +10 -10
  292. data/spec/cucumber/rake/forked_spec.rb +10 -10
  293. data/spec/cucumber/rake/task_spec.rb +20 -20
  294. data/spec/cucumber/running_test_case_spec.rb +35 -35
  295. data/spec/cucumber/runtime/for_programming_languages_spec.rb +1 -30
  296. data/spec/cucumber/runtime_spec.rb +2 -2
  297. data/spec/cucumber/step_argument_spec.rb +5 -5
  298. data/spec/cucumber/step_match_search_spec.rb +31 -41
  299. data/spec/cucumber/step_match_spec.rb +33 -33
  300. data/spec/cucumber/world/pending_spec.rb +10 -10
  301. metadata +117 -47
  302. data/features/docs/formatters/debug_formatter.feature +0 -47
  303. data/features/docs/writing_support_code/transforms.feature +0 -98
  304. data/features/lib/step_definitions/wire_steps.rb +0 -59
  305. data/gem_tasks/cucumber.rake +0 -26
  306. data/lib/cucumber/core_ext/instance_exec.rb +0 -71
  307. data/lib/cucumber/formatter/debug.rb +0 -36
  308. data/lib/cucumber/rb_support/rb_hook.rb +0 -20
  309. data/lib/cucumber/rb_support/rb_step_definition.rb +0 -132
  310. data/lib/cucumber/rb_support/rb_transform.rb +0 -60
  311. data/lib/cucumber/rb_support/rb_world.rb +0 -171
  312. data/spec/cucumber/core_ext/instance_exec_spec.rb +0 -5
  313. data/spec/cucumber/formatter/debug_spec.rb +0 -65
  314. data/spec/cucumber/rb_support/rb_language_spec.rb +0 -321
  315. data/spec/cucumber/rb_support/rb_step_definition_spec.rb +0 -200
  316. data/spec/cucumber/rb_support/rb_transform_spec.rb +0 -47
@@ -4,7 +4,7 @@ Feature: Tagged hooks
4
4
  Given the standard step definitions
5
5
  And a file named "features/support/hooks.rb" with:
6
6
  """
7
- Before('~@no-boom') do
7
+ Before('not @no-boom') do
8
8
  raise 'boom'
9
9
  end
10
10
  """
@@ -1,27 +1,21 @@
1
1
  # frozen_string_literal: true
2
- Given('a Gemfile with:') do |content|
3
- path = File.expand_path(current_dir + "/Gemfile")
4
- write_file path, content
5
- set_env "BUNDLE_GEMFILE", path
6
- end
7
-
8
2
  Then(/^it should (pass|fail)$/) do |result|
9
3
  assert_success result == 'pass'
10
4
  end
11
5
 
12
- Then(/^"([^"]*)" should not be required$/) do |file_name|
6
+ Then('{string} should not be required') do |file_name|
13
7
  expect(all_output).not_to include("* #{file_name}")
14
8
  end
15
9
 
16
- Then(/^"([^"]*)" should be required$/) do |file_name|
10
+ Then('{string} should be required') do |file_name|
17
11
  expect(all_output).to include("* #{file_name}")
18
12
  end
19
13
 
20
- Then /^it fails before running features with:$/ do |expected|
14
+ Then('it fails before running features with:') do |expected|
21
15
  assert_matching_output("\\A#{expected}", all_output)
22
16
  assert_success(false)
23
17
  end
24
18
 
25
- Then(/^the output includes the message "(.*)"$/) do |message|
19
+ Then('the output includes the message {string}') do |message|
26
20
  expect(all_output).to include(message)
27
21
  end
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
- Then(/^I should see the CLI help$/) do
3
- expect(all_output).to include("Usage:")
2
+ Then('I should see the CLI help') do
3
+ expect(all_output).to include('Usage:')
4
4
  end
@@ -1,23 +1,23 @@
1
1
  # frozen_string_literal: true
2
- Given /^a directory without standard Cucumber project directory structure$/ do
2
+ Given('a directory without standard Cucumber project directory structure') do
3
3
  in_current_dir do
4
4
  FileUtils.rm_rf 'features' if File.directory?('features')
5
5
  end
6
6
  end
7
7
 
8
- Given /^a scenario with a step that looks like this:$/ do |string|
8
+ Given('a scenario with a step that looks like this:') do |string|
9
9
  create_feature do
10
10
  create_scenario { string }
11
11
  end
12
12
  end
13
13
 
14
- Given(/^a scenario with a step that looks like this in japanese:$/) do |string|
14
+ Given('a scenario with a step that looks like this in japanese:') do |string|
15
15
  create_feature_ja do
16
16
  create_scenario_ja { string }
17
17
  end
18
18
  end
19
19
 
20
- Given(/^the standard step definitions$/) do
20
+ Given('the standard step definitions') do
21
21
  write_file 'features/step_definitions/steps.rb',
22
22
 
23
23
  <<-STEPS
@@ -29,11 +29,11 @@ Given(/^the standard step definitions$/) do
29
29
  STEPS
30
30
  end
31
31
 
32
- Given /^a step definition that looks like this:$/ do |string|
32
+ Given('a step definition that looks like this:') do |string|
33
33
  create_step_definition { string }
34
34
  end
35
35
 
36
- Given /^a scenario "([^\"]*)" that passes$/ do |name|
36
+ Given('a scenario {string} that passes') do |name|
37
37
  write_file "features/#{name}.feature",
38
38
  <<-FEATURE
39
39
  Feature: #{name}
@@ -47,7 +47,7 @@ Given /^a scenario "([^\"]*)" that passes$/ do |name|
47
47
  STEPS
48
48
  end
49
49
 
50
- Given /^a scenario "([^\"]*)" that fails$/ do |name|
50
+ Given('a scenario {string} that fails') do |name|
51
51
  write_file "features/#{name}.feature",
52
52
  <<-FEATURE
53
53
  Feature: #{name}
@@ -61,15 +61,11 @@ Given /^a scenario "([^\"]*)" that fails$/ do |name|
61
61
  STEPS
62
62
  end
63
63
 
64
- When /^I run the feature with the (\w+) formatter$/ do |formatter|
64
+ When(/^I run the feature with the (\w+) formatter$/) do |formatter|
65
65
  expect(features.length).to eq 1
66
66
  run_feature features.first, formatter
67
67
  end
68
68
 
69
- Then /^the stderr should contain a warning message$/ do
70
- expect(all_stderr).to include("[warning]")
71
- end
72
-
73
69
  module CucumberHelper
74
70
  def run_feature(filename = 'features/a_feature.feature', formatter = 'progress')
75
71
  run_simple "#{Cucumber::BINARY} #{filename} --format #{formatter}", false
@@ -4,10 +4,10 @@
4
4
  # Alternatively it would be possible to use Norwegian keywords and encode the file as UTF-8.
5
5
  #
6
6
  # In both cases, stepdef arguments will be sent in as UTF-8, regardless of what encoding is used.
7
- Given /^jeg drikker en "([^"]*)"$/ do |drink|
7
+ Given(/^jeg drikker en "([^"]*)"$/) do |drink|
8
8
  expect(drink).to eq '�l'.encode('UTF-8')
9
9
  end
10
10
 
11
- When /^skal de andre si "([^"]*)"$/ do |greeting|
11
+ When(/^skal de andre si "([^"]*)"$/) do |greeting|
12
12
  expect(greeting).to eq 'sk�l'.encode('UTF-8')
13
13
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- Then /^it should (pass|fail) with JSON:$/ do |pass_fail, json|
2
+ Then(/^it should (pass|fail) with JSON:$/) do |pass_fail, json|
3
3
  actual = normalise_json(MultiJson.load(all_stdout))
4
4
  expected = MultiJson.load(json)
5
5
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- Then(/^the junit output file "(.*?)" should contain:$/) do |actual_file, text|
2
+ Then('the junit output file {string} should contain:') do |actual_file, text|
3
3
  actual = IO.read(current_dir + '/' + actual_file)
4
4
  actual = replace_junit_time(actual)
5
5
  expect(actual).to eq text
@@ -1,8 +1,8 @@
1
1
  # encoding: utf-8
2
2
  # frozen_string_literal: true
3
3
 
4
- Then(/^cucumber lists all the supported languages$/) do
5
- sample_languages = ["Arabic", "български", "Pirate", "English", "日本語"]
4
+ Then('cucumber lists all the supported languages') do
5
+ sample_languages = %w(Arabic български Pirate English 日本語)
6
6
  sample_languages.each do |language|
7
7
  expect(all_output.force_encoding('utf-8')).to include(language)
8
8
  end
@@ -1,16 +1,16 @@
1
1
  # frozen_string_literal: true
2
- Given /^the following profiles? (?:are|is) defined:$/ do |profiles|
2
+ Given('the following profile(s) are/is defined:') do |profiles|
3
3
  write_file 'cucumber.yml', profiles
4
4
  end
5
5
 
6
- Then /^the (.*) profile should be used$/ do |profile|
6
+ Then('the {word} profile should be used') do |profile|
7
7
  step 'the stdout should contain:', profile
8
8
  end
9
9
 
10
- Then /^exactly these files should be loaded:\s*(.*)$/ do |files|
11
- expect(all_stdout.scan(/^ \* (.*\.rb)$/).flatten).to eq files.split(/,\s+/)
10
+ Then('exactly these files should be loaded: {list}') do |files|
11
+ expect(all_stdout.scan(/^ \* (.*\.rb)$/).flatten).to eq files
12
12
  end
13
13
 
14
- Then /^exactly these features should be run:\s*(.*)$/ do |files|
15
- expect(all_stdout.scan(/^ \* (.*\.feature)$/).flatten).to eq files.split(/,\s+/)
14
+ Then('exactly these features should be run: {list}') do |files|
15
+ expect(all_stdout.scan(/^ \* (.*\.feature)$/).flatten).to eq files
16
16
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- Given /^a scenario "([^\"]*)" that fails once, then passes$/ do |full_name|
2
+ Given('a scenario {string} that fails once, then passes') do |full_name|
3
3
  name = snake_case(full_name)
4
4
  write_file "features/#{name}.feature",
5
5
  <<-FEATURE
@@ -8,7 +8,7 @@ Given /^a scenario "([^\"]*)" that fails once, then passes$/ do |full_name|
8
8
  Given it fails once, then passes
9
9
  FEATURE
10
10
 
11
- write_file "features/step_defnitions/#{name}_steps.rb",
11
+ write_file "features/step_definitions/#{name}_steps.rb",
12
12
  <<-STEPS
13
13
  Given(/^it fails once, then passes$/) do
14
14
  $#{name} += 1
@@ -22,7 +22,7 @@ Given /^a scenario "([^\"]*)" that fails once, then passes$/ do |full_name|
22
22
  INIT
23
23
  end
24
24
 
25
- Given /^a scenario "([^\"]*)" that fails twice, then passes$/ do |full_name|
25
+ Given('a scenario {string} that fails twice, then passes') do |full_name|
26
26
  name = snake_case(full_name)
27
27
  write_file "features/#{name}.feature",
28
28
  <<-FEATURE
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
- When(/^I run the following Ruby code:$/) do |code|
2
+ When('I run the following Ruby code:') do |code|
3
3
  run_simple %{ruby -e "#{code}"}
4
4
  end
@@ -8,7 +8,7 @@ Before('@spawn') do
8
8
  Aruba.process = Aruba::SpawnProcess
9
9
  end
10
10
 
11
- Before('~@spawn') do
11
+ Before('not @spawn') do
12
12
  Aruba::InProcess.main_class = Cucumber::Cli::Main
13
13
  Aruba.process = Aruba::InProcess
14
14
  end
@@ -43,15 +43,20 @@ class FakeWireServer
43
43
  end
44
44
 
45
45
  def start
46
- while message = @socket.gets
46
+ message = @socket.gets
47
+
48
+ while message
47
49
  handle(message)
50
+ message = @socket.gets
48
51
  end
49
52
  end
50
53
 
51
54
  private
52
55
 
53
56
  def handle(data)
54
- if protocol_entry = response_to(data.strip)
57
+ protocol_entry = response_to(data.strip)
58
+
59
+ if protocol_entry
55
60
  sleep delay(data)
56
61
  @on_message.call(MultiJson.load(protocol_entry['request'])[0])
57
62
  send_response(protocol_entry['response'])
@@ -55,7 +55,7 @@ Feature: #{name}
55
55
  end
56
56
 
57
57
  def filename(name)
58
- "features/#{name.downcase.gsub(' ', '_')}.feature"
58
+ "features/#{name.downcase.tr(' ', '_')}.feature"
59
59
  end
60
60
 
61
61
  def features
@@ -5,12 +5,16 @@ module NormaliseArubaOutput
5
5
  normalise_output(super)
6
6
  end
7
7
 
8
+ def sanitize_text(text)
9
+ normalise_output(super)
10
+ end
11
+
8
12
  def normalise_output(out)
9
- out = out.gsub(/#{Dir.pwd}\/tmp\/aruba/, '.') # Remove absolute paths
10
- out = out.gsub(/tmp\/aruba\//, '') # Fix aruba path
11
- out = out.gsub(/^.*cucumber_process\.rb.*$\n/, '')
12
- out = out.gsub(/^\d+m\d+\.\d+s$/, '0m0.012s') # Make duration predictable
13
- out = out.gsub(/Coverage report generated .+$\n/, '') # Remove SimpleCov message
13
+ out.gsub(/#{Dir.pwd}\/tmp\/aruba/, '.') # Remove absolute paths
14
+ .gsub(/tmp\/aruba\//, '') # Fix aruba path
15
+ .gsub(/^.*cucumber_process\.rb.*$\n/, '')
16
+ .gsub(/^\d+m\d+\.\d+s$/, '0m0.012s') # Make duration predictable
17
+ .gsub(/Coverage report generated .+$\n/, '') # Remove SimpleCov message
14
18
  end
15
19
 
16
20
  def normalise_json(json)
@@ -20,7 +24,7 @@ module NormaliseArubaOutput
20
24
  elements = feature.fetch('elements') { [] }
21
25
  elements.each do |scenario|
22
26
  scenario['steps'].each do |step|
23
- ['steps', 'before', 'after'].each do |type|
27
+ %w(steps before after).each do |type|
24
28
  if scenario[type]
25
29
  scenario[type].each do |step_or_hook|
26
30
  normalise_json_step_or_hook(step_or_hook)
@@ -38,12 +42,9 @@ module NormaliseArubaOutput
38
42
  end
39
43
 
40
44
  def normalise_json_step_or_hook(step_or_hook)
41
- if step_or_hook['result']
42
- if step_or_hook['result']['duration']
43
- expect(step_or_hook['result']['duration']).to be >= 0
44
- step_or_hook['result']['duration'] = 1
45
- end
46
- end
45
+ return unless step_or_hook['result'] && step_or_hook['result']['duration']
46
+ expect(step_or_hook['result']['duration']).to be >= 0
47
+ step_or_hook['result']['duration'] = 1
47
48
  end
48
49
 
49
50
  end
@@ -0,0 +1,8 @@
1
+ ParameterType(
2
+ name: 'list',
3
+ regexp: /.*/,
4
+ type: Array,
5
+ transformer: ->(s) { s.split(/,\s+/)},
6
+ use_for_snippets: false,
7
+ prefer_for_regexp_match: false
8
+ )
@@ -1,16 +1,19 @@
1
1
  # encoding: utf-8
2
2
  # frozen_string_literal: true
3
+
3
4
  desc 'List contributors'
4
5
  task :contributors do
5
- contributors = `git log --pretty=short --no-merges | git shortlog -ne | egrep -ve '^ +' | egrep -ve '^$'`.split("\n")
6
- puts contributors
7
- puts "Total: #{contributors.length}"
6
+ IO.popen("git log --pretty=short --no-merges | git shortlog -ne | egrep -ve '^ +' | egrep -ve '^$'") do |f|
7
+ contributors = f.readlines
8
+ puts contributors
9
+ puts "Total: #{contributors.length}"
10
+ end
8
11
  end
9
12
 
10
13
  task :codeswarm do
11
- sh "code_swarm --reload" rescue nil # Fails because of encoding - which we'll fix
12
- sh "iconv -f latin1 -t utf-8 .git/.code_swarm/log.xml > tmp.xml && mv tmp.xml .git/.code_swarm/log.xml"
14
+ sh 'code_swarm --reload' rescue nil # Fails because of encoding - which we'll fix
15
+ sh 'iconv -f latin1 -t utf-8 .git/.code_swarm/log.xml > tmp.xml && mv tmp.xml .git/.code_swarm/log.xml'
13
16
  sh "sed -e 's/Aslak\ Hellesøy@.BEKK.no/aslak.hellesoy@gmail.com/g' .git/.code_swarm/log.xml > tmp.xml && mv tmp.xml .git/.code_swarm/log.xml"
14
17
  sh "sed -e 's/josephwilk@joesniff.co.uk/joe@josephwilk.net/g' .git/.code_swarm/log.xml > tmp.xml && mv tmp.xml .git/.code_swarm/log.xml"
15
- sh "code_swarm"
18
+ sh 'code_swarm'
16
19
  end
@@ -1,8 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  task :ruby_env do
3
- RUBY_APP = if RUBY_PLATFORM =~ /java/
4
- "jruby"
5
- else
6
- "ruby"
7
- end unless defined? RUBY_APP
3
+ RUBY_APP ||= RUBY_PLATFORM =~ /java/ ? 'jruby' : 'ruby'
8
4
  end
@@ -6,7 +6,7 @@ task :examples do
6
6
  puts "Running #{example_dir}"
7
7
  Dir.chdir(example_dir) do
8
8
  raise "No Rakefile in #{Dir.pwd}" unless File.file?('Rakefile')
9
- sh "rake cucumber"
9
+ sh 'rake cucumber'
10
10
  end
11
11
  end
12
12
  end
@@ -6,6 +6,6 @@ task :fix_cr_lf do
6
6
  next if File.directory?(f) || f =~ /dos/
7
7
  s = IO.read(f)
8
8
  s.gsub!(/\r?\n/, "\n")
9
- File.open(f, "w") { |io| io.write(s) }
9
+ File.open(f, 'w') { |io| io.write(s) }
10
10
  end
11
11
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- desc "Run flog over significant files"
2
+ desc 'Run flog over significant files'
3
3
  task :flog do
4
- sh "find lib/cucumber -name \\*.rb | grep -v parser\/feature\\.rb | xargs flog"
4
+ sh 'find lib/cucumber -name \\*.rb | grep -v parser/feature\\.rb | xargs flog'
5
5
  end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
  require 'rspec/core/rake_task'
3
3
 
4
- desc "Run RSpec"
4
+ desc 'Run RSpec'
5
5
  RSpec::Core::RakeTask.new do |t|
6
6
  t.verbose = true
7
7
  end
@@ -47,7 +47,7 @@ module Autotest::CucumberMixin
47
47
  end
48
48
 
49
49
  def all_features_good
50
- features_to_run == ""
50
+ features_to_run == ''
51
51
  end
52
52
 
53
53
  def get_to_green
@@ -71,27 +71,27 @@ module Autotest::CucumberMixin
71
71
  hook :run_features
72
72
  Tempfile.open('autotest-cucumber') do |dirty_features_file|
73
73
  cmd = self.make_cucumber_cmd(self.features_to_run, dirty_features_file.path)
74
- return if cmd.empty?
74
+ break if cmd.empty?
75
75
  puts cmd unless $q
76
76
  old_sync = $stdout.sync
77
77
  $stdout.sync = true
78
78
  self.results = []
79
79
  line = []
80
80
  begin
81
- open("| #{cmd}", "r") do |f|
82
- until f.eof? do
81
+ open("| #{cmd}", 'r') do |f|
82
+ until f.eof?
83
83
  c = f.getc or break
84
- if RUBY_VERSION >= "1.9" then
84
+ if RUBY_VERSION >= '1.9' then
85
85
  print c
86
86
  else
87
87
  putc c
88
88
  end
89
89
  line << c
90
90
  if c == ?\n then
91
- self.results << if RUBY_VERSION >= "1.9" then
91
+ self.results << if RUBY_VERSION >= '1.9' then
92
92
  line.join
93
93
  else
94
- line.pack "c*"
94
+ line.pack 'c*'
95
95
  end
96
96
  line.clear
97
97
  end
@@ -111,18 +111,18 @@ module Autotest::CucumberMixin
111
111
 
112
112
  profile_loader = Cucumber::Cli::ProfileLoader.new
113
113
 
114
- profile ||= "autotest-all" if profile_loader.has_profile?("autotest-all") && features_to_run == :all
115
- profile ||= "autotest" if profile_loader.has_profile?("autotest")
114
+ profile ||= 'autotest-all' if profile_loader.has_profile?('autotest-all') && features_to_run == :all
115
+ profile ||= 'autotest' if profile_loader.has_profile?('autotest')
116
116
  profile ||= nil
117
117
 
118
- if profile
119
- args = ["--profile", profile]
120
- else
121
- args = %w{--format} << (features_to_run == :all ? "progress" : "pretty")
122
- end
118
+ args = if profile
119
+ ['--profile', profile]
120
+ else
121
+ %w{--format} << (features_to_run == :all ? 'progress' : 'pretty')
122
+ end
123
123
  # No --color option as some IDEs (Netbeans) don't output them very well (1 failed step)
124
124
  args += %w{--format rerun --out} << dirty_features_filename
125
- args << (features_to_run == :all ? "" : features_to_run)
125
+ args << (features_to_run == :all ? '' : features_to_run)
126
126
 
127
127
  # Unless I do this, all the steps turn up undefined during the rerun...
128
128
  unless features_to_run == :all