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
@@ -3,367 +3,333 @@ require 'yaml'
3
3
  require 'cucumber/cli/options'
4
4
 
5
5
  module Cucumber
6
- module Cli
7
- describe Options do
6
+ module Cli
7
+ describe Options do
8
8
 
9
- def given_cucumber_yml_defined_as(hash_or_string)
10
- File.stub(:exist?).and_return(true)
11
- cucumber_yml = hash_or_string.is_a?(Hash) ? hash_or_string.to_yaml : hash_or_string
12
- IO.stub(:read).with('cucumber.yml').and_return(cucumber_yml)
13
- end
14
-
15
- before(:each) do
16
- File.stub(:exist?).and_return(false) # Meaning, no cucumber.yml exists
17
- Kernel.stub(:exit).and_return(nil)
18
- end
9
+ def given_cucumber_yml_defined_as(hash_or_string)
10
+ allow(File).to receive(:exist?) { true }
19
11
 
20
- def output_stream
21
- @output_stream ||= StringIO.new
22
- end
12
+ cucumber_yml = hash_or_string.is_a?(Hash) ? hash_or_string.to_yaml : hash_or_string
23
13
 
24
- def error_stream
25
- @error_stream ||= StringIO.new
26
- end
14
+ allow(IO).to receive(:read).with('cucumber.yml') { cucumber_yml }
15
+ end
27
16
 
28
- def options
29
- @options ||= Options.new(output_stream, error_stream)
30
- end
17
+ before(:each) do
18
+ allow(File).to receive(:exist?) { false } # Meaning, no cucumber.yml exists
19
+ allow(Kernel).to receive(:exit)
20
+ end
31
21
 
32
- def prepare_args(args)
33
- args.is_a?(Array) ? args : args.split(' ')
34
- end
22
+ def output_stream
23
+ @output_stream ||= StringIO.new
24
+ end
35
25
 
36
- describe 'parsing' do
26
+ def error_stream
27
+ @error_stream ||= StringIO.new
28
+ end
37
29
 
38
- def when_parsing(args)
39
- yield
40
- options.parse!(prepare_args(args))
30
+ def options
31
+ @options ||= Options.new(output_stream, error_stream)
41
32
  end
42
33
 
43
- def after_parsing(args)
44
- options.parse!(prepare_args(args))
45
- yield
34
+ def prepare_args(args)
35
+ args.is_a?(Array) ? args : args.split(' ')
46
36
  end
47
37
 
48
- context '-r or --require' do
49
- it "collects all specified files into an array" do
50
- after_parsing('--require some_file.rb -r another_file.rb') do
51
- options[:require].should == ['some_file.rb', 'another_file.rb']
52
- end
38
+ describe 'parsing' do
39
+
40
+ def when_parsing(args)
41
+ yield
42
+ options.parse!(prepare_args(args))
53
43
  end
54
- end
55
44
 
56
- context '--i18n' do
57
- context "with LANG specified as 'help'" do
58
- include RSpec::WorkInProgress
45
+ def after_parsing(args)
46
+ options.parse!(prepare_args(args))
47
+ yield
48
+ end
59
49
 
60
- it "lists all known langues" do
61
- when_parsing '--i18n help' do
62
- Kernel.should_receive(:exit)
50
+ context '-r or --require' do
51
+ it "collects all specified files into an array" do
52
+ after_parsing('--require some_file.rb -r another_file.rb') do
53
+ expect(options[:require]).to eq ['some_file.rb', 'another_file.rb']
63
54
  end
64
55
  end
56
+ end
65
57
 
66
- it "exits the program" do
67
- when_parsing('--i18n help') { Kernel.should_receive(:exit) }
58
+ context '--i18n' do
59
+ context "with LANG specified as 'help'" do
60
+ include RSpec::WorkInProgress
61
+
62
+ it "lists all known langues" do
63
+ when_parsing '--i18n help' do
64
+ expect(Kernel).to receive(:exit)
65
+ end
66
+ end
67
+
68
+ it "exits the program" do
69
+ when_parsing('--i18n help') { expect(Kernel).to receive(:exit) }
70
+ end
68
71
  end
