mobiusloop 0.1.2

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 (516) hide show
  1. checksums.yaml +7 -0
  2. data/.coveralls.yml +1 -0
  3. data/.rspec +1 -0
  4. data/.ruby-gemset +1 -0
  5. data/.travis.yml +22 -0
  6. data/.yardopts +1 -0
  7. data/CONTRIBUTING.md +68 -0
  8. data/Gemfile +5 -0
  9. data/History.md +2280 -0
  10. data/LICENSE +22 -0
  11. data/README.md +373 -0
  12. data/Rakefile +22 -0
  13. data/bin/mobiusloop +8 -0
  14. data/cucumber.gemspec +47 -0
  15. data/cucumber.yml +20 -0
  16. data/examples/i18n/README.textile +3 -0
  17. data/examples/i18n/Rakefile +33 -0
  18. data/examples/i18n/ar/Rakefile +6 -0
  19. data/examples/i18n/ar/features/addition.feature +17 -0
  20. data/examples/i18n/ar/features/step_definitions/calculator_steps.rb +24 -0
  21. data/examples/i18n/ar/lib/calculator.rb +11 -0
  22. data/examples/i18n/bg/Rakefile +6 -0
  23. data/examples/i18n/bg/features/addition.feature +12 -0
  24. data/examples/i18n/bg/features/consecutive_calculations.feature +19 -0
  25. data/examples/i18n/bg/features/division.feature +17 -0
  26. data/examples/i18n/bg/features/step_definitions/calculator_steps.rb +24 -0
  27. data/examples/i18n/bg/features/support/env.rb +5 -0
  28. data/examples/i18n/bg/features/support/world.rb +8 -0
  29. data/examples/i18n/bg/lib/calculator.rb +24 -0
  30. data/examples/i18n/ca/Rakefile +6 -0
  31. data/examples/i18n/ca/features/step_definitions/calculator_steps.rb +21 -0
  32. data/examples/i18n/ca/features/suma.feature +17 -0
  33. data/examples/i18n/ca/lib/calculadora.rb +16 -0
  34. data/examples/i18n/cs/Rakefile +6 -0
  35. data/examples/i18n/cs/features/addition.feature +17 -0
  36. data/examples/i18n/cs/features/division.feature +11 -0
  37. data/examples/i18n/cs/features/step_definitions/calculator_steps.rb +24 -0
  38. data/examples/i18n/cs/lib/calculator.rb +14 -0
  39. data/examples/i18n/da/Rakefile +6 -0
  40. data/examples/i18n/da/features/sammenlaegning.feature +18 -0
  41. data/examples/i18n/da/features/step_definitions/lommeregner_steps.rb +24 -0
  42. data/examples/i18n/da/lib/lommeregner.rb +11 -0
  43. data/examples/i18n/de/Rakefile +6 -0
  44. data/examples/i18n/de/features/addition.feature +17 -0
  45. data/examples/i18n/de/features/division.feature +10 -0
  46. data/examples/i18n/de/features/step_definitions/calculator_steps.rb +24 -0
  47. data/examples/i18n/de/lib/calculator.rb +14 -0
  48. data/examples/i18n/el/Rakefile +6 -0
  49. data/examples/i18n/el/features/addition.feature +17 -0
  50. data/examples/i18n/el/features/division.feature +10 -0
  51. data/examples/i18n/el/features/step_definitions/calculator_steps.rb +24 -0
  52. data/examples/i18n/el/lib/calculator.rb +14 -0
  53. data/examples/i18n/en-lol/Rakefile +4 -0
  54. data/examples/i18n/en-lol/features/step_definitions/cucumbrz_steps.rb +16 -0
  55. data/examples/i18n/en-lol/features/stuffing.feature +8 -0
  56. data/examples/i18n/en-lol/features/support/env.rb +7 -0
  57. data/examples/i18n/en-lol/lib/basket.rb +12 -0
  58. data/examples/i18n/en-lol/lib/belly.rb +11 -0
  59. data/examples/i18n/en/Rakefile +6 -0
  60. data/examples/i18n/en/features/addition.feature +17 -0
  61. data/examples/i18n/en/features/division.feature +10 -0
  62. data/examples/i18n/en/features/step_definitions/calculator_steps.rb +24 -0
  63. data/examples/i18n/en/lib/calculator.rb +14 -0
  64. data/examples/i18n/eo/Rakefile +6 -0
  65. data/examples/i18n/eo/features/adicio.feature +17 -0
  66. data/examples/i18n/eo/features/divido.feature +10 -0
  67. data/examples/i18n/eo/features/step_definitions/calculator_steps.rb +24 -0
  68. data/examples/i18n/eo/lib/calculator.rb +14 -0
  69. data/examples/i18n/es/Rakefile +6 -0
  70. data/examples/i18n/es/features/adicion.feature +17 -0
  71. data/examples/i18n/es/features/step_definitions/calculador_steps.rb +21 -0
  72. data/examples/i18n/es/lib/calculador.rb +14 -0
  73. data/examples/i18n/et/Rakefile +6 -0
  74. data/examples/i18n/et/features/jagamine.feature +10 -0
  75. data/examples/i18n/et/features/liitmine.feature +17 -0
  76. data/examples/i18n/et/features/step_definitions/kalkulaator_steps.rb +24 -0
  77. data/examples/i18n/et/lib/kalkulaator.rb +14 -0
  78. data/examples/i18n/fi/Rakefile +6 -0
  79. data/examples/i18n/fi/features/jakolasku.feature +10 -0
  80. data/examples/i18n/fi/features/step_definitions/laskin_steps.rb +24 -0
  81. data/examples/i18n/fi/features/yhteenlasku.feature +17 -0
  82. data/examples/i18n/fi/lib/laskin.rb +14 -0
  83. data/examples/i18n/fr/Rakefile +8 -0
  84. data/examples/i18n/fr/features/addition.feature +18 -0
  85. data/examples/i18n/fr/features/addition2.feature +17 -0
  86. data/examples/i18n/fr/features/step_definitions/calculatrice_steps.rb +32 -0
  87. data/examples/i18n/fr/features/support/env.rb +5 -0
  88. data/examples/i18n/fr/lib/calculatrice.rb +10 -0
  89. data/examples/i18n/he/Rakefile +6 -0
  90. data/examples/i18n/he/features/addition.feature +17 -0
  91. data/examples/i18n/he/features/division.feature +10 -0
  92. data/examples/i18n/he/features/step_definitions/calculator_steps.rb +24 -0
  93. data/examples/i18n/he/lib/calculator.rb +15 -0
  94. data/examples/i18n/hi/Rakefile +6 -0
  95. data/examples/i18n/hi/features/addition.feature +16 -0
  96. data/examples/i18n/hi/features/division.feature +10 -0
  97. data/examples/i18n/hi/features/step_definitions/calculator_steps.rb +24 -0
  98. data/examples/i18n/hi/lib/calculator.rb +15 -0
  99. data/examples/i18n/ht/Rakefile +6 -0
  100. data/examples/i18n/ht/features/adisyon.feature +17 -0
  101. data/examples/i18n/ht/features/divizyon.feature +10 -0
  102. data/examples/i18n/ht/features/step_definitions/kalkilatris_steps.rb +25 -0
  103. data/examples/i18n/ht/lib/kalkilatris.rb +14 -0
  104. data/examples/i18n/hu/Rakefile +6 -0
  105. data/examples/i18n/hu/features/osszeadas.feature +17 -0
  106. data/examples/i18n/hu/features/osztas.feature +10 -0
  107. data/examples/i18n/hu/features/step_definitions/calculator_steps.rb +25 -0
  108. data/examples/i18n/hu/lib/calculator.rb +14 -0
  109. data/examples/i18n/id/Rakefile +6 -0
  110. data/examples/i18n/id/features/addition.feature +17 -0
  111. data/examples/i18n/id/features/division.feature +10 -0
  112. data/examples/i18n/id/features/step_definitions/calculator_steps.rb +24 -0
  113. data/examples/i18n/id/lib/calculator.rb +14 -0
  114. data/examples/i18n/it/Rakefile +6 -0
  115. data/examples/i18n/it/features/somma.feature +11 -0
  116. data/examples/i18n/it/features/step_definitions/calcolatrice_steps.rb +24 -0
  117. data/examples/i18n/it/lib/calcolatrice.rb +11 -0
  118. data/examples/i18n/ja/Rakefile +6 -0
  119. data/examples/i18n/ja/features/addition.feature +17 -0
  120. data/examples/i18n/ja/features/division.feature +10 -0
  121. data/examples/i18n/ja/features/step_definitions/calculator_steps.rb +19 -0
  122. data/examples/i18n/ja/features/support/env.rb +5 -0
  123. data/examples/i18n/ja/lib/calculator.rb +14 -0
  124. data/examples/i18n/ko/Rakefile +6 -0
  125. data/examples/i18n/ko/features/addition.feature +17 -0
  126. data/examples/i18n/ko/features/division.feature +11 -0
  127. data/examples/i18n/ko/features/step_definitions/calculator_steps.rb +24 -0
  128. data/examples/i18n/ko/lib/calculator.rb +14 -0
  129. data/examples/i18n/lt/Rakefile +6 -0
  130. data/examples/i18n/lt/features/addition.feature +17 -0
  131. data/examples/i18n/lt/features/division.feature +10 -0
  132. data/examples/i18n/lt/features/step_definitions/calculator_steps.rb +24 -0
  133. data/examples/i18n/lt/lib/calculator.rb +14 -0
  134. data/examples/i18n/lv/Rakefile +6 -0
  135. data/examples/i18n/lv/features/addition.feature +17 -0
  136. data/examples/i18n/lv/features/division.feature +10 -0
  137. data/examples/i18n/lv/features/step_definitions/calculator_steps.rb +24 -0
  138. data/examples/i18n/lv/lib/calculator.rb +14 -0
  139. data/examples/i18n/no/Rakefile +6 -0
  140. data/examples/i18n/no/features/step_definitions/kalkulator_steps.rb +17 -0
  141. data/examples/i18n/no/features/summering.feature +19 -0
  142. data/examples/i18n/no/features/support/env.rb +6 -0
  143. data/examples/i18n/no/lib/kalkulator.rb +11 -0
  144. data/examples/i18n/pl/Rakefile +6 -0
  145. data/examples/i18n/pl/features/addition.feature +17 -0
  146. data/examples/i18n/pl/features/division.feature +10 -0
  147. data/examples/i18n/pl/features/step_definitions/calculator_steps.rb +24 -0
  148. data/examples/i18n/pl/features/support/env.rb +5 -0
  149. data/examples/i18n/pl/lib/calculator.rb +14 -0
  150. data/examples/i18n/pt/Rakefile +6 -0
  151. data/examples/i18n/pt/features/adicao.feature +11 -0
  152. data/examples/i18n/pt/features/step_definitions/calculadora_steps.rb +20 -0
  153. data/examples/i18n/pt/features/support/env.rb +5 -0
  154. data/examples/i18n/pt/lib/calculadora.rb +10 -0
  155. data/examples/i18n/ro/Rakefile +6 -0
  156. data/examples/i18n/ro/features/adunare.feature +12 -0
  157. data/examples/i18n/ro/features/step_definitions/calculator_steps.rb +21 -0
  158. data/examples/i18n/ro/lib/calculator.rb +11 -0
  159. data/examples/i18n/ru/Rakefile +6 -0
  160. data/examples/i18n/ru/features/addition.feature +11 -0
  161. data/examples/i18n/ru/features/consecutive_calculations.feature +17 -0
  162. data/examples/i18n/ru/features/division.feature +16 -0
  163. data/examples/i18n/ru/features/step_definitions/calculator_steps.rb +19 -0
  164. data/examples/i18n/ru/features/support/env.rb +5 -0
  165. data/examples/i18n/ru/features/support/world.rb +8 -0
  166. data/examples/i18n/ru/lib/calculator.rb +24 -0
  167. data/examples/i18n/sk/Rakefile +6 -0
  168. data/examples/i18n/sk/features/addition.feature +17 -0
  169. data/examples/i18n/sk/features/division.feature +10 -0
  170. data/examples/i18n/sk/features/step_definitions/calculator_steps.rb +24 -0
  171. data/examples/i18n/sk/lib/calculator.rb +14 -0
  172. data/examples/i18n/sr-Cyrl/Rakefile +6 -0
  173. data/examples/i18n/sr-Cyrl/features/sabiranje.feature +18 -0
  174. data/examples/i18n/sr-Cyrl/features/step_definitions/calculator_steps.rb +20 -0
  175. data/examples/i18n/sr-Cyrl/features/support/env.rb +5 -0
  176. data/examples/i18n/sr-Cyrl/lib/calculator.rb +12 -0
  177. data/examples/i18n/sr-Latn/Rakefile +6 -0
  178. data/examples/i18n/sr-Latn/features/sabiranje.feature +18 -0
  179. data/examples/i18n/sr-Latn/features/step_definitions/calculator_steps.rb +24 -0
  180. data/examples/i18n/sr-Latn/lib/calculator.rb +12 -0
  181. data/examples/i18n/sv/Rakefile +6 -0
  182. data/examples/i18n/sv/features/step_definitions/kalkulator_steps.rb +24 -0
  183. data/examples/i18n/sv/features/summering.feature +18 -0
  184. data/examples/i18n/sv/lib/kalkulator.rb +11 -0
  185. data/examples/i18n/tr/Rakefile +6 -0
  186. data/examples/i18n/tr/features/bolme.feature +10 -0
  187. data/examples/i18n/tr/features/step_definitions/hesap_makinesi_adimlari.rb +24 -0
  188. data/examples/i18n/tr/features/toplama.feature +18 -0
  189. data/examples/i18n/tr/lib/hesap_makinesi.rb +15 -0
  190. data/examples/i18n/uk/Rakefile +6 -0
  191. data/examples/i18n/uk/features/addition.feature +11 -0
  192. data/examples/i18n/uk/features/consecutive_calculations.feature +17 -0
  193. data/examples/i18n/uk/features/division.feature +16 -0
  194. data/examples/i18n/uk/features/step_definitions/calculator_steps.rb +19 -0
  195. data/examples/i18n/uk/features/support/env.rb +5 -0
  196. data/examples/i18n/uk/features/support/world.rb +8 -0
  197. data/examples/i18n/uk/lib/calculator.rb +24 -0
  198. data/examples/i18n/uz/Rakefile +6 -0
  199. data/examples/i18n/uz/features/addition.feature +10 -0
  200. data/examples/i18n/uz/features/consecutive_calculations.feature +17 -0
  201. data/examples/i18n/uz/features/division.feature +17 -0
  202. data/examples/i18n/uz/features/step_definitions/calculator_steps.rb +19 -0
  203. data/examples/i18n/uz/features/support/env.rb +5 -0
  204. data/examples/i18n/uz/features/support/world.rb +8 -0
  205. data/examples/i18n/uz/lib/calculator.rb +24 -0
  206. data/examples/i18n/zh-CN/Rakefile +4 -0
  207. data/examples/i18n/zh-CN/features/addition.feature +18 -0
  208. data/examples/i18n/zh-CN/features/step_definitions/calculator_steps.rb +26 -0
  209. data/examples/i18n/zh-CN/lib/calculator.rb +10 -0
  210. data/examples/i18n/zh-TW/Rakefile +4 -0
  211. data/examples/i18n/zh-TW/features/addition.feature +17 -0
  212. data/examples/i18n/zh-TW/features/division.feature +11 -0
  213. data/examples/i18n/zh-TW/features/step_definitions/calculator_steps.rb +24 -0
  214. data/examples/i18n/zh-TW/lib/calculator.rb +14 -0
  215. data/examples/mobiusloop/increase_readers.goal +13 -0
  216. data/examples/mobiusloop/scale_page_response.rb +20 -0
  217. data/examples/mobiusloop/total_articles_scale.rb +10 -0
  218. data/examples/mobiusloop/total_readers_scale.rb +10 -0
  219. data/examples/rspec_doubles/Rakefile +4 -0
  220. data/examples/rspec_doubles/features/mocking.feature +9 -0
  221. data/examples/rspec_doubles/features/step_definitions/calvin_steps.rb +19 -0
  222. data/examples/rspec_doubles/features/support/env.rb +12 -0
  223. data/examples/sinatra/README.textile +13 -0
  224. data/examples/sinatra/Rakefile +6 -0
  225. data/examples/sinatra/app.rb +14 -0
  226. data/examples/sinatra/features/add.feature +11 -0
  227. data/examples/sinatra/features/step_definitions/add_steps.rb +15 -0
  228. data/examples/sinatra/features/support/env.rb +10 -0
  229. data/examples/sinatra/views/add.erb +7 -0
  230. data/examples/sinatra/views/layout.erb +8 -0
  231. data/examples/tcl/README.textile +11 -0
  232. data/examples/tcl/Rakefile +6 -0
  233. data/examples/tcl/features/fibonnacci.feature +17 -0
  234. data/examples/tcl/features/step_definitions/fib_steps.rb +7 -0
  235. data/examples/tcl/features/support/env.rb +6 -0
  236. data/examples/tcl/src/fib.tcl +3 -0
  237. data/examples/test_unit/Gemfile +4 -0
  238. data/examples/test_unit/Rakefile +6 -0
  239. data/examples/test_unit/features/step_definitions/test_unit_steps.rb +20 -0
  240. data/examples/test_unit/features/test_unit.feature +9 -0
  241. data/examples/watir/README.textile +16 -0
  242. data/examples/watir/Rakefile +12 -0
  243. data/examples/watir/cucumber.yml +1 -0
  244. data/examples/watir/features/search.feature +12 -0
  245. data/examples/watir/features/step_definitions/search_steps.rb +26 -0
  246. data/examples/watir/features/support/env.rb +35 -0
  247. data/examples/watir/features/support/screenshots.rb +47 -0
  248. data/features/docs/api/list_step_defs_as_json.feature +50 -0
  249. data/features/docs/api/listen_for_events.feature +58 -0
  250. data/features/docs/api/run_cli_main_with_existing_runtime.feature +26 -0
  251. data/features/docs/cli/backtraces.feature +36 -0
  252. data/features/docs/cli/dry_run.feature +70 -0
  253. data/features/docs/cli/exclude_files.feature +18 -0
  254. data/features/docs/cli/execute_with_tag_filter.feature +117 -0
  255. data/features/docs/cli/fail_fast.feature +46 -0
  256. data/features/docs/cli/finding_steps.feature +28 -0
  257. data/features/docs/cli/randomize.feature +140 -0
  258. data/features/docs/cli/require.feature +27 -0
  259. data/features/docs/cli/retry_failing_tests.feature +32 -0
  260. data/features/docs/cli/run_scenarios_matching_name.feature +104 -0
  261. data/features/docs/cli/run_specific_scenarios.feature +77 -0
  262. data/features/docs/cli/showing_differences.feature +43 -0
  263. data/features/docs/cli/specifying_multiple_formatters.feature +65 -0
  264. data/features/docs/cli/strict_mode.feature +64 -0
  265. data/features/docs/defining_steps/nested_steps.feature +177 -0
  266. data/features/docs/defining_steps/nested_steps_i18n.feature +34 -0
  267. data/features/docs/defining_steps/nested_steps_with_second_arg.feature +54 -0
  268. data/features/docs/defining_steps/one_line_step_definitions.feature +65 -0
  269. data/features/docs/defining_steps/printing_messages.feature +148 -0
  270. data/features/docs/defining_steps/skip_scenario.feature +64 -0
  271. data/features/docs/defining_steps/snippets.feature +56 -0
  272. data/features/docs/defining_steps/table_diffing.feature +50 -0
  273. data/features/docs/exception_in_after_hook.feature +126 -0
  274. data/features/docs/exception_in_after_step_hook.feature +102 -0
  275. data/features/docs/exception_in_around_hook.feature +78 -0
  276. data/features/docs/exception_in_before_hook.feature +96 -0
  277. data/features/docs/extending_cucumber/custom_filter.feature +29 -0
  278. data/features/docs/extending_cucumber/custom_formatter.feature +130 -0
  279. data/features/docs/formatters/api_methods.feature +37 -0
  280. data/features/docs/formatters/debug_formatter.feature +47 -0
  281. data/features/docs/formatters/formatter_step_file_colon_line.feature +44 -0
  282. data/features/docs/formatters/html_formatter.feature +91 -0
  283. data/features/docs/formatters/json_formatter.feature +767 -0
  284. data/features/docs/formatters/junit_formatter.feature +454 -0
  285. data/features/docs/formatters/pretty_formatter.feature +73 -0
  286. data/features/docs/formatters/progress_formatter.feature +31 -0
  287. data/features/docs/formatters/rerun_formatter.feature +188 -0
  288. data/features/docs/formatters/usage_formatter.feature +98 -0
  289. data/features/docs/getting_started.feature +27 -0
  290. data/features/docs/gherkin/background.feature +548 -0
  291. data/features/docs/gherkin/doc_strings.feature +74 -0
  292. data/features/docs/gherkin/expand_option_for_outlines.feature +46 -0
  293. data/features/docs/gherkin/language_from_header.feature +32 -0
  294. data/features/docs/gherkin/language_help.feature +42 -0
  295. data/features/docs/gherkin/outlines.feature +156 -0
  296. data/features/docs/gherkin/unicode_table.feature +32 -0
  297. data/features/docs/gherkin/using_descriptions.feature +82 -0
  298. data/features/docs/gherkin/using_star_notation.feature +37 -0
  299. data/features/docs/iso-8859-1.feature +6 -0
  300. data/features/docs/post_configuration_hook.feature +49 -0
  301. data/features/docs/profiles.feature +120 -0
  302. data/features/docs/rake_task.feature +141 -0
  303. data/features/docs/raketask.feature +44 -0
  304. data/features/docs/work_in_progress.feature +154 -0
  305. data/features/docs/writing_support_code/after_hooks.feature +102 -0
  306. data/features/docs/writing_support_code/after_step_hooks.feature +53 -0
  307. data/features/docs/writing_support_code/around_hooks.feature +260 -0
  308. data/features/docs/writing_support_code/before_hook.feature +65 -0
  309. data/features/docs/writing_support_code/hook_order.feature +61 -0
  310. data/features/docs/writing_support_code/load_path.feature +17 -0
  311. data/features/docs/writing_support_code/state.feature +32 -0
  312. data/features/docs/writing_support_code/tagged_hooks.feature +95 -0
  313. data/features/docs/writing_support_code/transforms.feature +98 -0
  314. data/features/lib/step_definitions/aruba_steps.rb +26 -0
  315. data/features/lib/step_definitions/cucumber_steps.rb +78 -0
  316. data/features/lib/step_definitions/iso-8859-1_steps.rb +12 -0
  317. data/features/lib/step_definitions/json_steps.rb +7 -0
  318. data/features/lib/step_definitions/junit_steps.rb +13 -0
  319. data/features/lib/step_definitions/language_steps.rb +8 -0
  320. data/features/lib/step_definitions/profile_steps.rb +15 -0
  321. data/features/lib/step_definitions/retry_steps.rb +35 -0
  322. data/features/lib/step_definitions/ruby_steps.rb +3 -0
  323. data/features/lib/step_definitions/wire_steps.rb +58 -0
  324. data/features/lib/support/env.rb +21 -0
  325. data/features/lib/support/fake_wire_server.rb +80 -0
  326. data/features/lib/support/feature_factory.rb +67 -0
  327. data/features/lib/support/normalise_output.rb +50 -0
  328. data/gem_tasks/contributors.rake +15 -0
  329. data/gem_tasks/cov.rake +5 -0
  330. data/gem_tasks/cucumber.rake +25 -0
  331. data/gem_tasks/downloads.rb +7 -0
  332. data/gem_tasks/environment.rake +7 -0
  333. data/gem_tasks/examples.rake +11 -0
  334. data/gem_tasks/fix_cr_lf.rake +10 -0
  335. data/gem_tasks/flog.rake +4 -0
  336. data/gem_tasks/rspec.rake +6 -0
  337. data/gem_tasks/sass.rake +4 -0
  338. data/gem_tasks/stats +16 -0
  339. data/gem_tasks/versions.txt +74 -0
  340. data/gherkin-languages.json +2972 -0
  341. data/lib/autotest/cucumber.rb +6 -0
  342. data/lib/autotest/cucumber_mixin.rb +135 -0
  343. data/lib/autotest/cucumber_rails.rb +6 -0
  344. data/lib/autotest/cucumber_rails_rspec.rb +6 -0
  345. data/lib/autotest/cucumber_rails_rspec2.rb +6 -0
  346. data/lib/autotest/cucumber_rspec.rb +6 -0
  347. data/lib/autotest/cucumber_rspec2.rb +6 -0
  348. data/lib/autotest/discover.rb +11 -0
  349. data/lib/cucumber.rb +37 -0
  350. data/lib/cucumber/ast.rb +13 -0
  351. data/lib/cucumber/cli/configuration.rb +146 -0
  352. data/lib/cucumber/cli/main.rb +99 -0
  353. data/lib/cucumber/cli/options.rb +465 -0
  354. data/lib/cucumber/cli/profile_loader.rb +91 -0
  355. data/lib/cucumber/cli/rerun_file.rb +29 -0
  356. data/lib/cucumber/configuration.rb +268 -0
  357. data/lib/cucumber/constantize.rb +45 -0
  358. data/lib/cucumber/core_ext/instance_exec.rb +70 -0
  359. data/lib/cucumber/core_ext/string.rb +9 -0
  360. data/lib/cucumber/deprecate.rb +29 -0
  361. data/lib/cucumber/encoding.rb +5 -0
  362. data/lib/cucumber/errors.rb +51 -0
  363. data/lib/cucumber/events.rb +20 -0
  364. data/lib/cucumber/events/after_test_case.rb +25 -0
  365. data/lib/cucumber/events/after_test_step.rb +30 -0
  366. data/lib/cucumber/events/before_test_case.rb +18 -0
  367. data/lib/cucumber/events/before_test_step.rb +23 -0
  368. data/lib/cucumber/events/bus.rb +86 -0
  369. data/lib/cucumber/events/finished_testing.rb +9 -0
  370. data/lib/cucumber/events/step_match.rb +23 -0
  371. data/lib/cucumber/file_specs.rb +37 -0
  372. data/lib/cucumber/filters.rb +9 -0
  373. data/lib/cucumber/filters/activate_steps.rb +67 -0
  374. data/lib/cucumber/filters/apply_after_hooks.rb +9 -0
  375. data/lib/cucumber/filters/apply_after_step_hooks.rb +12 -0
  376. data/lib/cucumber/filters/apply_around_hooks.rb +12 -0
  377. data/lib/cucumber/filters/apply_before_hooks.rb +9 -0
  378. data/lib/cucumber/filters/gated_receiver.rb +25 -0
  379. data/lib/cucumber/filters/prepare_world.rb +45 -0
  380. data/lib/cucumber/filters/quit.rb +28 -0
  381. data/lib/cucumber/filters/randomizer.rb +45 -0
  382. data/lib/cucumber/filters/retry.rb +32 -0
  383. data/lib/cucumber/filters/tag_limits.rb +45 -0
  384. data/lib/cucumber/filters/tag_limits/test_case_index.rb +31 -0
  385. data/lib/cucumber/filters/tag_limits/verifier.rb +59 -0
  386. data/lib/cucumber/formatter/ansicolor.rb +160 -0
  387. data/lib/cucumber/formatter/backtrace_filter.rb +41 -0
  388. data/lib/cucumber/formatter/console.rb +252 -0
  389. data/lib/cucumber/formatter/cucumber.css +286 -0
  390. data/lib/cucumber/formatter/cucumber.sass +247 -0
  391. data/lib/cucumber/formatter/debug.rb +35 -0
  392. data/lib/cucumber/formatter/duration.rb +13 -0
  393. data/lib/cucumber/formatter/duration_extractor.rb +28 -0
  394. data/lib/cucumber/formatter/event_bus_report.rb +38 -0
  395. data/lib/cucumber/formatter/fail_fast.rb +18 -0
  396. data/lib/cucumber/formatter/fanout.rb +27 -0
  397. data/lib/cucumber/formatter/hook_query_visitor.rb +40 -0
  398. data/lib/cucumber/formatter/html.rb +689 -0
  399. data/lib/cucumber/formatter/ignore_missing_messages.rb +20 -0
  400. data/lib/cucumber/formatter/interceptor.rb +80 -0
  401. data/lib/cucumber/formatter/io.rb +34 -0
  402. data/lib/cucumber/formatter/jquery-min.js +154 -0
  403. data/lib/cucumber/formatter/json.rb +334 -0
  404. data/lib/cucumber/formatter/json_pretty.rb +10 -0
  405. data/lib/cucumber/formatter/junit.rb +238 -0
  406. data/lib/cucumber/formatter/legacy_api/adapter.rb +1016 -0
  407. data/lib/cucumber/formatter/legacy_api/ast.rb +389 -0
  408. data/lib/cucumber/formatter/legacy_api/results.rb +51 -0
  409. data/lib/cucumber/formatter/legacy_api/runtime_facade.rb +31 -0
  410. data/lib/cucumber/formatter/pretty.rb +247 -0
  411. data/lib/cucumber/formatter/progress.rb +73 -0
  412. data/lib/cucumber/formatter/rerun.rb +35 -0
  413. data/lib/cucumber/formatter/stepdefs.rb +14 -0
  414. data/lib/cucumber/formatter/steps.rb +49 -0
  415. data/lib/cucumber/formatter/summary.rb +35 -0
  416. data/lib/cucumber/formatter/unicode.rb +53 -0
  417. data/lib/cucumber/formatter/usage.rb +136 -0
  418. data/lib/cucumber/gherkin/data_table_parser.rb +31 -0
  419. data/lib/cucumber/gherkin/formatter/ansi_escapes.rb +99 -0
  420. data/lib/cucumber/gherkin/formatter/escaping.rb +17 -0
  421. data/lib/cucumber/gherkin/i18n.rb +15 -0
  422. data/lib/cucumber/gherkin/steps_parser.rb +31 -0
  423. data/lib/cucumber/hooks.rb +99 -0
  424. data/lib/cucumber/load_path.rb +13 -0
  425. data/lib/cucumber/multiline_argument.rb +71 -0
  426. data/lib/cucumber/multiline_argument/data_table.rb +744 -0
  427. data/lib/cucumber/multiline_argument/doc_string.rb +9 -0
  428. data/lib/cucumber/platform.rb +27 -0
  429. data/lib/cucumber/project_initializer.rb +82 -0
  430. data/lib/cucumber/rake/task.rb +168 -0
  431. data/lib/cucumber/rb_support/rb_dsl.rb +119 -0
  432. data/lib/cucumber/rb_support/rb_hook.rb +19 -0
  433. data/lib/cucumber/rb_support/rb_language.rb +216 -0
  434. data/lib/cucumber/rb_support/rb_step_definition.rb +131 -0
  435. data/lib/cucumber/rb_support/rb_transform.rb +59 -0
  436. data/lib/cucumber/rb_support/rb_world.rb +149 -0
  437. data/lib/cucumber/rb_support/snippet.rb +170 -0
  438. data/lib/cucumber/rspec/disable_option_parser.rb +23 -0
  439. data/lib/cucumber/rspec/doubles.rb +19 -0
  440. data/lib/cucumber/running_test_case.rb +134 -0
  441. data/lib/cucumber/runtime.rb +266 -0
  442. data/lib/cucumber/runtime/after_hooks.rb +25 -0
  443. data/lib/cucumber/runtime/before_hooks.rb +27 -0
  444. data/lib/cucumber/runtime/for_programming_languages.rb +66 -0
  445. data/lib/cucumber/runtime/step_hooks.rb +23 -0
  446. data/lib/cucumber/runtime/support_code.rb +151 -0
  447. data/lib/cucumber/runtime/user_interface.rb +85 -0
  448. data/lib/cucumber/step_argument.rb +25 -0
  449. data/lib/cucumber/step_definition_light.rb +20 -0
  450. data/lib/cucumber/step_definitions.rb +13 -0
  451. data/lib/cucumber/step_match.rb +141 -0
  452. data/lib/cucumber/step_match_search.rb +67 -0
  453. data/lib/cucumber/term/ansicolor.rb +110 -0
  454. data/lib/cucumber/unit.rb +11 -0
  455. data/lib/cucumber/version +1 -0
  456. data/lib/mobiusloop/measure.rb +19 -0
  457. data/lib/mobiusloop/mobius_steps.rb +36 -0
  458. data/lib/mobiusloop/objective.rb +10 -0
  459. data/lib/mobiusloop/outcome.rb +99 -0
  460. data/lib/mobiusloop/scale.rb +32 -0
  461. data/lib/simplecov_setup.rb +18 -0
  462. data/major_changes_to_cucumber.md +45 -0
  463. data/mobiusloop.gemspec +47 -0
  464. data/spec/cucumber/cli/configuration_spec.rb +435 -0
  465. data/spec/cucumber/cli/main_spec.rb +83 -0
  466. data/spec/cucumber/cli/options_spec.rb +410 -0
  467. data/spec/cucumber/cli/profile_loader_spec.rb +46 -0
  468. data/spec/cucumber/cli/rerun_spec.rb +85 -0
  469. data/spec/cucumber/configuration_spec.rb +147 -0
  470. data/spec/cucumber/constantize_spec.rb +19 -0
  471. data/spec/cucumber/core_ext/instance_exec_spec.rb +4 -0
  472. data/spec/cucumber/events/bus_spec.rb +94 -0
  473. data/spec/cucumber/file_specs_spec.rb +60 -0
  474. data/spec/cucumber/filters/activate_steps_spec.rb +149 -0
  475. data/spec/cucumber/filters/gated_receiver_spec.rb +47 -0
  476. data/spec/cucumber/filters/retry_spec.rb +79 -0
  477. data/spec/cucumber/filters/tag_limits/test_case_index_spec.rb +38 -0
  478. data/spec/cucumber/filters/tag_limits/verifier_spec.rb +57 -0
  479. data/spec/cucumber/filters/tag_limits_spec.rb +59 -0
  480. data/spec/cucumber/formatter/ansicolor_spec.rb +32 -0
  481. data/spec/cucumber/formatter/debug_spec.rb +64 -0
  482. data/spec/cucumber/formatter/duration_spec.rb +22 -0
  483. data/spec/cucumber/formatter/event_bus_report_spec.rb +88 -0
  484. data/spec/cucumber/formatter/fail_fast_spec.rb +88 -0
  485. data/spec/cucumber/formatter/html_spec.rb +538 -0
  486. data/spec/cucumber/formatter/interceptor_spec.rb +136 -0
  487. data/spec/cucumber/formatter/json_spec.rb +841 -0
  488. data/spec/cucumber/formatter/junit_spec.rb +252 -0
  489. data/spec/cucumber/formatter/legacy_api/adapter_spec.rb +2182 -0
  490. data/spec/cucumber/formatter/pretty_spec.rb +919 -0
  491. data/spec/cucumber/formatter/progress_spec.rb +169 -0
  492. data/spec/cucumber/formatter/rerun_spec.rb +91 -0
  493. data/spec/cucumber/formatter/spec_helper.rb +82 -0
  494. data/spec/cucumber/hooks_spec.rb +30 -0
  495. data/spec/cucumber/multiline_argument/data_table_spec.rb +603 -0
  496. data/spec/cucumber/project_initializer_spec.rb +87 -0
  497. data/spec/cucumber/rake/forked_spec.rb +53 -0
  498. data/spec/cucumber/rake/task_spec.rb +85 -0
  499. data/spec/cucumber/rb_support/rb_language_spec.rb +243 -0
  500. data/spec/cucumber/rb_support/rb_step_definition_spec.rb +199 -0
  501. data/spec/cucumber/rb_support/rb_transform_spec.rb +46 -0
  502. data/spec/cucumber/rb_support/rb_world_spec.rb +47 -0
  503. data/spec/cucumber/rb_support/snippet_spec.rb +137 -0
  504. data/spec/cucumber/running_test_case_spec.rb +139 -0
  505. data/spec/cucumber/runtime/for_programming_languages_spec.rb +36 -0
  506. data/spec/cucumber/runtime/support_code_spec.rb +16 -0
  507. data/spec/cucumber/runtime_spec.rb +20 -0
  508. data/spec/cucumber/sell_cucumbers.feature +19 -0
  509. data/spec/cucumber/step_argument_spec.rb +18 -0
  510. data/spec/cucumber/step_match_search_spec.rb +122 -0
  511. data/spec/cucumber/step_match_spec.rb +85 -0
  512. data/spec/cucumber/world/pending_spec.rb +47 -0
  513. data/spec/cucumber_spec.rb +39 -0
  514. data/spec/spec_helper.rb +29 -0
  515. data/spec/support/standard_step_actions.rb +18 -0
  516. metadata +1007 -0
