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
@@ -3,10 +3,10 @@ require 'cucumber/formatter/spec_helper'
3
3
  require 'cucumber/formatter/html'
4
4
  require 'nokogiri'
5
5
  require 'cucumber/rb_support/rb_language'
6
+ require 'rspec/mocks'
6
7
 
7
8
  module Cucumber
8
9
  module Formatter
9
-
10
10
  describe Html do
11
11
  extend SpecHelperDsl
12
12
  include SpecHelper
@@ -20,12 +20,42 @@ module Cucumber
20
20
 
21
21
  before(:each) do
22
22
  @out = StringIO.new
23
- @formatter = Html.new(step_mother, @out, {})
24
- step_mother.visitor = @formatter
23
+ @formatter = Html.new(runtime, @out, {})
24
+ end
25
+
26
+ it "does not raise an error when visiting a blank feature name" do
27
+ expect(-> {
28
+ @formatter.feature_name("Feature", "")
29
+ }).not_to raise_error
25
30
  end
26
31
 
27
- it "should not raise an error when visiting a blank feature name" do
28
- lambda { @formatter.feature_name("Feature", "") }.should_not raise_error
32
+ describe "when writing the report to a file" do
33
+ before(:each) do
34
+ allow(@out).to receive(:respond_to?).with(:path, false).and_return(true)
35
+ expect(@out).to receive(:respond_to?).with(:path).and_return(true)
36
+ expect(@out).to receive(:path).and_return('out/file.html')
37
+ run_defined_feature
38
+ @doc = Nokogiri.HTML(@out.string)
39
+ end
40
+
41
+ describe "with a step that embeds a snapshot" do
42
+ define_steps do
43
+ Given(/snap/) {
44
+ RSpec::Mocks.allow_message(File, :file?) { true }
45
+ embed('out/snapshot.jpeg', 'image/jpeg')
46
+ }
47
+ end
48
+
49
+ define_feature(<<-FEATURE)
50
+ Feature:
51
+ Scenario:
52
+ Given snap
53
+ FEATURE
54
+
55
+ it "converts the snapshot path to a relative path" do
56
+ expect(@doc.css('.embed img').first.attributes['src'].to_s).to eq "snapshot.jpeg"
57
+ end
58
+ end
29
59
  end
30
60
 
31
61
  describe "given a single feature" do
@@ -43,7 +73,7 @@ module Cucumber
43
73
  FEATURE
44
74
 
45
75
  it "should output a main container div" do
46
- @out.string.should =~ /\<div class="cucumber"\>/
76
+ expect(@out.string).to match(/\<div class="cucumber"\>/)
47
77
  end
48
78
  end
49
79
 
@@ -51,20 +81,24 @@ module Cucumber
51
81
  define_feature <<-FEATURE
52
82
  # Healthy
53
83
  Feature: Foo
84
+ Scenario:
85
+ Given passing
54
86
  FEATURE
55
87
 
56
- it { @out.string.should =~ /^\<!DOCTYPE/ }
57
- it { @out.string.should =~ /\<\/html\>$/ }
58
- it { @doc.should have_css_node('.feature .comment', /Healthy/) }
88
+ it { expect(@out.string).to match(/^\<!DOCTYPE/) }
89
+ it { expect(@out.string).to match(/\<\/html\>$/) }
90
+ it { expect(@doc).to have_css_node('.feature .comment', /Healthy/) }
59
91
  end
60
92
 
61
93
  describe "with a tag" do
62
94
  define_feature <<-FEATURE
63
95
  @foo
64
96
  Feature: can't have standalone tag :)
97
+ Scenario:
98
+ Given passing
65
99
  FEATURE
66
100
 
67
- it { @doc.should have_css_node('.feature .tag', /foo/) }
101
+ it { expect(@doc).to have_css_node('.feature .tag', /foo/) }
68
102
  end
69
103
 
70
104
  describe "with a narrative" do
