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
@@ -0,0 +1,376 @@
1
+ module Cucumber
2
+ module Formatter
3
+ module LegacyApi
4
+ # Adapters to pass to the legacy API formatters that provide the interface
5
+ # of the old AST classes
6
+ module Ast
7
+
8
+ # Acts as a null object, or a base class
9
+ class Node
10
+ def initialize(node = nil)
11
+ @node = node
12
+ end
13
+
14
+ def accept(formatter)
15
+ end
16
+
17
+ attr_reader :node
18
+ private :node
19
+ end
20
+
21
+ # Null object for HeaderRow language.
22
+ # ExampleTableRow#keyword is never called on them,
23
+ # but this will pass silently if it happens anyway
24
+ class NullLanguage
25
+ def method_missing(*args, &block)
26
+ self
27
+ end
28
+
29
+ def to_ary
30
+ ['']
31
+ end
32
+ end
33
+
34
+ class HookResultCollection
35
+ def initialize
36
+ @children = []
37
+ end
38
+
39
+ def accept(formatter)
40
+ @children.each { |child| child.accept(formatter) }
41
+ end
42
+
43
+ def send_output_to(formatter)
44
+ @children.each { |child| child.send_output_to(formatter) }
45
+ end
46
+
47
+ def describe_exception_to(formatter)
48
+ @children.each { |child| child.describe_exception_to(formatter) }
49
+ end
50
+
51
+ def <<(child)
52
+ @children << child
53
+ end
54
+ end
55
+
56
+ Comments = Struct.new(:comments) do
57
+ def accept(formatter)
58
+ return if comments.empty?
59
+ formatter.before_comment comments
60
+ comments.each do |comment|
61
+ formatter.comment_line comment.to_s.strip
62
+ end
63
+ end
64
+ end
65
+
66
+ class HookResult
67
+ def initialize(result, messages, embeddings)
68
+ @result, @messages, @embeddings = result, messages, embeddings
69
+ @already_accepted = false
70
+ end
71
+
72
+ def accept(formatter)
73
+ unless @already_accepted
74
+ send_output_to(formatter)
75
+ describe_exception_to(formatter)
76
+ end
77
+ self
78
+ end
79
+
80
+ def send_output_to(formatter)
81
+ unless @already_accepted
82
+ @messages.each { |message| formatter.puts(message) }
83
+ @embeddings.each { |embedding| embedding.send_to_formatter(formatter) }
84
+ end
85
+ end
86
+
87
+ def describe_exception_to(formatter)
88
+ unless @already_accepted
89
+ @result.describe_exception_to(formatter)
90
+ @already_accepted = true
91
+ end
92
+ end
93
+ end
94
+
95
+ StepInvocation = Struct.new(:step_match,
96
+ :status,
97
+ :duration,
98
+ :exception,
99
+ :indent,
100
+ :background,
101
+ :step,
102
+ :messages,
103
+ :embeddings) do
104
+ extend Forwardable
105
+
106
+ def_delegators :step, :keyword, :name, :multiline_arg, :location, :gherkin_statement
107
+
108
+ def accept(formatter)
109
+ formatter.before_step(self)
110
+ messages.each { |message| formatter.puts(message) }
111
+ embeddings.each { |embedding| embedding.send_to_formatter(formatter) }
112
+ formatter.before_step_result *step_result_attributes
113
+ print_step_name(formatter)
114
+ Ast::MultilineArg.for(multiline_arg).accept(formatter)
115
+ print_exception(formatter)
116
+ formatter.after_step_result *step_result_attributes
117
+ formatter.after_step(self)
118
+ end
119
+
120
+ def step_result_attributes
121
+ legacy_multiline_arg = if multiline_arg.kind_of?(Core::Ast::EmptyMultilineArgument)
122
+ nil
123
+ else
124
+ step.multiline_arg
125
+ end
126
+ [keyword, step_match, legacy_multiline_arg, status, exception, source_indent, background, file_colon_line]
127
+ end
128
+
129
+ def failed?
130
+ status != :passed
131
+ end
132
+
133
+ def passed?
134
+ status == :passed
135
+ end
136
+
137
+ def dom_id
138
+
139
+ end
140
+
141
+ def actual_keyword(previous_step_keyword = nil)
142
+ step.actual_keyword(previous_step_keyword)
143
+ end
144
+
145
+ def file_colon_line
146
+ location.to_s
147
+ end
148
+
149
+ def backtrace_line
150
+ step_match.backtrace_line
151
+ end
152
+
153
+ def step_invocation
154
+ self
155
+ end
156
+
157
+ private
158
+
159
+ def source_indent
160
+ indent.of(self)
161
+ end
162
+
163
+ def print_step_name(formatter)
164
+ formatter.step_name(
165
+ keyword,
166
+ step_match,
167
+ status,
168
+ source_indent,
169
+ background,
170
+ location.to_s)
171
+ end
172
+
173
+ def print_exception(formatter)
174
+ return unless exception
175
+ raise exception if ENV['FAIL_FAST']
176
+ formatter.exception(exception, status)
177
+ end
178
+ end
179
+
180
+ class StepInvocations < Array
181
+ def failed?
182
+ any?(&:failed?)
183
+ end
184
+
185
+ def passed?
186
+ all?(&:passed?)
187
+ end
188
+
189
+ def status
190
+ return :passed if passed?
191
+ failed_step.status
192
+ end
193
+
194
+ def exception
195
+ failed_step.exception if failed_step
196
+ end
197
+
198
+ private
199
+
200
+ def failed_step
201
+ detect(&:failed?)
202
+ end
203
+ end
204
+
205
+ class DataTableRow
206
+ def initialize(row, line)
207
+ @values = row
208
+ @line = line
209
+ end
210
+
211
+ def dom_id
212
+ "row_#{line}"
213
+ end
214
+
215
+ def accept(formatter)
216
+ formatter.before_table_row(self)
217
+ values.each do |value|
218
+ formatter.before_table_cell(value)
219
+ formatter.table_cell_value(value, status)
220
+ formatter.after_table_cell(value)
221
+ end
222
+ formatter.after_table_row(self)
223
+ end
224
+
225
+ def status
226
+ :skipped
227
+ end
228
+
229
+ def exception
230
+ nil
231
+ end
232
+
233
+ attr_reader :values, :line
234
+ private :values, :line
235
+ end
236
+
237
+ ExampleTableRow = Struct.new(:exception, :status, :cells, :location, :language) do
238
+ def name
239
+ '| ' + cells.join(' | ') + ' |'
240
+ end
241
+
242
+ def failed?
243
+ status == :failed
244
+ end
245
+
246
+ def line
247
+ location.line
248
+ end
249
+
250
+ def keyword
251
+ # This method is only called when used for the scenario name line with
252
+ # the expand option, and on that line the keyword is "Scenario"
253
+ language.keywords('scenario')[0]
254
+ end
255
+ end
256
+
257
+ class LegacyTableRow < DataTableRow
258
+ def accept(formatter)
259
+ formatter.before_table_row(self)
260
+ values.each do |value|
261
+ formatter.before_table_cell(value.value)
262
+ formatter.table_cell_value(value.value, value.status)
263
+ formatter.after_table_cell(value.value)
264
+ end
265
+ formatter.after_table_row(self)
266
+ end
267
+ end
268
+
269
+ Tags = Struct.new(:tags) do
270
+ def accept(formatter)
271
+ formatter.before_tags tags
272
+ tags.each do |tag|
273
+ formatter.tag_name tag.name
274
+ end
275
+ formatter.after_tags tags
276
+ end
277
+ end
278
+
279
+ Scenario = Struct.new(:status, :name, :location) do
280
+ def backtrace_line(step_name = "#{name}", line = self.location.line)
281
+ "#{location.on_line(line)}:in `#{step_name}'"
282
+ end
283
+
284
+ def failed?
285
+ :failed == status
286
+ end
287
+
288
+ def line
289
+ location.line
290
+ end
291
+ end
292
+
293
+ ScenarioOutline = Struct.new(:status, :name, :location) do
294
+ def backtrace_line(step_name = "#{name}", line = self.location.line)
295
+ "#{location.on_line(line)}:in `#{step_name}'"
296
+ end
297
+
298
+ def failed?
299
+ :failed == status
300
+ end
301
+
302
+ def line
303
+ location.line
304
+ end
305
+ end
306
+
307
+ module MultilineArg
308
+ class << self
309
+ def for(node)
310
+ Builder.new(node).result
311
+ end
312
+ end
313
+
314
+ class Builder
315
+ def initialize(node)
316
+ node.describe_to(self)
317
+ end
318
+
319
+ def doc_string(node)
320
+ @result = DocString.new(node)
321
+ end
322
+
323
+ def data_table(node)
324
+ @result = DataTable.new(node)
325
+ end
326
+
327
+ def legacy_table(node)
328
+ @result = LegacyTable.new(node)
329
+ end
330
+
331
+ def result
332
+ @result || Node.new(nil)
333
+ end
334
+ end
335
+
336
+ class DocString < Node
337
+ def accept(formatter)
338
+ formatter.before_multiline_arg node
339
+ formatter.doc_string(node)
340
+ formatter.after_multiline_arg node
341
+ end
342
+ end
343
+
344
+ class DataTable < Cucumber::MultilineArgument::DataTable
345
+ def node
346
+ @ast_table
347
+ end
348
+
349
+ def accept(formatter)
350
+ formatter.before_multiline_arg self
351
+ node.raw.each_with_index do |row, index|
352
+ line = node.location.line + index
353
+ DataTableRow.new(row, line).accept(formatter)
354
+ end
355
+ formatter.after_multiline_arg self
356
+ end
357
+ end
358
+ end
359
+
360
+ class LegacyTable < SimpleDelegator
361
+ def accept(formatter)
362
+ formatter.before_multiline_arg self
363
+ cells_rows.each_with_index do |row, index|
364
+ line = location.line + index
365
+ LegacyTableRow.new(row, line).accept(formatter)
366
+ end
367
+ formatter.after_multiline_arg self
368
+ end
369
+ end
370
+
371
+ Features = Struct.new(:duration)
372
+
373
+ end
374
+ end
375
+ end
376
+ end
@@ -0,0 +1,51 @@
1
+ module Cucumber
2
+ module Formatter
3
+ module LegacyApi
4
+
5
+ class Results
6
+ def initialize
7
+ # Optimization - quicker lookup.
8
+ @inserted_steps = {}
9
+ @inserted_scenarios = {}
10
+ end
11
+
12
+ def step_visited(step) #:nodoc:
13
+ step_id = step.object_id
14
+
15
+ unless @inserted_steps.has_key?(step_id)
16
+ @inserted_steps[step_id] = step
17
+ steps.push(step)
18
+ end
19
+ end
20
+
21
+ def scenario_visited(scenario) #:nodoc:
22
+ scenario_id = scenario.object_id
23
+
24
+ unless @inserted_scenarios.has_key?(scenario_id)
25
+ @inserted_scenarios[scenario_id] = scenario
26
+ scenarios.push(scenario)
27
+ end
28
+ end
29
+
30
+ def steps(status = nil) #:nodoc:
31
+ @steps ||= []
32
+ if(status)
33
+ @steps.select{|step| step.status == status}
34
+ else
35
+ @steps
36
+ end
37
+ end
38
+
39
+ def scenarios(status = nil) #:nodoc:
40
+ @scenarios ||= []
41
+ if(status)
42
+ @scenarios.select{|scenario| scenario.status == status}
43
+ else
44
+ @scenarios
45
+ end
46
+ end
47
+ end
48
+
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,30 @@
1
+ module Cucumber
2
+ module Formatter
3
+ module LegacyApi
4
+
5
+ # This is what's passed to the constructor of the formatters
6
+ class RuntimeFacade < Struct.new(:results, :support_code, :configuration)
7
+ def unmatched_step_definitions
8
+ support_code.unmatched_step_definitions
9
+ end
10
+
11
+ def snippet_text(step_keyword, step_name, multiline_arg) #:nodoc:
12
+ support_code.snippet_text(::Gherkin::I18n.code_keyword_for(step_keyword), step_name, multiline_arg)
13
+ end
14
+
15
+ def unknown_programming_language?
16
+ support_code.unknown_programming_language?
17
+ end
18
+
19
+ def scenarios(status = nil)
20
+ results.scenarios(status)
21
+ end
22
+
23
+ def steps(status = nil)
24
+ results.steps(status)
25
+ end
26
+ end
27
+
28
+ end
29
+ end
30
+ end
@@ -26,6 +26,8 @@ module Cucumber
26
26
  @indent = 0
