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,196 +0,0 @@
1
- require 'cucumber/errors'
2
- require 'cucumber/step_match'
3
- require 'cucumber/ast/table'
4
- require 'gherkin/rubify'
5
-
6
- module Cucumber
7
- module Ast
8
- class StepInvocation #:nodoc:
9
- include Gherkin::Rubify
10
-
11
- attr_writer :step_collection, :background
12
- attr_reader :name, :matched_cells, :status, :reported_exception
13
- attr_accessor :exception
14
-
15
- class << self
16
- SEVERITY = [:passed, :undefined, :pending, :skipped, :failed]
17
- def worst_status(statuses)
18
- SEVERITY[statuses.map{|status| SEVERITY.index(status)}.max]
19
- end
20
- end
21
-
22
- def initialize(step, name, multiline_arg, matched_cells)
23
- @step, @name, @multiline_arg, @matched_cells = step, name, multiline_arg, matched_cells
24
- status!(:skipped)
25
- @skip_invoke = @exception = @step_match = @different_table = @reported_exception = @background = nil
26
- end
27
-
28
- def background?
29
- @background
30
- end
31
-
32
- def skip_invoke!
33
- @skip_invoke = true
34
- end
35
-
36
- def accept(visitor)
37
- return if Cucumber.wants_to_quit
38
- invoke(visitor.runtime, visitor.configuration)
39
- visit_step_result(visitor)
40
- end
41
-
42
- def visit_step_result(visitor)
43
- visitor.visit_step_result(
44
- keyword,
45
- @step_match,
46
- (@different_table || @multiline_arg),
47
- @status,
48
- @reported_exception,
49
- source_indent,
50
- @background,
51
- file_colon_line
52
- )
53
- end
54
-
55
- def invoke(runtime, configuration)
56
- find_step_match!(runtime, configuration)
57
- unless @skip_invoke || configuration.dry_run? || @exception || @step_collection.exception
58
- @skip_invoke = true
59
- begin
60
- @step_match.invoke(@multiline_arg)
61
- runtime.after_step
62
- status!(:passed)
63
- rescue Pending => e
64
- failed(configuration, e, false)
65
- status!(:pending)
66
- rescue Undefined => e
67
- failed(configuration, e, false)
68
- status!(:undefined)
69
- rescue Cucumber::Ast::Table::Different => e
70
- @different_table = e.table
71
- failed(configuration, e, false)
72
- status!(:failed)
73
- rescue Exception => e
74
- failed(configuration, e, false)
75
- status!(:failed)
76
- end
77
- end
78
- end
79
-
80
- def find_step_match!(runtime, configuration)
81
- return if @step_match
82
- begin
83
- @step_match = runtime.step_match(@name)
84
- rescue Undefined => e
85
- failed(configuration, e, true)
86
- status!(:undefined)
87
- @step_match = NoStepMatch.new(@step, @name)
88
- rescue Ambiguous => e
89
- failed(configuration, e, false)
90
- status!(:failed)
91
- @step_match = NoStepMatch.new(@step, @name)
92
- end
93
- runtime.step_visited(self)
94
- end
95
-
96
- def failed(configuration, e, clear_backtrace)
97
- e.set_backtrace([]) if e.backtrace.nil? || clear_backtrace
98
- e.backtrace << @step.backtrace_line unless @step.backtrace_line.nil?
99
- e = filter_backtrace(e)
100
- @exception = e
101
- if(configuration.strict? || !(Undefined === e) || e.nested?)
102
- @reported_exception = e
103
- else
104
- @reported_exception = nil
105
- end
106
- end
107
-
108
- # This constant is appended to by Cuke4Duke. Do not change its name
109
- BACKTRACE_FILTER_PATTERNS = [/vendor\/rails|lib\/cucumber|bin\/cucumber:|lib\/rspec|gems\/|minitest|test\/unit/]
110
- if(Cucumber::JRUBY)
111
- BACKTRACE_FILTER_PATTERNS << /org\/jruby/
112
- end
113
- PWD_PATTERN = /#{Regexp.escape(Dir.pwd)}\//m
114
-
115
- # This is to work around double ":in " segments in JRuby backtraces. JRuby bug?
116
- def filter_backtrace(e)
117
- return e if Cucumber.use_full_backtrace
118
- e.backtrace.each{|line| line.gsub!(PWD_PATTERN, "./")}
119
-
120
- filtered = (e.backtrace || []).reject do |line|
121
- BACKTRACE_FILTER_PATTERNS.detect { |p| line =~ p }
122
- end
123
-
124
- if ENV['CUCUMBER_TRUNCATE_OUTPUT']
125
- # Strip off file locations
126
- filtered = filtered.map do |line|
127
- line =~ /(.*):in `/ ? $1 : line
128
- end
129
- end
130
-
131
- e.set_backtrace(filtered)
132
- e
133
- end
134
-
135
- def status!(status)
136
- @status = status
137
- @matched_cells.each do |cell|
138
- cell.status = status
139
- end
140
- end
141
-
142
- def previous
143
- @step_collection.previous_step(self)
144
- end
145
-
146
- def actual_keyword
147
- repeat_keywords = rubify([language.keywords('but'), language.keywords('and')]).flatten.uniq.reject{|kw| kw == '* '}
148
- if repeat_keywords.index(@step.keyword) && previous
149
- previous.actual_keyword
150
- else
151
- keyword == '* ' ? language.code_keywords.first : keyword
152
- end
153
- end
154
-
155
- def source_indent
156
- @step.feature_element.source_indent(text_length)
157
- end
158
-
159
- def text_length
160
- @step.text_length(@name)
161
- end
162
-
163
- def keyword
164
- @step.keyword
165
- end
166
-
167
- def multiline_arg
168
- @step.multiline_arg
169
- end
170
-
171
- def file_colon_line
172
- @step.file_colon_line
173
- end
174
-
175
- def dom_id
176
- @step.dom_id
177
- end
178
-
179
- def backtrace_line
180
- @step.backtrace_line
181
- end
182
-
183
- def language
184
- @step.language || raise("Language is required on #{@step}")
185
- end
186
-
187
- def gherkin_statement
188
- @step.gherkin_statement
189
- end
190
-
191
- def to_sexp
192
- [:step_invocation, @step.line, @step.keyword, @name, (@multiline_arg.nil? ? nil : @multiline_arg.to_sexp)].compact
193
- end
194
- end
195
- end
196
- end
@@ -1,28 +0,0 @@
1
- require 'gherkin/tag_expression'
2
-
3
- module Cucumber
4
- module Ast
5
- class Tags #:nodoc:
6
- attr_reader :tags
7
-
8
- def initialize(line, tags)
9
- @line, @tags = line, tags
10
- end
11
-
12
- def accept(visitor)
13
- return if Cucumber.wants_to_quit
14
- @tags.each do |tag|
15
- visitor.visit_tag_name(tag.name)
16
- end
17
- end
18
-
19
- def accept_hook?(hook)
20
- Gherkin::TagExpression.new(hook.tag_expressions).evaluate(@tags)
21
- end
22
-
23
- def to_sexp
24
- @tags.map{|tag| [:tag, tag.name]}
25
- end
26
- end
27
- end
28
- end
@@ -1,191 +0,0 @@
1
- module Cucumber
2
- module Ast
3
- # Walks the AST, executing steps and notifying listeners
4
- class TreeWalker
5
- attr_accessor :configuration #:nodoc:
6
- attr_reader :runtime #:nodoc:
7
-
8
- def initialize(runtime, listeners = [], configuration = Cucumber::Configuration.default)
9
- @runtime, @listeners, @configuration = runtime, listeners, configuration
10
- end
11
-
12
- def execute(scenario, skip_hooks)
13
- runtime.with_hooks(scenario, skip_hooks) do
14
- scenario.skip_invoke! if scenario.failed?
15
- visit_steps(scenario.steps)
16
- end
17
- end
18
-
19
- def visit_features(features)
20
- broadcast(features) do
21
- features.accept(self)
22
- end
23
- end
24
-
25
- def visit_feature(feature)
26
- broadcast(feature) do
27
- feature.accept(self)
28
- end
29
- end
30
-
31
- def visit_comment(comment)
32
- broadcast(comment) do
33
- comment.accept(self)
34
- end
35
- end
36
-
37
- def visit_comment_line(comment_line)
38
- broadcast(comment_line)
39
- end
40
-
41
- def visit_tags(tags)
42
- broadcast(tags) do
43
- tags.accept(self)
44
- end
45
- end
46
-
47
- def visit_tag_name(tag_name)
48
- broadcast(tag_name)
49
- end
50
-
51
- def visit_feature_name(keyword, name)
52
- broadcast(keyword, name)
53
- end
54
-
55
- # +feature_element+ is either Scenario or ScenarioOutline
56
- def visit_feature_element(feature_element)
57
- broadcast(feature_element) do
58
- feature_element.accept(self)
59
- end
60
- end
61
-
62
- def visit_background(background)
63
- broadcast(background) do
64
- background.accept(self)
65
- end
66
- end
67
-
68
- def visit_background_name(keyword, name, file_colon_line, source_indent)
69
- broadcast(keyword, name, file_colon_line, source_indent)
70
- end
71
-
72
- def visit_examples_array(examples_array)
73
- broadcast(examples_array) do
74
- examples_array.accept(self)
75
- end
76
- end
77
-
78
- def visit_examples(examples)
79
- broadcast(examples) do
80
- examples.accept(self)
81
- end
82
- end
83
-
84
- def visit_examples_name(keyword, name)
85
- broadcast(keyword, name)
86
- end
87
-
88
- def visit_outline_table(outline_table)
89
- broadcast(outline_table) do
90
- outline_table.accept(self)
91
- end
92
- end
93
-
94
- def visit_scenario_name(keyword, name, file_colon_line, source_indent)
95
- broadcast(keyword, name, file_colon_line, source_indent)
96
- end
97
-
98
- def visit_steps(steps)
99
- broadcast(steps) do
100
- steps.accept(self)
101
- end
102
- end
103
-
104
- def visit_step(step)
105
- broadcast(step) do
106
- step.accept(self)
107
- end
108
- end
109
-
110
- def visit_step_result(keyword, step_match, multiline_arg, status, exception, source_indent, background, file_colon_line)
111
- broadcast(keyword, step_match, multiline_arg, status, exception, source_indent, background, file_colon_line) do
112
- visit_step_name(keyword, step_match, status, source_indent, background, file_colon_line)
113
- visit_multiline_arg(multiline_arg) if multiline_arg
114
- visit_exception(exception, status) if exception
115
- end
116
- end
117
-
118
- def visit_step_name(keyword, step_match, status, source_indent, background, file_colon_line) #:nodoc:
119
- broadcast(keyword, step_match, status, source_indent, background, file_colon_line)
120
- end
121
-
122
- def visit_multiline_arg(multiline_arg) #:nodoc:
123
- broadcast(multiline_arg) do
124
- multiline_arg.accept(self)
125
- end
126
- end
127
-
128
- def visit_exception(exception, status) #:nodoc:
129
- broadcast(exception, status)
130
- end
131
-
132
- def visit_doc_string(string)
133
- broadcast(string)
134
- end
135
-
136
- def visit_table_row(table_row)
137
- broadcast(table_row) do
138
- table_row.accept(self)
139
- end
140
- end
141
-
142
- def visit_table_cell(table_cell)
143
- broadcast(table_cell) do
144
- table_cell.accept(self)
145
- end
146
- end
147
-
148
- def visit_table_cell_value(value, status)
149
- broadcast(value, status)
150
- end
151
-
152
- # Print +messages+. This method can be called from within StepDefinitions.
153
- def puts(*messages)
154
- broadcast(*messages)
155
- end
156
-
157
- # Embed +file+ of +mime_type+ in the formatter. This method can be called from within StepDefinitions.
158
- # For most formatters this is a no-op.
159
- def embed(file, mime_type, label)
160
- broadcast(file, mime_type, label)
161
- end
162
-
163
- private
164
-
165
- def broadcast(*args, &block)
166
- message = extract_method_name_from(caller)
167
- message.gsub!('visit_', '')
168
- if block_given?
169
- send_to_all("before_#{message}", *args)
170
- yield if block_given?
171
- send_to_all("after_#{message}", *args)
172
- else
173
- send_to_all(message, *args)
174
- end
175
- self
176
- end
177
-
178
- def send_to_all(message, *args)
179
- @listeners.each do |listener|
180
- if listener.respond_to?(message)
181
- listener.__send__(message, *args)
182
- end
183
- end
184
- end
185
- def extract_method_name_from(call_stack)
186
- call_stack[0].match(/in `(.*)'/).captures[0]
187
- end
188
-
189
- end
190
- end
191
- end
@@ -1,11 +0,0 @@
1
- module Cucumber
2
- module Ast
3
- class Visitor
4
- DEPRECATION_WARNING = "Cucumber::Ast::Visitor is deprecated and will be removed. You no longer need to inherit from this class."
5
-
6
- def initialize(runtime)
7
- raise(DEPRECATION_WARNING)
8
- end
9
- end
10
- end
11
- end
@@ -1,13 +0,0 @@
1
- module Cucumber
2
- class Broadcaster #:nodoc:
3
- def initialize(receivers = [])
4
- @receivers = receivers
5
- end
6
-
7
- def method_missing(method_name, *args)
8
- @receivers.map do |receiver|
9
- receiver.__send__(method_name, *args)
10
- end
11
- end
12
- end
13
- end
@@ -1,43 +0,0 @@
1
- require "drb/drb"
2
- # This code was taken from the RSpec project and slightly modified.
3
-
4
- module Cucumber
5
- module Cli
6
- class DRbClientError < StandardError
7
- end
8
- # Runs features on a DRB server, originally created with Spork compatibility in mind.
9
- class DRbClient
10
- DEFAULT_PORT = 8990
11
-
12
- class << self
13
-
14
- def run(args, error_stream, out_stream, port = nil)
15
- port ||= ENV["CUCUMBER_DRB"] || DEFAULT_PORT
16
-
17
- setup_support_for_io_streams_over_drb
18
-
19
- feature_server = DRbObject.new_with_uri("druby://127.0.0.1:#{port}")
20
- cloned_args = [] # I have no idea why this is needed, but if the regular args are sent then DRb magically transforms it into a DRb object - not an array
21
- args.each { |arg| cloned_args << arg }
22
- feature_server.run(cloned_args, error_stream, out_stream)
23
- rescue DRb::DRbConnError
24
- raise DRbClientError, "No DRb server is running."
25
- end
26
-
27
- private
28
- def setup_support_for_io_streams_over_drb
29
- # See http://redmine.ruby-lang.org/issues/show/496 as to why we specify localhost:0
30
- begin
31
- DRb.start_service("druby://localhost:0")
32
- rescue SocketError, Errno::EADDRNOTAVAIL
33
- # Ruby-1.8.7 on snow leopard doesn't like localhost:0 - but just :0
34
- # seems to work just fine
35
- DRb.start_service("druby://:0")
36
- end
37
- end
38
-
39
- end
40
-
41
- end
42
- end
43
- end
@@ -1,94 +0,0 @@
1
- require 'cucumber/parser/gherkin_builder'
2
- require 'gherkin/formatter/filter_formatter'
3
- require 'gherkin/formatter/tag_count_formatter'
4
- require 'gherkin/parser/parser'
5
-
6
- module Cucumber
7
- class FeatureFile
8
- FILE_COLON_LINE_PATTERN = /^([\w\W]*?):([\d:]+)$/ #:nodoc:
9
- DEFAULT_ENCODING = "UTF-8" #:nodoc:
10
- COMMENT_OR_EMPTY_LINE_PATTERN = /^\s*#|^\s*$/ #:nodoc:
11
- ENCODING_PATTERN = /^\s*#\s*encoding\s*:\s*([^\s]+)/ #:nodoc:
12
-
13
- # The +uri+ argument is the location of the source. It can be a path
14
- # or a path:line1:line2 etc. If +source+ is passed, +uri+ is ignored.
15
- def initialize(uri, source=nil)
16
- @source = source
17
- _, @path, @lines = *FILE_COLON_LINE_PATTERN.match(uri)
18
- if @path
19
- @lines = @lines.split(':').map { |line| line.to_i }
20
- else
21
- @path = uri
22
- end
23
- end
24
-
25
- # Parses a file and returns a Cucumber::Ast::Feature
26
- # If +configuration_filters+ contains any filters, the result will
27
- # be filtered.
28
- def parse(configuration_filters, tag_counts)
29
- filters = @lines || configuration_filters
30
-
31
- builder = Cucumber::Parser::GherkinBuilder.new(@path)
32
- filter_formatter = filters.empty? ? builder : Gherkin::Formatter::FilterFormatter.new(builder, filters)
33
- tag_count_formatter = Gherkin::Formatter::TagCountFormatter.new(filter_formatter, tag_counts)
34
- parser = Gherkin::Parser::Parser.new(tag_count_formatter, true, "root", false)
35
-
36
- begin
37
- parser.parse(source, @path, 0)
38
- builder.language = parser.i18n_language
39
- builder.result
40
- rescue Gherkin::Lexer::LexingError, Gherkin::Parser::ParseError => e
41
- e.message.insert(0, "#{@path}: ")
42
- raise e
43
- end
44
- end
45
-
46
- def source
47
- @source ||= if @path =~ /^http/
48
- require 'open-uri'
49
- open(@path).read
50
- else
51
- begin
52
- source = File.open(@path, Cucumber.file_mode('r', DEFAULT_ENCODING)).read
53
- encoding = encoding_for(source)
54
- if(DEFAULT_ENCODING.downcase != encoding.downcase)
55
- # Read the file again - it's explicitly declaring a different encoding
56
- source = File.open(@path, Cucumber.file_mode('r', encoding)).read
57
- source = to_default_encoding(source, encoding)
58
- end
59
- source
60
- rescue Errno::EACCES => e
61
- e.message << "\nCouldn't open #{File.expand_path(@path)}"
62
- raise e
63
- rescue Errno::ENOENT => e
64
- # special-case opening features, because this could be a new user:
65
- e.message << ". Please create a #{@path} directory to get started."
66
- raise e
67
- end
68
- end
69
- end
70
-
71
- private
72
-
73
- def encoding_for(source)
74
- encoding = DEFAULT_ENCODING
75
- source.each_line do |line|
76
- break unless COMMENT_OR_EMPTY_LINE_PATTERN =~ line
77
- if ENCODING_PATTERN =~ line
78
- encoding = $1
79
- break
80
- end
81
- end
82
- encoding
83
- end
84
-
85
- def to_default_encoding(string, encoding)
86
- if string.respond_to?(:encode)
87
- string.encode(DEFAULT_ENCODING)
88
- else
89
- require 'iconv'
90
- Iconv.new(DEFAULT_ENCODING, encoding).iconv(string)
91
- end
92
- end
93
- end
94
- end
@@ -1,24 +0,0 @@
1
- begin
2
- require 'builder'
3
- rescue LoadError
4
- gem 'builder'
5
- require 'builder'
6
- end
7
-
8
- module Cucumber
9
- module Formatter
10
- # Emits attributes ordered alphabetically, so that we can predicatbly test output.
11
- class OrderedXmlMarkup < Builder::XmlMarkup #:nodoc:
12
- def _insert_attributes(attrs, order=[])
13
- return if attrs.nil?
14
- keys = attrs.keys.map{|k| k.to_s}
15
- keys.sort!
16
- keys.reverse! if (attrs.keys - [:version, :encoding] == []) #HACK to ensure the 'version' attribute is first in xml declaration.
17
- keys.each do |k|
18
- v = attrs[k.to_sym] || attrs[k]
19
- @target << %{ #{k}="#{_attr_value(v)}"} if v
20
- end
21
- end
22
- end
23
- end
24
- end
@@ -1,57 +0,0 @@
1
- var CucumberJsDsl = {
2
- registerStepDefinition: function(regexp, func) {
3
- if(func == null) {
4
- jsLanguage.execute_step_definition(regexp);
5
- }
6
- else{
7
- jsLanguage.add_step_definition(regexp, func);
8
- }
9
- },
10
-
11
- registerTransform: function(regexp, func) {
12
- jsLanguage.register_js_transform(regexp, func);
13
- },
14
-
15
- beforeHook: function(tag_expressions_or_func, func) {
16
- CucumberJsDsl.__registerJsHook('before', tag_expressions_or_func, func);
17
- },
18
-
19
- afterHook: function(tag_expressions_or_func, func) {
20
- CucumberJsDsl.__registerJsHook('after', tag_expressions_or_func, func);
21
- },
22
-
23
- steps: function(step_names) {
24
- jsLanguage.steps(step_names, "UNKNOWN:0");
25
- },
26
-
27
- Table: function(raw_table) {
28
- //TODO: Create a ruby table and send it back for use in js world
29
- },
30
-
31
- world: function(files) {
32
- jsLanguage.world(files);
33
- },
34
-
35
- __registerJsHook: function(label, tag_expressions_or_func, func) {
36
- if(func != null) {
37
- var hook_func = func;
38
- var tag_expressions = tag_expressions_or_func;
39
- } else {
40
- var hook_func = tag_expressions_or_func;
41
- var tag_expressions = [];
42
- }
43
- jsLanguage.register_js_hook(label, tag_expressions, hook_func);
44
- }
45
- }
46
-
47
- var Given = CucumberJsDsl.registerStepDefinition;
48
- var When = CucumberJsDsl.registerStepDefinition;
49
- var Then = CucumberJsDsl.registerStepDefinition;
50
-
51
- var Before = CucumberJsDsl.beforeHook;
52
- var After = CucumberJsDsl.afterHook;
53
- var Transform = CucumberJsDsl.registerTransform;
54
-
55
- var World = CucumberJsDsl.world;
56
-
57
- var steps = CucumberJsDsl.steps;