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
@@ -5,10 +5,12 @@ module Cucumber
5
5
  module Cli
6
6
  describe ProfileLoader do
7
7
  def given_cucumber_yml_defined_as(hash_or_string)
8
- Dir.stub(:glob).with('{,.config/,config/}cucumber{.yml,.yaml}').and_return(['cucumber.yml'])
9
- File.stub(:exist?).and_return(true)
8
+ allow(Dir).to receive(:glob).with('{,.config/,config/}cucumber{.yml,.yaml}') { ['cucumber.yml'] }
9
+ allow(File).to receive(:exist?) { true }
10
+
10
11
  cucumber_yml = hash_or_string.is_a?(Hash) ? hash_or_string.to_yaml : hash_or_string
11
- IO.stub(:read).with('cucumber.yml').and_return(cucumber_yml)
12
+
13
+ allow(IO).to receive(:read).with('cucumber.yml') { cucumber_yml }
12
14
  end
13
15
 
14
16
  def loader
@@ -18,18 +20,27 @@ module Cucumber
18
20
  it "treats backslashes as literals in rerun.txt when on Windows (JRuby or MRI)" do
19
21
  given_cucumber_yml_defined_as({'default' => '--format "pretty" features\sync_imap_mailbox.feature:16:22'})
20
22
  if(Cucumber::WINDOWS)
21
- loader.args_from('default').should == ['--format','pretty','features\sync_imap_mailbox.feature:16:22']
23
+ expect(loader.args_from('default')).to eq ['--format','pretty','features\sync_imap_mailbox.feature:16:22']
22
24
  else
23
- loader.args_from('default').should == ['--format','pretty','featuressync_imap_mailbox.feature:16:22']
25
+ expect(loader.args_from('default')).to eq ['--format','pretty','featuressync_imap_mailbox.feature:16:22']
24
26
  end
25
-
26
27
  end
27
28
 
28
29
  it "treats forward slashes as literals" do
29
30
  given_cucumber_yml_defined_as({'default' => '--format "ugly" features/sync_imap_mailbox.feature:16:22'})
30
- loader.args_from('default').should == ['--format','ugly','features/sync_imap_mailbox.feature:16:22']
31
+
32
+ expect(loader.args_from('default')).to eq ['--format','ugly','features/sync_imap_mailbox.feature:16:22']
31
33
  end
32
34
 
35
+ it "treats percent sign as ERB code block after YAML directive" do
36
+ yml = <<-HERE
37
+ ---
38
+ % x = '--format "pretty" features/sync_imap_mailbox.feature:16:22'
39
+ default: <%= x %>
40
+ HERE
41
+ given_cucumber_yml_defined_as yml
42
+ expect(loader.args_from('default')).to eq ['--format','pretty','features/sync_imap_mailbox.feature:16:22']
43
+ end
33
44
  end
34
45
  end
35
46
  end
@@ -6,8 +6,8 @@ module Cucumber
6
6
  subject { Configuration.default }
7
7
 
8
8
  it "has an autoload_code_paths containing the standard support and step_definitions folders" do
9
- subject.autoload_code_paths.should include('features/support')
10
- subject.autoload_code_paths.should include('features/step_definitions')
9
+ expect(subject.autoload_code_paths).to include('features/support')
10
+ expect(subject.autoload_code_paths).to include('features/step_definitions')
11
11
  end
12
12
  end
13
13
 
@@ -16,7 +16,7 @@ module Cucumber
16
16
  subject { Configuration.new(user_options) }
17
17
 
18
18
  it "allows you to override the defaults" do
19
- subject.autoload_code_paths.should == ['foo/bar/baz']
19
+ expect(subject.autoload_code_paths).to eq ['foo/bar/baz']
20
20
  end
21
21
  end
22
22
  end
@@ -8,7 +8,8 @@ module Cucumber
8
8
 
9
9
  it "loads html formatter" do
10
10
  clazz = constantize('Cucumber::Formatter::Html')
11
- clazz.name.should == 'Cucumber::Formatter::Html'
11
+
12
+ expect(clazz.name).to eq 'Cucumber::Formatter::Html'
12
13
  end
13
14
 
14
15
  it "fails to load a made up class" do
@@ -0,0 +1,4 @@
1
+ require 'cucumber/core_ext/instance_exec'
2
+
3
+ describe 'cucumber_instance_exec' do
4
+ end
@@ -3,78 +3,67 @@ require 'spec_helper'
3
3
  require 'cucumber/core_ext/proc'