@@ -73,10 +107,13 @@ module Cucumber
73
107
  In order to find my inner monkey
74
108
  As a human
75
109
  I must eat bananas
110
+
111
+ Scenario:
112
+ Given passing
76
113
  FEATURE
77
114
 
78
- it { @doc.should have_css_node('.feature h2', /Bananas/) }
79
- it { @doc.should have_css_node('.feature .narrative', /must eat bananas/) }
115
+ it { expect(@doc).to have_css_node('.feature h2', /Bananas/) }
116
+ it { expect(@doc).to have_css_node('.feature .narrative', /must eat bananas/) }
80
117
  end
81
118
 
82
119
  describe "with a background" do
@@ -85,9 +122,12 @@ module Cucumber
85
122
 
86
123
  Background:
87
124
  Given there are bananas
125
+
126
+ Scenario:
127
+ When the monkey eats a banana
88
128
  FEATURE
89
129
 
90
- it { @doc.should have_css_node('.feature .background', /there are bananas/) }
130
+ it { expect(@doc).to have_css_node('.feature .background', /there are bananas/) }
91
131
  end
92
132
 
93
133
  describe "with a scenario" do
@@ -98,8 +138,8 @@ module Cucumber
98
138
  Given there are bananas
99
139
  FEATURE
100
140
 
101
- it { @doc.should have_css_node('.feature h3', /Monkey eats banana/) }
102
- it { @doc.should have_css_node('.feature .scenario .step', /there are bananas/) }
141
+ it { expect(@doc).to have_css_node('.feature h3', /Monkey eats banana/) }
142
+ it { expect(@doc).to have_css_node('.feature .scenario .step', /there are bananas/) }
103
143
  end
104
144
 
105
145
  describe "with a scenario outline" do
@@ -119,11 +159,11 @@ module Cucumber
119
159
  | carrots |
120
160
  FEATURE
121
161
 