27
27
  @prefixes = options[:prefixes] || {}
28
28
  @delayed_messages = []
29
+ @previous_step_keyword = nil
30
+ @snippets_input = []
29
31
  end
30
32
 
31
33
  def before_features(features)
@@ -33,18 +35,12 @@ module Cucumber
33
35
  end
34
36
 
35
37
  def after_features(features)
36
- print_summary(features) unless @options[:autoformat]
38
+ print_summary(features)
37
39
  end
38
40
 
39
41
  def before_feature(feature)
40
42
  @exceptions = []
41
43
  @indent = 0
42
- if @options[:autoformat]
43
- file = File.join(@options[:autoformat], feature.file)
44
- dir = File.dirname(file)
45
- mkdir_p(dir) unless File.directory?(dir)
46
- @io = ensure_file(file, "pretty")
47
- end
48
44
  end
49
45
 
50
46
  def comment_line(comment_line)
@@ -78,6 +74,7 @@ module Cucumber
78
74
  end
79
75
 
80
76
  def after_feature_element(feature_element)
77
+ print_messages
81
78
  @io.puts
82
79
  @io.flush
83
80
  end
@@ -89,6 +86,7 @@ module Cucumber
89
86
  end
90
87
 
91
88
  def after_background(background)
89
+ print_messages
92
90
  @in_background = nil
