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,6 +1,4 @@
1
1
  require 'spec_helper'
2
- require 'cucumber/ast'
3
- require 'cucumber/step_mother'
4
2
  require 'cucumber/rb_support/rb_language'
5
3
 
6
4
  module Cucumber
@@ -9,115 +7,163 @@ module Cucumber
9
7
  let(:user_interface) { double('user interface') }
10
8
  let(:support_code) { Cucumber::Runtime::SupportCode.new(user_interface) }
11
9
  let(:rb) { support_code.load_programming_language('rb') }
10
+ let(:scenario) { double('scenario', iso_code: 'en').as_null_object }
12
11
  let(:dsl) do
13
12
  rb
14
13
  Object.new.extend(Cucumber::RbSupport::RbDsl)
15
14
  end
16
15
 
17
16
  before do
18
- rb.before(double('scenario').as_null_object)
17
+ rb.begin_scenario(scenario)
19
18
  $inside = nil
20
19
  end
21
20
 
22
21
  def run_step(text)
23
- support_code.step_match(text).invoke(nil)
22
+ step_match(text).invoke(MultilineArgument::None.new)
24
23
  end
25
24
 
26
- it "should allow calling of other steps" do
27
- dsl.Given /Outside/ do
25
+ def step_match(text)
26
+ support_code.step_match(text)
27
+ end
28
+
29
+ it "allows calling of other steps" do
30
+ dsl.Given(/Outside/) do
28
31
  step "Inside"
29
32
  end
30
- dsl.Given /Inside/ do
33
+ dsl.Given(/Inside/) do
31
34
  $inside = true
32
35
  end
33
36
 
34
37
  run_step "Outside"
35
- $inside.should == true
38
+
39
+ expect($inside).to be true
36
40
  end
37
41
 
38
- it "should allow calling of other steps with inline arg" do
39
- dsl.Given /Outside/ do
40
- step "Inside", Cucumber::Ast::Table.new([['inside']])
42
+ it "allows calling of other steps with inline arg" do
43
+ dsl.Given(/Outside/) do
44
+ location = Core::Ast::Location.new(__FILE__, __LINE__)
45
+ step "Inside", table([['inside']])
41
46
  end
42
- dsl.Given /Inside/ do |table|
43
- $inside = table.raw[0][0]
47
+ dsl.Given(/Inside/) do |t|
48
+ $inside = t.raw[0][0]
44
49
  end
45
50
 
46
51
  run_step "Outside"
47
- $inside.should == 'inside'
52
+
53
+ expect($inside).to eq 'inside'
48
54
  end
49
55
 
50
56
  context "mapping to world methods" do
51
- it "should call a method on the world when specified with a symbol" do
52
- rb.current_world.should_receive(:with_symbol)
53
- dsl.Given /With symbol/, :with_symbol
57
+ it "calls a method on the world when specified with a symbol" do
58
+ expect(rb.current_world).to receive(:with_symbol)
59
+
60
+ dsl.Given(/With symbol/, :with_symbol)
54
61
 
55
62
  run_step "With symbol"
56
63
  end
57
64
 
58
- it "should call a method on a specified object" do
65
+ it "calls a method on a specified object" do
59
66
  target = double('target')
60
- rb.current_world.stub(:target => target)
61
- dsl.Given /With symbol on block/, :with_symbol, :on => lambda { target }
62
67
 
63
- target.should_receive(:with_symbol)
68
+ allow(rb.current_world).to receive(:target) { target }
69
+
70
+ dsl.Given(/With symbol on block/, :with_symbol, :on => lambda { target })
71
+
72
+ expect(target).to receive(:with_symbol)
73
+
64
74
  run_step "With symbol on block"
65
75
  end
66
76
 
67
- it "should call a method on a specified world attribute" do
77
+ it "calls a method on a specified world attribute" do
68
78
  target = double('target')
69
- rb.current_world.stub(:target => target)
70
- dsl.Given /With symbol on symbol/, :with_symbol, :on => :target
71
79
 
