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
@@ -0,0 +1,760 @@
1
+ Feature: JSON output formatter
2
+ In order to simplify processing of Cucumber features and results
3
+ Developers should be able to consume features as JSON
4
+
5
+ Background:
6
+ Given the standard step definitions
7
+ And a file named "features/one_passing_one_failing.feature" with:
8
+ """
9
+ @a
10
+ Feature: One passing scenario, one failing scenario
11
+
12
+ @b
13
+ Scenario: Passing
14
+ Given this step passes
15
+
16
+ @c
17
+ Scenario: Failing
18
+ Given this step fails
19
+ """
20
+ And a file named "features/step_definitions/json_steps.rb" with:
21
+ """
22
+ Given /^I embed a screenshot/ do
23
+ File.open("screenshot.png", "w") { |file| file << "foo" }
24
+ embed "screenshot.png", "image/png"
25
+ end
26
+
27
+ Given /^I print from step definition/ do
28
+ puts "from step definition"
29
+ end
30
+
31
+ Given /^I embed data directly/ do
32
+ data = "YWJj"
33
+ embed data, "mime-type;base64"
34
+ end
35
+ """
36
+ And a file named "features/embed.feature" with:
37
+ """
38
+ Feature: A screenshot feature
39
+
40
+ Scenario:
41
+ Given I embed a screenshot
42
+
43
+ """
44
+ And a file named "features/outline.feature" with:
45
+ """
46
+ Feature: An outline feature
47
+
48
+ Scenario Outline: outline
49
+ Given this step <status>
50
+
51
+ Examples: examples1
52
+ | status |
53
+ | passes |
54
+ | fails |
55
+
56
+ Examples: examples2
57
+ | status |
58
+ | passes |
59
+ """
60
+ And a file named "features/print_from_step_definition.feature" with:
61
+ """
62
+ Feature: A print from step definition feature
63
+
64
+ Scenario:
65
+ Given I print from step definition
66
+ And I print from step definition
67
+
68
+ """
69
+ And a file named "features/print_from_step_definition.feature" with:
70
+ """
71
+ Feature: A print from step definition feature
72
+
73
+ Scenario:
74
+ Given I print from step definition
75
+ And I print from step definition
76
+
77
+ """
78
+ And a file named "features/embed_data_directly.feature" with:
79
+ """
80
+ Feature: An embed data directly feature
81
+
82
+ Scenario:
83
+ Given I embed data directly
84
+
85
+ Scenario Outline:
86
+ Given I embed data directly
87
+
88
+ Examples:
89
+ | dummy |
90
+ | 1 |
91
+ | 2 |
92
+
93
+ """
94
+ And a file named "features/out_scenario_out_scenario_outline.feature" with:
95
+ """
96
+ Feature:
97
+ Scenario:
98
+ Given this step passes
99
+ Scenario Outline:
100
+ Given this step <status>
101
+ Examples:
102
+ | status |
103
+ | passes |
104
+ """
105
+
106
+ # Need to investigate why this won't pass in-process. error_message doesn't get det?
107
+ @spawn
108
+ Scenario: one feature, one passing scenario, one failing scenario
109
+ When I run `cucumber --format json features/one_passing_one_failing.feature`
110
+ Then it should fail with JSON:
111
+ """
112
+ [
113
+ {
114
+ "uri": "features/one_passing_one_failing.feature",
115
+ "keyword": "Feature",
116
+ "id": "one-passing-scenario,-one-failing-scenario",
117
+ "name": "One passing scenario, one failing scenario",
118
+ "line": 2,
119
+ "description": "",
120
+ "tags": [
121
+ {
122
+ "name": "@a",
123
+ "line": 1
124
+ }
125
+ ],
126
+ "elements": [
127
+ {
128
+ "keyword": "Scenario",
129
+ "id": "one-passing-scenario,-one-failing-scenario;passing",
130
+ "name": "Passing",
131
+ "line": 5,
132
+ "description": "",
133
+ "tags": [
134
+ {
135
+ "name": "@b",
136
+ "line": 4
137
+ }
138
+ ],
139
+ "type": "scenario",
140
+ "steps": [
141
+ {
142
+ "keyword": "Given ",
143
+ "name": "this step passes",
144
+ "line": 6,
145
+ "match": {
146
+ "location": "features/step_definitions/steps.rb:1"
147
+ },
148
+ "result": {
149
+ "status": "passed",
150
+ "duration": 1
151
+ }
152
+ }
153
+ ]
154
+ },
155
+ {
156
+ "keyword": "Scenario",
157
+ "id": "one-passing-scenario,-one-failing-scenario;failing",
158
+ "name": "Failing",
159
+ "line": 9,
160
+ "description": "",
161
+ "tags": [
162
+ {
163
+ "name": "@c",
164
+ "line": 8
165
+ }
166
+ ],
167
+ "type": "scenario",
168
+ "steps": [
169
+ {
170
+ "keyword": "Given ",
171
+ "name": "this step fails",
172
+ "line": 10,
173
+ "match": {
174
+ "location": "features/step_definitions/steps.rb:4"
175
+ },
176
+ "result": {
177
+ "status": "failed",
178
+ "error_message": " (RuntimeError)\n./features/step_definitions/steps.rb:4:in `/^this step fails$/'\nfeatures/one_passing_one_failing.feature:10:in `Given this step fails'",
179
+ "duration": 1
180
+ }
181
+ }
182
+ ]
183
+ }
184
+ ]
185
+ }
186
+ ]
187
+
188
+ """
189
+
190
+ @spawn
191
+ Scenario: one feature, one passing scenario, one failing scenario with prettyfied json
192
+ When I run `cucumber --format json_pretty features/one_passing_one_failing.feature`
193
+ Then it should fail with JSON:
194
+ """
195
+ [
196
+ {
197
+ "uri": "features/one_passing_one_failing.feature",
198
+ "keyword": "Feature",
199
+ "id": "one-passing-scenario,-one-failing-scenario",
200
+ "name": "One passing scenario, one failing scenario",
201
+ "line": 2,
202
+ "description": "",
203
+ "tags": [
204
+ {
205
+ "name": "@a",
206
+ "line": 1
207
+ }
208
+ ],
209
+ "elements": [
210
+ {
211
+ "keyword": "Scenario",
212
+ "id": "one-passing-scenario,-one-failing-scenario;passing",
213
+ "name": "Passing",
214
+ "line": 5,
215
+ "description": "",
216
+ "tags": [
217
+ {
218
+ "name": "@b",
219
+ "line": 4
220
+ }
221
+ ],
222
+ "type": "scenario",
223
+ "steps": [
224
+ {
225
+ "keyword": "Given ",
226
+ "name": "this step passes",
227
+ "line": 6,
228
+ "match": {
229
+ "location": "features/step_definitions/steps.rb:1"
230
+ },
231
+ "result": {
232
+ "status": "passed",
233
+ "duration": 1
234
+ }
235
+ }
236
+ ]
237
+ },
238
+ {
239
+ "keyword": "Scenario",
240
+ "id": "one-passing-scenario,-one-failing-scenario;failing",
241
+ "name": "Failing",
242
+ "line": 9,
243
+ "description": "",
244
+ "tags": [
245
+ {
246
+ "name": "@c",
247
+ "line": 8
248
+ }
249
+ ],
250
+ "type": "scenario",
251
+ "steps": [
252
+ {
253
+ "keyword": "Given ",
254
+ "name": "this step fails",
255
+ "line": 10,
256
+ "match": {
257
+ "location": "features/step_definitions/steps.rb:4"
258
+ },
259
+ "result": {
260
+ "status": "failed",
261
+ "error_message": " (RuntimeError)\n./features/step_definitions/steps.rb:4:in `/^this step fails$/'\nfeatures/one_passing_one_failing.feature:10:in `Given this step fails'",
262
+ "duration": 1
263
+ }
264
+ }
265
+ ]
266
+ }
267
+ ]
268
+ }
269
+ ]
270
+
271
+ """
272
+
273
+ @spawn @wip-jruby
274
+ Scenario: DocString
275
+ Given a file named "features/doc_string.feature" with:
276
+ """
277
+ Feature: A DocString feature
278
+
279
+ Scenario:
280
+ Then I should fail with
281
+ \"\"\"
282
+ a string
283
+ \"\"\"
284
+ """
285
+ And a file named "features/step_definitions/steps.rb" with:
286
+ """
287
+ Then /I should fail with/ do |s|
288
+ raise s
289
+ end
290
+ """
291
+ When I run `cucumber --format json features/doc_string.feature`
292
+ Then it should fail with JSON:
293
+ """
294
+ [
295
+ {
296
+ "id": "a-docstring-feature",
297
+ "uri": "features/doc_string.feature",
298
+ "keyword": "Feature",
299
+ "name": "A DocString feature",
300
+ "line": 1,
301
+ "description": "",
302
+ "elements": [
303
+ {
304
+ "id": "a-docstring-feature;",
305
+ "keyword": "Scenario",
306
+ "name": "",
307
+ "line": 3,
308
+ "description": "",
309
+ "type": "scenario",
310
+ "steps": [
311
+ {
312
+ "keyword": "Then ",
313
+ "name": "I should fail with",
314
+ "line": 4,
315
+ "doc_string": {
316
+ "content_type": "",
317
+ "value": "a string",
318
+ "line": 5
319
+ },
320
+ "match": {
321
+ "location": "features/step_definitions/steps.rb:1"
322
+ },
323
+ "result": {
324
+ "status": "failed",
325
+ "error_message": "a string (RuntimeError)\n./features/step_definitions/steps.rb:2:in `/I should fail with/'\nfeatures/doc_string.feature:4:in `Then I should fail with'",
326
+ "duration": 1
327
+ }
328
+ }
329
+ ]
330
+ }
331
+ ]
332
+ }
333
+ ]
334
+ """
335
+
336
+ @spawn
337
+ Scenario: embedding screenshot
338
+ When I run `cucumber -b --format json features/embed.feature`
339
+ Then it should pass with JSON:
340
+ """
341
+ [
342
+ {
343
+ "uri": "features/embed.feature",
344
+ "id": "a-screenshot-feature",
345
+ "keyword": "Feature",
346
+ "name": "A screenshot feature",
347
+ "line": 1,
348
+ "description": "",
349
+ "elements": [
350
+ {
351
+ "id": "a-screenshot-feature;",
352
+ "keyword": "Scenario",
353
+ "name": "",
354
+ "line": 3,
355
+ "description": "",
356
+ "type": "scenario",
357
+ "steps": [
358
+ {
359
+ "keyword": "Given ",
360
+ "name": "I embed a screenshot",
361
+ "line": 4,
362
+ "embeddings": [
363
+ {
364
+ "mime_type": "image/png",
365
+ "data": "Zm9v"
366
+ }
367
+ ],
368
+ "match": {
369
+ "location": "features/step_definitions/json_steps.rb:1"
370
+ },
371
+ "result": {
372
+ "status": "passed",
373
+ "duration": 1
374
+ }
375
+ }
376
+ ]
377
+ }
378
+ ]
379
+ }
380
+ ]
381
+
382
+ """
383
+
384
+ Scenario: scenario outline
385
+ When I run `cucumber --format json features/outline.feature`
386
+ Then it should fail with JSON:
387
+ """
388
+ [
389
+ {
390
+ "uri": "features/outline.feature",
391
+ "id": "an-outline-feature",
392
+ "keyword": "Feature",
393
+ "name": "An outline feature",
394
+ "line": 1,
395
+ "description": "",
396
+ "elements": [
397
+ {
398
+ "id": "an-outline-feature;outline",
399
+ "keyword": "Scenario Outline",
400
+ "name": "outline",
401
+ "line": 3,
402
+ "description": "",
403
+ "type": "scenario_outline",
404
+ "steps": [
405
+ {
406
+ "keyword": "Given ",
407
+ "name": "this step <status>",
408
+ "line": 4,
409
+ "match": {
410
+ "location": "features/outline.feature:4"
411
+ }
412
+ }
413
+ ],
414
+ "examples": [
415
+ {
416
+ "keyword": "Examples",
417
+ "name": "examples1",
418
+ "line": 6,
419
+ "description": "",
420
+ "id": "an-outline-feature;outline;examples1",
421
+ "rows": [
422
+ {
423
+ "cells": [
424
+ "status"
425
+ ],
426
+ "line": 7,
427
+ "id": "an-outline-feature;outline;examples1;1"
428
+ },
429
+ {
430
+ "cells": [
431
+ "passes"
432
+ ],
433
+ "line": 8,
434
+ "id": "an-outline-feature;outline;examples1;2"
435
+ },
436
+ {
437
+ "cells": [
438
+ "fails"
439
+ ],
440
+ "line": 9,
441
+ "id": "an-outline-feature;outline;examples1;3"
442
+ }
443
+ ]
444
+ },
445
+ {
446
+ "keyword": "Examples",
447
+ "name": "examples2",
448
+ "line": 11,
449
+ "description": "",
450
+ "id": "an-outline-feature;outline;examples2",
451
+ "rows": [
452
+ {
453
+ "cells": [
454
+ "status"
455
+ ],
456
+ "line": 12,
457
+ "id": "an-outline-feature;outline;examples2;1"
458
+ },
459
+ {
460
+ "cells": [
461
+ "passes"
462
+ ],
463
+ "line": 13,
464
+ "id": "an-outline-feature;outline;examples2;2"
465
+ }
466
+ ]
467
+ }
468
+ ]
469
+ }
470
+ ]
471
+ }
472
+ ]
473
+
474
+ """
475
+
476
+ Scenario: print from step definition
477
+ When I run `cucumber --format json features/print_from_step_definition.feature`
478
+ Then it should pass with JSON:
479
+ """
480
+ [
481
+ {
482
+ "uri": "features/print_from_step_definition.feature",
483
+ "id": "a-print-from-step-definition-feature",
484
+ "keyword": "Feature",
485
+ "name": "A print from step definition feature",
486
+ "line": 1,
487
+ "description": "",
488
+ "elements": [
489
+ {
490
+ "id": "a-print-from-step-definition-feature;",
491
+ "keyword": "Scenario",
492
+ "name": "",
493
+ "line": 3,
494
+ "description": "",
495
+ "type": "scenario",
496
+ "steps": [
497
+ {
498
+ "keyword": "Given ",
499
+ "name": "I print from step definition",
500
+ "line": 4,
501
+ "output": [
502
+ "from step definition"
503
+ ],
504
+ "match": {
505
+ "location": "features/step_definitions/json_steps.rb:6"
506
+ },
507
+ "result": {
508
+ "status": "passed",
509
+ "duration": 1
510
+ }
511
+ },
512
+ {
513
+ "keyword": "And ",
514
+ "name": "I print from step definition",
515
+ "line": 5,
516
+ "output": [
517
+ "from step definition"
518
+ ],
519
+ "match": {
520
+ "location": "features/step_definitions/json_steps.rb:6"
521
+ },
522
+ "result": {
523
+ "status": "passed",
524
+ "duration": 1
525
+ }
526
+ }
527
+ ]
528
+ }
529
+ ]
530
+ }
531
+ ]
532
+
533
+ """
534
+
535
+ @spawn
536
+ Scenario: scenario outline expanded
537
+ When I run `cucumber --expand --format json features/outline.feature`
538
+ Then it should fail with JSON:
539
+ """
540
+ [
541
+ {
542
+ "uri": "features/outline.feature",
543
+ "id": "an-outline-feature",
544
+ "keyword": "Feature",
545
+ "name": "An outline feature",
546
+ "line": 1,
547
+ "description": "",
548
+ "elements": [
549
+ {
550
+ "id": "an-outline-feature;outline;examples1;2",
551
+ "keyword": "Scenario Outline",
552
+ "name": "outline",
553
+ "line": 8,
554
+ "description": "",
555
+ "type": "scenario",
556
+ "steps": [
557
+ {
558
+ "keyword": "Given ",
559
+ "name": "this step passes",
560
+ "line": 8,
561
+ "match": {
562
+ "location": "features/step_definitions/steps.rb:1"
563
+ },
564
+ "result": {
565
+ "status": "passed",
566
+ "duration": 1
567
+ }
568
+ }
569
+ ]
570
+ },
571
+ {
572
+ "id": "an-outline-feature;outline;examples1;3",
573
+ "keyword": "Scenario Outline",
574
+ "name": "outline",
575
+ "line": 9,
576
+ "description": "",
577
+ "type": "scenario",
578
+ "steps": [
579
+ {
580
+ "keyword": "Given ",
581
+ "name": "this step fails",
582
+ "line": 9,
583
+ "match": {
584
+ "location": "features/step_definitions/steps.rb:4"
585
+ },
586
+ "result": {
587
+ "status": "failed",
588
+ "error_message" : " (RuntimeError)\n./features/step_definitions/steps.rb:4:in `/^this step fails$/'\nfeatures/outline.feature:9:in `Given this step fails'\nfeatures/outline.feature:4:in `Given this step <status>'",
589
+ "duration": 1
590
+ }
591
+ }
592
+ ]
593
+ },
594
+ {
595
+ "id": "an-outline-feature;outline;examples2;2",
596
+ "keyword": "Scenario Outline",
597
+ "name": "outline",
598
+ "line": 13,
599
+ "description": "",
600
+ "type": "scenario",
601
+ "steps": [
602
+ {
603
+ "keyword": "Given ",
604
+ "name": "this step passes",
605
+ "line": 13,
606
+ "match": {
607
+ "location": "features/step_definitions/steps.rb:1"
608
+ },
609
+ "result": {
610
+ "status": "passed",
611
+ "duration": 1
612
+ }
613
+ }
614
+ ]
615
+ }
616
+ ]
617
+ }
618
+ ]
619
+
620
+ """
621
+
622
+ @spawn
623
+ Scenario: embedding data directly
624
+ When I run `cucumber -b --format json -x features/embed_data_directly.feature`
625
+ Then it should pass with JSON:
626
+ """
627
+ [
628
+ {
629
+ "uri": "features/embed_data_directly.feature",
630
+ "id": "an-embed-data-directly-feature",
631
+ "keyword": "Feature",
632
+ "name": "An embed data directly feature",
633
+ "line": 1,
634
+ "description": "",
635
+ "elements": [
636
+ {
637
+ "id": "an-embed-data-directly-feature;",
638
+ "keyword": "Scenario",
639
+ "name": "",
640
+ "line": 3,
641
+ "description": "",
642
+ "type": "scenario",
643
+ "steps": [
644
+ {
645
+ "keyword": "Given ",
646
+ "name": "I embed data directly",
647
+ "line": 4,
648
+ "embeddings": [
649
+ {
650
+ "mime_type": "mime-type",
651
+ "data": "YWJj"
652
+ }
653
+ ],
654
+ "match": {
655
+ "location": "features/step_definitions/json_steps.rb:10"
656
+ },
657
+ "result": {
658
+ "status": "passed",
659
+ "duration": 1
660
+ }
661
+ }
662
+ ]
663
+ },
664
+ {
665
+ "keyword": "Scenario Outline",
666
+ "name": "",
667
+ "line": 11,
668
+ "description": "",
669
+ "id": "an-embed-data-directly-feature;;;2",
670
+ "type": "scenario",
671
+ "steps": [
672
+ {
673
+ "keyword": "Given ",
674
+ "name": "I embed data directly",
675
+ "line": 11,
676
+ "embeddings": [
677
+ {
678
+ "mime_type": "mime-type",
679
+ "data": "YWJj"
680
+ }
681
+ ],
682
+ "match": {
683
+ "location": "features/step_definitions/json_steps.rb:10"
684
+ },
685
+ "result": {
686
+ "status": "passed",
687
+ "duration": 1
688
+ }
689
+ }
690
+ ]
691
+ },
692
+ {
693
+ "keyword": "Scenario Outline",
694
+ "name": "",
695
+ "line": 12,
696
+ "description": "",
697
+ "id": "an-embed-data-directly-feature;;;3",
698
+ "type": "scenario",
699
+ "steps": [
700
+ {
701
+ "keyword": "Given ",
702
+ "name": "I embed data directly",
703
+ "line": 12,
704
+ "embeddings": [
705
+ {
706
+ "mime_type": "mime-type",
707
+ "data": "YWJj"
708
+ }
709
+ ],
710
+ "match": {
711
+ "location": "features/step_definitions/json_steps.rb:10"
712
+ },
713
+ "result": {
714
+ "status": "passed",
715
+ "duration": 1
716
+ }
717
+ }
718
+ ]
719
+ }
720
+ ]
721
+ }
722
+ ]
723
+
724
+ """
725
+ @spawn
726
+ Scenario: handle output from hooks
727
+ Given a file named "features/step_definitions/output_steps.rb" with:
728
+ """
729
+ Before do
730
+ puts "Before hook 1"
731
+ embed "src", "mime_type", "label"
732
+ end
733
+
734
+ Before do
735
+ puts "Before hook 2"
736
+ embed "src", "mime_type", "label"
737
+ end
738
+
739
+ AfterStep do
740
+ puts "AfterStep hook 1"
741
+ embed "src", "mime_type", "label"
742
+ end
743
+
744
+ AfterStep do
745
+ puts "AfterStep hook 2"
746
+ embed "src", "mime_type", "label"
747
+ end
748
+
749
+ After do
750
+ puts "After hook 1"
751
+ embed "src", "mime_type", "label"
752
+ end
753
+
754
+ After do
755
+ puts "After hook 2"
756
+ embed "src", "mime_type", "label"
757
+ end
758
+ """
759
+ When I run `cucumber --format json features/out_scenario_out_scenario_outline.feature`
760
+ Then it should pass