93
91
  @io.puts
94
92
  @io.flush
@@ -131,6 +129,7 @@ module Cucumber
131
129
  def before_step(step)
132
130
  @current_step = step
133
131
  @indent = 6
132
+ print_messages
134
133
  end
135
134
 
136
135
  def before_step_result(keyword, step_match, multiline_arg, status, exception, source_indent, background, file_colon_line)
@@ -167,6 +166,7 @@ module Cucumber
167
166
 
168
167
  def exception(exception, status)
169
168
  return if @hide_this_step
169
+ print_messages
170
170
  print_exception(exception, status, @indent)
171
171
  @io.flush
172
172
  end
@@ -211,6 +211,14 @@ module Cucumber
211
211
  @io.flush
212
212
  end
213
213
 
214
+ def before_test_case(test_case)
215
+ @previous_step_keyword = nil
216
+ end
217
+
218
+ def after_test_step(test_step, result)
219
+ collect_snippet_data(test_step, result)
220
+ end
221
+
214
222
  private
215
223
 
216
224
  def print_feature_element_name(keyword, name, file_colon_line, source_indent)
@@ -219,7 +227,7 @@ module Cucumber
219
227
  line = "#{keyword}: #{names[0]}".indent(@scenario_indent)
220
228
  @io.print(line)