72
- target.should_receive(:with_symbol)
80
+ allow(rb.current_world).to receive(:target) { target }
81
+
82
+ dsl.Given(/With symbol on symbol/, :with_symbol, :on => :target)
83
+
84
+ expect(target).to receive(:with_symbol)
85
+
73
86
  run_step "With symbol on symbol"
74
87
  end
88
+
89
+ it "has the correct location" do
90
+ dsl.Given /With symbol/, :with_symbol
91
+ expect(step_match("With symbol").file_colon_line).to eq "spec/cucumber/rb_support/rb_step_definition_spec.rb:#{__LINE__-1}"
92
+ end
75
93
  end
76
94
 
77
- it "should raise Undefined when inside step is not defined" do
78
- dsl.Given /Outside/ do
95
+ it "raises UndefinedDynamicStep when inside step is not defined" do
96
+ dsl.Given(/Outside/) do
79
97
  step 'Inside'
80
98
  end
81
99
 
82
- lambda { run_step "Outside" }.
83
- should raise_error(Cucumber::Undefined, 'Undefined step: "Inside"')
100
+ expect(-> {
101
+ run_step "Outside"
102
+ }).to raise_error(Cucumber::UndefinedDynamicStep)
103
+ end
104
+
105
+ it "raises UndefinedDynamicStep when an undefined step is parsed dynamically" do
106
+ dsl.Given(/Outside/) do
107
+ steps %{
108
+ Given Inside
109
+ }
110
+ end
111
+
112
+ expect(-> {
113
+ run_step "Outside"
114
+ }).to raise_error(Cucumber::UndefinedDynamicStep)
84
115
  end
85
116
 
86
- it "should allow forced pending" do
87
- dsl.Given /Outside/ do
117
+ it "allows forced pending" do
118
+ dsl.Given(/Outside/) do
88
119
  pending("Do me!")
89
120
  end
90
121
 
91
- lambda { run_step "Outside" }.
92
- should raise_error(Cucumber::Pending, "Do me!")
122
+ expect(-> {
123
+ run_step "Outside"
124
+ }).to raise_error(Cucumber::Pending, "Do me!")
125
+ end
126
+
127
+ it "raises ArityMismatchError when the number of capture groups differs from the number of step arguments" do
128
+ dsl.Given(/No group: \w+/) do |arg|
129
+ end
130
+
131
+ expect(-> {
132
+ run_step "No group: arg"
133
+ }).to raise_error(Cucumber::ArityMismatchError)
93
134
  end
94
135
 
95
- it "should raise ArityMismatchError when the number of capture groups differs from the number of step arguments" do
96
- dsl.Given /No group: \w+/ do |arg|
136
+ it "does not modify the step_match arg when arg is modified in a step" do
137
+ dsl.Given(/My car is (.*)/) do |colour|
138
+ colour << "xxx"
97
139
  end
98
140
 
99
- lambda { run_step "No group: arg" }.
100
- should raise_error(Cucumber::ArityMismatchError)
141
+ step_name = "My car is white"
142
+ step_args = step_match(step_name).args
143
+
144
+ expect(-> {
145
+ run_step step_name
146
+ }).not_to change{ step_args.first }
101
147
  end
102
148
 
103
- it "should allow puts" do
104
- user_interface.should_receive(:puts).with('wasup')
105
- dsl.Given /Loud/ do
149
+ it "allows puts" do
150
+ expect(user_interface).to receive(:puts).with('wasup')
151
+ dsl.Given(/Loud/) do
106
152
  puts 'wasup'
107
153
  end
108
154
  run_step "Loud"
109
155
  end
110
156
 
111
- it "should recognize $arg style captures" do
157
+ it "recognizes $arg style captures" do
112
158
  arg_value = "wow!"
113
159
  dsl.Given "capture this: $arg" do |arg|
114
- arg.should == arg_value
160
+ expect(arg).to eq arg_value
115
161
  end
116
162
  run_step "capture this: wow!"
117
163
  end
118
164
 
