cucumber 1.3.20 → 2.0.0.beta.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (404) hide show
  1. checksums.yaml +7 -0
  2. data/.coveralls.yml +1 -0
  3. data/.rspec +1 -1
  4. data/.travis.yml +1 -2
  5. data/CONTRIBUTING.md +9 -0
  6. data/Gemfile +9 -2
  7. data/History.md +26 -17
  8. data/LICENSE +2 -2
  9. data/README.md +4 -4
  10. data/Rakefile +12 -0
  11. data/bin/cucumber +1 -5
  12. data/bin/cuke +60 -0
  13. data/cucumber.gemspec +10 -15
  14. data/cucumber.yml +14 -26
  15. data/examples/i18n/ar/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  16. data/examples/i18n/bg/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  17. data/examples/i18n/ca/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  18. data/examples/i18n/cs/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  19. data/examples/i18n/da/features/{step_definitons → step_definitions}/lommeregner_steps.rb +0 -0
  20. data/examples/i18n/de/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  21. data/examples/{ramaze → i18n/el}/Rakefile +1 -1
  22. data/examples/i18n/el/features/addition.feature +17 -0
  23. data/examples/i18n/el/features/division.feature +10 -0
  24. data/examples/i18n/el/features/step_definitions/calculator_steps.rb +24 -0
  25. data/examples/i18n/el/lib/calculator.rb +14 -0
  26. data/examples/i18n/en/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  27. data/examples/i18n/eo/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  28. data/examples/i18n/es/features/{step_definitons → step_definitions}/calculador_steps.rb +0 -0
  29. data/examples/i18n/fi/features/{step_definitons → step_definitions}/laskin_steps.rb +0 -0
  30. data/examples/i18n/fr/Rakefile +3 -1
  31. data/examples/i18n/fr/features/step_definitions/calculatrice_steps.rb +2 -2
  32. data/examples/i18n/he/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  33. data/examples/i18n/hi/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  34. data/examples/i18n/hu/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  35. data/examples/i18n/id/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  36. data/examples/i18n/it/features/{step_definitons → step_definitions}/calcolatrice_steps.rb +0 -0
  37. data/examples/i18n/ja/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  38. data/examples/i18n/ko/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  39. data/examples/i18n/lt/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  40. data/examples/i18n/lv/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  41. data/examples/i18n/no/features/{step_definitons → step_definitions}/kalkulator_steps.rb +0 -0
  42. data/examples/i18n/pl/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  43. data/examples/i18n/ro/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  44. data/examples/i18n/ru/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  45. data/examples/i18n/sk/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  46. data/examples/i18n/sr-Cyrl/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  47. data/examples/i18n/sr-Latn/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  48. data/examples/i18n/sv/features/{step_definitons → step_definitions}/kalkulator_steps.rb +0 -0
  49. data/examples/i18n/tr/features/{step_definitons → step_definitions}/hesap_makinesi_adimlari.rb +0 -0
  50. data/examples/i18n/uk/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  51. data/examples/i18n/uz/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  52. data/examples/i18n/zh-CN/features/{step_definitons → step_definitions}/calculator_steps.rb +4 -4
  53. data/examples/i18n/zh-TW/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  54. data/{legacy_features → features/docs}/api/list_step_defs_as_json.feature +14 -14
  55. data/{legacy_features → features/docs}/api/run_cli_main_with_existing_runtime.feature +5 -10
  56. data/features/{backtraces.feature → docs/cli/backtraces.feature} +2 -2
  57. data/features/docs/cli/dry_run.feature +25 -0
  58. data/features/docs/cli/exclude_files.feature +19 -0
  59. data/features/docs/cli/execute_with_tag_filter.feature +117 -0
  60. data/features/docs/cli/randomize.feature +46 -0
  61. data/features/docs/cli/require.feature +27 -0
  62. data/features/docs/cli/run_scenarios_matching_name.feature +104 -0
  63. data/features/docs/cli/run_specific_scenarios.feature +113 -0
  64. data/features/docs/cli/showing_differences.feature +43 -0
  65. data/features/docs/cli/specifying_multiple_formatters.feature +44 -0
  66. data/features/docs/cli/strict_mode.feature +41 -0
  67. data/features/{nested_steps.feature → docs/defining_steps/nested_steps.feature} +3 -5
  68. data/features/{nested_steps_i18n.feature → docs/defining_steps/nested_steps_i18n.feature} +0 -2
  69. data/features/{nested_steps_with_second_arg.feature → docs/defining_steps/nested_steps_with_second_arg.feature} +0 -0
  70. data/features/{step_definitions.feature → docs/defining_steps/one_line_step_definitions.feature} +3 -3
  71. data/features/docs/defining_steps/printing_messages.feature +147 -0
  72. data/features/docs/defining_steps/skip_scenario.feature +33 -0
  73. data/features/docs/defining_steps/snippets.feature +41 -0
  74. data/{legacy_features → features/docs/defining_steps}/table_diffing.feature +15 -15
  75. data/features/{transforms.feature → docs/defining_steps/transforms.feature} +2 -2
  76. data/{legacy_features/exception_in_after_block.feature → features/docs/exception_in_after_hook.feature} +25 -26
  77. data/{legacy_features/exception_in_after_step_block.feature → features/docs/exception_in_after_step_hook.feature} +21 -24
  78. data/{legacy_features/exception_in_before_block.feature → features/docs/exception_in_before_hook.feature} +18 -20
  79. data/features/{custom_formatter.feature → docs/extending_cucumber/custom_formatter.feature} +3 -8
  80. data/features/{formatter_callbacks.feature → docs/extending_cucumber/formatter_callbacks.feature} +185 -4
  81. data/{legacy_features/listener_debugger_formatter.feature → features/docs/formatters/debug_formatter.feature} +13 -15
  82. data/features/{formatter_step_file_colon_line.feature → docs/formatters/formatter_step_file_colon_line.feature} +2 -4
  83. data/features/{html_formatter.feature → docs/formatters/html_formatter.feature} +10 -14
  84. data/features/{json_formatter.feature → docs/formatters/json_formatter.feature} +109 -247
  85. data/features/docs/formatters/junit_formatter.feature +275 -0
  86. data/features/{pretty_formatter.feature → docs/formatters/pretty_formatter.feature} +1 -1
  87. data/features/{progress_formatter.feature → docs/formatters/progress_formatter.feature} +1 -1
  88. data/features/docs/formatters/rerun_formatter.feature +135 -0
  89. data/features/docs/formatters/usage_formatter.feature +102 -0
  90. data/features/docs/getting_started.feature +27 -0
  91. data/features/{background.feature → docs/gherkin/background.feature} +149 -91
  92. data/features/{doc_strings.feature → docs/gherkin/doc_strings.feature} +1 -0
  93. data/features/docs/gherkin/expand_option_for_outlines.feature +46 -0
  94. data/features/docs/gherkin/language_from_header.feature +32 -0
  95. data/features/docs/gherkin/outlines.feature +154 -0
  96. data/features/docs/gherkin/unicode_table.feature +32 -0
  97. data/features/docs/gherkin/using_descriptions.feature +88 -0
  98. data/features/docs/gherkin/using_star_notation.feature +37 -0
  99. data/features/{iso-8859-1.feature → docs/iso-8859-1.feature} +0 -0
  100. data/{legacy_features → features/docs}/post_configuration_hook.feature +17 -18
  101. data/{legacy_features → features/docs}/profiles.feature +30 -36
  102. data/{legacy_features → features/docs}/rake_task.feature +30 -41
  103. data/features/{raketask.feature → docs/raketask.feature} +6 -13
  104. data/features/docs/report_called_undefined_steps.feature +57 -0
  105. data/{legacy_features → features/docs}/wire_protocol.feature +36 -31
  106. data/{legacy_features → features/docs}/wire_protocol_erb.feature +5 -6
  107. data/{legacy_features → features/docs}/wire_protocol_table_diffing.feature +14 -12
  108. data/{legacy_features → features/docs}/wire_protocol_tags.feature +6 -7
  109. data/{legacy_features → features/docs}/wire_protocol_timeouts.feature +6 -6
  110. data/{legacy_features → features/docs}/work_in_progress.feature +52 -54
  111. data/{legacy_features → features/docs/writing_support_code}/around_hooks.feature +25 -28
  112. data/features/docs/writing_support_code/before_hook.feature +61 -0
  113. data/features/docs/writing_support_code/hook_order.feature +61 -0
  114. data/features/{load_path.feature → docs/writing_support_code/load_path.feature} +3 -0
  115. data/features/docs/writing_support_code/state.feature +32 -0
  116. data/features/{tagged_hooks.feature → docs/writing_support_code/tagged_hooks.feature} +11 -13
  117. data/features/lib/step_definitions/aruba_steps.rb +22 -0
  118. data/features/lib/step_definitions/cucumber_steps.rb +50 -0
  119. data/features/{step_definitions → lib/step_definitions}/iso-8859-1_steps.rb +3 -15
  120. data/features/lib/step_definitions/json_steps.rb +7 -0
  121. data/features/lib/step_definitions/junit_steps.rb +13 -0
  122. data/features/lib/step_definitions/language_steps.rb +4 -5
  123. data/features/lib/step_definitions/profile_steps.rb +15 -0
  124. data/features/lib/step_definitions/ruby_steps.rb +3 -0
  125. data/{legacy_features → features/lib}/step_definitions/wire_steps.rb +16 -9
  126. data/features/lib/support/env.rb +21 -0
  127. data/{legacy_features → features/lib}/support/fake_wire_server.rb +0 -0
  128. data/features/{support → lib/support}/feature_factory.rb +1 -1
  129. data/features/lib/support/normalise_output.rb +33 -0
  130. data/gem_tasks/cov.rake +5 -0
  131. data/gem_tasks/cucumber.rake +1 -10
  132. data/gem_tasks/rspec.rake +0 -2
  133. data/gem_tasks/yard.rake +4 -1
  134. data/lib/cucumber.rb +1 -3
  135. data/lib/cucumber/cli/configuration.rb +30 -25
  136. data/lib/cucumber/cli/main.rb +13 -25
  137. data/lib/cucumber/cli/options.rb +15 -57
  138. data/lib/cucumber/configuration.rb +4 -0
  139. data/lib/cucumber/constantize.rb +7 -6
  140. data/lib/cucumber/core_ext/instance_exec.rb +7 -38
  141. data/lib/cucumber/core_ext/proc.rb +1 -1
  142. data/lib/cucumber/errors.rb +3 -1
  143. data/lib/cucumber/file_specs.rb +35 -0
  144. data/lib/cucumber/formatter/console.rb +32 -21
  145. data/lib/cucumber/formatter/debug.rb +5 -0
  146. data/lib/cucumber/formatter/gherkin_formatter_adapter.rb +8 -38
  147. data/lib/cucumber/formatter/html.rb +29 -21
  148. data/lib/cucumber/formatter/junit.rb +10 -7
  149. data/lib/cucumber/formatter/pretty.rb +2 -8
  150. data/lib/cucumber/formatter/rerun.rb +2 -3
  151. data/lib/cucumber/formatter/unicode.rb +8 -21
  152. data/lib/cucumber/formatter/usage.rb +65 -2
  153. data/lib/cucumber/language_support/language_methods.rb +1 -1
  154. data/lib/cucumber/mappings.rb +212 -0
  155. data/lib/cucumber/multiline_argument.rb +115 -0
  156. data/lib/cucumber/platform.rb +21 -22
  157. data/lib/cucumber/rake/task.rb +3 -54
  158. data/lib/cucumber/rb_support/rb_language.rb +2 -5
  159. data/lib/cucumber/rb_support/rb_world.rb +14 -19
  160. data/lib/cucumber/rb_support/snippet.rb +60 -19
  161. data/lib/cucumber/reports/legacy_formatter.rb +1279 -0
  162. data/lib/cucumber/runtime.rb +176 -26
  163. data/lib/cucumber/runtime/for_programming_languages.rb +10 -4
  164. data/lib/cucumber/runtime/gated_receiver.rb +21 -0
  165. data/lib/cucumber/runtime/support_code.rb +9 -7
  166. data/lib/cucumber/runtime/tag_limits.rb +15 -0
  167. data/lib/cucumber/runtime/tag_limits/filter.rb +31 -0
  168. data/lib/cucumber/runtime/tag_limits/test_case_index.rb +29 -0
  169. data/lib/cucumber/runtime/tag_limits/verifier.rb +57 -0
  170. data/lib/cucumber/runtime/user_interface.rb +4 -0
  171. data/lib/cucumber/step_match.rb +3 -3
  172. data/lib/cucumber/term/ansicolor.rb +1 -9
  173. data/lib/cucumber/wire_support/wire_language.rb +23 -9
  174. data/lib/cucumber/wire_support/wire_packet.rb +1 -1
  175. data/lib/cucumber/wire_support/wire_protocol/requests.rb +13 -5
  176. data/lib/cucumber/wire_support/wire_step_definition.rb +1 -8
  177. data/spec/cucumber/cli/configuration_spec.rb +151 -150
  178. data/spec/cucumber/cli/main_spec.rb +36 -99
  179. data/spec/cucumber/cli/options_spec.rb +238 -272
  180. data/spec/cucumber/cli/profile_loader_spec.rb +9 -8
  181. data/spec/cucumber/configuration_spec.rb +3 -3
  182. data/spec/cucumber/constantize_spec.rb +2 -1
  183. data/spec/cucumber/core_ext/proc_spec.rb +32 -43
  184. data/spec/cucumber/file_specs_spec.rb +41 -0
  185. data/spec/cucumber/formatter/ansicolor_spec.rb +11 -10
  186. data/spec/cucumber/formatter/debug_spec.rb +569 -0
  187. data/spec/cucumber/formatter/duration_spec.rb +6 -6
  188. data/spec/cucumber/formatter/html_spec.rb +53 -62
  189. data/spec/cucumber/formatter/interceptor_spec.rb +38 -31
  190. data/spec/cucumber/formatter/junit_spec.rb +34 -28
  191. data/spec/cucumber/formatter/pretty_spec.rb +238 -52
  192. data/spec/cucumber/formatter/progress_spec.rb +2 -2
  193. data/spec/cucumber/formatter/spec_helper.rb +23 -17
  194. data/spec/cucumber/rake/forked_spec.rb +13 -22
  195. data/spec/cucumber/rb_support/rb_language_spec.rb +76 -67
  196. data/spec/cucumber/rb_support/rb_step_definition_spec.rb +63 -42
  197. data/spec/cucumber/rb_support/rb_transform_spec.rb +4 -3
  198. data/spec/cucumber/rb_support/regexp_argument_matcher_spec.rb +6 -4
  199. data/spec/cucumber/rb_support/snippet_spec.rb +42 -33
  200. data/spec/cucumber/reports/legacy_formatter_spec.rb +1750 -0
  201. data/spec/cucumber/runtime/for_programming_languages_spec.rb +11 -10
  202. data/spec/cucumber/runtime/gated_receiver_spec.rb +47 -0
  203. data/spec/cucumber/runtime/results_spec.rb +33 -26
  204. data/spec/cucumber/runtime/support_code_spec.rb +29 -29
  205. data/spec/cucumber/runtime/tag_limits/filter_spec.rb +59 -0
  206. data/spec/cucumber/runtime/tag_limits/test_case_index_spec.rb +38 -0
  207. data/spec/cucumber/runtime/tag_limits/verifier_spec.rb +57 -0
  208. data/spec/cucumber/runtime_spec.rb +39 -34
  209. data/spec/cucumber/step_match_spec.rb +30 -20
  210. data/spec/cucumber/wire_support/configuration_spec.rb +8 -5
  211. data/spec/cucumber/wire_support/connection_spec.rb +12 -8
  212. data/spec/cucumber/wire_support/wire_exception_spec.rb +14 -8
  213. data/spec/cucumber/wire_support/wire_language_spec.rb +8 -9
  214. data/spec/cucumber/wire_support/wire_packet_spec.rb +17 -13
  215. data/spec/cucumber/world/pending_spec.rb +36 -36
  216. data/spec/simplecov_setup.rb +18 -0
  217. data/spec/spec_helper.rb +3 -9
  218. metadata +298 -507
  219. data/.gitattributes +0 -1
  220. data/.ruby-version +0 -1
  221. data/examples/python/README.textile +0 -8
  222. data/examples/python/Rakefile +0 -4
  223. data/examples/python/features/fibonacci.feature +0 -19
  224. data/examples/python/features/step_definitions/fib_steps.py +0 -11
  225. data/examples/python/lib/fib.py +0 -7
  226. data/examples/ramaze/README.textile +0 -7
  227. data/examples/ramaze/app.rb +0 -21
  228. data/examples/ramaze/features/add.feature +0 -11
  229. data/examples/ramaze/features/step_definitions/add_steps.rb +0 -15
  230. data/examples/ramaze/features/support/env.rb +0 -32
  231. data/examples/ramaze/layout/default.html.erb +0 -8
  232. data/examples/ramaze/view/index.html.erb +0 -5
  233. data/examples/ruby2python/README.textile +0 -8
  234. data/examples/ruby2python/Rakefile +0 -4
  235. data/examples/ruby2python/features/fibonacci.feature +0 -19
  236. data/examples/ruby2python/features/step_definitions/fib_steps.rb +0 -7
  237. data/examples/ruby2python/features/support/env.rb +0 -21
  238. data/examples/ruby2python/lib/fib.py +0 -7
  239. data/examples/v8/Rakefile +0 -6
  240. data/examples/v8/features/fibonacci.feature +0 -43
  241. data/examples/v8/features/step_definitions/fib_steps.js +0 -49
  242. data/examples/v8/features/support/env.js +0 -14
  243. data/examples/v8/lib/fibonacci.js +0 -19
  244. data/features/.cucumber/stepdefs.json +0 -722
  245. data/features/assertions.feature +0 -73
  246. data/features/autoformat_profile_output.feature +0 -23
  247. data/features/before_hook.feature +0 -43
  248. data/features/bootstrap.feature +0 -26
  249. data/features/drb_server_integration.feature +0 -63
  250. data/features/execute_with_tag_filter.feature +0 -63
  251. data/features/parsing.feature +0 -18
  252. data/features/rerun_formatter.feature +0 -99
  253. data/features/run_specific_scenarios.feature +0 -47
  254. data/features/stats_formatters.feature +0 -73
  255. data/features/step_definitions/cucumber-features/cucumber_ruby_mappings.rb +0 -197
  256. data/features/step_definitions/cucumber_steps.rb +0 -57
  257. data/features/step_definitions/drb_steps.rb +0 -3
  258. data/features/support/env.rb +0 -57
  259. data/fixtures/json/features/background.feature +0 -7
  260. data/fixtures/json/features/embed.feature +0 -4
  261. data/fixtures/json/features/one_passing_one_failing.feature +0 -11
  262. data/fixtures/json/features/step_definitions/steps.rb +0 -32
  263. data/fixtures/json/features/tables.feature +0 -13
  264. data/fixtures/junit/features/one_passing_one_failing.feature +0 -8
  265. data/fixtures/junit/features/pending.feature +0 -7
  266. data/fixtures/junit/features/scenario_outline.feature +0 -9
  267. data/fixtures/junit/features/some_subdirectory/one_passing_one_failing.feature +0 -8
  268. data/fixtures/junit/features/step_definitions/steps.rb +0 -11
  269. data/fixtures/self_test/README.textile +0 -6
  270. data/fixtures/self_test/Rakefile +0 -6
  271. data/fixtures/self_test/features/call_undefined_step_from_step_def.feature +0 -7
  272. data/fixtures/self_test/features/failing_expectation.feature +0 -4
  273. data/fixtures/self_test/features/lots_of_undefined.feature +0 -8
  274. data/fixtures/self_test/features/multiline_name.feature +0 -27
  275. data/fixtures/self_test/features/outline_sample.feature +0 -15
  276. data/fixtures/self_test/features/sample.feature +0 -21
  277. data/fixtures/self_test/features/search_sample.feature +0 -32
  278. data/fixtures/self_test/features/step_definitions/sample_steps.rb +0 -84
  279. data/fixtures/self_test/features/support/bubble_256x256.png +0 -0
  280. data/fixtures/self_test/features/support/env.rb +0 -26
  281. data/fixtures/self_test/features/tags_sample.feature +0 -17
  282. data/fixtures/self_test/features/tons_of_cukes.feature +0 -52
  283. data/fixtures/self_test/features/undefined_multiline_args.feature +0 -12
  284. data/fixtures/self_test/list-of-features.txt +0 -1
  285. data/fixtures/steps_library/features/step_definitions/steps_lib1.rb +0 -8
  286. data/fixtures/steps_library/features/step_definitions/steps_lib2.rb +0 -8
  287. data/fixtures/tickets/Rakefile +0 -20
  288. data/fixtures/tickets/features.html +0 -138
  289. data/fixtures/tickets/features/172.feature +0 -28
  290. data/fixtures/tickets/features/177/1.feature +0 -28
  291. data/fixtures/tickets/features/177/2.feature +0 -20
  292. data/fixtures/tickets/features/177/3.feature +0 -18
  293. data/fixtures/tickets/features/180.feature +0 -7
  294. data/fixtures/tickets/features/229/tagged_hooks.feature +0 -8
  295. data/fixtures/tickets/features/229/tagged_hooks.rb +0 -14
  296. data/fixtures/tickets/features/236.feature +0 -13
  297. data/fixtures/tickets/features/241.feature +0 -12
  298. data/fixtures/tickets/features/246.feature +0 -4
  299. data/fixtures/tickets/features/248.feature +0 -11
  300. data/fixtures/tickets/features/270/back.feature +0 -14
  301. data/fixtures/tickets/features/270/back.steps.rb +0 -14
  302. data/fixtures/tickets/features/272/hooks.feature +0 -26
  303. data/fixtures/tickets/features/272/hooks_steps.rb +0 -53
  304. data/fixtures/tickets/features/279/py_string_indent.feature +0 -25
  305. data/fixtures/tickets/features/279/py_string_indent.steps.rb +0 -12
  306. data/fixtures/tickets/features/279/wrong.feature_ +0 -11
  307. data/fixtures/tickets/features/301/filter_background_tagged_hooks.feature +0 -6
  308. data/fixtures/tickets/features/301/filter_background_tagged_hooks_steps.rb +0 -12
  309. data/fixtures/tickets/features/306/only_background.feature +0 -4
  310. data/fixtures/tickets/features/around_timeout.feature +0 -6
  311. data/fixtures/tickets/features/gherkin_67.feature +0 -12
  312. data/fixtures/tickets/features/gherkin_68.feature +0 -4
  313. data/fixtures/tickets/features/half_manual.feature +0 -11
  314. data/fixtures/tickets/features/lib/eatting_machine.rb +0 -18
  315. data/fixtures/tickets/features/lib/pantry.rb +0 -20
  316. data/fixtures/tickets/features/scenario_outline.feature +0 -95
  317. data/fixtures/tickets/features/step_definitons/246_steps.rb +0 -3
  318. data/fixtures/tickets/features/step_definitons/248_steps.rb +0 -15
  319. data/fixtures/tickets/features/step_definitons/around_timeout_steps.rb +0 -9
  320. data/fixtures/tickets/features/step_definitons/half_manual_steps.rb +0 -11
  321. data/fixtures/tickets/features/step_definitons/scenario_outline_steps.rb +0 -42
  322. data/fixtures/tickets/features/step_definitons/tickets_steps.rb +0 -88
  323. data/fixtures/tickets/features/table_diffing.feature +0 -13
  324. data/fixtures/tickets/features/tickets.feature +0 -28
  325. data/legacy_features/README.md +0 -14
  326. data/legacy_features/announce.feature +0 -152
  327. data/legacy_features/bug_371.feature +0 -32
  328. data/legacy_features/bug_464.feature +0 -16
  329. data/legacy_features/bug_475.feature +0 -42
  330. data/legacy_features/bug_585_tab_indentation.feature +0 -22
  331. data/legacy_features/bug_600.feature +0 -73
  332. data/legacy_features/cucumber_cli.feature +0 -584
  333. data/legacy_features/cucumber_cli_outlines.feature +0 -117
  334. data/legacy_features/default_snippets.feature +0 -43
  335. data/legacy_features/diffing.feature +0 -25
  336. data/legacy_features/drb_server_integration.feature +0 -174
  337. data/legacy_features/exclude_files.feature +0 -20
  338. data/legacy_features/expand.feature +0 -60
  339. data/legacy_features/junit_formatter.feature +0 -214
  340. data/legacy_features/language_from_header.feature +0 -30
  341. data/legacy_features/multiline_names.feature +0 -44
  342. data/legacy_features/report_called_undefined_steps.feature +0 -35
  343. data/legacy_features/rerun_formatter.feature +0 -52
  344. data/legacy_features/simplest.feature +0 -11
  345. data/legacy_features/snippet.feature +0 -23
  346. data/legacy_features/snippets_when_using_star_keyword.feature +0 -38
  347. data/legacy_features/step_definitions/cucumber_steps.rb +0 -179
  348. data/legacy_features/step_definitions/extra_steps.rb +0 -2
  349. data/legacy_features/step_definitions/simplest_steps.rb +0 -3
  350. data/legacy_features/support/env.rb +0 -161
  351. data/legacy_features/support/env.rb.simplest +0 -7
  352. data/legacy_features/table_mapping.feature +0 -34
  353. data/legacy_features/transform.feature +0 -245
  354. data/legacy_features/unicode_table.feature +0 -35
  355. data/lib/README.rdoc +0 -12
  356. data/lib/cucumber/ast.rb +0 -30
  357. data/lib/cucumber/ast/background.rb +0 -116
  358. data/lib/cucumber/ast/comment.rb +0 -31
  359. data/lib/cucumber/ast/doc_string.rb +0 -61
  360. data/lib/cucumber/ast/empty_background.rb +0 -33
  361. data/lib/cucumber/ast/examples.rb +0 -49
  362. data/lib/cucumber/ast/feature.rb +0 -99
  363. data/lib/cucumber/ast/features.rb +0 -38
  364. data/lib/cucumber/ast/has_steps.rb +0 -74
  365. data/lib/cucumber/ast/location.rb +0 -41
  366. data/lib/cucumber/ast/multiline_argument.rb +0 -30
  367. data/lib/cucumber/ast/names.rb +0 -13
  368. data/lib/cucumber/ast/outline_table.rb +0 -194
  369. data/lib/cucumber/ast/scenario.rb +0 -103
  370. data/lib/cucumber/ast/scenario_outline.rb +0 -146
  371. data/lib/cucumber/ast/step.rb +0 -122
  372. data/lib/cucumber/ast/step_collection.rb +0 -92
  373. data/lib/cucumber/ast/step_invocation.rb +0 -196
  374. data/lib/cucumber/ast/table.rb +0 -738
  375. data/lib/cucumber/ast/tags.rb +0 -28
  376. data/lib/cucumber/ast/tree_walker.rb +0 -191
  377. data/lib/cucumber/ast/visitor.rb +0 -11
  378. data/lib/cucumber/broadcaster.rb +0 -13
  379. data/lib/cucumber/cli/drb_client.rb +0 -43
  380. data/lib/cucumber/feature_file.rb +0 -101
  381. data/lib/cucumber/formatter/ordered_xml_markup.rb +0 -24
  382. data/lib/cucumber/js_support/js_dsl.js +0 -57
  383. data/lib/cucumber/js_support/js_language.rb +0 -185
  384. data/lib/cucumber/js_support/js_snippets.rb +0 -27
  385. data/lib/cucumber/parser.rb +0 -2
  386. data/lib/cucumber/parser/gherkin_builder.rb +0 -284
  387. data/lib/cucumber/py_support/py_dsl.py +0 -10
  388. data/lib/cucumber/py_support/py_language.py +0 -10
  389. data/lib/cucumber/py_support/py_language.rb +0 -80
  390. data/lib/cucumber/step_mother.rb +0 -10
  391. data/spec/cucumber/ast/background_spec.rb +0 -122
  392. data/spec/cucumber/ast/doc_string_spec.rb +0 -40
  393. data/spec/cucumber/ast/feature_factory.rb +0 -72
  394. data/spec/cucumber/ast/feature_spec.rb +0 -63
  395. data/spec/cucumber/ast/features_spec.rb +0 -51
  396. data/spec/cucumber/ast/outline_table_spec.rb +0 -21
  397. data/spec/cucumber/ast/scenario_outline_spec.rb +0 -74
  398. data/spec/cucumber/ast/step_spec.rb +0 -68
  399. data/spec/cucumber/ast/table_spec.rb +0 -594
  400. data/spec/cucumber/ast/tree_walker_spec.rb +0 -19
  401. data/spec/cucumber/broadcaster_spec.rb +0 -15
  402. data/spec/cucumber/cli/drb_client_spec.rb +0 -76
  403. data/spec/cucumber/rake/rcov_spec.rb +0 -71
  404. data/spec/cucumber/wire_support/wire_step_definition_spec.rb +0 -20