4
4
 
5
5
  describe Proc do
6
- it "should remove extraneous path info for file" do
6
+ it "removes extraneous path info for file" do
7
7
  proc = lambda {|a,b|}
8
- proc.file_colon_line.should =~ /^spec\/cucumber\/core_ext\/proc_spec\.rb:7/
9
- end
10
8
 
11
- unless Cucumber::RUBY_1_8_7
12
- it "should work with non-English path" do
13
- proc = lambda {|a,b|}
14
- def proc.to_s
15
- "#<Proc:0x00000003c04740@#{Dir.pwd}/å/spec/cucumber/core_ext/proc_spec.rb:12 (lambda)>".force_encoding('ASCII-8BIT')
16
- end
9
+ expect(proc.file_colon_line).to match /^spec\/cucumber\/core_ext\/proc_spec\.rb:7/
10
+ end
17
11
 
18
- proc.file_colon_line.force_encoding('UTF-8').should =~ /^å\/spec\/cucumber\/core_ext\/proc_spec\.rb:12/
12
+ it "works with non-English path" do
13
+ proc = lambda {|a,b|}
14
+ def proc.to_s
15
+ "#<Proc:0x00000003c04740@#{Dir.pwd}/å/spec/cucumber/core_ext/proc_spec.rb:12 (lambda)>".force_encoding('ASCII-8BIT')
19
16
  end
17
+
18
+ expect(proc.file_colon_line.force_encoding('UTF-8')).to match /^å\/spec\/cucumber\/core_ext\/proc_spec\.rb:12/
20
19
  end
21
20
 
22
- it "should raise ArityMismatchError for too many args (expecting 0)" do
23
- lambda {
21
+ it "raises ArityMismatchError for too many args (expecting 0)" do
22
+ expect(-> {
24
23
  Object.new.cucumber_instance_exec(true, 'foo', 1) do
25
24
  end
26
- }.should raise_error(Cucumber::ArityMismatchError, "Your block takes 0 arguments, but the Regexp matched 1 argument.")
25
+ }).to raise_error(Cucumber::ArityMismatchError, "Your block takes 0 arguments, but the Regexp matched 1 argument.")
27
26
  end
28
27
 
29
- it "should raise ArityMismatchError for too many args (expecting 1)" do
30
- lambda {
28
+ it "raises ArityMismatchError for too many args (expecting 1)" do
29
+ expect(-> {
31
30
  Object.new.cucumber_instance_exec(true, 'foo', 1,2) do |a|
32
31
  end
33
- }.should raise_error(Cucumber::ArityMismatchError, "Your block takes 1 argument, but the Regexp matched 2 arguments.")
32
+ }).to raise_error(Cucumber::ArityMismatchError, "Your block takes 1 argument, but the Regexp matched 2 arguments.")
34
33
  end
35
34
 
36
- it "should raise ArityMismatchError for too few args (expecting 1)" do
37
- lambda {
35
+ it "raises ArityMismatchError for too few args (expecting 1)" do
36
+ expect(-> {
38
37
  Object.new.cucumber_instance_exec(true, 'foo') do |a|
39
38
  end
40
- }.should raise_error(Cucumber::ArityMismatchError, "Your block takes 1 argument, but the Regexp matched 0 arguments.")
39
+ }).to raise_error(Cucumber::ArityMismatchError, "Your block takes 1 argument, but the Regexp matched 0 arguments.")
41
40
  end
42
41
 
43
- it "should raise ArityMismatchError for too few args (expecting 2)" do
44
- lambda {
42
+ it "raises ArityMismatchError for too few args (expecting 2)" do
43
+ expect(-> {
45
44
  Object.new.cucumber_instance_exec(true, 'foo', 1) do |a,b|
46
45
  end
47
- }.should raise_error(Cucumber::ArityMismatchError, "Your block takes 2 arguments, but the Regexp matched 1 argument.")
46
+ }).to raise_error(Cucumber::ArityMismatchError, "Your block takes 2 arguments, but the Regexp matched 1 argument.")
48
47
  end
49
48
 