69
72
  end
70
- end
71
73
 
72
- context "--port PORT" do
73
- it "sets the drb_port to the provided option" do
74
- after_parsing('--port 4500') { options[:drb_port].should == '4500' }
74
+ context '-f FORMAT or --format FORMAT' do
75
+ it "defaults the output for the formatter to the output stream (STDOUT)" do
76
+ after_parsing('-f pretty') { expect(options[:formats]).to eq [['pretty', output_stream]] }
77
+ end
75
78
  end
76
- end
77
79
 
78
- context '-f FORMAT or --format FORMAT' do
79
- it "defaults the output for the formatter to the output stream (STDOUT)" do
80
- after_parsing('-f pretty') { options[:formats].should == [['pretty', output_stream]] }
80
+ context '-o [FILE|DIR] or --out [FILE|DIR]' do
81
+ it "defaults the formatter to 'pretty' when not specified earlier" do
82
+ after_parsing('-o file.txt') { expect(options[:formats]).to eq [['pretty', 'file.txt']] }
83
+ end
84
+ it "sets the output for the formatter defined immediatly before it" do
85
+ after_parsing('-f profile --out file.txt -f pretty -o file2.txt') do
86
+ expect(options[:formats]).to eq [['profile', 'file.txt'], ['pretty', 'file2.txt']]
87
+ end
88
+ end
81
89
  end
82
- end
83
90
 
84
- context '-o [FILE|DIR] or --out [FILE|DIR]' do
85
- it "defaults the formatter to 'pretty' when not specified earlier" do
86
- after_parsing('-o file.txt') { options[:formats].should == [['pretty', 'file.txt']] }
87
- end
88
- it "sets the output for the formatter defined immediatly before it" do
89
- after_parsing('-f profile --out file.txt -f pretty -o file2.txt') do
90
- options[:formats].should == [['profile', 'file.txt'], ['pretty', 'file2.txt']]
91
+ context '-t TAGS --tags TAGS' do
92
+ it "designates tags prefixed with ~ as tags to be excluded" do
93
+ after_parsing('--tags ~@foo,@bar') { expect(options[:tag_expressions]).to eq ['~@foo,@bar'] }
91
94
  end
92
- end
93
- end
94
95
 
95
- context '-t TAGS --tags TAGS' do
96
- it "designates tags prefixed with ~ as tags to be excluded" do
97
- after_parsing('--tags ~@foo,@bar') { options[:tag_expressions].should == ['~@foo,@bar'] }
96
+ it "stores tags passed with different --tags seperately" do
97
+ after_parsing('--tags @foo --tags @bar') { expect(options[:tag_expressions]).to eq ['@foo', '@bar'] }
98
+ end
98
99
  end
99
100
 
100
- it "stores tags passed with different --tags seperately" do
101
- after_parsing('--tags @foo --tags @bar') { options[:tag_expressions].should == ['@foo', '@bar'] }
101
+ context '-n NAME or --name NAME' do
102
+ it "stores the provided names as regular expressions" do
103
+ after_parsing('-n foo --name bar') { expect(options[:name_regexps]).to eq [/foo/,/bar/] }
104
+ end
102
105
  end
103
- end
104
106
 
105
- context '-n NAME or --name NAME' do
106
- it "stores the provided names as regular expressions" do
107
- after_parsing('-n foo --name bar') { options[:name_regexps].should == [/foo/,/bar/] }
107
+ context '-e PATTERN or --exclude PATTERN' do
108
+ it "stores the provided exclusions as regular expressions" do
109
+ after_parsing('-e foo --exclude bar') { expect(options[:excludes]).to eq [/foo/,/bar/] }
110
+ end
108
111
  end
109
- end
110
112
 
