cucumber 1.3.10 → 2.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 (465) hide show
  1. checksums.yaml +4 -4
  2. data/.coveralls.yml +1 -0
  3. data/.rspec +1 -1
  4. data/.travis.yml +4 -3
  5. data/CONTRIBUTING.md +9 -0
  6. data/Gemfile +9 -2
  7. data/History.md +212 -22
  8. data/LICENSE +2 -2
  9. data/README.md +4 -4
  10. data/Rakefile +10 -1
  11. data/bin/cucumber +1 -5
  12. data/cucumber.gemspec +10 -13
  13. data/cucumber.yml +14 -24
  14. data/examples/{ramaze → i18n/el}/Rakefile +1 -1
  15. data/examples/i18n/el/features/addition.feature +17 -0
  16. data/examples/i18n/el/features/division.feature +10 -0
  17. data/examples/i18n/el/features/step_definitions/calculator_steps.rb +24 -0
  18. data/examples/i18n/el/lib/calculator.rb +14 -0
  19. data/examples/i18n/fr/Rakefile +3 -1
  20. data/examples/i18n/fr/features/step_definitions/calculatrice_steps.rb +2 -2
  21. data/examples/i18n/ht/Rakefile +6 -0
  22. data/examples/i18n/ht/features/adisyon.feature +17 -0
  23. data/examples/i18n/ht/features/divizyon.feature +10 -0
  24. data/examples/i18n/ht/features/step_definitions/kalkilatris_steps.rb +25 -0
  25. data/examples/i18n/ht/lib/kalkilatris.rb +14 -0
  26. data/examples/i18n/zh-CN/features/{step_definitons → step_definitions}/calculator_steps.rb +4 -4
  27. data/examples/tcl/features/step_definitions/fib_steps.rb +1 -1
  28. data/{legacy_features → features/docs}/api/list_step_defs_as_json.feature +14 -14
  29. data/{legacy_features → features/docs}/api/run_cli_main_with_existing_runtime.feature +5 -10
  30. data/features/{backtraces.feature → docs/cli/backtraces.feature} +2 -2
  31. data/features/docs/cli/dry_run.feature +73 -0
  32. data/features/docs/cli/exclude_files.feature +18 -0
  33. data/features/docs/cli/execute_with_tag_filter.feature +117 -0
  34. data/features/docs/cli/randomize.feature +46 -0
  35. data/features/docs/cli/require.feature +27 -0
  36. data/features/docs/cli/run_scenarios_matching_name.feature +104 -0
  37. data/features/docs/cli/run_specific_scenarios.feature +75 -0
  38. data/features/docs/cli/showing_differences.feature +43 -0
  39. data/features/docs/cli/specifying_multiple_formatters.feature +44 -0
  40. data/features/docs/cli/strict_mode.feature +64 -0
  41. data/features/{nested_steps.feature → docs/defining_steps/nested_steps.feature} +52 -6
  42. data/features/{nested_steps_i18n.feature → docs/defining_steps/nested_steps_i18n.feature} +0 -2
  43. data/features/{step_definitions.feature → docs/defining_steps/one_line_step_definitions.feature} +3 -3
  44. data/features/docs/defining_steps/printing_messages.feature +148 -0
  45. data/features/docs/defining_steps/skip_scenario.feature +62 -0
  46. data/features/docs/defining_steps/snippets.feature +56 -0
  47. data/{legacy_features → features/docs/defining_steps}/table_diffing.feature +21 -16
  48. data/features/{transforms.feature → docs/defining_steps/transforms.feature} +2 -2
  49. data/{legacy_features/exception_in_after_block.feature → features/docs/exception_in_after_hook.feature} +25 -26
  50. data/{legacy_features/exception_in_after_step_block.feature → features/docs/exception_in_after_step_hook.feature} +22 -24
  51. data/features/docs/exception_in_around_hook.feature +80 -0
  52. data/{legacy_features/exception_in_before_block.feature → features/docs/exception_in_before_hook.feature} +18 -20
  53. data/features/docs/extending_cucumber/custom_filter.feature +29 -0
  54. data/features/docs/extending_cucumber/custom_formatter.feature +94 -0
  55. data/features/docs/formatters/debug_formatter.feature +47 -0
  56. data/features/{formatter_step_file_colon_line.feature → docs/formatters/formatter_step_file_colon_line.feature} +2 -4
  57. data/features/{html_formatter.feature → docs/formatters/html_formatter.feature} +10 -14
  58. data/features/docs/formatters/json_formatter.feature +760 -0
  59. data/features/docs/formatters/junit_formatter.feature +316 -0
  60. data/features/docs/formatters/pretty_formatter.feature +73 -0
  61. data/features/{progress_formatter.feature → docs/formatters/progress_formatter.feature} +1 -1
  62. data/features/docs/formatters/rerun_formatter.feature +136 -0
  63. data/features/docs/formatters/usage_formatter.feature +102 -0
  64. data/features/docs/getting_started.feature +27 -0
  65. data/features/{background.feature → docs/gherkin/background.feature} +149 -91
  66. data/features/{doc_strings.feature → docs/gherkin/doc_strings.feature} +1 -0
  67. data/features/docs/gherkin/expand_option_for_outlines.feature +46 -0
  68. data/features/docs/gherkin/language_from_header.feature +32 -0
  69. data/features/docs/gherkin/outlines.feature +158 -0
  70. data/features/docs/gherkin/unicode_table.feature +32 -0
  71. data/features/docs/gherkin/using_descriptions.feature +88 -0
  72. data/features/docs/gherkin/using_star_notation.feature +37 -0
  73. data/{legacy_features → features/docs}/post_configuration_hook.feature +17 -18
  74. data/{legacy_features → features/docs}/profiles.feature +30 -36
  75. data/{legacy_features → features/docs}/rake_task.feature +30 -41
  76. data/features/{raketask.feature → docs/raketask.feature} +6 -13
  77. data/{legacy_features/wire_protocol_erb.feature → features/docs/wire_protocol/erb_configuration.feature} +7 -8
  78. data/features/docs/wire_protocol/handle_unexpected_response.feature +30 -0
  79. data/features/docs/wire_protocol/invoke_message.feature +216 -0
  80. data/features/docs/wire_protocol/readme.md +26 -0
  81. data/features/docs/wire_protocol/snippets_message.feature +51 -0
  82. data/features/docs/wire_protocol/step_matches_message.feature +81 -0
  83. data/{legacy_features/wire_protocol_table_diffing.feature → features/docs/wire_protocol/table_diffing.feature} +19 -12
  84. data/{legacy_features/wire_protocol_tags.feature → features/docs/wire_protocol/tags.feature} +7 -7
  85. data/{legacy_features/wire_protocol_timeouts.feature → features/docs/wire_protocol/timeouts.feature} +7 -6
  86. data/{legacy_features → features/docs}/work_in_progress.feature +52 -54
  87. data/features/docs/writing_support_code/after_hooks.feature +80 -0
  88. data/{legacy_features → features/docs/writing_support_code}/around_hooks.feature +56 -28
  89. data/features/docs/writing_support_code/before_hook.feature +65 -0
  90. data/features/docs/writing_support_code/hook_order.feature +61 -0
  91. data/features/{load_path.feature → docs/writing_support_code/load_path.feature} +3 -0
  92. data/features/docs/writing_support_code/state.feature +32 -0
  93. data/features/docs/writing_support_code/tagged_hooks.feature +95 -0
  94. data/features/lib/step_definitions/aruba_steps.rb +22 -0
  95. data/features/lib/step_definitions/cucumber_steps.rb +50 -0
  96. data/features/{step_definitions → lib/step_definitions}/iso-8859-1_steps.rb +3 -15
  97. data/features/lib/step_definitions/json_steps.rb +7 -0
  98. data/features/lib/step_definitions/junit_steps.rb +13 -0
  99. data/features/lib/step_definitions/language_steps.rb +4 -5
  100. data/features/lib/step_definitions/profile_steps.rb +15 -0
  101. data/features/lib/step_definitions/ruby_steps.rb +3 -0
  102. data/features/lib/step_definitions/wire_steps.rb +58 -0
  103. data/features/lib/support/env.rb +21 -0
  104. data/{legacy_features → features/lib}/support/fake_wire_server.rb +10 -7
  105. data/features/{support → lib/support}/feature_factory.rb +1 -1
  106. data/features/lib/support/normalise_output.rb +33 -0
  107. data/gem_tasks/cov.rake +5 -0
  108. data/gem_tasks/cucumber.rake +3 -8
  109. data/gem_tasks/rspec.rake +0 -2
  110. data/lib/cucumber/ast.rb +8 -25
  111. data/lib/cucumber/cli/configuration.rb +33 -37
  112. data/lib/cucumber/cli/main.rb +14 -27
  113. data/lib/cucumber/cli/options.rb +22 -60
  114. data/lib/cucumber/cli/profile_loader.rb +1 -1
  115. data/lib/cucumber/configuration.rb +4 -0
  116. data/lib/cucumber/constantize.rb +7 -6
  117. data/lib/cucumber/core_ext/instance_exec.rb +7 -38
  118. data/lib/cucumber/core_ext/proc.rb +1 -1
  119. data/lib/cucumber/encoding.rb +5 -0
  120. data/lib/cucumber/errors.rb +21 -10
  121. data/lib/cucumber/file_specs.rb +37 -0
  122. data/lib/cucumber/filters/activate_steps.rb +33 -0
  123. data/lib/cucumber/filters/apply_after_hooks.rb +9 -0
  124. data/lib/cucumber/filters/apply_after_step_hooks.rb +12 -0
  125. data/lib/cucumber/filters/apply_around_hooks.rb +12 -0
  126. data/lib/cucumber/filters/apply_before_hooks.rb +9 -0
  127. data/lib/cucumber/filters/gated_receiver.rb +25 -0
  128. data/lib/cucumber/filters/prepare_world.rb +45 -0
  129. data/lib/cucumber/filters/quit.rb +28 -0
  130. data/lib/cucumber/filters/randomizer.rb +40 -0
  131. data/lib/cucumber/filters/tag_limits/test_case_index.rb +31 -0
  132. data/lib/cucumber/filters/tag_limits/verifier.rb +59 -0
  133. data/lib/cucumber/filters/tag_limits.rb +45 -0
  134. data/lib/cucumber/filters.rb +9 -0
  135. data/lib/cucumber/formatter/ansicolor.rb +0 -8
  136. data/lib/cucumber/formatter/console.rb +66 -36
  137. data/lib/cucumber/formatter/debug.rb +10 -8
  138. data/lib/cucumber/formatter/fanout.rb +27 -0
  139. data/lib/cucumber/formatter/gherkin_formatter_adapter.rb +122 -12
  140. data/lib/cucumber/formatter/html.rb +67 -18
  141. data/lib/cucumber/formatter/ignore_missing_messages.rb +20 -0
  142. data/lib/cucumber/formatter/interceptor.rb +17 -3
  143. data/lib/cucumber/formatter/json.rb +1 -1
  144. data/lib/cucumber/formatter/junit.rb +105 -5
  145. data/lib/cucumber/formatter/legacy_api/adapter.rb +1060 -0
  146. data/lib/cucumber/formatter/legacy_api/ast.rb +376 -0
  147. data/lib/cucumber/formatter/legacy_api/results.rb +51 -0
  148. data/lib/cucumber/formatter/legacy_api/runtime_facade.rb +30 -0
  149. data/lib/cucumber/formatter/pretty.rb +16 -8
  150. data/lib/cucumber/formatter/progress.rb +10 -0
  151. data/lib/cucumber/formatter/rerun.rb +14 -71
  152. data/lib/cucumber/formatter/unicode.rb +8 -21
  153. data/lib/cucumber/formatter/usage.rb +7 -1
  154. data/lib/cucumber/hooks.rb +97 -0
  155. data/lib/cucumber/language_support/language_methods.rb +0 -54
  156. data/lib/cucumber/{ast/table.rb → multiline_argument/data_table.rb} +77 -84
  157. data/lib/cucumber/multiline_argument/doc_string.rb +10 -0
  158. data/lib/cucumber/multiline_argument.rb +74 -0
  159. data/lib/cucumber/platform.rb +21 -20
  160. data/lib/cucumber/project_initializer.rb +43 -0
  161. data/lib/cucumber/rake/task.rb +3 -54
  162. data/lib/cucumber/rb_support/rb_hook.rb +2 -2
  163. data/lib/cucumber/rb_support/rb_language.rb +4 -34
  164. data/lib/cucumber/rb_support/rb_step_definition.rb +11 -2
  165. data/lib/cucumber/rb_support/rb_transform.rb +3 -1
  166. data/lib/cucumber/rb_support/rb_world.rb +13 -20
  167. data/lib/cucumber/rb_support/snippet.rb +61 -20
  168. data/lib/cucumber/rspec/doubles.rb +9 -6
  169. data/lib/cucumber/running_test_case.rb +115 -0
  170. data/lib/cucumber/runtime/after_hooks.rb +24 -0
  171. data/lib/cucumber/runtime/before_hooks.rb +23 -0
  172. data/lib/cucumber/runtime/for_programming_languages.rb +14 -10
  173. data/lib/cucumber/runtime/step_hooks.rb +22 -0
  174. data/lib/cucumber/runtime/support_code.rb +78 -21
  175. data/lib/cucumber/runtime/user_interface.rb +4 -0
  176. data/lib/cucumber/runtime.rb +153 -98
  177. data/lib/cucumber/step_match.rb +27 -3
  178. data/lib/cucumber/term/ansicolor.rb +1 -9
  179. data/lib/cucumber/wire_support/wire_language.rb +23 -9
  180. data/lib/cucumber/wire_support/wire_packet.rb +1 -1
  181. data/lib/cucumber/wire_support/wire_protocol/requests.rb +13 -5
  182. data/lib/cucumber/wire_support/wire_step_definition.rb +1 -8
  183. data/lib/cucumber.rb +8 -6
  184. data/spec/cucumber/cli/configuration_spec.rb +165 -134
  185. data/spec/cucumber/cli/main_spec.rb +36 -99
  186. data/spec/cucumber/cli/options_spec.rb +238 -272
  187. data/spec/cucumber/cli/profile_loader_spec.rb +18 -7
  188. data/spec/cucumber/configuration_spec.rb +3 -3
  189. data/spec/cucumber/constantize_spec.rb +2 -1
  190. data/spec/cucumber/core_ext/instance_exec_spec.rb +4 -0
  191. data/spec/cucumber/core_ext/proc_spec.rb +32 -43
  192. data/spec/cucumber/file_specs_spec.rb +60 -0
  193. data/spec/cucumber/filters/activate_steps_spec.rb +57 -0
  194. data/spec/cucumber/filters/gated_receiver_spec.rb +47 -0
  195. data/spec/cucumber/filters/tag_limits/test_case_index_spec.rb +38 -0
  196. data/spec/cucumber/filters/tag_limits/verifier_spec.rb +57 -0
  197. data/spec/cucumber/filters/tag_limits_spec.rb +59 -0
  198. data/spec/cucumber/formatter/ansicolor_spec.rb +11 -10
  199. data/spec/cucumber/formatter/debug_spec.rb +64 -0
  200. data/spec/cucumber/formatter/duration_spec.rb +6 -6
  201. data/spec/cucumber/formatter/html_spec.rb +233 -39
  202. data/spec/cucumber/formatter/interceptor_spec.rb +38 -31
  203. data/spec/cucumber/formatter/junit_spec.rb +213 -151
  204. data/spec/cucumber/formatter/legacy_api/adapter_spec.rb +2090 -0
  205. data/spec/cucumber/formatter/pretty_spec.rb +481 -49
  206. data/spec/cucumber/formatter/progress_spec.rb +63 -16
  207. data/spec/cucumber/formatter/rerun_spec.rb +107 -0
  208. data/spec/cucumber/formatter/spec_helper.rb +32 -17
  209. data/spec/cucumber/hooks_spec.rb +30 -0
  210. data/spec/cucumber/{ast/table_spec.rb → multiline_argument/data_table_spec.rb} +128 -208
  211. data/spec/cucumber/project_initializer_spec.rb +87 -0
  212. data/spec/cucumber/rake/forked_spec.rb +13 -22
  213. data/spec/cucumber/rb_support/rb_language_spec.rb +78 -69
  214. data/spec/cucumber/rb_support/rb_step_definition_spec.rb +90 -44
  215. data/spec/cucumber/rb_support/rb_transform_spec.rb +24 -3
  216. data/spec/cucumber/rb_support/regexp_argument_matcher_spec.rb +6 -4
  217. data/spec/cucumber/rb_support/snippet_spec.rb +47 -38
  218. data/spec/cucumber/running_test_case_spec.rb +83 -0
  219. data/spec/cucumber/runtime/for_programming_languages_spec.rb +18 -13
  220. data/spec/cucumber/runtime/support_code_spec.rb +29 -29
  221. data/spec/cucumber/runtime_spec.rb +35 -34
  222. data/spec/cucumber/step_match_spec.rb +30 -20
  223. data/spec/cucumber/wire_support/configuration_spec.rb +8 -5
  224. data/spec/cucumber/wire_support/connection_spec.rb +12 -8
  225. data/spec/cucumber/wire_support/wire_exception_spec.rb +14 -8
  226. data/spec/cucumber/wire_support/wire_language_spec.rb +8 -9
  227. data/spec/cucumber/wire_support/wire_packet_spec.rb +17 -13
  228. data/spec/cucumber/world/pending_spec.rb +36 -36
  229. data/spec/simplecov_setup.rb +18 -0
  230. data/spec/spec_helper.rb +6 -13
  231. metadata +348 -350
  232. data/.gitattributes +0 -1
  233. data/.ruby-version +0 -1
  234. data/examples/python/README.textile +0 -8
  235. data/examples/python/Rakefile +0 -4
  236. data/examples/python/features/fibonacci.feature +0 -19
  237. data/examples/python/features/step_definitions/fib_steps.py +0 -11
  238. data/examples/python/lib/fib.py +0 -7
  239. data/examples/ramaze/README.textile +0 -7
  240. data/examples/ramaze/app.rb +0 -21
  241. data/examples/ramaze/features/add.feature +0 -11
  242. data/examples/ramaze/features/step_definitions/add_steps.rb +0 -15
  243. data/examples/ramaze/features/support/env.rb +0 -32
  244. data/examples/ramaze/layout/default.html.erb +0 -8
  245. data/examples/ramaze/view/index.html.erb +0 -5
  246. data/examples/ruby2python/README.textile +0 -8
  247. data/examples/ruby2python/Rakefile +0 -4
  248. data/examples/ruby2python/features/fibonacci.feature +0 -19
  249. data/examples/ruby2python/features/step_definitions/fib_steps.rb +0 -7
  250. data/examples/ruby2python/features/support/env.rb +0 -21
  251. data/examples/ruby2python/lib/fib.py +0 -7
  252. data/examples/v8/Rakefile +0 -6
  253. data/examples/v8/features/fibonacci.feature +0 -43
  254. data/examples/v8/features/step_definitions/fib_steps.js +0 -49
  255. data/examples/v8/features/support/env.js +0 -14
  256. data/examples/v8/lib/fibonacci.js +0 -19
  257. data/features/.cucumber/stepdefs.json +0 -627
  258. data/features/assertions.feature +0 -73
  259. data/features/autoformat_profile_output.feature +0 -23
  260. data/features/before_hook.feature +0 -43
  261. data/features/bootstrap.feature +0 -27
  262. data/features/custom_formatter.feature +0 -41
  263. data/features/drb_server_integration.feature +0 -63
  264. data/features/execute_with_tag_filter.feature +0 -63
  265. data/features/formatter_callbacks.feature +0 -189
  266. data/features/json_formatter.feature +0 -338
  267. data/features/parsing.feature +0 -18
  268. data/features/pretty_formatter.feature +0 -31
  269. data/features/rerun_formatter.feature +0 -35
  270. data/features/run_specific_scenarios.feature +0 -47
  271. data/features/stats_formatters.feature +0 -73
  272. data/features/step_definitions/cucumber-features/cucumber_ruby_mappings.rb +0 -197
  273. data/features/step_definitions/cucumber_steps.rb +0 -55
  274. data/features/step_definitions/drb_steps.rb +0 -3
  275. data/features/support/env.rb +0 -57
  276. data/features/tagged_hooks.feature +0 -59
  277. data/fixtures/json/features/background.feature +0 -7
  278. data/fixtures/json/features/embed.feature +0 -4
  279. data/fixtures/json/features/one_passing_one_failing.feature +0 -11
  280. data/fixtures/json/features/step_definitions/steps.rb +0 -32
  281. data/fixtures/json/features/tables.feature +0 -13
  282. data/fixtures/junit/features/one_passing_one_failing.feature +0 -8
  283. data/fixtures/junit/features/pending.feature +0 -7
  284. data/fixtures/junit/features/scenario_outline.feature +0 -9
  285. data/fixtures/junit/features/some_subdirectory/one_passing_one_failing.feature +0 -8
  286. data/fixtures/junit/features/step_definitions/steps.rb +0 -11
  287. data/fixtures/self_test/README.textile +0 -6
  288. data/fixtures/self_test/Rakefile +0 -6
  289. data/fixtures/self_test/features/call_undefined_step_from_step_def.feature +0 -7
  290. data/fixtures/self_test/features/failing_expectation.feature +0 -4
  291. data/fixtures/self_test/features/lots_of_undefined.feature +0 -8
  292. data/fixtures/self_test/features/multiline_name.feature +0 -27
  293. data/fixtures/self_test/features/outline_sample.feature +0 -15
  294. data/fixtures/self_test/features/sample.feature +0 -21
  295. data/fixtures/self_test/features/search_sample.feature +0 -32
  296. data/fixtures/self_test/features/step_definitions/sample_steps.rb +0 -84
  297. data/fixtures/self_test/features/support/bubble_256x256.png +0 -0
  298. data/fixtures/self_test/features/support/env.rb +0 -26
  299. data/fixtures/self_test/features/tags_sample.feature +0 -17
  300. data/fixtures/self_test/features/tons_of_cukes.feature +0 -52
  301. data/fixtures/self_test/features/undefined_multiline_args.feature +0 -12
  302. data/fixtures/self_test/list-of-features.txt +0 -1
  303. data/fixtures/steps_library/features/step_definitions/steps_lib1.rb +0 -8
  304. data/fixtures/steps_library/features/step_definitions/steps_lib2.rb +0 -8
  305. data/fixtures/tickets/Rakefile +0 -20
  306. data/fixtures/tickets/features/172.feature +0 -28
  307. data/fixtures/tickets/features/177/1.feature +0 -28
  308. data/fixtures/tickets/features/177/2.feature +0 -20
  309. data/fixtures/tickets/features/177/3.feature +0 -18
  310. data/fixtures/tickets/features/180.feature +0 -7
  311. data/fixtures/tickets/features/229/tagged_hooks.feature +0 -8
  312. data/fixtures/tickets/features/229/tagged_hooks.rb +0 -14
  313. data/fixtures/tickets/features/236.feature +0 -13
  314. data/fixtures/tickets/features/241.feature +0 -12
  315. data/fixtures/tickets/features/246.feature +0 -4
  316. data/fixtures/tickets/features/248.feature +0 -11
  317. data/fixtures/tickets/features/270/back.feature +0 -14
  318. data/fixtures/tickets/features/270/back.steps.rb +0 -14
  319. data/fixtures/tickets/features/272/hooks.feature +0 -26
  320. data/fixtures/tickets/features/272/hooks_steps.rb +0 -53
  321. data/fixtures/tickets/features/279/py_string_indent.feature +0 -25
  322. data/fixtures/tickets/features/279/py_string_indent.steps.rb +0 -12
  323. data/fixtures/tickets/features/279/wrong.feature_ +0 -11
  324. data/fixtures/tickets/features/301/filter_background_tagged_hooks.feature +0 -6
  325. data/fixtures/tickets/features/301/filter_background_tagged_hooks_steps.rb +0 -12
  326. data/fixtures/tickets/features/306/only_background.feature +0 -4
  327. data/fixtures/tickets/features/around_timeout.feature +0 -6
  328. data/fixtures/tickets/features/gherkin_67.feature +0 -12
  329. data/fixtures/tickets/features/gherkin_68.feature +0 -4
  330. data/fixtures/tickets/features/half_manual.feature +0 -11
  331. data/fixtures/tickets/features/lib/eatting_machine.rb +0 -18
  332. data/fixtures/tickets/features/lib/pantry.rb +0 -20
  333. data/fixtures/tickets/features/scenario_outline.feature +0 -95
  334. data/fixtures/tickets/features/step_definitons/246_steps.rb +0 -3
  335. data/fixtures/tickets/features/step_definitons/248_steps.rb +0 -15
  336. data/fixtures/tickets/features/step_definitons/around_timeout_steps.rb +0 -9
  337. data/fixtures/tickets/features/step_definitons/half_manual_steps.rb +0 -11
  338. data/fixtures/tickets/features/step_definitons/scenario_outline_steps.rb +0 -42
  339. data/fixtures/tickets/features/step_definitons/tickets_steps.rb +0 -88
  340. data/fixtures/tickets/features/table_diffing.feature +0 -13
  341. data/fixtures/tickets/features/tickets.feature +0 -28
  342. data/fixtures/tickets/features.html +0 -138
  343. data/gem_tasks/yard/default/layout/html/bubble_32x32.png +0 -0
  344. data/gem_tasks/yard/default/layout/html/footer.erb +0 -5
  345. data/gem_tasks/yard/default/layout/html/index.erb +0 -1
  346. data/gem_tasks/yard/default/layout/html/layout.erb +0 -25
  347. data/gem_tasks/yard/default/layout/html/logo.erb +0 -1
  348. data/gem_tasks/yard/default/layout/html/setup.rb +0 -4
  349. data/gem_tasks/yard.rake +0 -40
  350. data/legacy_features/README.md +0 -14
  351. data/legacy_features/announce.feature +0 -152
  352. data/legacy_features/bug_371.feature +0 -32
  353. data/legacy_features/bug_464.feature +0 -16
  354. data/legacy_features/bug_475.feature +0 -42
  355. data/legacy_features/bug_585_tab_indentation.feature +0 -22
  356. data/legacy_features/bug_600.feature +0 -73
  357. data/legacy_features/cucumber_cli.feature +0 -584
  358. data/legacy_features/cucumber_cli_outlines.feature +0 -117
  359. data/legacy_features/default_snippets.feature +0 -43
  360. data/legacy_features/diffing.feature +0 -25
  361. data/legacy_features/drb_server_integration.feature +0 -174
  362. data/legacy_features/exclude_files.feature +0 -20
  363. data/legacy_features/expand.feature +0 -60
  364. data/legacy_features/junit_formatter.feature +0 -214
  365. data/legacy_features/language_from_header.feature +0 -30
  366. data/legacy_features/listener_debugger_formatter.feature +0 -42
  367. data/legacy_features/multiline_names.feature +0 -44
  368. data/legacy_features/report_called_undefined_steps.feature +0 -35
  369. data/legacy_features/rerun_formatter.feature +0 -52
  370. data/legacy_features/simplest.feature +0 -11
  371. data/legacy_features/snippet.feature +0 -23
  372. data/legacy_features/snippets_when_using_star_keyword.feature +0 -38
  373. data/legacy_features/step_definitions/cucumber_steps.rb +0 -179
  374. data/legacy_features/step_definitions/extra_steps.rb +0 -2
  375. data/legacy_features/step_definitions/simplest_steps.rb +0 -3
  376. data/legacy_features/step_definitions/wire_steps.rb +0 -34
  377. data/legacy_features/support/env.rb +0 -161
  378. data/legacy_features/support/env.rb.simplest +0 -7
  379. data/legacy_features/table_mapping.feature +0 -34
  380. data/legacy_features/transform.feature +0 -245
  381. data/legacy_features/unicode_table.feature +0 -35
  382. data/legacy_features/wire_protocol.feature +0 -332
  383. data/lib/README.rdoc +0 -12
  384. data/lib/cucumber/ast/background.rb +0 -116
  385. data/lib/cucumber/ast/comment.rb +0 -31
  386. data/lib/cucumber/ast/doc_string.rb +0 -61
  387. data/lib/cucumber/ast/empty_background.rb +0 -33
  388. data/lib/cucumber/ast/examples.rb +0 -49
  389. data/lib/cucumber/ast/feature.rb +0 -99
  390. data/lib/cucumber/ast/features.rb +0 -38
  391. data/lib/cucumber/ast/has_steps.rb +0 -74
  392. data/lib/cucumber/ast/location.rb +0 -41
  393. data/lib/cucumber/ast/multiline_argument.rb +0 -30
  394. data/lib/cucumber/ast/names.rb +0 -13
  395. data/lib/cucumber/ast/outline_table.rb +0 -194
  396. data/lib/cucumber/ast/scenario.rb +0 -103
  397. data/lib/cucumber/ast/scenario_outline.rb +0 -146
  398. data/lib/cucumber/ast/step.rb +0 -122
  399. data/lib/cucumber/ast/step_collection.rb +0 -92
  400. data/lib/cucumber/ast/step_invocation.rb +0 -196
  401. data/lib/cucumber/ast/tags.rb +0 -28
  402. data/lib/cucumber/ast/tree_walker.rb +0 -191
  403. data/lib/cucumber/ast/visitor.rb +0 -11
  404. data/lib/cucumber/broadcaster.rb +0 -13
  405. data/lib/cucumber/cli/drb_client.rb +0 -43
  406. data/lib/cucumber/feature_file.rb +0 -94
  407. data/lib/cucumber/formatter/ordered_xml_markup.rb +0 -24
  408. data/lib/cucumber/js_support/js_dsl.js +0 -57
  409. data/lib/cucumber/js_support/js_language.rb +0 -185
  410. data/lib/cucumber/js_support/js_snippets.rb +0 -27
  411. data/lib/cucumber/parser/gherkin_builder.rb +0 -284
  412. data/lib/cucumber/parser.rb +0 -2
  413. data/lib/cucumber/py_support/py_dsl.py +0 -10
  414. data/lib/cucumber/py_support/py_language.py +0 -10
  415. data/lib/cucumber/py_support/py_language.rb +0 -80
  416. data/lib/cucumber/runtime/features_loader.rb +0 -62
  417. data/lib/cucumber/runtime/results.rb +0 -64
  418. data/lib/cucumber/step_mother.rb +0 -10
  419. data/spec/cucumber/ast/background_spec.rb +0 -122
  420. data/spec/cucumber/ast/doc_string_spec.rb +0 -40
  421. data/spec/cucumber/ast/feature_factory.rb +0 -72
  422. data/spec/cucumber/ast/feature_spec.rb +0 -63
  423. data/spec/cucumber/ast/features_spec.rb +0 -51
  424. data/spec/cucumber/ast/outline_table_spec.rb +0 -21
  425. data/spec/cucumber/ast/scenario_outline_spec.rb +0 -74
  426. data/spec/cucumber/ast/step_spec.rb +0 -68
  427. data/spec/cucumber/ast/tree_walker_spec.rb +0 -19
  428. data/spec/cucumber/broadcaster_spec.rb +0 -15
  429. data/spec/cucumber/cli/drb_client_spec.rb +0 -76
  430. data/spec/cucumber/rake/rcov_spec.rb +0 -71
  431. data/spec/cucumber/runtime/results_spec.rb +0 -81
  432. data/spec/cucumber/wire_support/wire_step_definition_spec.rb +0 -20
  433. /data/examples/i18n/ar/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  434. /data/examples/i18n/bg/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  435. /data/examples/i18n/ca/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  436. /data/examples/i18n/cs/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  437. /data/examples/i18n/da/features/{step_definitons → step_definitions}/lommeregner_steps.rb +0 -0
  438. /data/examples/i18n/de/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  439. /data/examples/i18n/en/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  440. /data/examples/i18n/eo/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  441. /data/examples/i18n/es/features/{step_definitons → step_definitions}/calculador_steps.rb +0 -0
  442. /data/examples/i18n/fi/features/{step_definitons → step_definitions}/laskin_steps.rb +0 -0
  443. /data/examples/i18n/he/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  444. /data/examples/i18n/hi/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  445. /data/examples/i18n/hu/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  446. /data/examples/i18n/id/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  447. /data/examples/i18n/it/features/{step_definitons → step_definitions}/calcolatrice_steps.rb +0 -0
  448. /data/examples/i18n/ja/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  449. /data/examples/i18n/ko/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  450. /data/examples/i18n/lt/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  451. /data/examples/i18n/lv/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  452. /data/examples/i18n/no/features/{step_definitons → step_definitions}/kalkulator_steps.rb +0 -0
  453. /data/examples/i18n/pl/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  454. /data/examples/i18n/ro/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  455. /data/examples/i18n/ru/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  456. /data/examples/i18n/sk/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  457. /data/examples/i18n/sr-Cyrl/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  458. /data/examples/i18n/sr-Latn/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  459. /data/examples/i18n/sv/features/{step_definitons → step_definitions}/kalkulator_steps.rb +0 -0
  460. /data/examples/i18n/tr/features/{step_definitons → step_definitions}/hesap_makinesi_adimlari.rb +0 -0
  461. /data/examples/i18n/uk/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  462. /data/examples/i18n/uz/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  463. /data/examples/i18n/zh-TW/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  464. /data/features/{nested_steps_with_second_arg.feature → docs/defining_steps/nested_steps_with_second_arg.feature} +0 -0
  465. /data/features/{iso-8859-1.feature → docs/iso-8859-1.feature} +0 -0
