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,185 +0,0 @@
1
- begin
2
- require 'v8'
3
- rescue LoadError
4
- gem 'therubyracer', '~> 0.7.1'
5
- require 'v8'
6
- end
7
-
8
- require 'cucumber/js_support/js_snippets'
9
-
10
- module Cucumber
11
- module JsSupport
12
-
13
- def self.argument_safe_string(string)
14
- arg_string = string.to_s.gsub(/[']/, '\\\\\'')
15
- arg_string.gsub("\n", '\n')
16
- end
17
-
18
- class JsWorld
19
- def initialize
20
- @world = V8::Context.new
21
- end
22
-
23
- def execute(js_function, args=[])
24
- js_function.call(*args)
25
- end
26
-
27
- def method_missing(method_name, *args)
28
- @world.send(method_name, *args)
29
- end
30
- end
31
-
32
- class JsStepDefinition
33
- def initialize(js_language, regexp, js_function)
34
- @js_language, @regexp, @js_function = js_language, regexp.to_s, js_function
35
- end
36
-
37
- def invoke(args)
38
- args = @js_language.execute_transforms(args)
39
- @js_language.current_world.execute(@js_function, args)
40
- end
41
-
42
- def regexp_source
43
- @regexp.inspect
44
- end
45
-
46
- def arguments_from(step_name)
47
- matches = eval_js "#{@regexp}.exec('#{step_name}')"
48
- if matches
49
- matches.to_a[1..-1].map do |match|
50
- JsArg.new(match)
51
- end
52
- end
53
- end
54
-
55
- def file_colon_line
56
- # Not possible yet to get file/line of js function with V8/therubyracer
57
- ""
58
- end
59
- end
60
-
61
- class JsHook
62
- def initialize(js_language, tag_expressions, js_function)
63
- @js_language, @tag_expressions, @js_function = js_language, tag_expressions, js_function
64
- end
65
-
66
- def tag_expressions
67
- @tag_expressions
68
- end
69
-
70
- def invoke(location, scenario)
71
- @js_language.current_world.execute(@js_function)
72
- end
73
- end
74
-
75
- class JsTransform
76
- def initialize(js_language, regexp, js_function)
77
- @js_language, @regexp, @js_function = js_language, regexp.to_s, js_function
78
- end
79
-
80
- def match(arg)
81
- arg = JsSupport.argument_safe_string(arg)
82
- matches = (eval_js "#{@regexp}.exec('#{arg}');").to_a
83
- matches.empty? ? nil : matches[1..-1]
84
- end
85
-
86
- def invoke(arg)
87
- @js_function.call([arg])
88
- end
89
- end
90
-
91
- class JsArg
92
- def initialize(arg)
93
- @arg = arg
94
- end
95
-
96
- def val
97
- @arg
98
- end
99
-
100
- def offset
101
- end
102
- end
103
-
104
- class JsLanguage
105
- include LanguageSupport::LanguageMethods
106
- include JsSnippets
107
-
108
- def initialize(runtime)
109
- @step_definitions = []
110
- @world = JsWorld.new
111
- @runtime = runtime
112
-
113
- @world["jsLanguage"] = self
114
- @world.load(File.dirname(__FILE__) + '/js_dsl.js')
115
- end
116
-
117
- def load_code_file(js_file)
118
- @world.load(js_file)
119
- end
120
-
121
- def world(js_files)
122
- js_files.each do |js_file|
123
- load_code_file("#{path_to_load_js_from}#{js_file}")
124
- end
125
- end
126
-
127
- def alias_adverbs(adverbs)
128
- end
129
-
130
- def begin_scenario(scenario)
131
- @language = scenario.language
132
- end
133
-
134
- def end_scenario
135
- end
136
-
137
- def step_matches(name_to_match, name_to_format)
138
- @step_definitions.map do |step_definition|
139
- if(arguments = step_definition.arguments_from(name_to_match))
140
- StepMatch.new(step_definition, name_to_match, name_to_format, arguments)
141
- else
142
- nil
143
- end
144
- end.compact
145
- end
146
-
147
- def add_step_definition(regexp, js_function)
148
- @step_definitions << JsStepDefinition.new(self, regexp, js_function)
149
- end
150
-
151
- #TODO: support multiline arguments when calling steps from within steps
152
- def execute_step_definition(name, multiline_argument = nil)
153
- @runtime.step_match(name).invoke(multiline_argument)
154
- end
155
-
156
- def register_js_hook(phase, tag_expressions, js_function)
157
- add_hook(phase, JsHook.new(self, tag_expressions, js_function))
158
- end
159
-
160
- def register_js_transform(regexp, js_function)
161
- add_transform(JsTransform.new(self, regexp, js_function))
162
- end
163
-
164
- def current_world
165
- @world
166
- end
167
-
168
- def steps(steps_text, file_colon_line)
169
- @runtime.invoke_steps(steps_text, @language, file_colon_line)
170
- end
171
-
172
- private
173
- def path_to_load_js_from
174
- paths = @runtime.features_paths
175
- if paths.empty?
176
- '' # Using rake
177
- else
178
- path = paths[0][/(^.*\/?features)/, 0]
179
- path ? "#{path}/../" : '../'
180
- end
181
- end
182
-
183
- end
184
- end
185
- end
@@ -1,27 +0,0 @@
1
- module Cucumber
2
- module JsSupport
3
- module JsSnippets
4
- PARAM_PATTERN = /"(.*?)"/
5
- ESCAPED_PARAM_PATTERN = '"([^\\"]*)"'
6
-
7
- def snippet_text(code_keyword, step_name, multiline_arg_class, snippet_type)
8
- escaped = Regexp.escape(step_name).gsub('\ ', ' ').gsub('/', '\/')
9
- escaped = escaped.gsub(PARAM_PATTERN, ESCAPED_PARAM_PATTERN)
10
-
11
- n = 0
12
- block_args = escaped.scan(ESCAPED_PARAM_PATTERN).map do |a|
13
- n += 1
14
- "arg#{n}"
15
- end
16
- block_args << multiline_arg_class.default_arg_name unless multiline_arg_class.nil?
17
- block_arg_string = block_args.empty? ? "" : "#{block_args.join(", ")}"
18
- multiline_class_comment = ""
19
- if(multiline_arg_class == Ast::Table)
20
- multiline_class_comment = "//#{multiline_arg_class.default_arg_name} is a #{multiline_arg_class.to_s}\n"
21
- end
22
-
23
- "#{code_keyword}(/^#{escaped}$/, function(#{block_arg_string}){\n #{multiline_class_comment} //express the regexp above with the code you wish you had\n});"
24
- end
25
- end
26
- end
27
- end
@@ -1,284 +0,0 @@
1
- require 'cucumber/ast'
2
- require 'gherkin/rubify'
3
- require 'cucumber/ast/multiline_argument'
4
- require 'cucumber/ast/empty_background'
5
-
6
- module Cucumber
7
- module Parser
8
- # This class conforms to the Gherkin event API and builds the
9
- # "legacy" AST. It will be replaced later when we have a new "clean"
10
- # AST.
11
- class GherkinBuilder
12
- include Gherkin::Rubify
13
-
14
- def initialize(path = 'UNKNOWN-FILE')
15
- @path = path
16
- end
17
-
18
- def result
19
- return nil unless @feature_builder
20
- @feature_builder.result(language)
21
- end
22
-
23
- def language=(language)
24
- @language = language
25
- end
26
-
27
- def uri(uri)
28
- @path = uri
29
- end
30
-
31
- def feature(node)
32
- @feature_builder = FeatureBuilder.new(file, node)
33
- end
34
-
35
- def background(node)
36
- builder = BackgroundBuilder.new(file, node)
37
- @feature_builder.background_builder = builder
38
- @current = builder
39
- end
40
-
41
- def scenario(node)
42
- builder = ScenarioBuilder.new(file, node)
43
- @feature_builder.add_child builder
44
- @current = builder
45
- end
46
-
47
- def scenario_outline(node)
48
- builder = ScenarioOutlineBuilder.new(file, node)
49
- @feature_builder.add_child builder
50
- @current = builder
51
- end
52
-
53
- def examples(examples)
54
- examples_fields = [
55
- Ast::Location.new(file, examples.line),
56
- Ast::Comment.new(examples.comments.map{|comment| comment.value}.join("\n")),
57
- examples.keyword,
58
- examples.name,
59
- examples.description,
60
- matrix(examples.rows)
61
- ]
62
- @current.add_examples examples_fields, examples
63
- end
64
-
65
- def step(node)
66
- builder = StepBuilder.new(file, node)
67
- @current.add_child builder
68
- end
69
-
70
- def eof
71
- end
72
-
73
- def syntax_error(state, event, legal_events, line)
74
- # raise "SYNTAX ERROR"
75
- end
76
-
77
- private
78
-
79
- if defined?(JRUBY_VERSION)
80
- java_import java.util.ArrayList
81
- ArrayList.__persistent__ = true
82
- end
83
-
84
- def matrix(gherkin_table)
85
- gherkin_table.map do |gherkin_row|
86
- row = gherkin_row.cells
87
- class << row
88
- attr_accessor :line
89
- end
90
- row.line = gherkin_row.line
91
- row
92
- end
93
- end
94
-
95
- def language
96
- @language || raise("Language has not been set")
97
- end
98
-
99
- def file
100
- if Cucumber::WINDOWS && !ENV['CUCUMBER_FORWARD_SLASH_PATHS']
101
- @path.gsub(/\//, '\\')
102
- else
103
- @path
104
- end
105
- end
106
-
107
- class Builder
108
- def initialize(file, node)
109
- @file, @node = file, node
110
- end
111
-
112
- private
113
-
114
- def tags
115
- Ast::Tags.new(nil, node.tags)
116
- end
117
-
118
- def location
119
- Ast::Location.new(file, node.line)
120
- end
121
-
122
- def comment
123
- Ast::Comment.new(node.comments.map{ |comment| comment.value }.join("\n"))
124
- end
125
-
126
- attr_reader :file, :node
127
- end
128
-
129
- class FeatureBuilder < Builder
130
- def result(language)
131
- background = background(language)
132
- feature = Ast::Feature.new(
133
- location,
134
- background,
135
- comment,
136
- tags,
137
- node.keyword,
138
- node.name.lstrip,
139
- node.description.rstrip,
140
- children.map { |builder| builder.result(background, language, tags) }
141
- )
142
- feature.gherkin_statement(node)
143
- feature.language = language
144
- feature
145
- end
146
-
147
- def background_builder=(builder)
148
- @background_builder = builder
149
- end
150
-
151
- def add_child(child)
152
- children << child
153
- end
154
-
155
- def children
156
- @children ||= []
157
- end
158
-
159
- private
160
-
161
- def background(language)
162
- return Ast::EmptyBackground.new unless @background_builder
163
- @background ||= @background_builder.result(language)
164
- end
165
- end
166
-
167
- class BackgroundBuilder < Builder
168
- def result(language)
169
- background = Ast::Background.new(
170
- language,
171
- location,
172
- comment,
173
- node.keyword,
174
- node.name,
175
- node.description,
176
- steps(language)
177
- )
178
- background.gherkin_statement(node)
179
- background
180
- end
181
-
182
- def steps(language)
183
- children.map { |child| child.result(language) }
184
- end
185
-
186
- def add_child(child)
187
- children << child
188
- end
189
-
190
- def children
191
- @children ||= []
192
- end
193
-
194
- end
195
-
196
- class ScenarioBuilder < Builder
197
- def result(background, language, feature_tags)
198
- scenario = Ast::Scenario.new(
199
- language,
200
- location,
201
- background,
202
- comment,
203
- tags,
204
- feature_tags,
205
- node.keyword,
206
- node.name,
207
- node.description,
208
- steps(language)
209
- )
210
- scenario.gherkin_statement(node)
211
- scenario
212
- end
213
-
214
- def steps(language)
215
- children.map { |child| child.result(language) }
216
- end
217
-
218
- def add_child(child)
219
- children << child
220
- end
221
-
222
- def children
223
- @children ||= []
224
- end
225
- end
226
-
227
- class ScenarioOutlineBuilder < Builder
228
- def result(background, language, feature_tags)
229
- scenario_outline = Ast::ScenarioOutline.new(
230
- language,
231
- location,
232
- background,
233
- comment,
234
- tags,
235
- feature_tags,
236
- node.keyword,
237
- node.name,
238
- node.description,
239
- steps(language),
240
- examples_sections
241
- )
242
- scenario_outline.gherkin_statement(node)
243
- scenario_outline
244
- end
245
-
246
- def add_examples(examples_section, node)
247
- @examples_sections ||= []
248
- @examples_sections << [examples_section, node]
249
- end
250
-
251
- def steps(language)
252
- children.map { |child| child.result(language) }
253
- end
254
-
255
- def add_child(child)
256
- children << child
257
- end
258
-
259
- def children
260
- @children ||= []
261
- end
262
-
263
- private
264
-
265
- attr_reader :examples_sections
266
- end
267
-
268
- class StepBuilder < Builder
269
- def result(language)
270
- step = Ast::Step.new(
271
- language,
272
- location,
273
- node.keyword,
274
- node.name,
275
- Ast::MultilineArgument.from(node.doc_string || node.rows)
276
- )
277
- step.gherkin_statement(node)
278
- step
279
- end
280
- end
281
-
282
- end
283
- end
284
- end
@@ -1,2 +0,0 @@
1
- require 'cucumber/platform'
2
- require 'cucumber/ast'
@@ -1,10 +0,0 @@
1
- import py_language
2
-
3
- class Given(object):
4
- def __init__(self, regexp):
5
- self.regexp = regexp
6
-
7
- def __call__(self, f):
8
- py_language.register_step_def(self.regexp, f)
9
- return f
10
-
@@ -1,10 +0,0 @@
1
- import py_dsl
2
-
3
- step_defs = {}
4
-
5
- def register_step_def(regexp, f):
6
- print "Got a step def: ", regexp
7
- step_defs[regexp] = f
8
-
9
- def step_matches(step_name, name_to_report):
10
- print "WTF: " + step_name
@@ -1,80 +0,0 @@
1
- require 'rubypython'
2
-
3
- module Cucumber
4
- module PySupport
5
- class PyLanguage
6
- include LanguageSupport::LanguageMethods
7
-
8
- def initialize(runtime)
9
- @step_def_files = []
10
- #
11
- # @python_path = ENV['PYTHONPATH'] ? ENV['PYTHONPATH'].split(':') : []
12
- # add_to_python_path(File.dirname(__FILE__))
13
- #
14
- # RubyPython.start
15
- # at_exit{RubyPython.stop}
16
- #
17
- # import(File.dirname(__FILE__) + '/py_language.py')
18
- end
19
-
20
- def load_code_file(py_file)
21
- @step_def_files << py_file
22
- end
23
-
24
- def alias_adverbs(adverbs)
25
- end
26
-
27
- def snippet_text(code_keyword, step_name, multiline_arg_class, snippet_type)
28
- "python snippet: #{code_keyword}, #{step_name}"
29
- end
30
-
31
- def begin_scenario(scenario)
32
- @python_path = []
33
- add_to_python_path(File.dirname(__FILE__))
34
- @step_def_files.each { |f| add_to_python_path(File.dirname(f)) }
35
-
36
- RubyPython.start
37
-
38
- @delegate = import(File.dirname(__FILE__) + '/py_language.py')
39
- @step_def_files.each { |f| import(f) }
40
- end
41
-
42
- def end_scenario
43
- end
44
-
45
- def step_matches(step_name, name_to_report)
46
- @delegate.step_matches(step_name, name_to_report)
47
- end
48
-
49
- private
50
-
51
- def import(path)
52
- modname = File.basename(path)[0...-File.extname(path).length]
53
- begin
54
- mod = RubyPython.import(modname)
55
- rescue RubyPython::PythonError => e
56
- # e.message << "Couldn't load #{path}\nConsider adding #{File.expand_path(File.dirname(path))} to your PYTHONPATH"
57
- raise e
58
- end
59
- end
60
-
61
- def add_to_python_path(dir)
62
- dir = File.expand_path(dir)
63
- @python_path.unshift(dir)
64
- @python_path.uniq!
65
- ENV['PYTHONPATH'] = @python_path.join(':')
66
- end
67
- end
68
- end
69
- end
70
-
71
- class String #:nodoc:
72
- # RubyPython incorrectly to expects String#end_with? to exist.
73
- unless defined? end_with? # 1.9
74
- def end_with?(str) #:nodoc:
75
- str = str.to_str
76
- tail = self[-str.length, str.length]
77
- tail == str
78
- end
79
- end
80
- end
@@ -1,62 +0,0 @@
1
- require 'cucumber/errors'
2
-
3
- module Cucumber
4
- class Runtime
5
-
6
- class FeaturesLoader
7
- include Formatter::Duration
8
-
9
- def initialize(feature_files, filters, tag_expression)
10
- @feature_files, @filters, @tag_expression = feature_files, filters, tag_expression
11
- end
12
-
13
- def features
14
- load unless (defined? @features) and @features
15
- @features
16
- end
17
-
18
- private
19
-
20
- def load
21
- features = Ast::Features.new
22
-
23
- tag_counts = {}
24
- start = Time.new
25
- log.debug("Features:\n")
26
- @feature_files.each do |f|
27
- feature_file = FeatureFile.new(f)
28
- feature = feature_file.parse(@filters, tag_counts)
29
- if feature
30
- features.add_feature(feature)
31
- log.debug(" * #{f}\n")
32
- end
33
- end
34
- duration = Time.now - start
35
- log.debug("Parsing feature files took #{format_duration(duration)}\n\n")
36
-
37
- check_tag_limits(tag_counts)
38
-
39
- @features = features
40
- end
41
-
42
- def check_tag_limits(tag_counts)
43
- error_messages = []
44
- @tag_expression.limits.each do |tag_name, tag_limit|
45
- tag_locations = (tag_counts[tag_name] || [])
46
- tag_count = tag_locations.length
47
- if tag_count > tag_limit
48
- error = "#{tag_name} occurred #{tag_count} times, but the limit was set to #{tag_limit}\n " +
49
- tag_locations.join("\n ")
50
- error_messages << error
51
- end
52
- end
53
- raise TagExcess.new(error_messages) if error_messages.any?
54
- end
55
-
56
- def log
57
- Cucumber.logger
58
- end
59
- end
60
-
61
- end
62
- end