111
- context '-e PATTERN or --exclude PATTERN' do
112
- it "stores the provided exclusions as regular expressions" do
113
- after_parsing('-e foo --exclude bar') { options[:excludes].should == [/foo/,/bar/] }
114
- end
115
- end
113
+ context '-l LINES or --lines LINES' do
114
+ it "adds line numbers to args" do
115
+ options.parse!(%w{-l24 FILE})
116
116
 
117
- context '-l LINES or --lines LINES' do
118
- it "adds line numbers to args" do
119
- options.parse!(%w{-l24 FILE})
120
- options.instance_variable_get(:@args).should == ['FILE:24']
117
+ expect(options.instance_variable_get(:@args)).to eq ['FILE:24']
118
+ end
121
119
  end
122
- end
123
120
 
124
- context '-p PROFILE or --profile PROFILE' do
121
+ context '-p PROFILE or --profile PROFILE' do
122
+ it "uses the default profile passed in during initialization if none are specified by the user" do
123
+ given_cucumber_yml_defined_as({'default' => '--require some_file'})
125
124
 
126
- it "uses the default profile passed in during initialization if none are specified by the user" do
127
- given_cucumber_yml_defined_as({'default' => '--require some_file'})
125
+ options = Options.new(output_stream, error_stream, :default_profile => 'default')
126
+ options.parse!(%w{--format progress})
128
127
 
129
- options = Options.new(output_stream, error_stream, :default_profile => 'default')
130
- options.parse!(%w{--format progress})
131
- options[:require].should include('some_file')
132
- end
128
+ expect(options[:require]).to include('some_file')
129
+ end
133
130
 
134
- it "merges all uniq values from both cmd line and the profile" do
135
- given_cucumber_yml_defined_as('foo' => %w[--verbose])
136
- options.parse!(%w[--wip --profile foo])
137
- options[:wip].should be_true
138
- options[:verbose].should be_true
139
- end
131
+ it "merges all uniq values from both cmd line and the profile" do
132
+ given_cucumber_yml_defined_as('foo' => %w[--verbose])
133
+ options.parse!(%w[--wip --profile foo])
140
134
 
141
- it "gives precendene to the origianl options' paths" do
142
- given_cucumber_yml_defined_as('foo' => %w[features])
143
- options.parse!(%w[my.feature -p foo])
144
- options[:paths].should == %w[my.feature]
145
- end
135
+ expect(options[:wip]).to be true
136
+ expect(options[:verbose]).to be true
137
+ end
146
138
 
147
- it "combines the require files of both" do
148
- given_cucumber_yml_defined_as('bar' => %w[--require features -r dog.rb])
149
- options.parse!(%w[--require foo.rb -p bar])
150
- options[:require].should == %w[foo.rb features dog.rb]
151
- end
139
+ it "gives precendene to the origianl options' paths" do
140
+ given_cucumber_yml_defined_as('foo' => %w[features])
141
+ options.parse!(%w[my.feature -p foo])
152
142
 
153
- it "combines the tag names of both" do
154
- given_cucumber_yml_defined_as('baz' => %w[-t @bar])
155
- options.parse!(%w[--tags @foo -p baz])
156
- options[:tag_expressions].should == ["@foo", "@bar"]
157
- end
143
+ expect(options[:paths]).to eq %w[my.feature]
144
+ end
158
145
 
159
- it "only takes the paths from the original options, and disgregards the profiles" do
160
- given_cucumber_yml_defined_as('baz' => %w[features])
161
- options.parse!(%w[my.feature -p baz])
162
- options[:paths].should == ['my.feature']
163
- end
146
+ it "combines the require files of both" do
147
+ given_cucumber_yml_defined_as('bar' => %w[--require features -r dog.rb])
148
+ options.parse!(%w[--require foo.rb -p bar])
164
149
 
165
- it "uses the paths from the profile when none are specified originally" do
166
- given_cucumber_yml_defined_as('baz' => %w[some.feature])
167
- options.parse!(%w[-p baz])
168
- options[:paths].should == ['some.feature']
169
- end
150
+ expect(options[:require]).to eq %w[foo.rb features dog.rb]
151
+ end
170
152
 
