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,73 @@
1
+ Feature: Pretty output formatter
2
+
3
+ Background:
4
+ Given a file named "features/scenario_outline_with_undefined_steps.feature" with:
5
+ """
6
+ Feature:
7
+
8
+ Scenario Outline:
9
+ Given this step is undefined
10
+
11
+ Examples:
12
+ |foo|
13
+ |bar|
14
+ """
15
+
16
+ Scenario: an scenario outline, one undefined step, one random example, expand flag on
17
+ When I run `cucumber features/scenario_outline_with_undefined_steps.feature --format pretty --expand `
18
+ Then it should pass
19
+
20
+ Scenario: when using a profile the output should include 'Using the default profile...'
21
+ And a file named "cucumber.yml" with:
22
+ """
23
+ default: -r features
24
+ """
25
+ When I run `cucumber --profile default --format pretty`
26
+ Then it should pass
27
+ And the output should contain:
28
+ """
29
+ Using the default profile...
30
+ """
31
+ Scenario: Hook output should be printed before hook exception
32
+ Given the standard step definitions
33
+ And a file named "features/test.feature" with:
34
+ """
35
+ Feature:
36
+ Scenario:
37
+ Given this step passes
38
+ """
39
+ And a file named "features/step_definitions/output_steps.rb" with:
40
+ """
41
+ Before do
42
+ puts "Before hook"
43
+ end
44
+
45
+ AfterStep do
46
+ puts "AfterStep hook"
47
+ end
48
+
49
+ After do
50
+ puts "After hook"
51
+ raise "error"
52
+ end
53
+ """
54
+ When I run `cucumber -q -f pretty features/test.feature`
55
+ Then the stderr should not contain anything
56
+ Then it should fail with:
57
+ """
58
+ Feature:
59
+
60
+ Scenario:
61
+ Before hook
62
+ Given this step passes
63
+ AfterStep hook
64
+ After hook
65
+ error (RuntimeError)
66
+ ./features/step_definitions/output_steps.rb:11:in `After'
67
+
68
+ Failing Scenarios:
69
+ cucumber features/test.feature:2
70
+
71
+ 1 scenario (1 failed)
72
+ 1 step (1 passed)
73
+ """
@@ -0,0 +1,31 @@
1
+ Feature: Progress output formatter
2
+
3
+ Background:
4
+ Given a file named "features/scenario_outline_with_undefined_steps.feature" with:
5
+ """
6
+ Feature:
7
+
8
+ Scenario Outline:
9
+ Given this step is undefined
10
+
11
+ Examples:
12
+ |foo|
13
+ |bar|
14
+ """
15
+
16
+ Scenario: an scenario outline, one undefined step, one random example, expand flag on
17
+ When I run `cucumber features/scenario_outline_with_undefined_steps.feature --format progress --expand `
18
+ Then it should pass
19
+
20
+ Scenario: when using a profile the output should include 'Using the default profile...'
21
+ And a file named "cucumber.yml" with:
22
+ """
23
+ default: -r features
24
+ """
25
+ When I run `cucumber --profile default --format progress`
26
+ Then it should pass
27
+ And the output should contain:
28
+ """
29
+ Using the default profile...
30
+ """
31
+
@@ -0,0 +1,188 @@
1
+ Feature: Rerun formatter
2
+
3
+ The rerun formatter writes an output that's perfect for
4
+ passing to Cucumber when you want to rerun only the
5
+ scenarios that prevented the exit code to be zero.
6
+
7
+ You can save off the rerun output to a file by using it like this:
8
+
9
+ `cucumber -f rerun --out .cucumber.rerun`
10
+
11
+ Now you can pass that file's content to Cucumber to tell it
12
+ which scenarios to run:
13
+
14
+ `cucumber \`cat .cucumber.rerun\``
15
+
16
+ This is useful when debugging in a large suite of features.
17
+
18
+ Background:
19
+ Given the standard step definitions
20
+
21
+ Scenario: Exit code is zero
22
+ Given a file named "features/mixed.feature" with:
23
+ """
24
+ Feature: Mixed
25
+
26
+ Scenario:
27
+ Given this step is undefined
28
+
29
+ Scenario:
30
+ Given this step is pending
31
+
32
+ Scenario:
33
+ Given this step passes
34
+
35
+ """
36
+
37
+ When I run `cucumber -f rerun`
38
+ Then it should pass with exactly:
39
+ """
40
+ """
41
+
42
+ Scenario: Exit code is zero in the dry-run mode
43
+ Given a file named "features/mixed.feature" with:
44
+ """
45
+ Feature: Mixed
46
+
47
+ Scenario:
48
+ Given this step fails
49
+
50
+ Scenario:
51
+ Given this step is undefined
52
+
53
+ Scenario:
54
+ Given this step is pending
55
+
56
+ Scenario:
57
+ Given this step passes
58
+
59
+ """
60
+ And a file named "features/all_good.feature" with:
61
+ """
62
+ Feature: All good
63
+
64
+ Scenario:
65
+ Given this step passes
66
+ """
67
+
68
+ When I run `cucumber -f rerun --dry-run`
69
+ Then it should pass with exactly:
70
+ """
71
+ """
72
+
73
+ Scenario: Exit code is not zero, regular scenario
74
+ Given a file named "features/mixed.feature" with:
75
+ """
76
+ Feature: Mixed
77
+
78
+ Scenario:
79
+ Given this step fails
80
+
81
+ Scenario:
82
+ Given this step is undefined
83
+
84
+ Scenario:
85
+ Given this step is pending
86
+
87
+ Scenario:
88
+ Given this step passes
89
+
90
+ """
91
+ And a file named "features/all_good.feature" with:
92
+ """
93
+ Feature: All good
94
+
95
+ Scenario:
96
+ Given this step passes
97
+ """
98
+
99
+ When I run `cucumber -f rerun --strict`
100
+ Then it should fail with exactly:
101
+ """
102
+ features/mixed.feature:3:6:9
103
+ """
104
+
105
+ Scenario: Exit code is not zero, scenario outlines
106
+ For details see https://github.com/cucumber/cucumber/issues/57
107
+ Given a file named "features/one_passing_one_failing.feature" with:
108
+ """
109
+ Feature: One passing example, one failing example
110
+
111
+ Scenario Outline:
112
+ Given this step <status>
113
+
114
+ Examples:
115
+ | status |
116
+ | passes |
117
+ | fails |
118
+
119
+ """
120
+ When I run `cucumber -f rerun`
121
+ Then it should fail with:
122
+ """
123
+ features/one_passing_one_failing.feature:9
124
+ """
125
+
126
+ Scenario: Exit code is not zero, failing background
127
+ Given a file named "features/failing_background.feature" with:
128
+ """
129
+ Feature: Failing background sample
130
+
131
+ Background:
132
+ Given this step fails
133
+
134
+ Scenario: failing background
135
+ Then this step passes
136
+
137
+ Scenario: another failing background
138
+ Then this step passes
139
+ """
140
+ When I run `cucumber -f rerun`
141
+ Then it should fail with:
142
+ """
143
+ features/failing_background.feature:6:9
144
+ """
145
+
146
+ Scenario: Exit code is not zero, failing background with scenario outline
147
+ Given a file named "features/failing_background_outline.feature" with:
148
+ """
149
+ Feature: Failing background sample with scenario outline
150
+
151
+ Background:
152
+ Given this step fails
153
+
154
+ Scenario Outline:
155
+ Then this step <status>
156
+
157
+ Examples:
158
+ | status |
159
+ | passes |
160
+ | passes |
161
+ """
162
+ When I run `cucumber features/failing_background_outline.feature -r features -f rerun`
163
+ Then it should fail with:
164
+ """
165
+ features/failing_background_outline.feature:11:12
166
+ """
167
+
168
+ Scenario: Exit code is not zero, scenario outlines with expand
169
+ For details see https://github.com/cucumber/cucumber/issues/503
170
+
171
+ Given a file named "features/one_passing_one_failing.feature" with:
172
+ """
173
+ Feature: One passing example, one failing example
174
+
175
+ Scenario Outline:
176
+ Given this step <status>
177
+
178
+ Examples:
179
+ | status |
180
+ | passes |
181
+ | fails |
182
+
183
+ """
184
+ When I run `cucumber --expand -f rerun`
185
+ Then it should fail with:
186
+ """
187
+ features/one_passing_one_failing.feature:9
188
+ """
@@ -0,0 +1,98 @@
1
+ Feature: Usage formatter
2
+
3
+ In order to see where step definitions are used
4
+ Developers should be able to see a list of step definitions and their use
5
+
6
+ Background:
7
+ Given a file named "features/f.feature" with:
8
+ """
9
+ Feature: F
10
+ Background: A
11
+ Given A
12
+ Scenario: B
13
+ Given B
14
+ Scenario Outline: CA
15
+ Given <x>
16
+ And B
17
+ Examples:
18
+ |x|
19
+ |C|
20
+ |A|
21
+ Scenario: AC
22
+ Given A
23
+ Given C
24
+ """
25
+ And a file named "features/step_definitions/steps.rb" with:
26
+ """
27
+ Given(/A/) { }
28
+ Given(/B/) { }
29
+ Given(/C/) { }
30
+ Given(/D/) { }
31
+ """
32
+
33
+ Scenario: Run with --format usage
34
+ When I run `cucumber -f usage --dry-run`
35
+ Then it should pass with exactly:
36
+ """
37
+ -----------
38
+
39
+ /A/ # features/step_definitions/steps.rb:1
40
+ Given A # features/f.feature:3
41
+ Given A # features/f.feature:12
42
+ Given A # features/f.feature:14
43
+ /B/ # features/step_definitions/steps.rb:2
44
+ Given B # features/f.feature:5
45
+ And B # features/f.feature:11
46
+ And B # features/f.feature:12
47
+ /C/ # features/step_definitions/steps.rb:3
48
+ Given C # features/f.feature:11
49
+ Given C # features/f.feature:15
50
+ /D/ # features/step_definitions/steps.rb:4
51
+ NOT MATCHED BY ANY STEPS
52
+
53
+ 4 scenarios (4 skipped)
54
+ 11 steps (11 skipped)
55
+
56
+ """
57
+
58
+ Scenario: Run with --expand --format usage
59
+ When I run `cucumber -x -f usage --dry-run`
60
+ Then it should pass with exactly:
61
+ """
62
+ -----------
63
+
64
+ /A/ # features/step_definitions/steps.rb:1
65
+ Given A # features/f.feature:3
66
+ Given A # features/f.feature:12
67
+ Given A # features/f.feature:14
68
+ /B/ # features/step_definitions/steps.rb:2
69
+ Given B # features/f.feature:5
70
+ And B # features/f.feature:11
71
+ And B # features/f.feature:12
72
+ /C/ # features/step_definitions/steps.rb:3
73
+ Given C # features/f.feature:11
74
+ Given C # features/f.feature:15
75
+ /D/ # features/step_definitions/steps.rb:4
76
+ NOT MATCHED BY ANY STEPS
77
+
78
+ 4 scenarios (4 skipped)
79
+ 11 steps (11 skipped)
80
+
81
+ """
82
+
83
+ Scenario: Run with --format stepdefs
84
+ When I run `cucumber -f stepdefs --dry-run`
85
+ Then it should pass with exactly:
86
+ """
87
+ -----------
88
+
89
+ /A/ # features/step_definitions/steps.rb:1
90
+ /B/ # features/step_definitions/steps.rb:2
91
+ /C/ # features/step_definitions/steps.rb:3
92
+ /D/ # features/step_definitions/steps.rb:4
93
+ NOT MATCHED BY ANY STEPS
94
+
95
+ 4 scenarios (4 skipped)
96
+ 11 steps (11 skipped)
97
+
98
+ """
@@ -0,0 +1,27 @@
1
+ Feature: Getting started
2
+
3
+ To get started, just open a command prompt in an empty directory and run
4
+ `cucumber`. You'll be prompted for what to do next.
5
+
6
+ @spawn
7
+ Scenario: Run Cucumber in an empty directory
8
+ Given a directory without standard Cucumber project directory structure
9
+ When I run `cucumber`
10
+ Then it should fail with:
11
+ """
12
+ No such file or directory - features. You can use `cucumber --init` to get started.
13
+ """
14
+
15
+ Scenario: Accidentally run Cucumber in a folder with Ruby files in it.
16
+ Given a directory without standard Cucumber project directory structure
17
+ And a file named "should_not_load.rb" with:
18
+ """
19
+ puts 'this will not be shown'
20
+ """
21
+ When I run `cucumber`
22
+ Then the exit status should be 2
23
+ And the output should not contain:
24
+ """
25
+ this will not be shown
26
+
27
+ """
@@ -0,0 +1,548 @@
1
+ Feature: Background
2
+
3
+ Often you find that several scenarios in the same feature start with
4
+ a common context.
5
+
6
+ Cucumber provides a mechanism for this, by providing a `Background` keyword
7
+ where you can specify steps that should be run before each scenario in the
8
+ feature. Typically these will be `Given` steps, but you can use any steps
9
+ that you need to.
10
+
11
+ **Hint:** if you find that some of the scenarios don't fit the background,
12
+ consider splitting them into a separate feature.
13
+
14
+ Background:
15
+ Given a file named "features/passing_background.feature" with:
16
+ """
17
+ Feature: Passing background sample
18
+
19
+ Background:
20
+ Given '10' cukes
21
+
22
+ Scenario: passing background
23
+ Then I should have '10' cukes
24
+
25
+ Scenario: another passing background
26
+ Then I should have '10' cukes
27
+ """
28
+ And a file named "features/scenario_outline_passing_background.feature" with:
29
+ """
30
+ Feature: Passing background with scenario outlines sample
31
+
32
+ Background:
33
+ Given '10' cukes
34
+
35
+ Scenario Outline: passing background
36
+ Then I should have '<count>' cukes
37
+ Examples:
38
+ |count|
39
+ | 10 |
40
+
41
+ Scenario Outline: another passing background
42
+ Then I should have '<count>' cukes
43
+ Examples:
44
+ |count|
45
+ | 10 |
46
+ """
47
+ And a file named "features/background_tagged_before_on_outline.feature" with:
48
+ """
49
+ @background_tagged_before_on_outline
50
+ Feature: Background tagged Before on Outline
51
+
52
+ Background:
53
+ Given this step passes
54
+
55
+ Scenario Outline: passing background
56
+ Then I should have '<count>' cukes
57
+
58
+ Examples:
59
+ | count |
60
+ | 888 |
61
+ """
62
+ And a file named "features/failing_background.feature" with:
63
+ """
64
+ Feature: Failing background sample
65
+
66
+ Background:
67
+ Given this step raises an error
68
+ And '10' cukes
69
+
70
+ Scenario: failing background
71
+ Then I should have '10' cukes
72
+
73
+ Scenario: another failing background
74
+ Then I should have '10' cukes
75
+ """
76
+ And a file named "features/scenario_outline_failing_background.feature" with:
77
+ """
78
+ Feature: Failing background with scenario outlines sample
79
+
80
+ Background:
81
+ Given this step raises an error
82
+
83
+ Scenario Outline: failing background
84
+ Then I should have '<count>' cukes
85
+ Examples:
86
+ |count|
87
+ | 10 |
88
+
89
+ Scenario Outline: another failing background
90
+ Then I should have '<count>' cukes
91
+ Examples:
92
+ |count|
93
+ | 10 |
94
+ """
95
+ And a file named "features/pending_background.feature" with:
96
+ """
97
+ Feature: Pending background sample
98
+
99
+ Background:
100
+ Given this step is pending
101
+
102
+ Scenario: pending background
103
+ Then I should have '10' cukes
104
+
105
+ Scenario: another pending background
106
+ Then I should have '10' cukes
107
+ """
108
+ And a file named "features/failing_background_after_success.feature" with:
109
+ """
110
+ Feature: Failing background after previously successful background sample
111
+
112
+ Background:
113
+ Given this step passes
114
+ And '10' global cukes
115
+
116
+ Scenario: passing background
117
+ Then I should have '10' global cukes
118
+
119
+ Scenario: failing background
120
+ Then I should have '10' global cukes
121
+ """
122
+ And a file named "features/failing_background_after_success_outline.feature" with:
123
+ """
124
+ Feature: Failing background after previously successful background sample
125
+
126
+ Background:
127
+ Given this step passes
128
+ And '10' global cukes
129
+
130
+ Scenario Outline: passing background
131
+ Then I should have '<count>' global cukes
132
+
133
+ Examples:
134
+ | count |
135
+ | 10 |
136
+
137
+ Scenario Outline: failing background
138
+ Then I should have '<count>' global cukes
139
+
140
+ Examples:
141
+ | count |
142
+ | 10 |
143
+
144
+ """
145
+ And a file named "features/multiline_args_background.feature" with:
146
+ """
147
+ Feature: Passing background with multiline args
148
+
149
+ Background:
150
+ Given table
151
+ |a|b|
152
+ |c|d|
153
+ And multiline string
154
+ \"\"\"
155
+ I'm a cucumber and I'm okay.
156
+ I sleep all night and I test all day
157
+ \"\"\"
158
+
159
+ Scenario: passing background
160
+ Then the table should be
161
+ |a|b|
162
+ |c|d|
163
+ Then the multiline string should be
164
+ \"\"\"
165
+ I'm a cucumber and I'm okay.
166
+ I sleep all night and I test all day
167
+ \"\"\"
168
+
169
+ Scenario: another passing background
170
+ Then the table should be
171
+ |a|b|
172
+ |c|d|
173
+ Then the multiline string should be
174
+ \"\"\"
175
+ I'm a cucumber and I'm okay.
176
+ I sleep all night and I test all day
177
+ \"\"\"
178
+ """
179
+ And the standard step definitions
180
+ And a file named "features/step_definitions/cuke_steps.rb" with:
181
+ """
182
+ Given /^'(.+)' cukes$/ do |cukes| x=1
183
+ raise "We already have #{@cukes} cukes!" if @cukes
184
+ @cukes = cukes
185
+ end
186
+
187
+ Given /^'(.+)' global cukes$/ do |cukes| x=1
188
+ $scenario_runs ||= 0
189
+ raise 'FAIL' if $scenario_runs >= 1
190
+ $cukes = cukes
191
+ $scenario_runs += 1
192
+ end
193
+
194
+ Then /^I should have '(.+)' global cukes$/ do |cukes| x=1
195
+ expect($cukes).to eq cukes
196
+ end
197
+
198
+ Then /^I should have '(.+)' cukes$/ do |cukes| x=1
199
+ expect(@cukes).to eq cukes
200
+ end
201
+
202
+ Before('@background_tagged_before_on_outline') do
203
+ @cukes = '888'
204
+ end
205
+
206
+ After('@background_tagged_before_on_outline') do
207
+ expect(@cukes).to eq '888'
208
+ end
209
+ """
210
+
211
+ Scenario: run a specific scenario with a background
212
+ When I run `cucumber -q features/passing_background.feature:9`
213
+ Then it should pass with exactly:
214
+ """
215
+ Feature: Passing background sample
216
+
217
+ Background:
218
+ Given '10' cukes
219
+
220
+ Scenario: another passing background
221
+ Then I should have '10' cukes
222
+
223
+ 1 scenario (1 passed)
224
+ 2 steps (2 passed)
225
+
226
+ """
227
+
228
+ Scenario: run a feature with a background that passes
229
+ When I run `cucumber -q features/passing_background.feature`
230
+ Then it should pass with exactly:
231
+ """
232
+ Feature: Passing background sample
233
+
234
+ Background:
235
+ Given '10' cukes
236
+
237
+ Scenario: passing background
238
+ Then I should have '10' cukes
239
+
240
+ Scenario: another passing background
241
+ Then I should have '10' cukes
242
+
243
+ 2 scenarios (2 passed)
244
+ 4 steps (4 passed)
245
+
246
+ """
247
+
248
+ Scenario: run a feature with scenario outlines that has a background that passes
249
+ When I run `cucumber -q features/scenario_outline_passing_background.feature`
250
+ Then it should pass with exactly:
251
+ """
252
+ Feature: Passing background with scenario outlines sample
253
+
254
+ Background:
255
+ Given '10' cukes
256
+
257
+ Scenario Outline: passing background
258
+ Then I should have '<count>' cukes
259
+
260
+ Examples:
261
+ | count |
262
+ | 10 |
263
+
264
+ Scenario Outline: another passing background
265
+ Then I should have '<count>' cukes
266
+
267
+ Examples:
268
+ | count |
269
+ | 10 |
270
+
271
+ 2 scenarios (2 passed)
272
+ 4 steps (4 passed)
273
+
274
+ """
275
+
276
+ Scenario: run a feature with scenario outlines that has a background that passes
277
+ When I run `cucumber -q features/background_tagged_before_on_outline.feature`
278
+ Then it should pass with exactly:
279
+ """
280
+ @background_tagged_before_on_outline
281
+ Feature: Background tagged Before on Outline
282
+
283
+ Background:
284
+ Given this step passes
285
+
286
+ Scenario Outline: passing background
287
+ Then I should have '<count>' cukes
288
+
289
+ Examples:
290
+ | count |
291
+ | 888 |
292
+
293
+ 1 scenario (1 passed)
294
+ 2 steps (2 passed)
295
+
296
+ """
297
+
298
+ @spawn
299
+ Scenario: run a feature with a background that fails
300
+ When I run `cucumber -q features/failing_background.feature`
301
+ Then it should fail with exactly:
302
+ """
303
+ Feature: Failing background sample
304
+
305
+ Background:
306
+ Given this step raises an error
307
+ error (RuntimeError)
308
+ ./features/step_definitions/steps.rb:2:in `/^this step raises an error$/'
309
+ features/failing_background.feature:4:in `Given this step raises an error'
310
+ And '10' cukes
311
+
312
+ Scenario: failing background
313
+ Then I should have '10' cukes
314
+
315
+ Scenario: another failing background
316
+ Then I should have '10' cukes
317
+
318
+ Failing Scenarios:
319
+ cucumber features/failing_background.feature:7
320
+ cucumber features/failing_background.feature:10
321
+
322
+ 2 scenarios (2 failed)
323
+ 6 steps (2 failed, 4 skipped)
324
+
325
+ """
326
+
327
+ @spawn
328
+ Scenario: run a feature with scenario outlines that has a background that fails
329
+ When I run `cucumber -q features/scenario_outline_failing_background.feature`
330
+ Then it should fail with exactly:
331
+ """
332
+ Feature: Failing background with scenario outlines sample
333
+
334
+ Background:
335
+ Given this step raises an error
336
+ error (RuntimeError)
337
+ ./features/step_definitions/steps.rb:2:in `/^this step raises an error$/'
338
+ features/scenario_outline_failing_background.feature:4:in `Given this step raises an error'
339
+
340
+ Scenario Outline: failing background
341
+ Then I should have '<count>' cukes
342
+
343
+ Examples:
344
+ | count |
345
+ | 10 |
346
+
347
+ Scenario Outline: another failing background
348
+ Then I should have '<count>' cukes
349
+
350
+ Examples:
351
+ | count |
352
+ | 10 |
353
+
354
+ Failing Scenarios:
355
+ cucumber features/scenario_outline_failing_background.feature:10
356
+ cucumber features/scenario_outline_failing_background.feature:16
357
+
358
+ 2 scenarios (2 failed)
359
+ 4 steps (2 failed, 2 skipped)
360
+
361
+ """
362
+
363
+ Scenario: run a feature with a background that is pending
364
+ When I run `cucumber -q features/pending_background.feature`
365
+ Then it should pass with exactly:
366
+ """
367
+ Feature: Pending background sample
368
+
369
+ Background:
370
+ Given this step is pending
371
+ TODO (Cucumber::Pending)
372
+ ./features/step_definitions/steps.rb:3:in `/^this step is pending$/'
373
+ features/pending_background.feature:4:in `Given this step is pending'
374
+
375
+ Scenario: pending background
376
+ Then I should have '10' cukes
377
+
378
+ Scenario: another pending background
379
+ Then I should have '10' cukes
380
+
381
+ 2 scenarios (2 pending)
382
+ 4 steps (2 skipped, 2 pending)
383
+
384
+ """
385
+
386
+ @spawn
387
+ Scenario: background passes with first scenario but fails with second
388
+ When I run `cucumber -q features/failing_background_after_success.feature`
389
+ Then it should fail with exactly:
390
+ """
391
+ Feature: Failing background after previously successful background sample
392
+
393
+ Background:
394
+ Given this step passes
395
+ And '10' global cukes
396
+
397
+ Scenario: passing background
398
+ Then I should have '10' global cukes
399
+
400
+ Scenario: failing background
401
+ And '10' global cukes
402
+ FAIL (RuntimeError)
403
+ ./features/step_definitions/cuke_steps.rb:8:in `/^'(.+)' global cukes$/'
404
+ features/failing_background_after_success.feature:5:in `And '10' global cukes'
405
+ Then I should have '10' global cukes
406
+
407
+ Failing Scenarios:
408
+ cucumber features/failing_background_after_success.feature:10
409
+
410
+ 2 scenarios (1 failed, 1 passed)
411
+ 6 steps (1 failed, 1 skipped, 4 passed)
412
+
413
+ """
414
+
415
+ @spawn
416
+ Scenario: background passes with first outline scenario but fails with second
417
+ When I run `cucumber -q features/failing_background_after_success_outline.feature`
418
+ Then it should fail with exactly:
419
+ """
420
+ Feature: Failing background after previously successful background sample
421
+
422
+ Background:
423
+ Given this step passes
424
+ And '10' global cukes
425
+
426
+ Scenario Outline: passing background
427
+ Then I should have '<count>' global cukes
428
+
429
+ Examples:
430
+ | count |
431
+ | 10 |
432
+
433
+ Scenario Outline: failing background
434
+ Then I should have '<count>' global cukes
435
+
436
+ Examples:
437
+ | count |
438
+ | 10 |
439
+ FAIL (RuntimeError)
440
+ ./features/step_definitions/cuke_steps.rb:8:in `/^'(.+)' global cukes$/'
441
+ features/failing_background_after_success_outline.feature:5:in `And '10' global cukes'
442
+
443
+ Failing Scenarios:
444
+ cucumber features/failing_background_after_success_outline.feature:19
445
+
446
+ 2 scenarios (1 failed, 1 passed)
447
+ 6 steps (1 failed, 1 skipped, 4 passed)
448
+
449
+ """
450
+
451
+ @spawn
452
+ Scenario: background passes with first outline scenario but fails with second (--expand)
453
+ When I run `cucumber -x -q features/failing_background_after_success_outline.feature`
454
+ Then it should fail with exactly:
455
+ """
456
+ Feature: Failing background after previously successful background sample
457
+
458
+ Background:
459
+ Given this step passes
460
+ And '10' global cukes
461
+
462
+ Scenario Outline: passing background
463
+ Then I should have '<count>' global cukes
464
+
465
+ Examples:
466
+
467
+ Scenario: | 10 |
468
+ Then I should have '10' global cukes
469
+
470
+ Scenario Outline: failing background
471
+ Then I should have '<count>' global cukes
472
+
473
+ Examples:
474
+
475
+ Scenario: | 10 |
476
+ And '10' global cukes
477
+ FAIL (RuntimeError)
478
+ ./features/step_definitions/cuke_steps.rb:8:in `/^'(.+)' global cukes$/'
479
+ features/failing_background_after_success_outline.feature:5:in `And '10' global cukes'
480
+ Then I should have '10' global cukes
481
+
482
+ Failing Scenarios:
483
+ cucumber features/failing_background_after_success_outline.feature:19
484
+
485
+ 2 scenarios (1 failed, 1 passed)
486
+ 6 steps (1 failed, 1 skipped, 4 passed)
487
+
488
+ """
489
+
490
+ Scenario: background with multline args
491
+ Given a file named "features/step_definitions/steps.rb" with:
492
+ """
493
+ Given /^table$/ do |table| x=1
494
+ @table = table
495
+ end
496
+
497
+ Given /^multiline string$/ do |string| x=1
498
+ @multiline = string
499
+ end
500
+
501
+ Then /^the table should be$/ do |table| x=1
502
+ expect(@table.raw).to eq table.raw
503
+ end
504
+
505
+ Then /^the multiline string should be$/ do |string| x=1
506
+ expect(@multiline).to eq string
507
+ end
508
+ """
509
+ When I run `cucumber -q features/multiline_args_background.feature`
510
+ Then it should pass with exactly:
511
+ """
512
+ Feature: Passing background with multiline args
513
+
514
+ Background:
515
+ Given table
516
+ | a | b |
517
+ | c | d |
518
+ And multiline string
519
+ \"\"\"
520
+ I'm a cucumber and I'm okay.
521
+ I sleep all night and I test all day
522
+ \"\"\"
523
+
524
+ Scenario: passing background
525
+ Then the table should be
526
+ | a | b |
527
+ | c | d |
528
+ Then the multiline string should be
529
+ \"\"\"
530
+ I'm a cucumber and I'm okay.
531
+ I sleep all night and I test all day
532
+ \"\"\"
533
+
534
+ Scenario: another passing background
535
+ Then the table should be
536
+ | a | b |
537
+ | c | d |
538
+ Then the multiline string should be
539
+ \"\"\"
540
+ I'm a cucumber and I'm okay.
541
+ I sleep all night and I test all day
542
+ \"\"\"
543
+
544
+ 2 scenarios (2 passed)
545
+ 8 steps (8 passed)
546
+
547
+ """
548
+