@@ -9,20 +9,22 @@ module Cli
9
9
  end
10
10
 
11
11
  def given_cucumber_yml_defined_as(hash_or_string)
12
- File.stub(:exist?).and_return(true)
12
+ allow(File).to receive(:exist?) { true }
13
+
13
14
  cucumber_yml = hash_or_string.is_a?(Hash) ? hash_or_string.to_yaml : hash_or_string
14
- IO.stub(:read).with('cucumber.yml').and_return(cucumber_yml)
15
+
16
+ allow(IO).to receive(:read).with('cucumber.yml') { cucumber_yml }
15
17
  end
16
18
 
17
19
  def given_the_following_files(*files)
18
- File.stub(:directory?).and_return(true)
19
- File.stub(:file?).and_return(true)
20
- Dir.stub(:[]).and_return(files)
20
+ allow(File).to receive(:directory?) { true }
21
+ allow(File).to receive(:file?) { true }
22
+ allow(Dir).to receive(:[]) { files }
21
23
  end
22
24
 
23
25
  before(:each) do
24
- File.stub(:exist?).and_return(false) # Meaning, no cucumber.yml exists
25
- Kernel.stub(:exit).and_return(nil)
26
+ allow(File).to receive(:exist?) { false } # Meaning, no cucumber.yml exists
27
+ allow(Kernel).to receive(:exit)
26
28
  end