171
- it "combines environment variables from the profile but gives precendene to cmd line args" do
172
- given_cucumber_yml_defined_as('baz' => %w[FOO=bar CHEESE=swiss])
173
- options.parse!(%w[-p baz CHEESE=cheddar BAR=foo])
174
- options[:env_vars].should == {'BAR' => 'foo', 'FOO' => 'bar', 'CHEESE' => 'cheddar'}
175
- end
153
+ it "combines the tag names of both" do
154
+ given_cucumber_yml_defined_as('baz' => %w[-t @bar])
155
+ options.parse!(%w[--tags @foo -p baz])
176
156
 
177
- it "disregards STDOUT formatter defined in profile when another is passed in (via cmd line)" do
178
- given_cucumber_yml_defined_as({'foo' => %w[--format pretty]})
179
- options.parse!(%w{--format progress --profile foo})
180
- options[:formats].should == [['progress', output_stream]]
181
- end
157
+ expect(options[:tag_expressions]).to eq ["@foo", "@bar"]
158
+ end
182
159
 
183
- it "includes any non-STDOUT formatters from the profile" do
184
- given_cucumber_yml_defined_as({'html' => %w[--format html -o features.html]})
185
- options.parse!(%w{--format progress --profile html})
186
- options[:formats].should == [['progress', output_stream], ['html', 'features.html']]
187
- end
160
+ it "only takes the paths from the original options, and disgregards the profiles" do
161
+ given_cucumber_yml_defined_as('baz' => %w[features])
162
+ options.parse!(%w[my.feature -p baz])
188
163
 
189
- it "does not include STDOUT formatters from the profile if there is a STDOUT formatter in command line" do
190
- given_cucumber_yml_defined_as({'html' => %w[--format html -o features.html --format pretty]})
191
- options.parse!(%w{--format progress --profile html})
192
- options[:formats].should == [['progress', output_stream], ['html', 'features.html']]
193
- end
164
+ expect(options[:paths]).to eq ['my.feature']
165
+ end
194
166
 
195
- it "includes any STDOUT formatters from the profile if no STDOUT formatter was specified in command line" do
196
- given_cucumber_yml_defined_as({'html' => %w[--format html]})
197
- options.parse!(%w{--format rerun -o rerun.txt --profile html})
198
- options[:formats].should == [['html', output_stream], ['rerun', 'rerun.txt']]
199
- end
167
+ it "uses the paths from the profile when none are specified originally" do
168
+ given_cucumber_yml_defined_as('baz' => %w[some.feature])
169
+ options.parse!(%w[-p baz])
200
170
 
201
- it "assumes all of the formatters defined in the profile when none are specified on cmd line" do
202
- given_cucumber_yml_defined_as({'html' => %w[--format progress --format html -o features.html]})
203
- options.parse!(%w{--profile html})
204
- options[:formats].should == [['progress', output_stream], ['html', 'features.html']]
205
- end
171
+ expect(options[:paths]).to eq ['some.feature']
172
+ end
206
173
 
207
- it "only reads cucumber.yml once" do
208
- original_parse_count = $cucumber_yml_read_count
209
- $cucumber_yml_read_count = 0
174
+ it "combines environment variables from the profile but gives precendene to cmd line args" do
175
+ given_cucumber_yml_defined_as('baz' => %w[FOO=bar CHEESE=swiss])
176
+ options.parse!(%w[-p baz CHEESE=cheddar BAR=foo])
210
177
 
211
- begin
212
- given_cucumber_yml_defined_as(<<-END
213
- <% $cucumber_yml_read_count += 1 %>
214
- default: --format pretty
215
- END
216
- )
217
- options = Options.new(output_stream, error_stream, :default_profile => 'default')
218
- options.parse!(%w(-f progress))
219
-
220
- $cucumber_yml_read_count.should == 1
221
- ensure
222
- $cucumber_yml_read_count = original_parse_count
178
+ expect(options[:env_vars]).to eq({ 'BAR' => 'foo', 'FOO' => 'bar', 'CHEESE' => 'cheddar' })
223
179
  end