50
- if Cucumber::RUBY_1_8_7
51
- # Ruby 1.8
52
- it "should not allow varargs 0+ because Ruby 1.8 reports same arity as with no args, so we can't really tell the difference." do
53
- lambda {
54
- Object.new.cucumber_instance_exec(true, 'foo', 1) do |*args|
55
- end
56
- }.should raise_error(Cucumber::ArityMismatchError, "Your block takes 0 arguments, but the Regexp matched 1 argument.")
57
- end
58
- else
59
- it "should allow varargs (expecting 0+)" do
60
- lambda {
61
- Object.new.cucumber_instance_exec(true, 'foo', 1) do |*args|
62
- end
63
- }.should_not raise_error
64
- end
49
+ it "allows varargs (expecting 0+)" do
50
+ expect(-> {
51
+ Object.new.cucumber_instance_exec(true, 'foo', 1) do |*args|
52
+ end
53
+ }).not_to raise_error
65
54
  end
66
55
 
67
- it "should allow varargs (expecting 1+)" do
68
- lambda {
56
+ it "allows varargs (expecting 1+)" do
57
+ expect(-> {
69
58
  Object.new.cucumber_instance_exec(true, 'foo', 1) do |arg,*args|
70
59
  end
71
- }.should_not raise_error
60
+ }).not_to raise_error
72
61
  end
73
62
 
74
- it "should raise ArityMismatchError for too few required args when using varargs (expecting 1+)" do
75
- lambda {
63
+ it "raises ArityMismatchError for too few required args when using varargs (expecting 1+)" do
64
+ expect(-> {
76
65
  Object.new.cucumber_instance_exec(true, nil) do |arg,*args|
77
66
  end
78
- }.should raise_error(Cucumber::ArityMismatchError, "Your block takes 1+ arguments, but the Regexp matched 0 arguments.")
67
+ }).to raise_error(Cucumber::ArityMismatchError, "Your block takes 1+ arguments, but the Regexp matched 0 arguments.")
79
68
  end
80
69
  end