27
29
 
28
30
  def config
@@ -35,34 +37,34 @@ module Cli
35
37
 
36
38
  attr_reader :out, :error
37
39
 
38
- it "should require env.rb files first" do
40
+ it "requires env.rb files first" do
39
41
  given_the_following_files("/features/support/a_file.rb","/features/support/env.rb")
40
42
 
41
43
  config.parse!(%w{--require /features})
42
44
 
43
- config.support_to_load.should == [
45
+ expect(config.support_to_load).to eq [
44
46
  "/features/support/env.rb",
45
47
  "/features/support/a_file.rb"
46
48
  ]
47
49
  end
48
50
 
49
- it "should not require env.rb files when --dry-run" do
51
+ it "does not require env.rb files when --dry-run" do
50
52
  given_the_following_files("/features/support/a_file.rb","/features/support/env.rb")
51
53
 
52
54
  config.parse!(%w{--require /features --dry-run})
53
55
 
54
- config.support_to_load.should == [
56
+ expect(config.support_to_load).to eq [
55
57
  "/features/support/a_file.rb"
56
58
  ]
57
59
  end
58
60
 
59
- it "should require files in vendor/{plugins,gems}/*/cucumber/*.rb" do
61
+ it "requires files in vendor/{plugins,gems}/*/cucumber/*.rb" do
60
62
  given_the_following_files("/vendor/gems/gem_a/cucumber/bar.rb",
61
63
  "/vendor/plugins/plugin_a/cucumber/foo.rb")
62
64
 
63
65
  config.parse!(%w{--require /features})
64
66
 
65
- config.step_defs_to_load.should == [
67
+ expect(config.step_defs_to_load).to eq [
66
68
  "/vendor/gems/gem_a/cucumber/bar.rb",
67
69
  "/vendor/plugins/plugin_a/cucumber/foo.rb"
68
70
  ]
@@ -75,7 +77,7 @@ module Cli
75
77
 
76
78
  config.parse!(%w{--require /features --exclude a_file.rb})
77
79
 
78
- config.all_files_to_load.should == [
80
+ expect(config.all_files_to_load).to eq [
79
81
  "/features/support/env.rb"
80
82
  ]
81
83
  end
@@ -87,43 +89,19 @@ module Cli
87
89
 
88
90
  config.parse!(%w{--require /features --exclude foo[df] --exclude blah})
89
91
 
90
- config.all_files_to_load.should == [
92
+ expect(config.all_files_to_load).to eq [
91
93
  "/features/support/bar.rb",
92
94
  "/features/support/fooz.rb"
93
95
  ]
94
96
  end
95
97
  end
96
98
 
97
- describe '#drb?' do
98
- it "indicates whether the --drb flag was passed in or not" do
99
- config.parse!(%w{features})
100
- config.should_not be_drb
101
-
102
-
103
- config.parse!(%w{features --drb})
104
- config.should be_drb
105
- end
106
- end
107
-
108
- describe "#drb_port" do
109
- it "is nil when not configured" do
110
- config.parse!([])
111
- config.drb_port.should be_nil
112
- end
113
-
114
- it "is numeric when configured" do
115
- config.parse!(%w{features --port 1000})
116
- config.drb_port.should == 1000
117
- end
118
-
119
-
120
- end
121
-
122
99
  it "uses the default profile when no profile is defined" do
123
100
  given_cucumber_yml_defined_as({'default' => '--require some_file'})
124
101
 
125
102
  config.parse!(%w{--format progress})
126
- config.options[:require].should include('some_file')
103
+
104
+ expect(config.options[:require]).to include('some_file')
127
105
  end
128
106
 
129
107
  context '--profile' do
@@ -133,29 +111,33 @@ module Cli
133
111
  given_cucumber_yml_defined_as({'bongo' => '--require from/yml'})
134
112
 
135
113
  config.parse!(%w{--format progress --profile bongo})
136
- config.options[:formats].should == [['progress', out]]
137
- config.options[:require].should == ['from/yml']
114
+
115
+ expect(config.options[:formats]).to eq [['progress', out]]
116
+ expect(config.options[:require]).to eq ['from/yml']
138
117
  end
139
118
 
140
119
  it "expands args from the default profile when no flags are provided" do
141
120
  given_cucumber_yml_defined_as({'default' => '--require from/yml'})
142
121
 
143
122
  config.parse!([])
144
- config.options[:require].should == ['from/yml']
123
+
124
+ expect(config.options[:require]).to eq ['from/yml']
145
125
  end
146
126
 
147
127
  it "allows --strict to be set by a profile" do
148
128
  given_cucumber_yml_defined_as({'bongo' => '--strict'})
149
129
 
150
130
  config.parse!(%w{--profile bongo})
151
- config.options[:strict].should be_true
131
+
132
+ expect(config.options[:strict]).to be true
152
133
  end
153
134
 
154
135
  it "parses ERB syntax in the cucumber.yml file" do
155
136
  given_cucumber_yml_defined_as("---\ndefault: \"<%=\"--require some_file\"%>\"\n")
156
137
 
157
138
  config.parse!([])
158
- config.options[:require].should include('some_file')
139
+
140
+ expect(config.options[:require]).to include('some_file')
159
141
  end
160
142
 
161
143
  it "parses ERB in cucumber.yml that makes uses nested ERB sessions" do
@@ -165,7 +147,8 @@ module Cli
165
147
  ERB_YML
166
148
 
167
149
  config.parse!(%w(-p standard))
168
- config.options[:require].should include('some_file')
150
+
151
+ expect(config.options[:require]).to include('some_file')
169
152
  end
170
153
 
171
154
  it "provides a helpful error message when a specified profile does not exists in cucumber.yml" do
@@ -179,23 +162,23 @@ Defined profiles in cucumber.yml:
179
162
  * html_report
180
163
  END_OF_MESSAGE
181
164
 
182
- lambda{config.parse!(%w{--profile i_do_not_exist})}.should raise_error(ProfileNotFound, expected_message)
165
+ expect(-> { config.parse!(%w{--profile i_do_not_exist}) }).to raise_error(ProfileNotFound, expected_message)
183
166
  end
184
167
 
185
168
  it "allows profiles to be defined in arrays" do
186
169
  given_cucumber_yml_defined_as({'foo' => ['-f','progress']})
187
170
 
188
171
  config.parse!(%w{--profile foo})
189
- config.options[:formats].should == [['progress', out]]
172
+
173
+ expect(config.options[:formats]).to eq [['progress', out]]
190
174
  end
191
175
 
192
176
  it "disregards default STDOUT formatter defined in profile when another is passed in (via cmd line)" do
193
177
  given_cucumber_yml_defined_as({'foo' => %w[--format pretty]})
194
178
  config.parse!(%w{--format progress --profile foo})
195
- config.options[:formats].should == [['progress', out]]#, ['pretty', 'pretty.txt']]
196
- end
197
-
198
179
 
180
+ expect(config.options[:formats]).to eq [['progress', out]]
181
+ end
199
182
 
200
183
  ["--no-profile", "-P"].each do |flag|
201
184
  context 'when none is specified with #{flag}' do
@@ -203,14 +186,16 @@ END_OF_MESSAGE
203
186
  given_cucumber_yml_defined_as({'default' => '-v --require file_specified_in_default_profile.rb'})
204
187
 
205
188
  config.parse!("#{flag} --require some_file.rb".split(" "))
206
- config.options[:require].should == ['some_file.rb']
189
+
190
+ expect(config.options[:require]).to eq ['some_file.rb']
207
191
  end
208
192
 
209
193
  it "notifies the user that the profiles are being disabled" do
210
194
  given_cucumber_yml_defined_as({'default' => '-v'})
211
195
 
212
196
  config.parse!("#{flag} --require some_file.rb".split(" "))
213
- out.string.should =~ /Disabling profiles.../
197
+
198
+ expect(out.string).to match /Disabling profiles.../
214
199
  end
215
200
  end
216
201
  end
@@ -220,15 +205,17 @@ END_OF_MESSAGE
220
205
  given_cucumber_yml_defined_as({'foo' => bad_input})
221
206
 
222
207
  expected_error = /The 'foo' profile in cucumber.yml was blank. Please define the command line arguments for the 'foo' profile in cucumber.yml./
223
- lambda{config.parse!(%w{--profile foo})}.should raise_error(expected_error)
208
+
209
+ expect(-> { config.parse!(%w{--profile foo}) }).to raise_error(expected_error)
224
210
  end
225
211
  end
226
212
 
227
213
  it "issues a helpful error message when no YAML file exists and a profile is specified" do
228
- File.should_receive(:exist?).with('cucumber.yml').and_return(false)
214
+ expect(File).to receive(:exist?).with('cucumber.yml') { false }
229
215
 
230
216
  expected_error = /cucumber\.yml was not found/
231
- lambda{config.parse!(%w{--profile i_do_not_exist})}.should raise_error(expected_error)
217
+
218
+ expect(-> { config.parse!(%w{--profile i_do_not_exist}) }).to raise_error(expected_error)
232
219
  end
233
220
 
234
221
  it "issues a helpful error message when cucumber.yml is blank or malformed" do
@@ -236,7 +223,9 @@ END_OF_MESSAGE
236
223
 
237
224
  ['', 'sfsadfs', "--- \n- an\n- array\n", "---dddfd"].each do |bad_input|
238
225
  given_cucumber_yml_defined_as(bad_input)
239
- lambda{config.parse!([])}.should raise_error(expected_error_message)
226
+
227
+ expect(-> { config.parse!([]) }).to raise_error(expected_error_message)
228
+
240
229
  reset_config
241
230
  end
242
231
  end
@@ -245,104 +234,109 @@ END_OF_MESSAGE
245
234
  expected_error_message = /cucumber.yml was found, but could not be parsed. Please refer to cucumber's documentation on correct profile usage./
246
235
 
247
236
  given_cucumber_yml_defined_as("input that causes an exception in YAML loading")
248
- YAML.should_receive(:load).and_raise ArgumentError
249
237
 
250
- lambda{config.parse!([])}.should raise_error(expected_error_message)
238
+ expect(YAML).to receive(:load).and_raise(ArgumentError)
239
+ expect(-> { config.parse!([]) }).to raise_error(expected_error_message)
251
240
  end
252
241
 
253
242
  it "issues a helpful error message when cucumber.yml can not be parsed by ERB" do
254
243
  expected_error_message = /cucumber.yml was found, but could not be parsed with ERB. Please refer to cucumber's documentation on correct profile usage./
255
244
  given_cucumber_yml_defined_as("<% this_fails %>")
256
245
 
257
- lambda{config.parse!([])}.should raise_error(expected_error_message)
246
+ expect(-> { config.parse!([]) }).to raise_error(expected_error_message)
258
247
  end
259
248
  end
260
249
 
261
-
262
- it "should accept --dry-run option" do
250
+ it "accepts --dry-run option" do
263
251
  config.parse!(%w{--dry-run})
264
- config.options[:dry_run].should be_true
252
+
253
+ expect(config.options[:dry_run]).to be true
265
254
  end
266
255
 
267
- it "should accept --no-source option" do
256
+ it "accepts --no-source option" do
268
257
  config.parse!(%w{--no-source})
269
258
 
270
- config.options[:source].should be_false
259
+ expect(config.options[:source]).to be false
271
260
  end
272
261
 
273
- it "should accept --no-snippets option" do
262
+ it "accepts --no-snippets option" do
274
263
  config.parse!(%w{--no-snippets})
275
264
 
276
- config.options[:snippets].should be_false
265
+ expect(config.options[:snippets]).to be false
277
266
  end
278
267
 
279
- it "should set snippets and source to false with --quiet option" do
268
+ it "sets snippets and source to false with --quiet option" do
280
269
  config.parse!(%w{--quiet})
281
270
 
282
- config.options[:snippets].should be_false
283
- config.options[:source].should be_false
271
+ expect(config.options[:snippets]).to be false
272
+ expect(config.options[:source]).to be false
284
273
  end
285
274
 
286
- it "should accept --verbose option" do
275
+ it "accepts --verbose option" do
287
276
  config.parse!(%w{--verbose})
288
277
 
289
- config.options[:verbose].should be_true
278
+ expect(config.options[:verbose]).to be true
290
279
  end
291
280
 
292
- it "should accept --out option" do
281
+ it "accepts --out option" do
293
282
  config.parse!(%w{--out jalla.txt})
294
- config.formats.should == [['pretty', 'jalla.txt']]
283
+
284
+ expect(config.formats).to eq [['pretty', 'jalla.txt']]
295
285
  end
296
286
 
297
- it "should accept multiple --out options" do
287
+ it "accepts multiple --out options" do
298
288
  config.parse!(%w{--format progress --out file1 --out file2})
299
- config.formats.should == [['progress', 'file2']]
289
+
290
+ expect(config.formats).to eq [['progress', 'file2']]
300
291
  end
301
292
 
302
- it "should accept multiple --format options and put the STDOUT one first so progress is seen" do
293
+ it "accepts multiple --format options and put the STDOUT one first so progress is seen" do
303
294
  config.parse!(%w{--format pretty --out pretty.txt --format progress})
304
- config.formats.should == [['progress', out], ['pretty', 'pretty.txt']]
295
+
296
+ expect(config.formats).to eq [['progress', out], ['pretty', 'pretty.txt']]
305
297
  end
306
298
 
307
- it "should not accept multiple --format options when both use implicit STDOUT" do
308
- lambda do
309
- config.parse!(%w{--format pretty --format progress})
310
- end.should raise_error("All but one formatter must use --out, only one can print to each stream (or STDOUT)")
299
+ it "does not accept multiple --format options when both use implicit STDOUT" do
300
+ expect(-> { config.parse!(%w{--format pretty --format progress}) }).to raise_error("All but one formatter must use --out, only one can print to each stream (or STDOUT)")
311
301
  end
312
302
 
313
- it "should accept same --format options with implicit STDOUT, and keep only one" do
303
+ it "accepts same --format options with implicit STDOUT, and keep only one" do
314
304
  config.parse!(%w{--format pretty --format pretty})
315
- config.formats.should == [["pretty", out]]
305
+
306
+ expect(config.formats).to eq [["pretty", out]]
316
307
  end
317
308
 
318
- it "should not accept multiple --out streams pointing to the same place" do
319
- lambda do
320
- config.parse!(%w{--format pretty --out file1 --format progress --out file1})
321
- end.should raise_error("All but one formatter must use --out, only one can print to each stream (or STDOUT)")
309
+ it "does not accept multiple --out streams pointing to the same place" do
310
+ expect(-> { config.parse!(%w{--format pretty --out file1 --format progress --out file1}) }).to raise_error("All but one formatter must use --out, only one can print to each stream (or STDOUT)")
322
311
  end
323
312
 
324
- it "should associate --out to previous --format" do
313
+ it "associates --out to previous --format" do
325
314
  config.parse!(%w{--format progress --out file1 --format profile --out file2})
326
- config.formats.should == [["progress", "file1"], ["profile" ,"file2"]]
315
+
316
+ expect(config.formats).to eq [["progress", "file1"], ["profile" ,"file2"]]
327
317
  end
328
318
 
329
- it "should accept same --format options with same --out streams and keep only one" do
319
+ it "accepts same --format options with same --out streams and keep only one" do
330
320
  config.parse!(%w{--format html --out file --format pretty --format html --out file})
331
- config.formats.should == [["pretty", out], ["html", "file"]]
321
+
322
+ expect(config.formats).to eq [["pretty", out], ["html", "file"]]
332
323
  end
333
324
 
334
- it "should accept same --format options with different --out streams" do
325
+ it "accepts same --format options with different --out streams" do
335
326
  config.parse!(%w{--format html --out file1 --format html --out file2})
336
- config.formats.should == [["html", "file1"], ["html", "file2"]]
327
+
328
+ expect(config.formats).to eq [["html", "file1"], ["html", "file2"]]
337
329
  end
338
330
 
339
- it "should accept --color option" do
340
- Cucumber::Term::ANSIColor.should_receive(:coloring=).with(true)
331
+ it "accepts --color option" do
332
+ expect(Cucumber::Term::ANSIColor).to receive(:coloring=).with(true)
333
+
341
334
  config.parse!(['--color'])
342
335
  end
343
336
 
344
- it "should accept --no-color option" do
345
- Cucumber::Term::ANSIColor.should_receive(:coloring=).with(false)
337
+ it "accepts --no-color option" do
338
+ expect(Cucumber::Term::ANSIColor).to receive(:coloring=).with(false)
339
+
346
340
  config = Configuration.new(StringIO.new)
347
341
  config.parse!(['--no-color'])
348
342
  end
@@ -352,12 +346,12 @@ END_OF_MESSAGE
352
346
  Cucumber.use_full_backtrace = false
353
347
  end
354
348
 
355
- it "should show full backtrace when --backtrace is present" do
356
- config = Main.new(['--backtrace'])
349
+ it "shows full backtrace when --backtrace is present" do
350
+ Main.new(['--backtrace'])
357
351
  begin
358
- "x".should == "y"
359
- rescue => e
360
- e.backtrace[0].should_not == "#{__FILE__}:#{__LINE__ - 2}"
352
+ expect("x").to eq "y"
353
+ rescue RSpec::Expectations::ExpectationNotMetError => e
354
+ expect(e.backtrace[0]).not_to eq "#{__FILE__}:#{__LINE__ - 2}"
361
355
  end
362
356
  end
363
357
 
@@ -366,57 +360,72 @@ END_OF_MESSAGE
366
360
  end
367
361
  end
368
362
 
369
- it "should accept multiple --name options" do
363
+ it "accepts multiple --name options" do
370
364
  config.parse!(['--name', "User logs in", '--name', "User signs up"])
371
365
 
372
- config.options[:name_regexps].should include(/User logs in/)
373
- config.options[:name_regexps].should include(/User signs up/)
366
+ expect(config.options[:name_regexps]).to include(/User logs in/)
367
+ expect(config.options[:name_regexps]).to include(/User signs up/)
374
368
  end
375
369
 
376
- it "should accept multiple -n options" do
370
+ it "accepts multiple -n options" do
377
371
  config.parse!(['-n', "User logs in", '-n', "User signs up"])
378
372
 
379
- config.options[:name_regexps].should include(/User logs in/)
380
- config.options[:name_regexps].should include(/User signs up/)
373
+ expect(config.options[:name_regexps]).to include(/User logs in/)
374
+ expect(config.options[:name_regexps]).to include(/User signs up/)
381
375
  end
382
376
 
383
- it "should preserve the order of the feature files" do
377
+ it "preserves the order of the feature files" do
384
378
  config.parse!(%w{b.feature c.feature a.feature})
385
379
 
386
- config.feature_files.should == ["b.feature", "c.feature", "a.feature"]
380
+ expect(config.feature_files).to eq ["b.feature", "c.feature", "a.feature"]
387
381
  end
388
382
 
389
- it "should search for all features in the specified directory" do
390
- File.stub(:directory?).and_return(true)
391
- Dir.stub(:[]).with("feature_directory/**/*.feature").
392
- and_return(["cucumber.feature"])
383
+ it "searchs for all features in the specified directory" do
384
+ allow(File).to receive(:directory?) { true }
385
+ allow(Dir).to receive(:[]).with("feature_directory/**/*.feature") { ["cucumber.feature"] }
393
386
 
394
387
  config.parse!(%w{feature_directory/})
395
388
 
396
- config.feature_files.should == ["cucumber.feature"]
389
+ expect(config.feature_files).to eq ["cucumber.feature"]
397
390
  end
398
391
 
399
392
  it "defaults to the features directory when no feature file are provided" do
400
- File.stub(:directory?).and_return(true)
401
- Dir.stub(:[]).with("features/**/*.feature").
402
- and_return(["cucumber.feature"])
393
+ allow(File).to receive(:directory?) { true }
394
+ allow(Dir).to receive(:[]).with("features/**/*.feature") { ["cucumber.feature"] }
403
395
 
404
396
  config.parse!(%w{})
405
397
 
406
- config.feature_files.should == ["cucumber.feature"]
398
+ expect(config.feature_files).to eq ["cucumber.feature"]
399
+ end
400
+
401
+ it "gets the feature files from the rerun file" do
402
+ allow(File).to receive(:directory?).and_return(false)
403
+ allow(File).to receive(:file?).and_return(true)
404
+ allow(IO).to receive(:read).and_return(
405
+ "cucumber.feature:1:3 cucumber space.feature:134 domain folder/cuke.feature:1 domain folder/different cuke:4:5" )
406
+
407
+ config.parse!(%w{@rerun.txt})
408
+
409
+ expect(config.feature_files).to eq [
410
+ "cucumber.feature:1:3",
411
+ "cucumber space.feature:134",
412
+ "domain folder/cuke.feature:1",
413
+ "domain folder/different cuke:4:5"]
407
414
  end
408
415
 
409
416
  it "should allow specifying environment variables on the command line" do
410
417
  config.parse!(["foo=bar"])
411
- ENV["foo"].should == "bar"
412
- config.feature_files.should_not include('foo=bar')
418
+
419
+ expect(ENV["foo"]).to eq "bar"
420
+ expect(config.feature_files).not_to include('foo=bar')
413
421
  end
414
422
 
415
- it "should allow specifying environment variables in profiles" do
423
+ it "allows specifying environment variables in profiles" do
416
424
  given_cucumber_yml_defined_as({'selenium' => 'RAILS_ENV=selenium'})
417
425
  config.parse!(["--profile", "selenium"])
418
- ENV["RAILS_ENV"].should == "selenium"
419
- config.feature_files.should_not include('RAILS_ENV=selenium')
426
+
427
+ expect(ENV["RAILS_ENV"]).to eq "selenium"
428
+ expect(config.feature_files).not_to include('RAILS_ENV=selenium')
420
429
  end
421
430
 
422
431
  describe "#tag_expression" do
@@ -424,47 +433,69 @@ END_OF_MESSAGE
424
433
 
425
434
  it "returns an empty expression when no tags are specified" do
426
435
  config.parse!([])
427
- config.tag_expression.should be_empty
436
+
437
+ expect(config.tag_expression).to be_empty
428
438
  end
429
439
 
430
440
  it "returns an expression when tags are specified" do
431
441
  config.parse!(['--tags','@foo'])
432
- config.tag_expression.should_not be_empty
442
+
443
+ expect(config.tag_expression).not_to be_empty
444
+ end
445
+ end
446
+
447
+ describe '#tag_limits' do
448
+ it "returns an empty hash when no limits are specified" do
449
+ config.parse!([])
450
+
451
+ expect(config.tag_limits).to eq({ })
452
+ end
453
+
454
+ it "returns a hash of limits when limits are specified" do
455
+ config.parse!(['--tags','@foo:1'])
456
+
457
+ expect(config.tag_limits).to eq({ "@foo" => 1 })
433
458
  end
434
459
  end
435
460
 
436
461
  describe "#dry_run?" do
437
462
  it "returns true when --dry-run was specified on in the arguments" do
438
463
  config.parse!(['--dry-run'])
439
- config.dry_run?.should be_true
464
+
465
+ expect(config.dry_run?).to be true
440
466
  end
441
467
 
442
468
  it "returns true when --dry-run was specified in yaml file" do
443
469
  given_cucumber_yml_defined_as({'default' => '--dry-run'})
444
470
  config.parse!([])
445
- config.dry_run?.should be_true
471
+
472
+ expect(config.dry_run?).to be true
446
473
  end
447
474
 
448
475
  it "returns false by default" do
449
476
  config.parse!([])
450
- config.dry_run?.should be_false
477
+
478
+ expect(config.dry_run?).to be false
451
479
  end
452
480
  end
453
481
 
454
482
  describe "#snippet_type" do
455
483
  it "returns the snippet type when it was set" do
456
484
  config.parse!(["--snippet-type", "classic"])
457
- config.snippet_type.should eql :classic
485
+
486
+ expect(config.snippet_type).to eq :classic
458
487
  end
459
488
 
460
489
  it "returns the snippet type when it was set with shorthand option" do
461
490
  config.parse!(["-I", "classic"])
462
- config.snippet_type.should eql :classic
491
+
492
+ expect(config.snippet_type).to eq :classic
463
493
  end
464
494
 
465
495
  it "returns the default snippet type if it was not set" do
466
496
  config.parse!([])
467
- config.snippet_type.should eql :regexp
497
+
498
+ expect(config.snippet_type).to eq :regexp
468
499
  end
469
500
  end
470
501
  end