224
- end
225
180
 
226
- it "respects --quiet when defined in the profile" do
227
- given_cucumber_yml_defined_as('foo' => '-q')
228
- options.parse!(%w[-p foo])
229
- options[:snippets].should be_false
230
- options[:source].should be_false
231
- end
232
- end
181
+ it "disregards STDOUT formatter defined in profile when another is passed in (via cmd line)" do
182
+ given_cucumber_yml_defined_as({'foo' => %w[--format pretty]})
183
+ options.parse!(%w{--format progress --profile foo})
233
184
 
234
- context '-P or --no-profile' do
185
+ expect(options[:formats]).to eq [['progress', output_stream]]
186
+ end
235
187
 
236
- it "disables profiles" do
237
- given_cucumber_yml_defined_as({'default' => '-v --require file_specified_in_default_profile.rb'})
188
+ it "includes any non-STDOUT formatters from the profile" do
189
+ given_cucumber_yml_defined_as({'html' => %w[--format html -o features.html]})
190
+ options.parse!(%w{--format progress --profile html})
238
191
 
239
- after_parsing("-P --require some_file.rb") do
240
- options[:require].should == ['some_file.rb']
192
+ expect(options[:formats]).to eq [['progress', output_stream], ['html', 'features.html']]
241
193
  end
242
- end
243
194
 
244
- it "notifies the user that the profiles are being disabled" do
245
- given_cucumber_yml_defined_as({'default' => '-v'})
195
+ it "does not include STDOUT formatters from the profile if there is a STDOUT formatter in command line" do
196
+ given_cucumber_yml_defined_as({'html' => %w[--format html -o features.html --format pretty]})
197
+ options.parse!(%w{--format progress --profile html})
246
198
 
247
- after_parsing("--no-profile --require some_file.rb") do
248
- output_stream.string.should =~ /Disabling profiles.../
199
+ expect(options[:formats]).to eq [['progress', output_stream], ['html', 'features.html']]
249
200
  end
250
- end
251
201
 
252
- end
202
+ it "includes any STDOUT formatters from the profile if no STDOUT formatter was specified in command line" do
203
+ given_cucumber_yml_defined_as({'html' => %w[--format html]})
204
+ options.parse!(%w{--format rerun -o rerun.txt --profile html})
253
205
 
254
- context '-b or --backtrace' do
255
- it "turns on cucumber's full backtrace" do
256
- when_parsing("-b") do
257
- Cucumber.should_receive(:use_full_backtrace=).with(true)
206
+ expect(options[:formats]).to eq [['html', output_stream], ['rerun', 'rerun.txt']]
258
207
  end
259
- end
260
- end
261
208
 
262
- context '--version' do
263
- it "displays Cucumber's version" do
264
- after_parsing('--version') do
265
- output_stream.string.should =~ /#{Cucumber::VERSION}/
209
+ it "assumes all of the formatters defined in the profile when none are specified on cmd line" do
210
+ given_cucumber_yml_defined_as({'html' => %w[--format progress --format html -o features.html]})
211
+ options.parse!(%w{--profile html})
212
+
213
+ expect(options[:formats]).to eq [['progress', output_stream], ['html', 'features.html']]
266
214
  end
267
- end
268
- it "exits the program" do
269
- when_parsing('--version') { Kernel.should_receive(:exit) }
270
- end
271
- end
272
215
 