@@ -0,0 +1,126 @@
1
+ Feature: Exception in After Block
2
+ In order to use custom assertions at the end of each scenario
3
+ As a developer
4
+ I want exceptions raised in After blocks to be handled gracefully and reported by the formatters
5
+
6
+ Background:
7
+ Given the standard step definitions
8
+ And a file named "features/step_definitions/naughty_steps.rb" with:
9
+ """
10
+ Given /^this step does something naughty$/ do x=1
11
+ @naughty = true
12
+ end
13
+ """
14
+ And a file named "features/support/env.rb" with:
15
+ """
16
+ class NaughtyScenarioException < Exception; end
17
+ After do
18
+ if @naughty
19
+ raise NaughtyScenarioException.new("This scenario has been very very naughty")
20
+ end
21
+ end
22
+ """
23
+
24
+ @spawn
25
+ Scenario: Handle Exception in standard scenario step and carry on
26
+ Given a file named "features/naughty_step_in_scenario.feature" with:
27
+ """
28
+ Feature: Sample
29
+
30
+ Scenario: Naughty Step
31
+ Given this step does something naughty
32
+
33
+ Scenario: Success
34
+ Given this step passes
35
+ """
36
+ When I run `cucumber features`
37
+ Then it should fail with:
38
+ """
39
+ Feature: Sample
40
+
41
+ Scenario: Naughty Step # features/naughty_step_in_scenario.feature:3
42
+ Given this step does something naughty # features/step_definitions/naughty_steps.rb:1
43
+ This scenario has been very very naughty (NaughtyScenarioException)
44
+ ./features/support/env.rb:4:in `After'
45
+
46
+ Scenario: Success # features/naughty_step_in_scenario.feature:6
47
+ Given this step passes # features/step_definitions/steps.rb:1
48
+
49
+ Failing Scenarios:
50
+ cucumber features/naughty_step_in_scenario.feature:3 # Scenario: Naughty Step
51
+
52
+ 2 scenarios (1 failed, 1 passed)
53
+ 2 steps (2 passed)
54
+
55
+ """
56
+
57
+ @spawn
58
+ Scenario: Handle Exception in scenario outline table row and carry on
59
+ Given a file named "features/naughty_step_in_scenario_outline.feature" with:
60
+ """
61
+ Feature: Sample
62
+
63
+ Scenario Outline: Naughty Step
64
+ Given this step <Might Work>
65
+
66
+ Examples:
67
+ | Might Work |
68
+ | passes |
69
+ | does something naughty |
70
+ | passes |
71
+
72
+ Scenario: Success
73
+ Given this step passes
74
+
75
+ """
76
+ When I run `cucumber features -q`
77
+ Then it should fail with:
78
+ """
79
+ Feature: Sample
80
+
81
+ Scenario Outline: Naughty Step
82
+ Given this step <Might Work>
83
+
84
+ Examples:
85
+ | Might Work |
86
+ | passes |
87
+ | does something naughty |
88
+ This scenario has been very very naughty (NaughtyScenarioException)
89
+ ./features/support/env.rb:4:in `After'
90
+ | passes |
91
+
92
+ Scenario: Success
93
+ Given this step passes
94
+
95
+ Failing Scenarios:
96
+ cucumber features/naughty_step_in_scenario_outline.feature:9
97
+
98
+ 4 scenarios (1 failed, 3 passed)
99
+ 4 steps (4 passed)
100
+
101
+ """
102
+
103
+ Scenario: Handle Exception using the progress format
104
+ Given a file named "features/naughty_step_in_scenario.feature" with:
105
+ """
106
+ Feature: Sample
107
+
108
+ Scenario: Naughty Step
109
+ Given this step does something naughty
110
+
111
+ Scenario: Success
112
+ Given this step passes
113
+ """
114
+ When I run `cucumber features --format progress`
115
+ Then it should fail with:
116
+ """
117
+ .F.
118
+
119
+ Failing Scenarios:
120
+ cucumber features/naughty_step_in_scenario.feature:3 # Scenario: Naughty Step
121
+
122
+ 2 scenarios (1 failed, 1 passed)
123
+ 2 steps (2 passed)
124
+
125
+ """
126
+
@@ -0,0 +1,102 @@
1
+ Feature: Exception in AfterStep Block
2
+ In order to use custom assertions at the end of each step
3
+ As a developer
4
+ I want exceptions raised in AfterStep blocks to be handled gracefully and reported by the formatters
5
+
6
+ Background:
7
+ Given the standard step definitions
8
+ And a file named "features/step_definitions/naughty_steps.rb" with:
9
+ """
10
+ Given /^this step does something naughty$/ do x=1
11
+ @naughty = true
12
+ end
13
+ """
14
+ And a file named "features/support/env.rb" with:
15
+ """
16
+ class NaughtyStepException < Exception; end
17
+ AfterStep do
18
+ if @naughty
19
+ raise NaughtyStepException.new("This step has been very very naughty")
20
+ end
21
+ end
22
+ """
23
+
24
+ Scenario: Handle Exception in standard scenario step and carry on
25
+ Given a file named "features/naughty_step_in_scenario.feature" with:
26
+ """
27
+ Feature: Sample
28
+
29
+ Scenario: Naughty Step
30
+ Given this step does something naughty
31
+
32
+ Scenario: Success
33
+ Given this step passes
34
+ """
35
+ When I run `cucumber features`
36
+ Then it should fail with:
37
+ """
38
+ Feature: Sample
39
+
40
+ Scenario: Naughty Step # features/naughty_step_in_scenario.feature:3
41
+ Given this step does something naughty # features/step_definitions/naughty_steps.rb:1
42
+ This step has been very very naughty (NaughtyStepException)
43
+ ./features/support/env.rb:4:in `AfterStep'
44
+ features/naughty_step_in_scenario.feature:4:in `Given this step does something naughty'
45
+
46
+ Scenario: Success # features/naughty_step_in_scenario.feature:6
47
+ Given this step passes # features/step_definitions/steps.rb:1
48
+
49
+ Failing Scenarios:
50
+ cucumber features/naughty_step_in_scenario.feature:3 # Scenario: Naughty Step
51
+
52
+ 2 scenarios (1 failed, 1 passed)
53
+ 2 steps (2 passed)
54
+
55
+ """
56
+
57
+ Scenario: Handle Exception in scenario outline table row and carry on
58
+ Given a file named "features/naughty_step_in_scenario_outline.feature" with:
59
+ """
60
+ Feature: Sample
61
+
62
+ Scenario Outline: Naughty Step
63
+ Given this step <Might Work>
64
+
65
+ Examples:
66
+ | Might Work |
67
+ | passes |
68
+ | does something naughty |
69
+ | passes |
70
+
71
+ Scenario: Success
72
+ Given this step passes
73
+
74
+ """
75
+ When I run `cucumber features`
76
+ Then it should fail with:
77
+ """
78
+ Feature: Sample
79
+
80
+ Scenario Outline: Naughty Step # features/naughty_step_in_scenario_outline.feature:3
81
+ Given this step <Might Work> # features/naughty_step_in_scenario_outline.feature:4
82
+
83
+ Examples:
84
+ | Might Work |
85
+ | passes |
86
+ | does something naughty |
87
+ This step has been very very naughty (NaughtyStepException)
88
+ ./features/support/env.rb:4:in `AfterStep'
89
+ features/naughty_step_in_scenario_outline.feature:9:in `Given this step does something naughty'
90
+ features/naughty_step_in_scenario_outline.feature:4:in `Given this step <Might Work>'
91
+ | passes |
92
+
93
+ Scenario: Success # features/naughty_step_in_scenario_outline.feature:12
94
+ Given this step passes # features/step_definitions/steps.rb:1
95
+
96
+ Failing Scenarios:
97
+ cucumber features/naughty_step_in_scenario_outline.feature:9 # Scenario Outline: Naughty Step, Examples (#2)
98
+
99
+ 4 scenarios (1 failed, 3 passed)
100
+ 4 steps (4 passed)
101
+
102
+ """
@@ -0,0 +1,78 @@
1
+ Feature: Exceptions in Around Hooks
2
+
3
+ Around hooks are awkward beasts to handle internally.
4
+
5
+ Right now, if there's an error in your Around hook before you call `block.call`,
6
+ we won't even print the steps for the scenario.
7
+
8
+ This is because that `block.call` invokes all the logic that would tell Cucumber's
9
+ UI about the steps in your scenario. If we never reach that code, we'll never be
10
+ told about them.
11
+
12
+ There's another scenario to consider, where the exception occurs after the steps
13
+ have been run. How would we want to report in that case?
14
+
15
+ Scenario: Exception before the test case is run
16
+ Given the standard step definitions
17
+ And a file named "features/support/env.rb" with:
18
+ """
19
+ Around do |scenario, block|
20
+ fail "this should be reported"
21
+ block.call
22
+ end
23
+ """
24
+ And a file named "features/test.feature" with:
25
+ """
26
+ Feature:
27
+ Scenario:
28
+ Given this step passes
29
+ """
30
+ When I run `cucumber -q`
31
+ Then it should fail with exactly:
32
+ """
33
+ Feature:
34
+
35
+ Scenario:
36
+ this should be reported (RuntimeError)
37
+ ./features/support/env.rb:2:in `Around'
38
+
39
+ Failing Scenarios:
40
+ cucumber features/test.feature:2
41
+
42
+ 1 scenario (1 failed)
43
+ 0 steps
44
+
45
+ """
46
+
47
+ Scenario: Exception after the test case is run
48
+ Given the standard step definitions
49
+ And a file named "features/support/env.rb" with:
50
+ """
51
+ Around do |scenario, block|
52
+ block.call
53
+ fail "this should be reported"
54
+ end
55
+ """
56
+ And a file named "features/test.feature" with:
57
+ """
58
+ Feature:
59
+ Scenario:
60
+ Given this step passes
61
+ """
62
+ When I run `cucumber -q`
63
+ Then it should fail with exactly:
64
+ """
65
+ Feature:
66
+
67
+ Scenario:
68
+ Given this step passes
69
+ this should be reported (RuntimeError)
70
+ ./features/support/env.rb:3:in `Around'
71
+
72
+ Failing Scenarios:
73
+ cucumber features/test.feature:2
74
+
75
+ 1 scenario (1 failed)
76
+ 1 step (1 passed)
77
+
78
+ """
@@ -0,0 +1,96 @@
1
+ Feature: Exception in Before Block
2
+ In order to know with confidence that my before blocks have run OK
3
+ As a developer
4
+ I want exceptions raised in Before blocks to be handled gracefully and reported by the formatters
5
+
6
+ Background:
7
+ Given the standard step definitions
8
+ And a file named "features/support/env.rb" with:
9
+ """
10
+ class SomeSetupException < Exception; end
11
+ class BadStepException < Exception; end
12
+ Before do
13
+ raise SomeSetupException.new("I cannot even start this scenario")
14
+ end
15
+ """
16
+
17
+ @spawn
18
+ Scenario: Handle Exception in standard scenario step and carry on
19
+ Given a file named "features/naughty_step_in_scenario.feature" with:
20
+ """
21
+ Feature: Sample
22
+
23
+ Scenario: Run a good step
24
+ Given this step passes
25
+ """
26
+ When I run `cucumber features`
27
+ Then it should fail with:
28
+ """
29
+ Feature: Sample
30
+
31
+ Scenario: Run a good step # features/naughty_step_in_scenario.feature:3
32
+ I cannot even start this scenario (SomeSetupException)
33
+ ./features/support/env.rb:4:in `Before'
34
+ Given this step passes # features/step_definitions/steps.rb:1
35
+
36
+ Failing Scenarios:
37
+ cucumber features/naughty_step_in_scenario.feature:3 # Scenario: Run a good step
38
+
39
+ 1 scenario (1 failed)
40
+ 1 step (1 skipped)
41
+
42
+ """
43
+
44
+ Scenario: Handle Exception in Before hook for Scenario with Background
45
+ Given a file named "features/naughty_step_in_before.feature" with:
46
+ """
47
+ Feature: Sample
48
+
49
+ Background:
50
+ Given this step passes
51
+
52
+ Scenario: Run a good step
53
+ Given this step passes
54
+ """
55
+ When I run `cucumber features`
56
+ Then it should fail with exactly:
57
+ """
58
+ Feature: Sample
59
+
60
+ Background: # features/naughty_step_in_before.feature:3
61
+ I cannot even start this scenario (SomeSetupException)
62
+ ./features/support/env.rb:4:in `Before'
63
+ Given this step passes # features/step_definitions/steps.rb:1
64
+
65
+ Scenario: Run a good step # features/naughty_step_in_before.feature:6
66
+ Given this step passes # features/step_definitions/steps.rb:1
67
+
68
+ Failing Scenarios:
69
+ cucumber features/naughty_step_in_before.feature:6 # Scenario: Run a good step
70
+
71
+ 1 scenario (1 failed)
72
+ 2 steps (2 skipped)
73
+ 0m0.012s
74
+
75
+ """
76
+
77
+ Scenario: Handle Exception using the progress format
78
+ Given a file named "features/naughty_step_in_scenario.feature" with:
79
+ """
80
+ Feature: Sample
81
+
82
+ Scenario: Run a good step
83
+ Given this step passes
84
+ """
85
+ When I run `cucumber features --format progress`
86
+ Then it should fail with:
87
+ """
88
+ F-
89
+
90
+ Failing Scenarios:
91
+ cucumber features/naughty_step_in_scenario.feature:3 # Scenario: Run a good step
92
+
93
+ 1 scenario (1 failed)
94
+ 1 step (1 skipped)
95
+
96
+ """
@@ -0,0 +1,29 @@
1
+ Feature: Custom filter
2
+
3
+ Scenario: Add a custom filter via AfterConfiguration hook
4
+ Given a file named "features/test.feature" with:
5
+ """
6
+ Feature:
7
+ Scenario:
8
+ Given my special step
9
+ """
10
+ And a file named "features/support/my_filter.rb" with:
11
+ """
12
+ require 'cucumber/core/filter'
13
+
14
+ MakeAnythingPass = Cucumber::Core::Filter.new do
15
+ def test_case(test_case)
16
+ activated_steps = test_case.test_steps.map do |test_step|
17
+ test_step.with_action { }
18
+ end
19
+ test_case.with_steps(activated_steps).describe_to receiver
20
+ end
21
+ end
22
+
23
+ AfterConfiguration do |config|
24
+ config.filters << MakeAnythingPass.new
25
+ end
26
+ """
27
+ When I run `cucumber --strict`
28
+ Then it should pass
29
+
@@ -0,0 +1,130 @@
1
+ Feature: Custom Formatter
2
+
3
+ Background:
4
+ Given a file named "features/f.feature" with:
5
+ """
6
+ Feature: I'll use my own
7
+ Scenario: Just print me
8
+ Given this step passes
9
+ """
10
+ And the standard step definitions
11
+
12
+ Scenario: Subscribe to result events
13
+
14
+ This is the recommended way to format output.
15
+
16
+ Given a file named "features/support/custom_formatter.rb" with:
17
+ """
18
+ module MyCustom
19
+ class Formatter
20
+ def initialize(config)
21
+ @io = config.out_stream
22
+ config.on_event Cucumber::Events::BeforeTestCase do |event|
23
+ print_test_case_name(event.test_case)
24
+ end
25
+ end
26
+
27
+ def print_test_case_name(test_case)
28
+ feature = test_case.source.first
29
+ scenario = test_case.source.last
30
+ @io.puts feature.short_name.upcase
31
+ @io.puts " #{scenario.name.upcase}"
32
+ end
33
+ end
34
+ end
35
+ """
36
+ When I run `cucumber features/f.feature --format MyCustom::Formatter`
37
+ Then it should pass with exactly:
38
+ """
39
+ I'LL USE MY OWN
40
+ JUST PRINT ME
41
+
42
+ """
43
+
44
+ Scenario: Implement v2.0 formatter methods
45
+ Note that this method is likely to be deprecated in favour of events - see above.
46
+
47
+ Given a file named "features/support/custom_formatter.rb" with:
48
+ """
49
+ module MyCustom
50
+ class Formatter
51
+ def initialize(config)
52
+ @io = config.out_stream
53
+ end
54
+
55
+ def before_test_case(test_case)
56
+ feature = test_case.source.first
57
+ scenario = test_case.source.last
58
+ @io.puts feature.short_name.upcase
59
+ @io.puts " #{scenario.name.upcase}"
60
+ end
61
+ end
62
+ end
63
+ """
64
+ When I run `cucumber features/f.feature --format MyCustom::Formatter`
65
+ Then it should pass with exactly:
66
+ """
67
+ I'LL USE MY OWN
68
+ JUST PRINT ME
69
+
70
+ """
71
+
72
+ Scenario: Use the legacy API
73
+ This is deprecated and should no longer be used.
74
+
75
+ Given a file named "features/support/custom_legacy_formatter.rb" with:
76
+ """
77
+ module MyCustom
78
+ class LegacyFormatter
79
+ def initialize(runtime, io, options)
80
+ @io = io
81
+ end
82
+
83
+ def before_feature(feature)
84
+ @io.puts feature.short_name.upcase
85
+ end
86
+
87
+ def scenario_name(keyword, name, file_colon_line, source_indent)
88
+ @io.puts " #{name.upcase}"
89
+ end
90
+ end
91
+ end
92
+ """
93
+ When I run `cucumber features/f.feature --format MyCustom::LegacyFormatter`
94
+ Then it should pass with exactly:
95
+ """
96
+ I'LL USE MY OWN
97
+ JUST PRINT ME
98
+
99
+ """
100
+
101
+ Scenario: Use both old and new
102
+ You can use a specific shim to opt-in to both APIs at once.
103
+
104
+ Given a file named "features/support/custom_mixed_formatter.rb" with:
105
+ """
106
+ module MyCustom
107
+ class MixedFormatter
108
+
109
+ def initialize(runtime, io, options)
110
+ @io = io
111
+ end
112
+
113
+ def before_test_case(test_case)
114
+ feature = test_case.source.first
115
+ @io.puts feature.short_name.upcase
116
+ end
117
+
118
+ def scenario_name(keyword, name, file_colon_line, source_indent)
119
+ @io.puts " #{name.upcase}"
120
+ end
121
+ end
122
+ end
123
+ """
124
+ When I run `cucumber features/f.feature --format MyCustom::MixedFormatter`
125
+ Then it should pass with exactly:
126
+ """
127
+ I'LL USE MY OWN
128
+ JUST PRINT ME
129
+
130
+ """