@@ -0,0 +1,60 @@
1
+ require 'cucumber/file_specs'
2
+
3
+ module Cucumber
4
+ describe FileSpecs do
5
+ let(:file_specs) { FileSpecs.new(["features/foo.feature:1:2:3", "features/bar.feature:4:5:6"]) }
6
+ let(:locations) { file_specs.locations }
7
+ let(:files) { file_specs.files }
8
+
9
+ it "parses locations from multiple files" do
10
+ expect(locations.length).to eq 6
11
+ expect(locations).to eq [
12
+ Cucumber::Core::Ast::Location.new("features/foo.feature", 1),
13
+ Cucumber::Core::Ast::Location.new("features/foo.feature", 2),
14
+ Cucumber::Core::Ast::Location.new("features/foo.feature", 3),
15
+ Cucumber::Core::Ast::Location.new("features/bar.feature", 4),
16
+ Cucumber::Core::Ast::Location.new("features/bar.feature", 5),
17
+ Cucumber::Core::Ast::Location.new("features/bar.feature", 6),
18
+ ]
19
+ end
20
+
21
+ it "parses file names from multiple file specs" do
22
+ expect(files.length).to eq 2
23
+ expect(files).to eq [
24
+ "features/foo.feature",
25
+ "features/bar.feature",
26
+ ]
27
+ end
28
+
29
+ context "when files are not unique" do
30
+ let(:file_specs) { FileSpecs.new(["features/foo.feature:4", "features/foo.feature:34"]) }
31
+
32
+ it "parses unique file names" do
33
+ expect(files.length).to eq 1
34
+ expect(files).to eq ["features/foo.feature"]
35
+ end
36
+ end
37
+
38
+ context "when no line number is specified" do
39
+ let(:file_specs) { FileSpecs.new(["features/foo.feature", "features/bar.feature:34"]) }
40
+
41
+ it "returns a wildcard location for that file" do
42
+ expect(locations).to eq [
43
+ Cucumber::Core::Ast::Location.new("features/foo.feature"),
44
+ Cucumber::Core::Ast::Location.new("features/bar.feature", 34),
45
+ ]
46
+ end
47
+ end
48
+
49
+ context "when the same file is referenced more than once" do
50
+ let(:file_specs) { FileSpecs.new(["features/foo.feature:10", "features/foo.feature:1"]) }
51
+
52
+ it "returns locations in the order specified" do
53
+ expect(locations).to eq [
54
+ Cucumber::Core::Ast::Location.new("features/foo.feature", 10),
55
+ Cucumber::Core::Ast::Location.new("features/foo.feature", 1),
56
+ ]
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,57 @@
1
+ require 'cucumber/filters/activate_steps'
2
+ require 'cucumber/core/gherkin/writer'
3
+ require 'cucumber/core'
4
+
5
+ describe Cucumber::Filters::ActivateSteps do
6
+ include Cucumber::Core::Gherkin::Writer
7
+ include Cucumber::Core
8
+
9
+ let(:step_definitions) { double(find_match: step_match) }
10
+ let(:step_match) { double(activate: activated_test_step) }
11
+ let(:activated_test_step) { double }
12
+ let(:receiver) { double.as_null_object }
13
+
14
+ context "a scenario with a single step" do
15
+ let(:doc) do
16
+ gherkin do
17
+ feature do
18
+ scenario do
19
+ step 'a passing step'
20
+ end
21
+ end
22
+ end
23
+ end
24
+
25
+ it "activates each step" do
26
+ expect(step_match).to receive(:activate) do |test_step|
27
+ expect(test_step.name).to eq 'a passing step'
28
+ end
29
+ compile [doc], receiver, [Cucumber::Filters::ActivateSteps.new(step_definitions)]
30
+ end
31
+ end
32
+
33
+ context "a scenario outline" do
34
+ let(:doc) do
35
+ gherkin do
36
+ feature do
37
+ scenario_outline do
38
+ step 'a <status> step'
39
+
40
+ examples do
41
+ row 'status'
42
+ row 'passing'
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
48
+
49
+ it "activates each step" do
50
+ expect(step_match).to receive(:activate) do |test_step|
51
+ expect(test_step.name).to eq 'a passing step'
52
+ end
53
+ compile [doc], receiver, [Cucumber::Filters::ActivateSteps.new(step_definitions)]
54
+ end
55
+ end
56
+
57
+ end
@@ -0,0 +1,47 @@
1
+ require "cucumber/filters/gated_receiver"
2
+
3
+ describe Cucumber::Filters::GatedReceiver do
4
+ subject(:gated_receiver) { Cucumber::Filters::GatedReceiver.new(receiver) }
5
+
6
+ let(:receiver) { double(:receiver) }
7
+ let(:test_cases){ [double(:test_case), double(:test_case)] }
8
+
9
+ describe "#test_case" do
10
+ it "does not immediately describe the test case to the receiver" do
11
+ test_cases.each do |test_case|
12
+ expect(test_case).to_not receive(:describe_to).with(receiver)
13
+ end
14
+
15
+ test_cases.each do |test_case|
16
+ gated_receiver.test_case(test_case)
17
+ end
18
+ end
19
+ end
20
+
21
+ describe "#done" do
22
+ before do
23
+ test_cases.each do |test_case|
24
+ gated_receiver.test_case(test_case)
25
+ end
26
+
27
+ test_cases.each do |test_case|
28
+ allow(test_case).to receive(:describe_to).with(receiver)
29
+ end
30
+
31
+ allow(receiver).to receive(:done)
32
+ end
33
+
34
+ it "describes all test cases to the receiver" do
35
+ test_cases.each do |test_case|
36
+ expect(test_case).to receive(:describe_to).with(receiver)
37
+ end
38
+
39
+ gated_receiver.done
40
+ end
41
+
42
+ it "calls done on the receiver" do
43
+ expect(receiver).to receive(:done)
44
+ gated_receiver.done
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,38 @@
1
+ require "cucumber/filters/tag_limits"
2
+
3
+ describe Cucumber::Filters::TagLimits::TestCaseIndex do
4
+ subject(:index) { Cucumber::Filters::TagLimits::TestCaseIndex.new }
5
+
6
+ let(:test_cases) do
7
+ [
8
+ double(:test_case, tags: [tag_one], location: a_location_of_tag_one),
9
+ double(:test_case, tags: [tag_one, tag_two], location: a_location_of_tag_one_and_tag_two)
10
+ ]
11
+ end
12
+
13
+ let(:tag_one) { double(:tag_one, name: "@one") }
14
+ let(:tag_two) { double(:tag_two, name: "@two") }
15
+
16
+ let(:a_location_of_tag_one) { double(:a_location_of_tag_one) }
17
+ let(:a_location_of_tag_one_and_tag_two) { double(:a_location_of_tag_one_and_tag_two) }
18
+
19
+ before do
20
+ test_cases.map do |test_case|
21
+ index.add(test_case)
22
+ end
23
+ end
24
+
25
+ describe "#count_by_tag_name" do
26
+ it "returns the number of test cases with the tag" do
27
+ expect(index.count_by_tag_name("@one")).to eq(2)
28
+ expect(index.count_by_tag_name("@two")).to eq(1)
29
+ end
30
+ end
31
+
32
+ describe "#locations_by_tag_name" do
33
+ it "returns the locations of test cases with the tag" do
34
+ expect(index.locations_of_tag_name("@one")).to eq([a_location_of_tag_one, a_location_of_tag_one_and_tag_two])
35
+ expect(index.locations_of_tag_name("@two")).to eq([a_location_of_tag_one_and_tag_two])
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,57 @@
1
+ require "cucumber/filters/tag_limits"
2
+
3
+ describe Cucumber::Filters::TagLimits::Verifier do
4
+ describe "#verify!" do
5
+ subject(:verifier) { Cucumber::Filters::TagLimits::Verifier.new(tag_limits) }
6
+ let(:test_case_index) { double(:test_case_index) }
7
+
8
+ context "the tag counts exceed the tag limits" do
9
+ let(:tag_limits) do
10
+ {
11
+ "@exceed_me" => 1
12
+ }
13
+ end
14
+
15
+ let(:locations) do
16
+ [
17
+ double(:location, to_s: "path/to/some.feature:3"),
18
+ double(:location, to_s: "path/to/some/other.feature:8"),
19
+ ]
20
+ end
21
+
22
+ before do
23
+ allow(test_case_index).to receive(:count_by_tag_name).with("@exceed_me") { 2 }
24
+ allow(test_case_index).to receive(:locations_of_tag_name).with("@exceed_me") { locations }
25
+ end
26
+
27
+ it "raises a TagLimitExceeded error with the locations of the tags" do
28
+ expect {
29
+ verifier.verify!(test_case_index)
30
+ }.to raise_error(
31
+ Cucumber::Filters::TagLimitExceededError,
32
+ "@exceed_me occurred 2 times, but the limit was set to 1\n" +
33
+ " path/to/some.feature:3\n" +
34
+ " path/to/some/other.feature:8"
35
+ )
36
+ end
37
+ end
38
+
39
+ context "the tag counts do not exceed the tag limits" do
40
+ let(:tag_limits) do
41
+ {
42
+ "@dont_exceed_me" => 2
43
+ }
44
+ end
45
+
46
+ before do
47
+ allow(test_case_index).to receive(:count_by_tag_name).with("@dont_exceed_me") { 1 }
48
+ end
49
+
50
+ it "does not raise an error" do
51
+ expect {
52
+ verifier.verify!(test_case_index)
53
+ }.to_not raise_error
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,59 @@
1
+ require "cucumber/filters/tag_limits"
2
+
3
+ describe Cucumber::Filters::TagLimits do
4
+ subject(:filter) { Cucumber::Filters::TagLimits.new(tag_limits, receiver) }
5
+
6
+ let(:tag_limits) { double(:tag_limits) }
7
+ let(:receiver) { double(:receiver) }
8
+
9
+ let(:gated_receiver) { double(:gated_receiver) }
10
+ let(:test_case_index) { double(:test_case_index) }
11
+ let(:test_case) { double(:test_case) }
12
+
13
+ before do
14
+ allow(Cucumber::Filters::GatedReceiver).to receive(:new).with(receiver) { gated_receiver }
15
+ allow(Cucumber::Filters::TagLimits::TestCaseIndex).to receive(:new) { test_case_index }
16
+ end
17
+
18
+ describe "#test_case" do
19
+ before do
20
+ allow(test_case_index).to receive(:add)
21
+ allow(gated_receiver).to receive(:test_case)
22
+ end
23
+
24
+ it "indexes the test case" do
25
+ expect(test_case_index).to receive(:add).with(test_case)
26
+ filter.test_case(test_case)
27
+ end
28
+
29
+ it "adds the test case to the gated receiver" do
30
+ expect(gated_receiver).to receive(:test_case).with(test_case)
31
+ filter.test_case(test_case)
32
+ end
33
+ end
34
+
35
+ describe "#done" do
36
+ let(:verifier) { double(:verifier) }
37
+
38
+ before do
39
+ allow(Cucumber::Filters::TagLimits::Verifier).to receive(:new).with(tag_limits) { verifier }
40
+ allow(gated_receiver).to receive(:done)
41
+ end
42
+
43
+ it "verifies tag limits have not been exceeded" do
44
+ expect(verifier).to receive(:verify!).with(test_case_index)
45
+ filter.done
46
+ end
47
+
48
+ context "the verifier verifies successfully" do
49
+ before do
50
+ allow(verifier).to receive(:verify!).with(test_case_index)
51
+ end
52
+
53
+ it "calls done on the receiver gate" do
54
+ expect(gated_receiver).to receive(:done)
55
+ filter.done
56
+ end
57
+ end
58
+ end
59
+ end
@@ -6,25 +6,26 @@ module Cucumber
6
6
  describe ANSIColor do