119
- it "should have a JSON representation of the signature" do
120
- RbStepDefinition.new(rb, /I CAN HAZ (\d+) CUKES/i, lambda{}, {}).to_hash.should == {'source' => "I CAN HAZ (\\d+) CUKES", 'flags' => 'i'}
165
+ it "has a JSON representation of the signature" do
166
+ expect(RbStepDefinition.new(rb, /I CAN HAZ (\d+) CUKES/i, lambda{}, {}).to_hash).to eq({ 'source' => "I CAN HAZ (\\d+) CUKES", 'flags' => 'i' })
121
167
  end
122
168
  end
123
169
  end
@@ -7,17 +7,38 @@ module Cucumber
7
7
  def transform(regexp)
8
8
  RbTransform.new(nil, regexp, lambda { |a| })
9
9
  end
10
+
10
11
  describe "#to_s" do
12
+ it "does not touch positive lookahead captures" do
13
+ expect(transform(/^xy(?=z)/).to_s).to eq "xy(?=z)"
14
+ end
15
+
16
+ it "does not touch negative lookahead captures" do
17
+ expect(transform(/^xy(?!z)/).to_s).to eq "xy(?!z)"
18
+ end
19
+
20
+ it "does not touch positive lookbehind captures" do
21
+ expect(transform(/^xy(?<=z)/).to_s).to eq "xy(?<=z)"
22
+ end
23
+
24
+ it "does not touch negative lookbehind captures" do
25
+ expect(transform(/^xy(?<!z)/).to_s).to eq "xy(?<!z)"
26
+ end
27
+
28
+ it "converts named captures" do
29
+ expect(transform(/^(?<str>xyz)/).to_s).to eq "(?:<str>xyz)"
30
+ end
31
+
11
32
  it "converts captures groups to non-capture groups" do
12
- transform(/(a|b)bc/).to_s.should == "(?:a|b)bc"
33
+ expect(transform(/(a|b)bc/).to_s).to eq "(?:a|b)bc"
13
34
  end
14
35
 
15
36
  it "leaves non capture groups alone" do
16
- transform(/(?:a|b)bc/).to_s.should == "(?:a|b)bc"
37
+ expect(transform(/(?:a|b)bc/).to_s).to eq "(?:a|b)bc"
17
38
  end
18
39
 
19
40
  it "strips away anchors" do
20
- transform(/^xyz$/).to_s.should == "xyz"
41
+ expect(transform(/^xyz$/).to_s).to eq "xyz"
21
42
  end
22
43
  end
23
44
  end
@@ -6,14 +6,16 @@ module Cucumber
6
6
  describe RegexpArgumentMatcher do
7
7
  include RSpec::WorkInProgress
8
8
 
9
- it "should create 2 arguments" do
9
+ it "creates 2 arguments" do
10
10
  arguments = RegexpArgumentMatcher.arguments_from(/I (\w+) (\w+)/, "I like fish")
11
- arguments.map{|argument| [argument.val, argument.offset]}.should == [["like", 2], ["fish", 7]]
11
+
12
+ expect(arguments.map{|argument| [argument.val, argument.offset]}).to eq [["like", 2], ["fish", 7]]
12
13
  end
13
14
 
14
- it "should create 2 arguments when first group is optional" do
15
+ it "creates 2 arguments when first group is optional" do
15
16
  arguments = RegexpArgumentMatcher.arguments_from(/should( not)? be flashed '([^']*?)'$/, "I should be flashed 'Login failed.'")
16
- arguments.map{|argument| [argument.val, argument.offset]}.should == [[nil, nil], ["Login failed.", 21]]
17
+
18
+ expect(arguments.map{|argument| [argument.val, argument.offset]}).to eq [[nil, nil], ["Login failed.", 21]]
17
19
  end
18
20
  end
19
21
  end
@@ -4,16 +4,15 @@ require 'cucumber/rb_support/snippet'
4
4
  module Cucumber
5
5
  module RbSupport
6
6
  describe Snippet do
7
-
8
7
  let(:code_keyword) { "Given" }
9
8
 
10
9
  before do