273
- context 'environment variables (i.e. MODE=webrat)' do
274
- it "places all of the environment variables into a hash" do
275
- after_parsing('MODE=webrat FOO=bar') do
276
- options[:env_vars].should == {'MODE' => 'webrat', 'FOO' => 'bar'}
216
+ it "only reads cucumber.yml once" do
217
+ original_parse_count = $cucumber_yml_read_count
218
+ $cucumber_yml_read_count = 0
219
+
220
+ begin
221
+ given_cucumber_yml_defined_as(<<-END
222
+ <% $cucumber_yml_read_count += 1 %>
223
+ default: --format pretty
224
+ END
225
+ )
226
+ options = Options.new(output_stream, error_stream, :default_profile => 'default')
227
+ options.parse!(%w(-f progress))
228
+
229
+ expect($cucumber_yml_read_count).to eq 1
230
+ ensure
231
+ $cucumber_yml_read_count = original_parse_count
232
+ end
277
233
  end
278
- end
279
- end
280
234
 
281
- it "assigns any extra arguments as paths to features" do
282
- after_parsing('-f pretty my_feature.feature my_other_features') do
283
- options[:paths].should == ['my_feature.feature', 'my_other_features']
284
- end
285
- end
235
+ it "respects --quiet when defined in the profile" do
236
+ given_cucumber_yml_defined_as('foo' => '-q')
237
+ options.parse!(%w[-p foo])
286
238
 
287
- it "does not mistake environment variables as feature paths" do
288
- after_parsing('my_feature.feature FOO=bar') do
289
- options[:paths].should == ['my_feature.feature']
239
+ expect(options[:snippets]).to be false
240
+ expect(options[:source]).to be false
241
+ end
290
242
  end
291
- end
292
243
 
293
- context '--snippet-type' do
294
- it "parses the snippet type argument" do
295
- after_parsing('--snippet-type classic') do
296
- options[:snippet_type].should eql :classic
244
+ context '-P or --no-profile' do
245
+ it "disables profiles" do
246
+ given_cucumber_yml_defined_as({'default' => '-v --require file_specified_in_default_profile.rb'})
247
+
248
+ after_parsing("-P --require some_file.rb") do
249
+ expect(options[:require]).to eq ['some_file.rb']
250
+ end
297
251
  end
298
- end
299
- end
300
252
 
301
- end
253
+ it "notifies the user that the profiles are being disabled" do
254
+ given_cucumber_yml_defined_as({'default' => '-v'})
302
255
 
303
- describe '#expanded_args_without_drb' do
304
- it "returns the orginal args in additon to the args from any profiles" do
305
- given_cucumber_yml_defined_as('foo' => '-v',
306
- 'bar' => '--wip -p baz',
307
- 'baz' => '-r some_file.rb')
308
- options.parse!(%w[features -p foo --profile bar])
256
+ after_parsing("--no-profile --require some_file.rb") do
257
+ expect(output_stream.string).to match(/Disabling profiles.../)
258
+ end
259
+ end
260
+ end
309
261
 
310
- options.expanded_args_without_drb.should == %w[features -v --wip -r some_file.rb --no-profile]
311
- end
262
+ context '-b or --backtrace' do
263
+ it "turns on cucumber's full backtrace" do
264
+ when_parsing("-b") do
265
+ expect(Cucumber).to receive(:use_full_backtrace=).with(true)
266
+ end
267
+ end
268
+ end
312
269
 