122
- it { @doc.should have_css_node('.feature .scenario.outline h4', /Fruit/) }
123
- it { @doc.should have_css_node('.feature .scenario.outline h4', /Vegetables/) }
124
- it { @doc.css('.feature .scenario.outline h4').length.should == 2}
125
- it { @doc.should have_css_node('.feature .scenario.outline table', //) }
126
- it { @doc.should have_css_node('.feature .scenario.outline table td', /carrots/) }
162
+ it { expect(@doc).to have_css_node('.feature .scenario.outline h4', /Fruit/) }
163
+ it { expect(@doc).to have_css_node('.feature .scenario.outline h4', /Vegetables/) }
164
+ it { expect(@doc.css('.feature .scenario.outline h4').length).to eq 2}
165
+ it { expect(@doc).to have_css_node('.feature .scenario.outline table', //) }
166
+ it { expect(@doc).to have_css_node('.feature .scenario.outline table td', /carrots/) }
127
167
  end
128
168
 
129
169
  describe "with a step with a py string" do
@@ -137,7 +177,7 @@ module Cucumber
137
177
  """
138
178
  FEATURE
139
179
 
140
- it { @doc.should have_css_node('.feature .scenario .val', /foo/) }
180
+ it { expect(@doc).to have_css_node('.feature .scenario .val', /foo/) }
141
181
  end
142
182
 
143
183
  describe "with a multiline step arg" do
@@ -154,8 +194,8 @@ module Cucumber
154
194
  | bar |
155
195
  FEATURE
156
196
 
157
- it { @doc.should have_css_node('.feature .scenario table td', /foo/) }
158
- it { @out.string.include?('makeYellow(\'scenario_1\')').should be_false }
197
+ it { expect(@doc).to have_css_node('.feature .scenario table td', /foo/) }
198
+ it { expect(@out.string.include?('makeYellow(\'scenario_1\')')).to be false }
159
199
  end
160
200
 
161
201
  describe "with a table in the background and the scenario" do
@@ -172,7 +212,7 @@ module Cucumber
172
212
  | g | h |
173
213
  FEATURE
174
214
 
175
- it { @doc.css('td').length.should == 8 }
215
+ it { expect(@doc.css('td').length).to eq 8 }
176
216
  end
177
217
 
178
218
  describe "with a py string in the background and the scenario" do
@@ -191,8 +231,8 @@ module Cucumber
191
231
  """
192
232
  FEATURE
193
233
 
194
- it { @doc.css('.feature .background pre.val').length.should == 1 }
195
- it { @doc.css('.feature .scenario pre.val').length.should == 1 }
234
+ it { expect(@doc.css('.feature .background pre.val').length).to eq 1 }
235
+ it { expect(@doc.css('.feature .scenario pre.val').length).to eq 1 }
196
236
  end
197
237
 
198
238
  describe "with a step that fails in the scenario" do
@@ -207,8 +247,8 @@ module Cucumber
207
247
  Given boo
208
248
  FEATURE
209
249
 
210
- it { @doc.should have_css_node('.feature .scenario .step.failed .message', /eek/) }
211
- it { @doc.should have_css_node('.feature .scenario .step.failed .message', /StandardError/) }
250
+ it { expect(@doc).to have_css_node('.feature .scenario .step.failed .message', /eek/) }
251
+ it { expect(@doc).to have_css_node('.feature .scenario .step.failed .message', /StandardError/) }
212
252
  end
213
253
 
214
254
  describe "with a step that fails in the background" do
@@ -224,18 +264,63 @@ module Cucumber
224
264
  Given yay
225
265
  FEATURE
226
266
 
227
- it { @doc.should have_css_node('.feature .background .step.failed', /eek/) }
228
- it { @out.string.should_not include('makeRed(\'scenario_0\')') }
229
- it { @out.string.should include('makeRed(\'background_0\')') }
230
- it { @doc.should_not have_css_node('.feature .scenario .step.failed', //) }
231
- it { @doc.should have_css_node('.feature .scenario .step.undefined', /yay/) }
232
- it { @doc.should have_css_node('.feature .background .backtrace', //) }
233
- it { @doc.should_not have_css_node('.feature .scenario .backtrace', //) }
267
+ it { expect(@doc).to have_css_node('.feature .background .step.failed', /eek/) }
268
+ it { expect(@out.string).not_to include('makeRed(\'scenario_0\')') }
269
+ it { expect(@out.string).to include('makeRed(\'background_0\')') }
270
+ it { expect(@doc).not_to have_css_node('.feature .scenario .step.failed', //) }
271
+ it { expect(@doc).to have_css_node('.feature .scenario .step.undefined', /yay/) }
272
+ it { expect(@doc).to have_css_node('.feature .background .backtrace', //) }
273
+ it { expect(@doc).not_to have_css_node('.feature .scenario .backtrace', //) }
234
274
  end
235
275
 
236
276
  describe "with a step that embeds a snapshot" do
237
277
  define_steps do
238
- Given(/snap/) { embed('snapshot.jpeg', 'image/jpeg') }
278
+ Given(/snap/) {
279
+ RSpec::Mocks.allow_message(File, :file?) { true }
280
+ embed('snapshot.jpeg', 'image/jpeg')
281
+ }
282
+ end
283
+
284
+ define_feature(<<-FEATURE)
285
+ Feature:
286
+ Scenario:
287
+ Given snap
288
+ FEATURE
289
+
290
+ it { expect(@doc.css('.embed img').first.attributes['src'].to_s).to eq "snapshot.jpeg" }
291
+ end
292
+
293
+ describe "with a step that embeds a text" do
294
+ define_steps do
295
+ Given(/log/) { embed('log.txt', 'text/plain') }
296
+ end
297
+
298
+ define_feature(<<-FEATURE)
299
+ Feature:
300
+ Scenario:
301
+ Given log
302
+ FEATURE
303
+
304
+ it { expect(@doc.at('a#text_0')['href'].to_s).to eq "log.txt" }
305
+ end
306
+
307
+ describe "with a step that embeds a snapshot content manually" do
308
+ define_steps do
309
+ Given(/snap/) { embed('data:image/png;base64,YWJj', 'image/png') }
310
+ end
311
+
312
+ define_feature(<<-FEATURE)
313
+ Feature:
314
+ Scenario:
315
+ Given snap
316
+ FEATURE
317
+
318
+ it { expect(@doc.css('.embed img').first.attributes['src'].to_s).to eq "data:image/png;base64,YWJj" }
319
+ end
320
+
321
+ describe "with a step that embeds a snapshot content" do
322
+ define_steps do
323
+ Given(/snap/) { embed('YWJj', 'image/png;base64') }
239
324
  end
240
325
 
241
326
  define_feature(<<-FEATURE)
@@ -244,7 +329,7 @@ module Cucumber
244
329
  Given snap
245
330
  FEATURE
246
331
 
247
- it { @doc.css('.embed img').first.attributes['src'].to_s.should == "snapshot.jpeg" }
332
+ it { expect(@doc.css('.embed img').first.attributes['src'].to_s).to eq "data:image/png;base64,YWJj" }
248
333
  end
249
334
 
250
335
  describe "with an undefined Given step then an undefined And step" do
@@ -255,11 +340,120 @@ module Cucumber
255
340
  And another undefined step
256
341
  FEATURE
257
342
 
258
- it { @doc.css('pre').map { |pre| /^(Given|And)/.match(pre.text)[1] }.should == ["Given", "Given"] }
343
+ it { expect(@doc.css('pre').map { |pre| /^(Given|And)/.match(pre.text)[1] }).to eq ["Given", "Given"] }
344
+ end
345
+
346
+ describe "with an undefined When step then an undefined And step" do
347
+ define_feature(<<-FEATURE)
348
+ Feature:
349
+ Scenario:
350
+ Given some undefined step
351
+ When a different undefined step
352
+ And another undefined step
353
+ FEATURE
354
+
355
+ it { expect(@doc.css('pre').map { |pre| /^(Given|When|And)/.match(pre.text)[1] }).to eq ["Given", "When", "When"] }
356
+ end
357
+
358
+ describe "with an passing Then step and an undefined And step" do
359
+ define_feature <<-FEATURE
360
+ Feature:
361
+ Scenario:
362
+ Given this step passes
363
+ Then this step passes
364
+ And this step is undefined
365
+ FEATURE
366
+
367
+ define_steps do
368
+ Given(/^this step passes$/) {}
369
+ end
370
+
371
+ it { expect(@doc.css('pre').map { |pre| /^(Given|Then)/.match(pre.text)[1] }).to eq ["Then"] }
372
+ end
373
+
374
+ describe "with a output from hooks" do
375
+ describe "in a scenario" do
376
+ define_feature <<-FEATURE
377
+ Feature:
378
+ Scenario:
379
+ Given this step passes
380
+ FEATURE
381
+
382
+ define_steps do
383
+ Before do
384
+ puts "Before hook"
385
+ end
386
+ AfterStep do
387
+ puts "AfterStep hook"
388
+ end
389
+ After do
390
+ puts "After hook"
391
+ end
392
+ Given(/^this step passes$/) {}
393
+ end
394
+
395
+ it 'should have ccs nodes ".step.message" for all the hooks' do
396
+ expect(@doc.css('.step.message').length).to eq 3
397
+ expect(@doc.css('.step.message')[0].text).to eq "Before hook"
398
+ expect(@doc.css('.step.message')[1].text).to eq "AfterStep hook"
399
+ expect(@doc.css('.step.message')[2].text).to eq "After hook"
400
+ end
401
+ end
402
+
403
+ describe "in a scenario outline" do
404
+ define_feature <<-FEATURE
405
+ Feature:
406
+ Scenario Outline:
407
+ Given this step <status>
408
+ Examples:
409
+ | status |
410
+ | passes |
411
+ FEATURE
412
+
413
+ define_steps do
414
+ Before do
415
+ puts "Before hook"
416
+ end
417
+ AfterStep do
418
+ puts "AfterStep hook"
419
+ end
420
+ After do
421
+ puts "After hook"
422
+ end
423
+ Given(/^this step passes$/) {}
424
+ end
425
+
426
+ it { expect(@doc).to have_css_node('.message', /Before hook, AfterStep hook, After hook/) }
427
+ end
428
+ end
429
+ end
430
+ context "in --expand mode" do
431
+ let(:runtime) { Runtime.new({:expand => true})}
432
+ before(:each) do
433
+ @out = StringIO.new
434
+ @formatter = Html.new(runtime, @out, {})
435
+ run_defined_feature
436
+ @doc = Nokogiri.HTML(@out.string)
259
437
  end
438
+ describe "with undefined * steps in a Scenario Outline" do
439
+ define_feature <<-FEATURE
440
+ Feature:
441
+ Scenario Outline:
442
+ * this step is <status>
443
+ Then this step passes
444
+ Examples:
445
+ | status |
446
+ | undefined |
447
+ | undefined |
448
+ FEATURE
260
449
 
450
+ define_steps do
451
+ Given(/^this step passes$/) {}
452
+ end
453
+
454
+ it { expect(@doc.css('pre').map { |pre| /^(Given|Then|When)/.match(pre.text)[1] }).to eq ["Given", "Given"] }
455
+ end
261
456
  end
262
457
  end
263
458
  end
264
459
  end
265
-
@@ -5,16 +5,17 @@ module Cucumber::Formatter
5
5
  describe Interceptor::Pipe do
6
6
  let(:pipe) do
7
7
  pipe = double('original pipe')
8
- pipe.stub(:instance_of?).and_return(true)
8
+
9
+ allow(pipe).to receive(:instance_of?) { true }
10
+
9
11
  pipe
10
12
  end
11
13
 
12
14
  describe '#wrap!' do
13
- it 'should raise an ArgumentError if its not passed :stderr/:stdout' do
15
+ it 'raises an ArgumentError if its not passed :stderr/:stdout' do
14
16
  expect {
15
17
  Interceptor::Pipe.wrap(:nonsense)
16
18
  }.to raise_error(ArgumentError)
17
-
18
19
  end
19
20
 
20
21
  context 'when passed :stderr' do
@@ -22,10 +23,11 @@ module Cucumber::Formatter
22
23
  @stderr = $stdout
23
24
  end
24
25
 
25
- it 'should wrap $stderr' do
26
+ it 'wraps $stderr' do
26
27
  wrapped = Interceptor::Pipe.wrap(:stderr)
27
- $stderr.should be_instance_of Interceptor::Pipe
28
- $stderr.should be wrapped
28
+
29
+ expect($stderr).to be_instance_of Interceptor::Pipe
30
+ expect($stderr).to be wrapped
29
31
  end
30
32
 
31
33
  after :each do
@@ -38,10 +40,11 @@ module Cucumber::Formatter
38
40
  @stdout = $stdout
39
41
  end
40
42
 
41
- it 'should wrap $stdout' do
43
+ it 'wraps $stdout' do
42
44
  wrapped = Interceptor::Pipe.wrap(:stdout)
43
- $stdout.should be_instance_of Interceptor::Pipe
44
- $stdout.should be wrapped
45
+
46
+ expect($stdout).to be_instance_of Interceptor::Pipe
47
+ expect($stdout).to be wrapped
45
48
  end
46
49
 
47
50
  after :each do
@@ -56,34 +59,36 @@ module Cucumber::Formatter
56
59
  @wrapped = Interceptor::Pipe.wrap(:stdout)
57
60
  end
58
61
 
59
- it 'should raise an ArgumentError if it wasn\'t passed :stderr/:stdout' do
62
+ it 'raises an ArgumentError if it wasn\'t passed :stderr/:stdout' do
60
63
  expect {
61
64
  Interceptor::Pipe.unwrap!(:nonsense)
62
65
  }.to raise_error(ArgumentError)
63
66
  end
64
67
 
65
- it 'should reset $stdout when #unwrap! is called' do
68
+ it 'resets $stdout when #unwrap! is called' do
66
69
  interceptor = Interceptor::Pipe.unwrap! :stdout
67
- interceptor.should be_instance_of Interceptor::Pipe
68
- $stdout.should_not be interceptor
70
+
71
+ expect(interceptor).to be_instance_of Interceptor::Pipe
72
+ expect($stdout).not_to be interceptor
69
73
  end
70
74
 
71
- it 'should noop if $stdout or $stderr has been overwritten' do
75
+ it 'noops if $stdout or $stderr has been overwritten' do
72
76
  $stdout = StringIO.new
73
77
  pipe = Interceptor::Pipe.unwrap! :stdout
74
- pipe.should == $stdout
78
+ expect(pipe).to eq $stdout
75
79
 
76
80
  $stderr = StringIO.new
77
81
  pipe = Interceptor::Pipe.unwrap! :stderr
78
- pipe.should == $stderr
82
+ expect(pipe).to eq $stderr
79
83
  end
80
84
 
81
- it 'should disable the pipe bypass' do
85
+ it 'disables the pipe bypass' do
82
86
  buffer = '(::)'
83
87
  Interceptor::Pipe.unwrap! :stdout
84
88
 
85
- @wrapped.should_receive(:write).with(buffer)
86
- @wrapped.buffer.should_not_receive(:<<)
89
+ expect(@wrapped).to receive(:write).with(buffer)
90
+ expect(@wrapped.buffer).not_to receive(:<<)
91
+
87
92
  @wrapped.write(buffer)
88
93
  end
89
94
 
@@ -96,33 +101,35 @@ module Cucumber::Formatter
96
101
  let(:buffer) { 'Some stupid buffer' }
97
102
  let(:pi) { Interceptor::Pipe.new(pipe) }
98
103
 
99
- it 'should write arguments to the original pipe' do
100
- pipe.should_receive(:write).with(buffer).and_return(buffer.size)
101
- pi.write(buffer).should == buffer.size
104
+ it 'writes arguments to the original pipe' do
105
+ expect(pipe).to receive(:write).with(buffer) { buffer.size }
106
+ expect(pi.write(buffer)).to eq buffer.size
102
107
  end
103
108
 
104
- it 'should add the buffer to its stored output' do
105
- pipe.stub(:write)
109
+ it 'adds the buffer to its stored output' do
110
+ allow(pipe).to receive(:write)
111
+
106
112
  pi.write(buffer)
107
- pi.buffer.should_not be_empty
108
- pi.buffer.first.should == buffer
113
+
114
+ expect(pi.buffer).not_to be_empty
115
+ expect(pi.buffer.first).to eq buffer
109
116
  end
110
117
  end
111
118
 
112
119
  describe '#method_missing' do
113
120
  let(:pi) { Interceptor::Pipe.new(pipe) }
114
121
 
115
- it 'should pass #tty? to the original pipe' do
116
- pipe.should_receive(:tty?).and_return(true)
117
- pi.tty?.should be true
122
+ it 'passes #tty? to the original pipe' do
123
+ expect(pipe).to receive(:tty?) { true }
124
+ expect(pi.tty?).to be true
118
125
  end
119
126
  end
120
127
 
121
128
  describe '#respond_to' do
122
129
  let(:pi) { Interceptor::Pipe.wrap(:stderr) }
123
130
 
124
- it 'should respond to all methods $stderr has' do
125
- $stderr.methods.each { |m| pi.respond_to?(m).should be true }
131
+ it 'responds to all methods $stderr has' do
132
+ $stderr.methods.each { |m| expect(pi.respond_to?(m)).to be true }
126
133
  end
127
134
  end
128
135
  end