7
7
  include ANSIColor
8
8
 
9
- it "should wrap passed_param with bold green and reset to green" do
10
- passed_param("foo").should == "\e[32m\e[1mfoo\e[0m\e[0m\e[32m"
9
+ it "wraps passed_param with bold green and reset to green" do
10
+ expect(passed_param("foo")).to eq "\e[32m\e[1mfoo\e[0m\e[0m\e[32m"
11
11
  end
12
12
 
13
- it "should wrap passed in green" do
14
- passed("foo").should == "\e[32mfoo\e[0m"
13
+ it "wraps passed in green" do
14
+ expect(passed("foo")).to eq "\e[32mfoo\e[0m"
15
15
  end
16
16
 
17
- it "should not reset passed if there are no arguments" do
18
- passed.should == "\e[32m"
17
+ it "does not reset passed if there are no arguments" do
18
+ expect(passed).to eq "\e[32m"
19
19
  end
20
20
 
21
- it "should wrap comments in grey" do
22
- comment("foo").should == "\e[90mfoo\e[0m"
21
+ it "wraps comments in grey" do
22
+ expect(comment("foo")).to eq "\e[90mfoo\e[0m"
23
23
  end
24
24
 
25
- it "should not generate ansi codes when colors are disabled" do
25
+ it "does not generate ansi codes when colors are disabled" do
26
26
  ::Cucumber::Term::ANSIColor.coloring = false