221
229
  if @options[:source]
222
- line_comment = " # #{file_colon_line}".indent(source_indent)
230
+ line_comment = "# #{file_colon_line}".indent(source_indent)
223
231
  @io.print(format_string(line_comment, :comment))
224
232
  end
225
233
  @io.puts
@@ -11,6 +11,8 @@ module Cucumber
11
11
 
12
12
  def initialize(runtime, path_or_io, options)
13
13
  @runtime, @io, @options = runtime, ensure_io(path_or_io, "progress"), options
14
+ @previous_step_keyword = nil
15
+ @snippets_input = []
14
16
  end
15
17
 
16
18
  def before_features(features)
@@ -64,6 +66,14 @@ module Cucumber
64
66
  @exception_raised = true
65
67
  end
66
68
 
69
+ def before_test_case(test_case)
70
+ @previous_step_keyword = nil
71
+ end
72
+
73
+ def after_test_step(test_step, result)
74
+ collect_snippet_data(test_step, result)
75
+ end
76
+
67
77
  private
68
78
 
69
79
  def print_summary(features)
@@ -2,89 +2,32 @@ require 'cucumber/formatter/io'
2
2
 
3
3
  module Cucumber
4
4
  module Formatter
5
- # The formatter used for <tt>--format rerun</tt>
6
- #
7
- # This formatter keeps track of all failing features and print out their location.
8
- # Example:
9
- #
10
- # features/foo.feature:34 features/bar.feature:11:76:81
11
- #
12
- # This formatter is used by AutoTest - it will use the output to decide what
13
- # to run the next time, simply passing the output string on the command line.
14
- #
15
5
  class Rerun