11
10
  @pattern = 'we have a missing step'
12
- @multiline_argument_class = nil
11
+ @multiline_argument = Core::Ast::EmptyMultilineArgument.new
13
12
  end
14
13
 
15
14
  let(:snippet) do
16
- snippet_class.new(code_keyword, @pattern, @multiline_argument_class)
15
+ snippet_class.new(code_keyword, @pattern, @multiline_argument)
17
16
  end
18
17
 
19
18
  def unindented(s)
@@ -24,76 +23,87 @@ module Cucumber
24
23
  let(:snippet_class) { Snippet::Regexp }
25
24
  let(:snippet_text) { snippet.to_s }
26
25
 
27
- it "should wrap snippet patterns in parentheses" do
26
+ it "wraps snippet patterns in parentheses" do
28
27
  @pattern = 'A "string" with 4 spaces'
29
28
 
30
- snippet_text.should == unindented(%{
31
- Given(/^A "(.*?)" with (\\d+) spaces$/) do |arg1, arg2|
32
- pending # express the regexp above with the code you wish you had
29
+ expect(snippet_text).to eq unindented(%{
30
+ Given(/^A "([^"]*)" with (\\d+) spaces$/) do |arg1, arg2|
31
+ pending # Write code here that turns the phrase above into concrete actions
33
32
  end
34
33
  })
35
34
  end
36
35
 
37
- it "should recognise numbers in name and make according regexp" do
36
+ it "recognises numbers in name and make according regexp" do
38
37
  @pattern = 'Cloud 9 yeah'
39
38
 
40
- snippet_text.should == unindented(%{
39
+ expect(snippet_text).to eq unindented(%{
41
40
  Given(/^Cloud (\\d+) yeah$/) do |arg1|
42
- pending # express the regexp above with the code you wish you had
41
+ pending # Write code here that turns the phrase above into concrete actions
43
42
  end
44
43
  })
45
44
  end
46
45
 
47
- it "should recognise a mix of ints, strings and why not a table too" do
46
+ it "recognises a mix of ints, strings and why not a table too" do
48
47
  @pattern = 'I have 9 "awesome" cukes in 37 "boxes"'
49
- @multiline_argument_class = Cucumber::Ast::Table
48
+ @multiline_argument = Core::Ast::DataTable.new([[]], Core::Ast::Location.new(''))
50
49
 
51
- snippet_text.should == unindented(%{
52
- Given(/^I have (\\d+) "(.*?)" cukes in (\\d+) "(.*?)"$/) do |arg1, arg2, arg3, arg4, table|
53
- # table is a Cucumber::Ast::Table
54
- pending # express the regexp above with the code you wish you had
50
+ expect(snippet_text).to eq unindented(%{
51
+ Given(/^I have (\\d+) "([^"]*)" cukes in (\\d+) "([^"]*)"$/) do |arg1, arg2, arg3, arg4, table|
52
+ # table is a Cucumber::Core::Ast::DataTable
53
+ pending # Write code here that turns the phrase above into concrete actions
55
54
  end
56
55
  })
57
56
  end
58
57
 
59
- it "should recognise quotes in name and make according regexp" do
58
+ it "recognises quotes in name and make according regexp" do
60
59
  @pattern = 'A "first" arg'
61
60
 
62
- snippet_text.should == unindented(%{
63
- Given(/^A "(.*?)" arg$/) do |arg1|
64
- pending # express the regexp above with the code you wish you had
61
+ expect(snippet_text).to eq unindented(%{
62
+ Given(/^A "([^"]*)" arg$/) do |arg1|
63
+ pending # Write code here that turns the phrase above into concrete actions
65
64
  end
66
65
  })
67
66
  end
68
67
 
69
- it "should recognise several quoted words in name and make according regexp and args" do
68
+ it "recognises several quoted words in name and make according regexp and args" do
70
69
  @pattern = 'A "first" and "second" arg'
71
70
 
72
- snippet_text.should == unindented(%{
73
- Given(/^A "(.*?)" and "(.*?)" arg$/) do |arg1, arg2|
74
- pending # express the regexp above with the code you wish you had
71
+ expect(snippet_text).to eq unindented(%{
72
+ Given(/^A "([^"]*)" and "([^"]*)" arg$/) do |arg1, arg2|
73
+ pending # Write code here that turns the phrase above into concrete actions
75
74
  end
76
75
  })
77
76
  end
78
77
 
79
- it "should not use quote group when there are no quotes" do
78
+ it "does not use quote group when there are no quotes" do
80
79
  @pattern = 'A first arg'
81
80
 
82
- snippet_text.should == unindented(%{
81
+ expect(snippet_text).to eq unindented(%{
83
82
  Given(/^A first arg$/) do
84
- pending # express the regexp above with the code you wish you had
83
+ pending # Write code here that turns the phrase above into concrete actions
84
+ end
85
+ })
86
+ end
87
+
88
+ it "is helpful with tables" do
89
+ @pattern = 'A "first" arg'
90
+ @multiline_argument = Core::Ast::DataTable.new([[]], Core::Ast::Location.new(""))
91
+
92
+ expect(snippet_text).to eq unindented(%{
93
+ Given(/^A "([^"]*)" arg$/) do |arg1, table|
94
+ # table is a Cucumber::Core::Ast::DataTable
95
+ pending # Write code here that turns the phrase above into concrete actions
85
96
  end
86
97
  })
87
98
  end
88
99
 
89
- it "should be helpful with tables" do
100
+ it "is helpful with doc string" do
90
101
  @pattern = 'A "first" arg'
91
- @multiline_argument_class = Cucumber::Ast::Table
102
+ @multiline_argument = MultilineArgument.from("", Core::Ast::Location.new(""))
92
103
 
93
- snippet_text.should == unindented(%{
94
- Given(/^A "(.*?)" arg$/) do |arg1, table|
95
- # table is a Cucumber::Ast::Table
96
- pending # express the regexp above with the code you wish you had
104
+ expect(snippet_text).to eq unindented(%{
105
+ Given(/^A "([^"]*)" arg$/) do |arg1, string|
106
+ pending # Write code here that turns the phrase above into concrete actions
97
107
  end
98
108
  })
99
109
  end
@@ -103,9 +113,9 @@ module Cucumber
103
113
  let(:snippet_class) { Snippet::Classic }
104
114
 
105
115
  it "renders snippet as unwrapped regular expression" do
106
- snippet.to_s.should eql unindented(%{
116
+ expect(snippet.to_s).to eq unindented(%{
107
117
  Given /^we have a missing step$/ do
108
- pending # express the regexp above with the code you wish you had
118
+ pending # Write code here that turns the phrase above into concrete actions
109
119
  end
110
120
  })
111
121
  end
@@ -115,14 +125,13 @@ module Cucumber
115
125
  let(:snippet_class) { Snippet::Percent }
116
126
 
117
127
  it "renders snippet as percent-style regular expression" do
118
- snippet.to_s.should eql unindented(%{
128
+ expect(snippet.to_s).to eq unindented(%{
119
129
  Given %r{^we have a missing step$} do
120
- pending # express the regexp above with the code you wish you had
130
+ pending # Write code here that turns the phrase above into concrete actions
121
131
  end
122
132
  })
123
133
  end
124
134
  end
125
-
126
135
  end
127
136
  end
128
137
  end
@@ -0,0 +1,83 @@
1
+ require 'cucumber/running_test_case'
2
+ require 'cucumber/core'
3
+ require 'cucumber/core/gherkin/writer'
4
+
5
+ module Cucumber
6
+ describe RunningTestCase do
7
+ include Core
8
+ include Core::Gherkin::Writer
9
+
10
+ attr_accessor :wrapped_test_case, :core_test_case
11
+
12
+ before do
13
+ receiver = double.as_null_object
14
+ allow(receiver).to receive(:test_case) { |core_test_case|
15
+ self.core_test_case = core_test_case
16
+ self.wrapped_test_case = RunningTestCase.new(core_test_case)
17
+ }
18
+ compile [gherkin_doc], receiver
19
+ end
20
+
21
+ context "for a regular scenario" do
22
+ let(:gherkin_doc) do
23
+ gherkin do
24
+ feature "feature name" do
25
+ scenario "scenario name" do
26
+ step "passing"
27
+ end
28
+ end
29
+ end
30
+ end
31
+
32
+ it "sets the scenario name correctly" do
33
+ expect(wrapped_test_case.name).to eq "scenario name"
34
+ end
35
+
36
+ it "sets the feature name correctly" do
37
+ expect(wrapped_test_case.feature.name).to eq "feature name"
38
+ end
39
+
40
+ it "exposes properties of the test_case" do
41
+ expect(wrapped_test_case.location).to eq core_test_case.location
42
+ expect(wrapped_test_case.source).to eq core_test_case.source
43
+ expect(wrapped_test_case.keyword).to eq core_test_case.keyword
44
+ end
45
+ end
46
+
47
+ context "for a scenario outline" do
48
+ let(:gherkin_doc) do
49
+ gherkin do
50
+ feature "feature name" do
51
+ scenario_outline "scenario outline name" do
52
+ step "passing with <arg1> <arg2>"
53
+
54
+ examples "examples name" do
55
+ row "arg1", "arg2"
56
+ row "a", "b"
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
62
+
63
+ it "sets the test case's name correctly" do
64
+ expect(wrapped_test_case.name).to eq "scenario outline name, examples name (#1)"
65
+ end
66
+
67
+ it "sets the feature name correctly" do
68
+ expect(wrapped_test_case.feature.name).to eq "feature name"
69
+ end
70
+
71
+ it "exposes properties of the test_case" do
72
+ expect(wrapped_test_case.location).to eq core_test_case.location
73
+ expect(wrapped_test_case.source).to eq core_test_case.source
74
+ expect(wrapped_test_case.keyword).to eq core_test_case.keyword
75
+ end
76
+
77
+ it "exposes the examples table row cell values" do
78
+ expect(wrapped_test_case.cell_values).to eq ["a", "b"]
79
+ end
80
+
81
+ end
82
+ end
83
+ end
@@ -7,25 +7,30 @@ module Cucumber
7
7
  subject { Runtime::SupportCode.new(user_interface,{}) }
8
8
  let(:runtime_facade) { Runtime::ForProgrammingLanguages.new(subject, user_interface) }
9
9
 
10
- it 'should produce Ast::DocString by #doc_string with default content-type' do
11
- str = runtime_facade.doc_string('DOC')
12
- str.should be_kind_of(Ast::DocString)
13
- str.content_type.should eq('')
14
- end
10
+ describe "#doc_string" do
11
+
12
+ it 'defaults to a blank content-type' do
13
+ str = runtime_facade.doc_string('DOC')
14
+ expect(str).to be_kind_of(MultilineArgument::DocString)
15
+ expect(str.content_type).to eq('')
16
+ end
17
+
18
+ it 'can have a content type' do
19
+ str = runtime_facade.doc_string('DOC','ruby')
20
+ expect(str.content_type).to eq('ruby')
21
+ end
15
22
 
16
- it 'should produce Ast::DocString by #doc_string with ruby content-type' do
17
- str = runtime_facade.doc_string('DOC','ruby')
18
- str.should be_kind_of(Ast::DocString)
19
- str.content_type.should eq('ruby')
20
23
  end
21
24
 
22
- it 'should produce Ast::Table by #table' do
23
- runtime_facade.table(%{
25
+ describe "#table" do
26
+
27
+ it 'produces Ast::Table by #table' do
28
+ expect(runtime_facade.table(%{
24
29
  | account | description | amount |
25
30
  | INT-100 | Taxi | 114 |
26
31
  | CUC-101 | Peeler | 22 |
27
- }).should be_kind_of(Ast::Table)
32
+ })).to be_kind_of(MultilineArgument::DataTable)
33
+ end
28
34
  end
29
-
30
35
  end
31
36
  end