27
- passed("foo").should == "foo"
27
+
28
+ expect(passed("foo")).to eq "foo"
28
29
  end
29
30
  end
30
31
  end
@@ -0,0 +1,64 @@
1
+ require 'spec_helper'
2
+ require 'cucumber/formatter/spec_helper'
3
+ require 'cucumber/formatter/debug'
4
+ require 'cucumber/cli/options'
5
+
6
+ module Cucumber
7
+ module Formatter
8
+ describe Debug do
9
+ extend SpecHelperDsl
10
+ include SpecHelper
11
+
12
+ before(:each) do
13
+ Cucumber::Term::ANSIColor.coloring = false
14
+ @out = StringIO.new
15
+ @formatter = Debug.new(runtime, @out, {})
16
+ end
17
+
18
+ describe "given a single feature" do
19
+ before(:each) { run_defined_feature }
20
+
21
+ describe "with a scenario" do
22
+ define_feature <<-FEATURE
23
+ Feature: Banana party
24
+
25
+ Scenario: Monkey eats banana
26
+ Given there are bananas
27
+ FEATURE
28
+
29
+ it "outputs the events as expected" do
30
+ expect(@out.string).to eq(<<EXPECTED)
31
+ before_test_case
32
+ before_features
33
+ before_feature
34
+ before_tags
35
+ after_tags
36
+ feature_name
37
+ before_test_step
38
+ after_test_step
39
+ before_test_step
40
+ before_feature_element
41
+ before_tags
42
+ after_tags
43
+ scenario_name
44
+ before_steps
45
+ before_step
46
+ before_step_result
47
+ step_name
48
+ after_step_result
49
+ after_step
50
+ after_test_step
51
+ after_steps
52
+ after_feature_element
53
+ after_test_case
54
+ after_feature
55
+ after_features
56
+ done
57
+ EXPECTED
58
+ end
59
+ end
60
+ end
61
+ end
62
+
63
+ end
64
+ end
@@ -6,16 +6,16 @@ module Cucumber
6
6
  describe Duration do
7
7
  include Duration
8
8
 
9
- it "should format ms" do
10
- format_duration(0.002103).should == '0m0.002s'
9
+ it "formats ms" do
10
+ expect(format_duration(0.002103)).to eq '0m0.002s'
11
11
  end
12
12
 
13
- it "should format m" do
14
- format_duration(61.002503).should == '1m1.003s'
13
+ it "formats m" do
14
+ expect(format_duration(61.002503)).to eq'1m1.003s'
15
15
  end
16
16
 
17
- it "should format h" do
18
- format_duration(3661.002503).should == '61m1.003s'
17
+ it "formats h" do
18
+ expect(format_duration(3661.002503)).to eq '61m1.003s'
19
19
  end
20
20
  end
21
21
  end