16
- include Io
6
+ include Formatter::Io
17
7
 
18
8
  def initialize(runtime, path_or_io, options)
19
9
  @io = ensure_io(path_or_io, "rerun")
20
- @options = options
21
- @file_names = []
22
- @file_colon_lines = Hash.new{|h,k| h[k] = []}
10
+ @failures = {}
23
11
  end
24
12
 
25
- def before_feature(feature_element)
26
- @lines = []
27
- @file = feature_element.file
13
+ def after_test_case(test_case, result)
14
+ return if result.passed?
15
+ @failures[test_case.location.file] ||= []
16
+ @failures[test_case.location.file] << test_case.location.line
28
17
  end
29
18
 
30
- def after_feature(*)
31
- unless @lines.empty?
32
- after_first_time do
33
- @io.print ' '
34
- end
35
- @io.print "#{@file}:#{@lines.join(':')}"
36
- @io.flush
37
- end
19
+ def done
20
+ return if @failures.empty?
21
+ @io.print file_failures.join(' ')
38
22
  end
39
23
 
40
- def after_features(features)
41
- @io.close
24
+ [:before_test_case, :before_test_step, :after_test_step].each do |method|
25
+ define_method(method) { |*| }
42
26
  end
43
27
 
44
- def before_feature_element(feature_element)
45
- @rerun = false
46
- end
47
-
48
- def after_feature_element(feature_element)
49
- if (@rerun || feature_element.failed?) && !(Ast::ScenarioOutline === feature_element)
50
- @lines << feature_element.line
51
- end
52
- end
53
-
54
- def after_table_row(table_row)
55
- return unless @in_examples and Cucumber::Ast::OutlineTable::ExampleRow === table_row
56
- unless @header_row
57
- if table_row.failed?
58
- @rerun = true
59
- @lines << table_row.line
60
- end
61
- end
62
-
63
- @header_row = false if @header_row
64
- end
65
-
66
- def before_examples(*args)
67
- @header_row = true
68
- @in_examples = true
69
- end
70
-
71
- def after_examples(*args)
72
- @in_examples = false
73
- end
74
-
75
- def before_table_row(table_row)
76
- return unless @in_examples
77
- end
78
-
79
- def step_name(keyword, step_match, status, source_indent, background, file_colon_line)
80
- @rerun = true if [:failed, :pending, :undefined].index(status)
81
- end
82
-
83
- private
84
-
85
- def after_first_time
86
- yield if @not_first_time
87
- @not_first_time = true
28
+ private
29
+ def file_failures
30
+ @failures.map { |file, lines| [file, lines].join(':') }
88
31
  end
89
32
  end
90
33
  end