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,35 +0,0 @@
1
- Feature: Cucumber command line
2
- In order to find out what step definitions need to be implemented
3
- Developers should always see what step definition is missing
4
-
5
- Scenario: Get info at arbitrary levels of nesting
6
- When I run cucumber features/call_undefined_step_from_step_def.feature
7
- Then it should pass with
8
- """
9
- Feature: Calling undefined step
10
-
11
- Scenario: Call directly # features/call_undefined_step_from_step_def.feature:3
12
- Given a step definition that calls an undefined step # features/step_definitions/sample_steps.rb:19
13
- Undefined step: "this does not exist" (Cucumber::Undefined)
14
- ./features/step_definitions/sample_steps.rb:19:in `/^a step definition that calls an undefined step$/'
15
- features/call_undefined_step_from_step_def.feature:4:in `Given a step definition that calls an undefined step'
16
-
17
- Scenario: Call via another # features/call_undefined_step_from_step_def.feature:6
18
- Given call step "a step definition that calls an undefined step" # features/step_definitions/sample_steps.rb:23
19
- Undefined step: "this does not exist" (Cucumber::Undefined)
20
- ./features/step_definitions/sample_steps.rb:19:in `/^a step definition that calls an undefined step$/'
21
- ./features/step_definitions/sample_steps.rb:24:in `/^call step "(.*)"$/'
22
- features/call_undefined_step_from_step_def.feature:7:in `Given call step "a step definition that calls an undefined step"'
23
-
24
- 2 scenarios (2 undefined)
25
- 2 steps (2 undefined)
26
-
27
- You can implement step definitions for undefined steps with these snippets:
28
-
29
- Given(/^this does not exist$/) do
30
- pending # express the regexp above with the code you wish you had
31
- end
32
-
33
-
34
- """
35
-
@@ -1,52 +0,0 @@
1
- Feature: Rerun Debugger
2
- In order to save time
3
- I want to run *only* failed, pending and missing features from previous runs
4
- (with the help of a smart cucumber.yml)
5
-
6
- Background:
7
- Given a standard Cucumber project directory structure
8
-
9
- Scenario: title
10
- Given a file named "features/sample.feature" with:
11
- """
12
- Feature: Rerun
13
-
14
- Scenario: Failing
15
- Given failing
16
-
17
- Scenario: Missing
18
- Given missing
19
-
20
- Scenario: Pending
21
- Given pending
22
-
23
- Scenario: Passing
24
- Given passing
25
- """
26
- And a file named "features/all_good.feature" with:
27
- """
28
- Feature: Rerun
29
-
30
- Scenario: Passing
31
- Given passing
32
- """
33
- And a file named "features/step_definitions/steps.rb" with:
34
- """
35
- Given /failing/ do
36
- raise 'FAIL'
37
- end
38
-
39
- Given /pending/ do
40
- pending
41
- end
42
-
43
- Given /passing/ do
44
- end
45
- """
46
-
47
- When I run cucumber -f rerun features/sample.feature features/all_good.feature
48
- Then it should fail with
49
- """
50
- features/sample.feature:3:6:9
51
-
52
- """
@@ -1,11 +0,0 @@
1
- Feature: Sample
2
-
3
- Background:
4
- Given this step works
5
-
6
- Scenario: Run a good step
7
- Given this step works
8
-
9
-
10
-
11
-
@@ -1,23 +0,0 @@
1
- Feature: Snippets
2
- In order to help speed up writing step definitions
3
- As a feature editor
4
- I want snippet suggestions for undefined step definitions
5
-
6
- Scenario: Snippet for undefined step with a pystring
7
- When I run cucumber features/undefined_multiline_args.feature:3 -s
8
- Then the output should contain
9
- """
10
- Given(/^a pystring$/) do |string|
11
- pending # express the regexp above with the code you wish you had
12
- end
13
- """
14
-
15
- Scenario: Snippet for undefined step with a step table
16
- When I run cucumber features/undefined_multiline_args.feature:9 -s
17
- Then the output should contain
18
- """
19
- Given(/^a table$/) do |table|
20
- # table is a Cucumber::Ast::Table
21
- pending # express the regexp above with the code you wish you had
22
- end
23
- """
@@ -1,38 +0,0 @@
1
- Feature: Use * keywords and still get snippets
2
- In order to make it possible to use * instead of
3
- Given/When/Then, I should not get an exception
4
- when I have undefined steps
5
-
6
- @wip-jruby
7
- Scenario: Use some *
8
- Given a standard Cucumber project directory structure
9
- And a file named "features/f.feature" with:
10
- """
11
- Feature: F
12
- Scenario: S
13
- * I have some cukes
14
- """
15
- When I run cucumber features/f.feature
16
- Then STDERR should be empty
17
- And it should pass with
18
- """
19
- Feature: F
20
-
21
- Scenario: S # features/f.feature:2
22
- * I have some cukes # features/f.feature:3
23
-
24
- 1 scenario (1 undefined)
25
- 1 step (1 undefined)
26
-
27
- You can implement step definitions for undefined steps with these snippets:
28
-
29
- Given(/^I have some cukes$/) do
30
- pending # express the regexp above with the code you wish you had
31
- end
32
-
33
- If you want snippets in a different programming language,
34
- just make sure a file with the appropriate file extension
35
- exists where cucumber looks for step definitions.
36
-
37
-
38
- """
@@ -1,179 +0,0 @@
1
- # encoding: utf-8
2
- require 'multi_json'
3
- require 'tempfile'
4
-
5
- Given /^I am in (.*)$/ do |example_dir_relative_path|
6
- @current_dir = fixtures_dir(example_dir_relative_path)
7
- end
8
-
9
- Given /^a standard Cucumber project directory structure$/ do
10
- @current_dir = working_dir
11
- in_current_dir do
12
- FileUtils.rm_rf 'features' if File.directory?('features')
13
- FileUtils.mkdir_p 'features/support'
14
- FileUtils.mkdir 'features/step_definitions'
15
- end
16
- end
17
-
18
- Given /^the (.*) directory is empty$/ do |directory|
19
- in_current_dir do
20
- FileUtils.remove_dir(directory) rescue nil
21
- FileUtils.mkdir 'tmp'
22
- end
23
- end
24
-
25
- Given /^a file named "([^"]*)"$/ do |file_name|
26
- create_file(file_name, '')
27
- end
28
-
29
- Given /^a file named "([^"]*)" with:$/ do |file_name, file_content|
30
- create_file(file_name, file_content)
31
- end
32
-
33
- Given /^the following profiles? (?:are|is) defined:$/ do |profiles|
34
- create_file('cucumber.yml', profiles)
35
- end
36
-
37
- Given /^I am running spork in the background$/ do
38
- run_spork_in_background
39
- end
40
-
41
- Given /^I am running spork in the background on port (\d+)$/ do |port|
42
- run_spork_in_background(port.to_i)
43
- end
44
-
45
- Given /^I am not running (?:.*) in the background$/ do
46
- # no-op
47
- end
48
-
49
- Given /^I have environment variable (\w+) set to "([^"]*)"$/ do |variable, value|
50
- set_env_var(variable, value)
51
- end
52
-
53
- When /^I run cucumber (.*)$/ do |cucumber_opts|
54
- run "#{Cucumber::RUBY_BINARY} -I rubygems #{cucumber_bin} --no-color #{cucumber_opts} CUCUMBER_OUTPUT_ENCODING=UTF-8"
55
- end
56
-
57
- When /^I run rake (.*)$/ do |rake_opts|
58
- run "rake #{rake_opts} --trace"
59
- end
60
-
61
- When /^I run the following Ruby code:$/ do |code|
62
- run %{#{Cucumber::RUBY_BINARY} -r rubygems -I #{cucumber_lib_dir} -e "#{code}"}
63
- end
64
-
65
- Then /^it should (fail|pass)$/ do |success|
66
- if success == 'fail'
67
- if last_exit_status == 0
68
- raise "Passed when expected to fail\nSTDOUT:\n#{last_stdout}\nSTDERR:\n#{last_stderr}"
69
- end
70
- else
71
- if last_exit_status != 0
72
- raise "Failed with exit status #{last_exit_status}\nSTDOUT:\n#{last_stdout}\nSTDERR:\n#{last_stderr}"
73
- end
74
- end
75
- end
76
-
77
- Then /^it should (fail|pass) with$/ do |success, output|
78
- unless combined_output.index(output)
79
- combined_output.should == output
80
- end
81
- step("it should #{success}")
82
- end
83
-
84
- Then /^the output should contain "([^"]*)"$/ do |text|
85
- last_stdout.should include(text)
86
- end
87
-
88
- Then /^the output should contain:?$/ do |text|
89
- last_stdout.should include(text)
90
- end
91
-
92
- Then /^the output should not contain$/ do |text|
93
- last_stdout.should_not include(text)
94
- end
95
-
96
- Then /^the output should be$/ do |text|
97
- last_stdout.should == text
98
- end
99
-
100
- Then /^it should (fail|pass) with JSON$/ do |success, text|
101
- MultiJson.load(last_stdout).should == MultiJson.load(text)
102
- Then("it should #{success}")
103
- end
104
-
105
- Then /^"([^"]*)" should contain$/ do |file, text|
106
- strip_duration(IO.read(file)).should == text
107
- end
108
-
109
- Then /^"([^"]*)" with junit duration "([^"]*)" should contain$/ do |actual_file, duration_replacement, text|
110
- actual = IO.read(actual_file)
111
- actual = replace_junit_duration(actual, duration_replacement)
112
- actual = strip_ruby186_extra_trace(actual)
113
- actual.should == text
114
- end
115
-
116
- Then /^"([^"]*)" should match "(.+?)"$/ do |file, text|
117
- File.open(file, Cucumber.file_mode('r')).read.should =~ Regexp.new(text)
118
- end
119
-
120
- Then /^"([^"]*)" should have the same contents as "([^"]*)"$/ do |actual_file, expected_file|
121
- actual = IO.read(actual_file)
122
- actual = replace_duration(actual, '0m30.005s')
123
- # Comment out to replace expected file. Use with care!
124
- # File.open(expected_file, "w") {|io| io.write(actual)}
125
- actual.should == IO.read(expected_file)
126
- end
127
-
128
- Then /^STDERR should match$/ do |text|
129
- last_stderr.should =~ /#{text}/
130
- end
131
-
132
- Then /^STDERR should not match$/ do |text|
133
- last_stderr.should_not =~ /#{text}/
134
- end
135
-
136
- Then /^STDERR should be$/ do |text|
137
- last_stderr.should == text
138
- end
139
-
140
- Then /^STDERR should be empty$/ do
141
- last_stderr.should == ""
142
- end
143
-
144
- Then /^STDERR should have warning message$/ do
145
- last_stderr.should include("[warning]")
146
- end
147
-
148
- Then /^"([^"]*)" should exist$/ do |file|
149
- File.exists?(file).should be_true
150
- FileUtils.rm(file)
151
- end
152
-
153
- Then /^"([^"]*)" should not be required$/ do |file_name|
154
- last_stdout.should_not include("* #{file_name}")
155
- end
156
-
157
- Then /^"([^"]*)" should be required$/ do |file_name|
158
- last_stdout.should include("* #{file_name}")
159
- end
160
-
161
- Then /^exactly these files should be loaded:\s*(.*)$/ do |files|
162
- last_stdout.scan(/^ \* (.*\.rb)$/).flatten.should == files.split(/,\s+/)
163
- end
164
-
165
- Then /^exactly these features should be ran:\s*(.*)$/ do |files|
166
- last_stdout.scan(/^ \* (.*\.feature)$/).flatten.should == files.split(/,\s+/)
167
- end
168
-
169
- Then /^the (.*) profile should be used$/ do |profile|
170
- last_stdout.should =~ /Using the #{profile} profile/
171
- end
172
-
173
- Then /^print output$/ do
174
- puts last_stdout
175
- end
176
-
177
- Then /^the output should contain the following JSON:$/ do |json_string|
178
- MultiJson.load(last_stdout).should == MultiJson.load(json_string)
179
- end
@@ -1,2 +0,0 @@
1
- Given /^missing$/ do
2
- end
@@ -1,3 +0,0 @@
1
- Given /^this step works$/ do
2
- end
3
-
@@ -1,34 +0,0 @@
1
- Given /^there is a wire server (running |)on port (\d+) which understands the following protocol:$/ do |running, port, table|
2
- table.map_column!('response') {|cell| cell.gsub(/\n/, '\n')}
3
- protocol = table.hashes
4
- @server = FakeWireServer.new(port.to_i, protocol)
5
- start_wire_server if running.strip == "running"
6
- end
7
-
8
- Given /^the wire server takes (.*) seconds to respond to the invoke message$/ do |timeout|
9
- @server.delay_response(:invoke, timeout.to_f)
10
- start_wire_server
11
- end
12
-
13
- module WireHelper
14
- def start_wire_server
15
- @wire_pid = fork do
16
- at_exit { stop_wire_server }
17
- @server.run
18
- end
19
- end
20
-
21
- def stop_wire_server
22
- return unless @wire_pid
23
- Process.kill('KILL', @wire_pid)
24
- Process.wait
25
- end
26
- end
27
-
28
- Before('@wire') do
29
- extend(WireHelper)
30
- end
31
-
32
- After('@wire') do
33
- stop_wire_server
34
- end
@@ -1,161 +0,0 @@
1
- require 'rubygems'
2
-
3
- require 'tempfile'
4
- require 'rspec/expectations'
5
- require 'fileutils'
6
- require 'forwardable'
7
- require 'cucumber/formatter/unicode'
8
- # This is to force miniunit to be loaded on 1.9.2, and verify that we can still run with --profile. See:
9
- # * disable_mini_test_autorun.rb and
10
- # * http://groups.google.com/group/cukes/browse_thread/thread/5682d41436e235d7
11
- # * https://rspec.lighthouseapp.com/projects/16211/tickets/677-cucumber-093-prevents-testunit-from-running
12
- require 'test/unit'
13
-
14
- class CucumberWorld
15
- extend Forwardable
16
- def_delegators CucumberWorld, :fixtures_dir, :self_test_dir, :working_dir, :cucumber_lib_dir
17
-
18
- def self.fixtures_dir(subdir=nil)
19
- @fixtures_dir ||= File.expand_path(File.join(File.dirname(__FILE__), '../../fixtures'))
20
- subdir ? File.join(@fixtures_dir, subdir) : @fixtures_dir
21
- end
22
-
23
- def self.self_test_dir
24
- @self_test_dir ||= fixtures_dir('self_test')
25
- end
26
-
27
- def self.working_dir
28
- @working_dir ||= fixtures_dir('self_test/tmp')
29
- end
30
-
31
- def cucumber_lib_dir
32
- @cucumber_lib_dir ||= File.expand_path(File.join(File.dirname(__FILE__), '../../lib'))
33
- end
34
-
35
- # Don't use Cucumber::BINARY (which is the binary used to start the "outer" cucumber)
36
- # Instead we force the use of this codebase's cucumber bin script.
37
- # This allows us to run cucumber's cukes with an older, stable cucumber.
38
- def cucumber_bin
39
- File.expand_path(File.dirname(__FILE__) + '/../../bin/cucumber')
40
- end
41
-
42
- def initialize
43
- @current_dir = self_test_dir
44
- end
45
-
46
- private
47
- attr_reader :last_exit_status, :last_stderr
48
-
49
- # The last standard out, with the duration line taken out (unpredictable)
50
- def last_stdout
51
- strip_1_9_paths(strip_duration(@last_stdout))
52
- end
53
-
54
- def combined_output
55
- last_stdout + "\n" + last_stderr
56
- end
57
-
58
- def strip_duration(s)
59
- s.gsub(/^\d+m\d+\.\d+s\n/m, "")
60
- end
61
-
62
- def strip_1_9_paths(s)
63
- s.gsub(/#{Dir.pwd}\/fixtures\/self_test\/tmp/m, ".").gsub(/#{Dir.pwd}\/fixtures\/self_test/m, ".")
64
- end
65
-
66
- def replace_duration(s, replacement)
67
- s.gsub(/\d+m\d+\.\d+s/m, replacement)
68
- end
69
-
70
- def replace_junit_duration(s, replacement)
71
- s.gsub(/\d+\.\d\d+/m, replacement)
72
- end
73
-
74
- def strip_ruby186_extra_trace(s)
75
- s.gsub(/^.*\.\/features\/step_definitions(.*)\n/, "")
76
- end
77
-
78
- def create_file(file_name, file_content)
79
- file_content.gsub!("CUCUMBER_LIB", "'#{cucumber_lib_dir}'") # Some files, such as Rakefiles need to use the lib dir
80
- in_current_dir do
81
- FileUtils.mkdir_p(File.dirname(file_name)) unless File.directory?(File.dirname(file_name))
82
- File.open(file_name, 'w') { |f| f << file_content }
83
- end
84
- end
85
-
86
- def set_env_var(variable, value)
87
- @original_env_vars ||= {}
88
- @original_env_vars[variable] = ENV[variable]
89
- ENV[variable] = value
90
- end
91
-
92
- def background_jobs
93
- @background_jobs ||= []
94
- end
95
-
96
- def in_current_dir(&block)
97
- Dir.chdir(@current_dir, &block)
98
- end
99
-
100
- def run(command)
101
- stderr_file = Tempfile.new('cucumber')
102
- stderr_file.close
103
- in_current_dir do
104
- mode = Cucumber::RUBY_1_8_7 ? 'r' : {:external_encoding=>"UTF-8"}
105
- IO.popen("#{command} 2> #{stderr_file.path}", mode) do |io|
106
- @last_stdout = io.read
107
- end
108
-
109
- @last_exit_status = $?.exitstatus
110
- end
111
- @last_stderr = IO.read(stderr_file.path)
112
- if Cucumber::JRUBY
113
- # TODO: this actually a workaround for cucumber/gherkin#238
114
- @last_stderr.gsub!(/^.*java_package_module_template.rb:\d+ warning: `eval' should not be aliased.*\n/, '')
115
- end
116
- end
117
-
118
- def run_spork_in_background(port = nil)
119
- require 'spork'
120
-
121
- pid = fork
122
- in_current_dir do
123
- if pid
124
- background_jobs << pid
125
- else
126
- # STDOUT.close
127
- # STDERR.close
128
- port_arg = port ? "-p #{port}" : ''
129
- cmd = "#{Cucumber::RUBY_BINARY} -I #{Cucumber::LIBDIR} #{Spork::BINARY} cuc #{port_arg}"
130
- exec cmd
131
- end
132
- end
133
- sleep 2.0
134
- end
135
-
136
- def terminate_background_jobs
137
- background_jobs.each do |pid|
138
- Process.kill(Signal.list['TERM'], pid)
139
- end
140
- end
141
-
142
- def restore_original_env_vars
143
- @original_env_vars.each { |variable, value| ENV[variable] = value } if @original_env_vars
144
- end
145
-
146
- end
147
-
148
- World do
149
- CucumberWorld.new
150
- end
151
-
152
- Before do
153
- FileUtils.rm_rf CucumberWorld.working_dir
154
- FileUtils.mkdir CucumberWorld.working_dir
155
- end
156
-
157
- After do
158
- FileUtils.rm_rf CucumberWorld.working_dir unless ENV['KEEP_FILES']
159
- terminate_background_jobs
160
- restore_original_env_vars
161
- end
@@ -1,7 +0,0 @@
1
- require 'rubygems'
2
-
3
- class SomeException < Exception; end
4
-
5
- Before do
6
- raise SomeException.new("I cannot even start this scenario")
7
- end
@@ -1,34 +0,0 @@
1
- Feature: Table mapping
2
- Scenario: Mapping table shouldn't change output
3
- Given a standard Cucumber project directory structure
4
- And a file named "features/f.feature" with:
5
- """
6
- Feature: F
7
- Scenario: S
8
- Given a table:
9
- | who |
10
- | aslak |
11
- """
12
- And a file named "features/step_definitions/steps.rb" with:
13
- """
14
- Given(/a table:/) { |table| table.map_headers!(/who/i => 'Who')
15
- table.map_column!('Who') { |who| "Cuke" }
16
- table.hashes[0]['Who'] = "Joe"
17
- table.hashes.should == [{"Who"=>"Joe"}]
18
- }
19
- """
20
- When I run cucumber features/f.feature
21
- Then STDERR should be empty
22
- And it should pass with
23
- """
24
- Feature: F
25
-
26
- Scenario: S # features/f.feature:2
27
- Given a table: # features/step_definitions/steps.rb:1
28
- | who |
29
- | aslak |
30
-
31
- 1 scenario (1 passed)
32
- 1 step (1 passed)
33
-
34
- """