@@ -50,7 +50,7 @@ Feature: #{name}
50
50
  end
51
51
 
52
52
  def generate_step_definition_filename
53
- "features/step_definitions/test_steps#{next_increment(:step_defs)}.rb"
53
+ "features/step_definitions/steps#{next_increment(:step_defs)}.rb"
54
54
  end
55
55
 
56
56
  def filename(name)
@@ -0,0 +1,33 @@
1
+ # override aruba to filter out some stuff
2
+ module NormaliseArubaOutput
3
+ def all_stdout
4
+ normalise_output(super)
5
+ end
6
+
7
+ def normalise_output(out)
8
+ out = out.gsub(/#{Dir.pwd}\/tmp\/aruba/, '.') # Remove absolute paths
9
+ out = out.gsub(/tmp\/aruba\//, '') # Fix aruba path
10
+ out = out.gsub(/^.*cucumber_process\.rb.*$\n/, '')
11
+ out = out.gsub(/^\d+m\d+\.\d+s$/, '0m0.012s') # Make duration predictable
12
+ out = out.gsub(/Coverage report generated .+$\n/, '') # Remove SimpleCov message
13
+ end
14
+
15
+ def normalise_json(json)
16
+ #make sure duration was captured (should be >= 0)
17
+ #then set it to what is "expected" since duration is dynamic
18
+ json.each do |feature|
19
+ elements = feature.fetch('elements') { [] }
20
+ elements.each do |scenario|
21
+ scenario['steps'].each do |step|
22
+ if step['result']
23
+ expect(step['result']['duration']).to be >= 0
24
+ step['result']['duration'] = 1
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+
32
+ World(NormaliseArubaOutput)
33
+
@@ -0,0 +1,5 @@
1
+ desc 'Run all tests and collect code coverage'
2
+ task :cov do
3
+ ENV['SIMPLECOV'] = 'features'
4
+ Rake::Task['default'].invoke
5
+ end
@@ -7,16 +7,12 @@ class Cucumber::Rake::Task
7
7
  Cucumber::WINDOWS ? 'jruby_win' : 'jruby'
8
8
  elsif Cucumber::WINDOWS_MRI
9
9
  'windows_mri'
10
- elsif Cucumber::RUBY_1_8_7
11
- 'ruby_1_8_7'
12
10
  elsif Cucumber::RUBY_1_9
13
11
  'ruby_1_9'
14
12
  elsif Cucumber::RUBY_2_0
15
13
  'ruby_2_0'
16
14
  elsif Cucumber::RUBY_2_1
17
15
  'ruby_2_1'
18
- elsif Cucumber::RUBY_2_2
19
- 'ruby_2_2'
20
16
  end
21
17
  end
22
18
  end
@@ -26,9 +22,4 @@ Cucumber::Rake::Task.new(:features) do |t|
26
22
  t.set_profile_for_current_ruby
27
23
  end
28
24
 
29
- Cucumber::Rake::Task.new(:legacy_features) do |t|
30
- t.fork = true
31
- t.profile = :legacy
32
- end
33
-
34
- task :cucumber => [:features, :legacy_features]
25
+ task :cucumber => :features
@@ -2,7 +2,5 @@ require 'rspec/core/rake_task'
2
2
 
3
3
  desc "Run RSpec"
4
4
  RSpec::Core::RakeTask.new do |t|
5
- t.rcov = ENV['RCOV']
6
- t.rcov_opts = %w{--exclude osx\/objc,gems\/,spec\/}
7
5
  t.verbose = true
8
6
  end
@@ -30,11 +30,14 @@ namespace :api do
30
30
  task :release do
31
31
  Dir.chdir(SITE_DIR) do
32
32
  sh 'git add .'
33
- sh "git commit -m 'Update API docs for Cucumber-Ruby v#{Cucumber::VERSION}'"
33
+ sh '''git commit -m "Update API docs for Cucumber-Ruby v#{Cucumber::VERSION}"'''
34
34
  sh 'git push'
35
35
  end
36
36
  end
37
37
 
38
38
  desc "Generate YARD docs for Cucumber's API"
39
39
  task :doc => [:yard, :sync_with_git, :copy_to_website, :release]
40
+
41
+ desc "Build cucumber gem and doc locally"
42
+ task :build => [:yard, :sync_with_git, :copy_to_website]
40
43
  end
@@ -3,10 +3,8 @@ $:.unshift(File.dirname(__FILE__)) unless
3
3
 
4
4
  require 'yaml'
5
5
  require 'cucumber/platform'
6
- require 'cucumber/parser'
7
- require 'cucumber/step_mother'
6
+ require 'cucumber/runtime'
8
7
  require 'cucumber/cli/main'
9
- require 'cucumber/broadcaster'
10
8
  require 'cucumber/step_definitions'
11
9
  require 'cucumber/term/ansicolor'
12
10
 
@@ -25,10 +25,8 @@ module Cucumber
25
25
  @options.parse!(args)
26
26
  arrange_formats
27
27
  raise("You can't use both --strict and --wip") if strict? && wip?
28
-
28
+ # todo: remove
29
29
  @options[:tag_expression] = Gherkin::TagExpression.new(@options[:tag_expressions])
30
- return @args.replace(@options.expanded_args_without_drb) if drb?
31
-
32
30
  set_environment_variables
33
31
  end
34
32
 
@@ -36,6 +34,14 @@ module Cucumber
36
34
  @options[:verbose]
37
35
  end
38
36
 
37
+ def randomize?
38
+ @options[:order] == 'random'
39
+ end
40
+
41
+ def seed
42
+ Integer(@options[:seed] || rand(0xFFFF))
43
+ end
44
+
39
45
  def strict?
40
46
  @options[:strict]
41
47
  end
@@ -48,14 +54,6 @@ module Cucumber
48
54
  @options[:guess]
49
55
  end
50
56
 
51
- def drb?
52
- @options[:drb]
53
- end
54
-
55
- def drb_port
56
- @options[:drb_port].to_i if @options[:drb_port]
57
- end
58
-
59
57
  def dry_run?
60
58
  @options[:dry_run]
61
59
  end
@@ -117,7 +115,7 @@ module Cucumber
117
115
  Dir["#{path}/**/*.feature"].sort
118
116
  elsif path[0..0] == '@' and # @listfile.txt
119
117
  File.file?(path[1..-1]) # listfile.txt is a file
120
- IO.read(path[1..-1]).split(/(.*?\.feature.*?) /).collect(&:strip).reject(&:empty?)
118
+ IO.read(path[1..-1]).split
121
119
  else
122
120
  path
123
121
  end
@@ -140,10 +138,24 @@ module Cucumber
140
138
  logger
141
139
  end
142
140
 
141
+ # todo: remove
143
142
  def tag_expression
144
143
  Gherkin::TagExpression.new(@options[:tag_expressions])
145
144
  end
146
145
 
146
+ def tag_limits
147
+ tag_expression.limits.to_hash
148
+ end
149
+
150
+ def tag_expressions
151
+ @options[:tag_expressions]
152
+ end
153
+
154
+ def name_regexps
155
+ @options[:name_regexps]
156
+ end
157
+
158
+ # todo: remove as unused
147
159
  def filters
148
160
  @options.filters
149
161
  end
@@ -160,21 +172,8 @@ module Cucumber
160
172
  def paths
161
173
  @options[:paths]
162
174
  end
163
- private
164
- def with_default_features_path(paths)
165
- return ['features'] if paths.empty?
166
- paths
167
- end
168
-
169
175
 
170
176
  def formatters(runtime)
171
- # TODO: We should remove the autoformat functionality. That
172
- # can be done with the gherkin CLI.
173
- if @options[:autoformat]
174
- require 'cucumber/formatter/pretty'
175
- return [Formatter::Pretty.new(runtime, out_stream, @options)]
176
- end
177
-
178
177
  @options[:formats].map do |format_and_out|
179
178
  format = format_and_out[0]
180
179
  path_or_io = format_and_out[1]
@@ -188,6 +187,12 @@ module Cucumber
188
187
  end
189
188
  end
190
189
 
190
+ private
191
+ def with_default_features_path(paths)
192
+ return ['features'] if paths.empty?
193
+ paths
194
+ end
195
+
191
196
  class LogFormatter < ::Logger::Formatter
192
197
  def call(severity, time, progname, msg)
193
198
  msg
@@ -7,10 +7,7 @@ end
7
7
  require 'optparse'
8
8
  require 'cucumber'
9
9
  require 'logger'
10
- require 'cucumber/parser'
11
- require 'cucumber/feature_file'
12
10
  require 'cucumber/cli/configuration'
13
- require 'cucumber/cli/drb_client'
14
11
 
15
12
  module Cucumber
16
13
  module Cli
@@ -21,21 +18,15 @@ module Cucumber
21
18
  end
22
19
  end
23
20
 
24
- def initialize(args, stdin=STDIN, out=STDOUT, err=STDERR, kernel=Kernel)
25
- raise "args can't be nil" unless args
26
- raise "out can't be nil" unless out
27
- raise "err can't be nil" unless err
28
- raise "kernel can't be nil" unless kernel
21
+ def initialize(args, _=nil, out=STDOUT, err=STDERR, kernel=Kernel)
29
22
  @args = args
30
23
  @out = out
31
24
  @err = err
32
25
  @kernel = kernel
33
- @configuration = nil
34
26
  end
35
27
 
36
28
  def execute!(existing_runtime = nil)
37
29
  trap_interrupt
38
- return @drb_output if run_drb_client
39
30
 
40
31
  runtime = if existing_runtime
41
32
  existing_runtime.configure(configuration)
@@ -48,8 +39,16 @@ module Cucumber
48
39
  runtime.write_stepdefs_json
49
40
  failure = runtime.results.failure? || Cucumber.wants_to_quit
50
41
  @kernel.exit(failure ? 1 : 0)
42
+ rescue FileNotFoundException => e
43
+ @err.puts(e.message)
44
+ @err.puts("Couldn't open #{e.path}")
45
+ @kernel.exit(1)
46
+ rescue FeatureFolderNotFoundException => e
47
+ @err.puts(e.message + ". Please create a #{e.path} directory to get started.")
48
+ @kernel.exit(1)
51
49
  rescue ProfilesNotDefinedError, YmlLoadError, ProfileNotFound => e
52
50
  @err.puts(e.message)
51
+ @kernel.exit(1)
53
52
  rescue SystemExit => e
54
53
  @kernel.exit(e.status)
55
54
  rescue Errno::EACCES, Errno::ENOENT => e
@@ -62,25 +61,14 @@ module Cucumber
62
61
  end
63
62
 
64
63
  def configuration
65
- return @configuration if @configuration
66
-
67
- @configuration = Configuration.new(@out, @err)
68
- @configuration.parse!(@args)
69
- Cucumber.logger = @configuration.log
70
- @configuration
64
+ @configuration ||= Configuration.new(@out, @err).tap do |configuration|
65
+ configuration.parse!(@args)
66
+ Cucumber.logger = configuration.log
67
+ end
71
68
  end
72
69
 
73
70
  private
74
71
 
75
- def run_drb_client
76
- return false unless configuration.drb?
77
- warn("Spork is no longer supported as of Cucumber 1.3.0. Please downgrade to version 1.2.5")
78
- @drb_output = DRbClient.run(@args, @err, @out, configuration.drb_port)
79
- true
80
- rescue DRbClientError => e
81
- @err.puts "WARNING: #{e.message} Running features locally:"
82
- end
83
-
84
72
  def trap_interrupt
85
73
  trap('INT') do
86
74
  exit!(1) if Cucumber.wants_to_quit
@@ -27,7 +27,7 @@ module Cucumber
27
27
  max = BUILTIN_FORMATS.keys.map{|s| s.length}.max
28
28
  FORMAT_HELP = (BUILTIN_FORMATS.keys.sort.map do |key|
29
29
  " #{key}#{' ' * (max - key.length)} : #{BUILTIN_FORMATS[key][1]}"
30
- end) + ["Use --format rerun --out features.txt to write out failing",
30
+ end) + ["Use --format rerun --out rerun.txt to write out failing",
31
31
  "features. You can rerun them with cucumber @rerun.txt.",
32
32
  "FORMAT can also be the fully qualified class name of",
33
33
  "your own custom formatter. If the class isn't loaded,",
@@ -38,8 +38,6 @@ module Cucumber
38
38
  "path underneath your features/support directory or anywhere",
39
39
  "on Ruby's LOAD_PATH, for example in a Ruby gem."
40
40
  ]
41
- DRB_FLAG = '--drb'
42
- DRB_OPTIONAL_FLAG = '--[no-]drb'
43
41
  PROFILE_SHORT_FLAG = '-p'
44
42
  NO_PROFILE_SHORT_FLAG = '-P'
45
43
  PROFILE_LONG_FLAG = '--profile'
@@ -47,8 +45,9 @@ module Cucumber
47
45
  OPTIONS_WITH_ARGS = ['-r', '--require', '--i18n', '-f', '--format', '-o', '--out',
48
46
  '-t', '--tags', '-n', '--name', '-e', '--exclude',
49
47
  PROFILE_SHORT_FLAG, PROFILE_LONG_FLAG,
50
- '-a', '--autoformat', '-l', '--lines', '--port',
48
+ '-l', '--lines', '--port',
51
49
  '-I', '--snippet-type']
50
+ ORDER_TYPES = %w{defined random}
52
51
 
53
52
  def self.parse(args, out_stream, error_stream, options = {})
54
53
  new(out_stream, error_stream, options).parse!(args)
@@ -76,43 +75,6 @@ module Cucumber
76
75
  @options[key] = value
77
76
  end
78
77
 
79
- def expanded_args_without_drb
80
- return @expanded_args_without_drb if @expanded_args_without_drb
81
- @expanded_args_without_drb = (
82
- previous_flag_was_profile = false
83
- previous_flag_requires_arg = false
84
-
85
- @expanded_args.reject do |arg|
86
- # ignore profiles
87
- if previous_flag_was_profile
88
- previous_flag_was_profile = false
89
- next true
90
- end
91
- if [PROFILE_SHORT_FLAG, PROFILE_LONG_FLAG].include?(arg)
92
- previous_flag_was_profile = true
93
- next true
94
- end
95
-
96
- # accept all options which requires arguments
97
- # and don't try to look @overridden_paths in it's arguments!
98
- if previous_flag_requires_arg
99
- previous_flag_requires_arg = false
100
- next false
101
- end
102
- if OPTIONS_WITH_ARGS.include?(arg)
103
- previous_flag_requires_arg = true
104
- next false
105
- end
106
-
107
- # ignore --drb flag and overridden features paths
108
- arg == DRB_FLAG || @overridden_paths.include?(arg)
109
- end
110
- )
111
-
112
- @expanded_args_without_drb.push("--no-profile") unless @expanded_args_without_drb.include?(NO_PROFILE_LONG_FLAG) || @expanded_args_without_drb.include?(NO_PROFILE_SHORT_FLAG)
113
- @expanded_args_without_drb
114
- end
115
-
116
78
  def parse!(args)
117
79
  @args = args
118
80
  @expanded_args = @args.dup
@@ -220,16 +182,6 @@ module Cucumber
220
182
  "This also omits the loading of your support/env.rb file if it exists.") do
221
183
  @options[:dry_run] = true
222
184
  end
223
- opts.on("-a", "--autoformat DIR",
224
- "Reformats (pretty prints) feature files and write them to DIRECTORY.",
225
- "Be careful if you choose to overwrite the originals.",
226
- "Implies --dry-run --format pretty.") do |directory|
227
- @options[:autoformat] = directory
228
- Cucumber::Term::ANSIColor.coloring = false
229
- @options[:dry_run] = true
230
- @quiet = true
231
- end
232
-
233
185
  opts.on("-m", "--no-multiline",
234
186
  "Don't print multiline strings and tables under steps.") do
235
187
  @options[:no_multiline] = true
@@ -271,15 +223,21 @@ module Cucumber
271
223
  opts.on("-x", "--expand", "Expand Scenario Outline Tables in output.") do
272
224
  @options[:expand] = true
273
225
  end
274
- opts.on(DRB_OPTIONAL_FLAG, "Run features against a DRb server. (i.e. with the spork gem)") do |drb|
275
- @options[:drb] = drb
276
- end
277
- opts.on("--port PORT", "Specify DRb port. Ignored without --drb") do |port|
278
- @options[:drb_port] = port
279
- end
280
226
  opts.on("--dotcucumber DIR", "Write metadata to DIR") do |dir|
281
227
  @options[:dotcucumber] = dir
282
228
  end
229
+ opts.on("--order TYPE[:SEED]", "Run examples in the specified order. Available types:",
230
+ *<<-TEXT.split("\n")) do |order|
231
+ [defined] Run scenarios in the order they were defined (default).
232
+ [random] Shuffle scenarios before running.
233
+ Specify SEED to reproduce the shuffling from a previous run.
234
+ e.g. --order random:5738
235
+ TEXT
236
+ @options[:order], @options[:seed] = *order.split(":")
237
+ unless ORDER_TYPES.include?(@options[:order])
238
+ fail "'#{@options[:order]}' is not a recognised order type. Please use one of #{ORDER_TYPES.join(", ")}."
239
+ end
240
+ end
283
241
  opts.on_tail("--version", "Show version.") do
284
242
  @out_stream.puts Cucumber::VERSION
285
243
  Kernel.exit(0)
@@ -14,6 +14,10 @@ module Cucumber
14
14
  @options = default_options.merge(user_options)
15
15
  end
16
16
 
17
+ def randomize?
18
+ @options[:randomize]
19
+ end
20
+
17
21
  def dry_run?
18
22
  @options[:dry_run]
19
23
  end
@@ -33,12 +33,13 @@ module Cucumber
33
33
  end
34
34
 
35
35
  private
36
- def constantize_name(constant, name)
37
- if Cucumber::RUBY_1_8_7
38
- constant.const_defined?(name) ? constant.const_get(name) : constant.const_missing(name)
39
- else
40
- constant.const_defined?(name, false) ? constant.const_get(name, false) : constant.const_missing(name)
41
- end
36
+
37
+ def constantize_name(constant, name)
38
+ if constant.const_defined?(name, false)
39
+ constant.const_get(name, false)
40
+ else
41
+ constant.const_missing(name)
42
42
  end
43
+ end
43
44
  end
44
45
  end