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
@@ -1,194 +0,0 @@
1
- module Cucumber
2
- module Ast
3
- class OutlineTable < Table #:nodoc:
4
- def initialize(raw, scenario_outline)
5
- super(raw)
6
- @scenario_outline = scenario_outline
7
- @cells_class = ExampleRow
8
- init
9
- end
10
-
11
- def init
12
- create_step_invocations_for_example_rows!(@scenario_outline)
13
- end
14
-
15
- def to_sexp
16
- init
17
- super
18
- end
19
-
20
- def accept(visitor)
21
- return if Cucumber.wants_to_quit
22
- init
23
- cells_rows.each_with_index do |row, n|
24
- if(visitor.configuration.expand?)
25
- row.accept(visitor)
26
- else
27
- visitor.visit_table_row(row)
28
- end
29
- end
30
- nil
31
- end
32
-
33
- def accept_hook?(hook)
34
- @scenario_outline.accept_hook?(hook)
35
- end
36
-
37
- def source_tags
38
- @scenario_outline.source_tags
39
- end
40
-
41
- def source_tag_names
42
- source_tags.map { |tag| tag.name }
43
- end
44
-
45
- def skip_invoke!
46
- init
47
- example_rows.each do |cells|
48
- cells.skip_invoke!
49
- end
50
- end
51
-
52
- def create_step_invocations_for_example_rows!(scenario_outline)
53
- return if @dunit
54
- @dunit = true
55
- example_rows.each do |cells|
56
- cells.create_step_invocations!(scenario_outline)
57
- end
58
- end
59
-
60
- def example_rows
61
- cells_rows[1..-1]
62
- end
63
-
64
- def visit_scenario_name(visitor, row)
65
- @scenario_outline.visit_scenario_name(visitor, row)
66
- end
67
-
68
- def language
69
- @scenario_outline.language
70
- end
71
-
72
- class ExampleRow < Cells #:nodoc:
73
- class InvalidForHeaderRowError < NoMethodError
74
- def initialize(*args)
75
- super 'This is a header row and cannot pass or fail'
76
- end
77
- end
78
-
79
- attr_reader :scenario_outline # https://rspec.lighthouseapp.com/projects/16211/tickets/342
80
-
81
- def initialize(table, cells)
82
- super
83
- @scenario_exception = nil
84
- end
85
-
86
- def source_tag_names
87
- source_tags.map { |tag| tag.name }
88
- end
89
-
90
- def source_tags
91
- @table.source_tags
92
- end
93
-
94
- def create_step_invocations!(scenario_outline)
95
- @scenario_outline = scenario_outline
96
- @step_invocations = scenario_outline.step_invocations(self)
97
- end
98
-
99
- def skip_invoke!
100
- @step_invocations.each do |step_invocation|
101
- step_invocation.skip_invoke!
102
- end
103
- end
104
-
105
- def accept(visitor)
106
- return if Cucumber.wants_to_quit
107
- visitor.configuration.expand? ? accept_expand(visitor) : accept_plain(visitor)
108
- end
109
-
110
- def accept_plain(visitor)
111
- if header?
112
- @cells.each do |cell|
113
- cell.status = :skipped_param
114
- visitor.visit_table_cell(cell)
115
- end
116
- else
117
- visitor.runtime.with_hooks(self) do
118
- @step_invocations.each do |step_invocation|
119
- step_invocation.invoke(visitor.runtime, visitor.configuration)
120
- @exception ||= step_invocation.reported_exception
121
- end
122
-
123
- @cells.each do |cell|
124
- visitor.visit_table_cell(cell)
125
- end
126
-
127
- visitor.visit_exception(@scenario_exception, :failed) if @scenario_exception
128
- end
129
- end
130
- end
131
-
132
- def accept_expand(visitor)
133
- if header?
134
- else
135
- visitor.runtime.with_hooks(self) do
136
- @table.visit_scenario_name(visitor, self)
137
- @step_invocations.each do |step_invocation|
138
- visitor.visit_step(step_invocation)
139
- @exception ||= step_invocation.reported_exception
140
- end
141
- end
142
- end
143
- end
144
-
145
- def accept_hook?(hook)
146
- @table.accept_hook?(hook)
147
- end
148
-
149
- def exception
150
- @exception || @scenario_exception
151
- end
152
-
153
- def fail!(exception)
154
- @scenario_exception = exception
155
- end
156
-
157
- # Returns true if one or more steps failed
158
- def failed?
159
- raise InvalidForHeaderRowError if header?
160
- @step_invocations.failed? || !!@scenario_exception
161
- end
162
-
163
- # Returns true if all steps passed
164
- def passed?
165
- !failed?
166
- end
167
-
168
- # Returns the status
169
- def status
170
- return :failed if @scenario_exception
171
- @step_invocations.status
172
- end
173
-
174
- def backtrace_line
175
- @scenario_outline.backtrace_line(name, line)
176
- end
177
-
178
- def name
179
- "| #{@cells.collect{|c| c.value }.join(' | ')} |"
180
- end
181
-
182
- def language
183
- @table.language
184
- end
185
-
186
- private
187
-
188
- def header?
189
- index == 0
190
- end
191
- end
192
- end
193
- end
194
- end
@@ -1,103 +0,0 @@
1
- require 'cucumber/ast/has_steps'
2
- require 'cucumber/ast/names'
3
- require 'cucumber/ast/empty_background'
4
- require 'cucumber/ast/location'
5
- require 'cucumber/unit'
6
-
7
- module Cucumber
8
- module Ast
9
- class Scenario #:nodoc:
10
- include HasSteps
11
- include Names
12
- include HasLocation
13
-
14
- attr_reader :feature_tags
15
- attr_accessor :feature
16
-
17
- def initialize(language, location, background, comment, tags, feature_tags, keyword, title, description, raw_steps)
18
- @language, @location, @background, @comment, @tags, @feature_tags, @keyword, @title, @description, @raw_steps = language, location, background, comment, tags, feature_tags, keyword, title, description, raw_steps
19
- @exception = @executed = nil
20
- attach_steps(@raw_steps)
21
- end
22
-
23
- def accept(visitor)
24
- return if Cucumber.wants_to_quit
25
-
26
- visitor.visit_comment(@comment) unless @comment.empty?
27
- visitor.visit_tags(@tags)
28
- visitor.visit_scenario_name(@keyword, name, file_colon_line, source_indent(first_line_length))
29
-
30
- skip_invoke! if @background.failed?
31
- with_visitor(visitor) do
32
- visitor.execute(self, skip_hooks?)
33
- end
34
- @executed = true
35
- end
36
-
37
- def to_units(background)
38
- [Unit.new(background.step_invocations + step_invocations)]
39
- end
40
-
41
- # Returns true if one or more steps failed
42
- def failed?
43
- steps.failed? || !!@exception
44
- end
45
-
46
- def fail!(exception)
47
- @exception = exception
48
- @current_visitor.visit_exception(@exception, :failed)
49
- end
50
-
51
- # Returns true if all steps passed
52
- def passed?
53
- !failed?
54
- end
55
-
56
- # Returns the first exception (if any)
57
- def exception
58
- @exception || steps.exception
59
- end
60
-
61
- # Returns the status
62
- def status
63
- return :failed if @exception
64
- steps.status
65
- end
66
-
67
- def to_sexp
68
- sexp = [:scenario, line, @keyword, name]
69
- comment = @comment.to_sexp
70
- sexp += [comment] if comment
71
- tags = @tags.to_sexp
72
- sexp += tags if tags.any?
73
- sexp += steps.to_sexp if steps.any?
74
- sexp
75
- end
76
-
77
- def with_visitor(visitor)
78
- @current_visitor = visitor
79
- yield
80
- @current_visitor = nil
81
- end
82
-
83
- def skip_invoke!
84
- steps.skip_invoke!
85
- end
86
-
87
- def steps
88
- @steps ||= @background.step_collection(step_invocations)
89
- end
90
-
91
- private
92
-
93
- def step_invocations
94
- @raw_steps.map{|step| step.step_invocation}
95
- end
96
-
97
- def skip_hooks?
98
- @background.failed? || @executed
99
- end
100
-
101
- end
102
- end
103
- end
@@ -1,146 +0,0 @@
1
- require 'cucumber/ast/has_steps'
2
- require 'cucumber/ast/names'
3
- require 'cucumber/ast/empty_background'
4
-
5
- module Cucumber
6
- module Ast
7
- class ScenarioOutline #:nodoc:
8
- include HasSteps
9
- include Names
10
- include HasLocation
11
-
12
- attr_accessor :feature
13
- attr_reader :feature_tags
14
-
15
- module ExamplesArray #:nodoc:
16
- def accept(visitor)
17
- return if Cucumber.wants_to_quit
18
- each do |examples|
19
- visitor.visit_examples(examples)
20
- end
21
- end
22
- end
23
-
24
- # The +example_sections+ argument must be an Array where each element is another array representing
25
- # an Examples section. This array has 3 elements:
26
- #
27
- # * Examples keyword
28
- # * Examples section name
29
- # * Raw matrix
30
- def initialize(language, location, background, comment, tags, feature_tags, keyword, title, description, raw_steps, example_sections)
31
- @language, @location, @background, @comment, @tags, @feature_tags, @keyword, @title, @description, @raw_steps, @example_sections = language, location, background, comment, tags, feature_tags, keyword, title, description, raw_steps, example_sections
32
- attach_steps(@raw_steps)
33
- end
34
-
35
- def accept(visitor)
36
- return if Cucumber.wants_to_quit
37
- raise_missing_examples_error unless @example_sections
38
-
39
- visitor.visit_comment(@comment) unless @comment.empty?
40
- visitor.visit_tags(@tags)
41
- visitor.visit_scenario_name(@keyword, name, file_colon_line, source_indent(first_line_length))
42
- visitor.visit_steps(steps)
43
-
44
- skip_invoke! if @background.failed?
45
- visitor.visit_examples_array(examples_array) unless examples_array.empty?
46
- end
47
-
48
- def to_units(background)
49
- raise ArgumentError.new("#{background} != #{@background}") unless background == @background # maybe we don't need this argument, but it seems like the leaf AST nodes would be better not being aware of their parents. However step_invocations uses the ivar at the moment, so we'll just do this check to make sure its OK.
50
- result = []
51
- each_example_row do |row|
52
- result << Unit.new(step_invocations(row))
53
- end
54
- result
55
- end
56
-
57
- def fail!(exception)
58
- # Just a hack for https://rspec.lighthouseapp.com/projects/16211/tickets/413-scenario-outlines-that-fail-with-exception-exit-process
59
- # Also see http://groups.google.com/group/cukes/browse_thread/thread/41cd567cb9df4bc3
60
- end
61
-
62
- def skip_invoke!
63
- examples_array.each { |examples| examples.skip_invoke! }
64
- end
65
-
66
- def step_invocations(cells)
67
- step_invocations = steps.step_invocations_from_cells(cells)
68
- if @background
69
- @background.step_collection(step_invocations)
70
- else
71
- StepCollection.new(step_invocations)
72
- end
73
- end
74
-
75
- def each_example_row(&proc)
76
- examples_array.each do |examples|
77
- examples.each_example_row(&proc)
78
- end
79
- end
80
-
81
- def visit_scenario_name(visitor, row)
82
- visitor.visit_scenario_name(
83
- language.keywords('scenario')[0],
84
- row.name,
85
- Location.new(file, row.line).to_s,
86
- source_indent(first_line_length)
87
- )
88
- end
89
-
90
- def failed?
91
- examples_array.select { |examples| examples.failed? }.any?
92
- end
93
-
94
- def to_sexp
95
- sexp = [:scenario_outline, @keyword, name]
96
- comment = @comment.to_sexp
97
- sexp += [comment] if comment
98
- tags = @tags.to_sexp
99
- sexp += tags if tags.any?
100
- sexp += steps.to_sexp if steps.any?
101
- sexp += examples_array.map{|e| e.to_sexp}
102
- sexp
103
- end
104
-
105
- private
106
-
107
- attr_reader :line
108
-
109
- def examples_array
110
- return @examples_array if @examples_array
111
- @examples_array = @example_sections.map do |section|
112
- create_examples_table(section)
113
- end
114
- @examples_array.extend(ExamplesArray)
115
- @examples_array
116
- end
117
-
118
- def create_examples_table(example_section_and_gherkin_examples)
119
- example_section = example_section_and_gherkin_examples[0]
120
- gherkin_examples = example_section_and_gherkin_examples[1]
121
-
122
- examples_location = example_section[0]
123
- examples_comment = example_section[1]
124
- examples_keyword = example_section[2]
125
- examples_title = example_section[3]
126
- examples_description = example_section[4]
127
- examples_matrix = example_section[5]
128
-
129
- examples_table = OutlineTable.new(examples_matrix, self)
130
- ex = Examples.new(examples_location, examples_comment, examples_keyword, examples_title, examples_description, examples_table)
131
- ex.gherkin_statement(gherkin_examples)
132
- ex
133
- end
134
-
135
- def steps
136
- @steps ||= StepCollection.new(@raw_steps)
137
- end
138
-
139
- def raise_missing_examples_error
140
- raise MissingExamples, "Missing Example Section for Scenario Outline at #{@location}"
141
- end
142
-
143
- MissingExamples = Class.new(StandardError)
144
- end
145
- end
146
- end
@@ -1,122 +0,0 @@
1
- require 'cucumber/core_ext/string'
2
- require 'cucumber/step_match'
3
- require 'cucumber/ast/location'
4
-
5
- module Cucumber
6
- module Ast
7
- class Step #:nodoc:
8
- include HasLocation
9
-
10
- attr_reader :keyword, :name, :language
11
- attr_writer :step_collection, :options
12
- attr_accessor :feature_element, :exception, :multiline_arg
13
-
14
- INDENT = 2
15
-
16
- def initialize(language, location, keyword, name, multiline_arg=nil)
17
- @language, @location, @keyword, @name, @multiline_arg = language, location, keyword, name, multiline_arg
18
- @language || raise("Language is required!")
19
- end
20
-
21
- attr_reader :gherkin_statement
22
- def gherkin_statement(statement=nil)
23
- @gherkin_statement ||= statement
24
- end
25
-
26
- def background?
27
- false
28
- end
29
-
30
- def status
31
- # Step always has status skipped, because Step is always in a ScenarioOutline
32
- :skipped
33
- end
34
-
35
- def step_invocation
36
- StepInvocation.new(self, name, @multiline_arg, [])
37
- end
38
-
39
- def step_invocation_from_cells(cells)
40
- matched_cells = matched_cells(cells)
41
-
42
- delimited_arguments = delimit_argument_names(cells.to_hash)
43
- name = replace_name_arguments(delimited_arguments)
44
- multiline_arg = @multiline_arg.nil? ? nil : @multiline_arg.arguments_replaced(delimited_arguments)
45
-
46
- StepInvocation.new(self, name, multiline_arg, matched_cells)
47
- end
48
-
49
- def accept(visitor)
50
- return if Cucumber.wants_to_quit
51
- # The only time a Step is visited is when it is in a ScenarioOutline.
52
- # Otherwise it's always StepInvocation that gets visited instead.
53
- visit_step_result(visitor, first_match(visitor), @multiline_arg, :skipped, nil, nil)
54
- end
55
-
56
- def visit_step_result(visitor, step_match, multiline_arg, status, exception, background)
57
- visitor.visit_step_result(keyword, step_match, @multiline_arg, status, exception, source_indent, background, file_colon_line)
58
- end
59
-
60
- def first_match(visitor)
61
- # feature_element is always a ScenarioOutline in this case
62
- feature_element.each_example_row do |cells|
63
- argument_hash = cells.to_hash
64
- delimited_arguments = delimit_argument_names(argument_hash)
65
- name_to_match = replace_name_arguments(delimited_arguments)
66
- step_match = visitor.runtime.step_match(name_to_match, name) rescue nil
67
- return step_match if step_match
68
- end
69
- NoStepMatch.new(self, name)
70
- end
71
-
72
- def to_sexp
73
- [:step, line, keyword, name, (@multiline_arg.nil? ? nil : @multiline_arg.to_sexp)].compact
74
- end
75
-
76
- def source_indent
77
- feature_element.source_indent(text_length)
78
- end
79
-
80
- def text_length(name=name)
81
- INDENT + INDENT + keyword.unpack('U*').length + name.unpack('U*').length
82
- end
83
-
84
- def backtrace_line
85
- @backtrace_line ||= feature_element.backtrace_line("#{keyword}#{name}", line) unless feature_element.nil?
86
- end
87
-
88
- def dom_id
89
- @dom_id ||= file_colon_line.gsub(/\//, '_').gsub(/\./, '_').gsub(/:/, '_')
90
- end
91
-
92
- private
93
-
94
- def matched_cells(cells)
95
- col_index = 0
96
- cells.select do |cell|
97
- header_cell = cell.table.header_cell(col_index)
98
- col_index += 1
99
- delimited = delimited(header_cell.value)
100
- name.index(delimited) || (@multiline_arg && @multiline_arg.has_text?(delimited))
101
- end
102
- end
103
-
104
- def delimit_argument_names(argument_hash)
105
- argument_hash.inject({}) { |h,(name,value)| h[delimited(name)] = value; h }
106
- end
107
-
108
- def delimited(s)
109
- "<#{s}>"
110
- end
111
-
112
- def replace_name_arguments(argument_hash)
113
- name_with_arguments_replaced = name
114
- argument_hash.each do |key, value|
115
- value ||= ''
116
- name_with_arguments_replaced = name_with_arguments_replaced.gsub(key, value)
117
- end
118
- name_with_arguments_replaced
119
- end
120
- end
121
- end
122
- end
@@ -1,92 +0,0 @@
1
- module Cucumber
2
- module Ast
3
- # Holds an Array of Step or StepDefinition
4
- class StepCollection #:nodoc:
5
- include Enumerable
6
-
7
- def initialize(steps)
8
- @steps = steps
9
- @steps.each{|step| step.step_collection = self}
10
- end
11
-
12
- def inspect
13
- @steps.map { |s| [s.class, s.object_id] }.join(', ')
14
- end
15
-
16
- def accept(visitor)
17
- return if Cucumber.wants_to_quit
18
- @steps.each do |step|
19
- visitor.visit_step(step)
20
- end
21
- end
22
-
23
- def step_invocations(background = false)
24
- StepCollection.new(@steps.map{ |step|
25
- i = step.step_invocation
26
- i.background = background
27
- i
28
- })
29
- end
30
-
31
- def skip_invoke!
32
- @steps.each{|step_invocation| step_invocation.skip_invoke!}
33
- end
34
-
35
- def step_invocations_from_cells(cells)
36
- @steps.map{|step| step.step_invocation_from_cells(cells)}
37
- end
38
-
39
- def +(step_invocations)
40
- dup(step_invocations)
41
- end
42
-
43
- # Duplicates this instance and adds +step_invocations+ to the end
44
- def dup(step_invocations = [])
45
- StepCollection.new(@steps + step_invocations)
46
- end
47
-
48
- def each(&proc)
49
- @steps.each(&proc)
50
- end
51
-
52
- def previous_step(step)
53
- i = @steps.index(step) || -1
54
- @steps[i-1]
55
- end
56
-
57
- def empty?
58
- @steps.empty?
59
- end
60
-
61
- def max_line_length(feature_element)
62
- lengths = (@steps + [feature_element]).map{|e| e.text_length}
63
- lengths.max
64
- end
65
-
66
- def exception
67
- @exception ||= ((failed = @steps.detect {|step| step.exception}) && failed.exception)
68
- end
69
-
70
- def failed?
71
- status == :failed
72
- end
73
-
74
- def passed?
75
- status == :passed
76
- end
77
-
78
- def status
79
- @steps.each{|step_invocation| return step_invocation.status if step_invocation.status != :passed}
80
- :passed
81
- end
82
-
83
- def length
84
- @steps.length
85
- end
86
-
87
- def to_sexp
88
- @steps.map{|step| step.to_sexp}
89
- end
90
- end
91
- end
92
- end