313
- it "removes the --drb flag so that the args can be safely passed to the drb server" do
314
- given_cucumber_yml_defined_as('default' => 'features -f pretty --drb')
315
- options.parse!(%w[--profile default])
270
+ context '--version' do
271
+ it "displays Cucumber's version" do
272
+ after_parsing('--version') do
273
+ expect(output_stream.string).to match(/#{Cucumber::VERSION}/)
274
+ end
275
+ end
316
276
 
317
- options.expanded_args_without_drb.should == %w[features -f pretty --no-profile]
318
- end
277
+ it "exits the program" do
278
+ when_parsing('--version') { expect(Kernel).to receive(:exit) }
279
+ end
280
+ end
319
281
 
320
- it "contains the environment variables" do
321
- options.parse!(%w[features FOO=bar])
322
- options.expanded_args_without_drb.should == %w[features FOO=bar --no-profile]
323
- end
282
+ context 'environment variables (i.e. MODE=webrat)' do
283
+ it "places all of the environment variables into a hash" do
284
+ after_parsing('MODE=webrat FOO=bar') do
285
+ expect(options[:env_vars]).to eq({ 'MODE' => 'webrat', 'FOO' => 'bar' })
286
+ end
287
+ end
288
+ end
324
289
 
325
- it "ignores the paths from the profiles if one was specified on the command line" do
326
- given_cucumber_yml_defined_as('foo' => 'features --drb')
327
- options.parse!(%w[some_feature.feature -p foo])
328
- options.expanded_args_without_drb.should == %w[some_feature.feature --no-profile]
329
- end
290
+ it "assigns any extra arguments as paths to features" do
291
+ after_parsing('-f pretty my_feature.feature my_other_features') do
292
+ expect(options[:paths]).to eq ['my_feature.feature', 'my_other_features']
293
+ end
294
+ end
330
295
 
296
+ it "does not mistake environment variables as feature paths" do
297
+ after_parsing('my_feature.feature FOO=bar') do
298
+ expect(options[:paths]).to eq ['my_feature.feature']
299
+ end
300
+ end
331
301
 
332
- it "appends the --no-profile flag so that the DRb server doesn't reload the profiles" do
333
- given_cucumber_yml_defined_as('foo' => 'features --drb')
334
- options.parse!(%w[some_feature.feature -p foo])
335
- options.expanded_args_without_drb.should == %w[some_feature.feature --no-profile]
302
+ context '--snippet-type' do
303
+ it "parses the snippet type argument" do
304
+ after_parsing('--snippet-type classic') do
305
+ expect(options[:snippet_type]).to eq :classic
306
+ end
307
+ end
308
+ end
336
309
  end
337
310
 
338
- it "does not append --no-profile if already present" do
339
- options.parse!(%w[some_feature.feature -P])
340
- options.expanded_args_without_drb.should == %w[some_feature.feature -P]
341
- end
311
+ describe "dry-run" do
312
+ it "has the default value for snippets" do
313
+ given_cucumber_yml_defined_as({'foo' => %w[--dry-run]})
314
+ options.parse!(%w{--dry-run})
342
315
 
316
+ expect(options[:snippets]).to be true
317
+ end
343
318
 
344
- end
319
+ it "sets snippets to false when no-snippets provided after dry-run" do
320
+ given_cucumber_yml_defined_as({'foo' => %w[--dry-run --no-snippets]})
321
+ options.parse!(%w{--dry-run --no-snippets})
345
322
 
346
- describe "dry-run" do
347
- it "should have the default value for snippets" do
348
- given_cucumber_yml_defined_as({'foo' => %w[--dry-run]})
349
- options.parse!(%w{--dry-run})
350
- options[:snippets].should == true
351
- end
323
+ expect(options[:snippets]).to be false
324
+ end
352
325
 
353
- it "should set snippets to false when no-snippets provided after dry-run" do
354
- given_cucumber_yml_defined_as({'foo' => %w[--dry-run --no-snippets]})
355
- options.parse!(%w{--dry-run --no-snippets})
356
- options[:snippets].should == false
357
- end
326
+ it "sets snippets to false when no-snippets provided before dry-run" do
327
+ given_cucumber_yml_defined_as({'foo' => %w[--no-snippet --dry-run]})
328
+ options.parse!(%w{--no-snippets --dry-run})
358
329
 
359
- it "should set snippets to false when no-snippets provided before dry-run" do
360
- given_cucumber_yml_defined_as({'foo' => %w[--no-snippet --dry-run]})
361
- options.parse!(%w{--no-snippets --dry-run})
362
- options[:snippets].should == false
330
+ expect(options[:snippets]).to be false
331
+ end
363
332
  end
364
333
  end
365
334
  end
366
-
367
- end
368
335
  end
369
-