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,58 @@
1
+ Feature: Listen for events
2
+
3
+ Scenario: Step Matched Event
4
+ Given a file named "features/test.feature" with:
5
+ """
6
+ Feature:
7
+ Scenario:
8
+ Given matching
9
+ """
10
+ And a file named "features/step_definitions/steps.rb" with:
11
+ """
12
+ Given(/matching/) do
13
+ end
14
+ """
15
+ And a file named "features/support/my_listener.rb" with:
16
+ """
17
+ AfterConfiguration do |config|
18
+ io = config.out_stream
19
+ config.on_event Cucumber::Events::StepMatch do |event|
20
+ io.puts "Success!"
21
+ io.puts "Event type: #{event.class}"
22
+ io.puts "Step name: #{event.test_step.name}"
23
+ io.puts "Source location: #{event.step_match.location}"
24
+ end
25
+ end
26
+ """
27
+ When I run `cucumber`
28
+ Then it should pass with:
29
+ """
30
+ Success!
31
+ Event type: Cucumber::Events::StepMatch
32
+ Step name: matching
33
+ Source location: features/step_definitions/steps.rb:1
34
+ """
35
+
36
+ Scenario: After Test Step event
37
+ Given a file named "features/test.feature" with:
38
+ """
39
+ Feature:
40
+ Scenario:
41
+ Given passing
42
+ """
43
+ And the standard step definitions
44
+ And a file named "features/support/my_listener.rb" with:
45
+ """
46
+ AfterConfiguration do |config|
47
+ io = config.out_stream
48
+ config.on_event Cucumber::Events::AfterTestStep do |event|
49
+ io.puts "YO"
50
+ end
51
+ end
52
+ """
53
+ When I run `cucumber`
54
+ Then it should pass with:
55
+ """
56
+ YO
57
+ """
58
+
@@ -0,0 +1,26 @@
1
+ @spawn
2
+ Feature: Run Cli::Main with existing Runtime
3
+
4
+ This is the API that Spork uses. It creates an existing runtime.
5
+ When the process forks, Spork them passes the runtime to Cli::Main to
6
+ run it.
7
+
8
+ Scenario: Run a single feature
9
+ Given the standard step definitions
10
+ Given a file named "features/success.feature" with:
11
+ """
12
+ Feature:
13
+ Scenario:
14
+ Given this step passes
15
+ """
16
+ When I run the following Ruby code:
17
+ """
18
+ require 'cucumber'
19
+ runtime = Cucumber::Runtime.new
20
+ Cucumber::Cli::Main.new([]).execute!(runtime)
21
+ """
22
+ Then it should pass
23
+ And the output should contain:
24
+ """
25
+ Given this step passes
26
+ """
@@ -0,0 +1,36 @@
1
+ Feature: Backtraces
2
+
3
+ In order to discover errors quickly
4
+ As a cuker
5
+ I want to see backtraces for failures
6
+
7
+ Background:
8
+ Given a file named "features/failing_hard.feature" with:
9
+ """
10
+ Feature: Sample
11
+ Scenario: Example
12
+ Given failing
13
+ """
14
+
15
+ @jruby
16
+ Scenario: Backtraces enabled
17
+ Given a file named "features/step_definitions/steps.rb" with:
18
+ """
19
+ require 'java'
20
+ java_import 'java.util.Collections'
21
+
22
+ Given /^failing$/ do
23
+ Collections.empty_list.add 1
24
+ end
25
+ """
26
+ When I run `cucumber features/failing_hard.feature`
27
+ Then it should fail with:
28
+ """
29
+ Feature: Sample
30
+
31
+ Scenario: Example # features/failing_hard.feature:2
32
+ Given failing # features/step_definitions/steps.rb:4
33
+ (Java::JavaLang::UnsupportedOperationException)
34
+ java.util.AbstractList.add(java/util/AbstractList.java:
35
+ """
36
+
@@ -0,0 +1,70 @@
1
+ Feature: Dry Run
2
+
3
+ Dry run gives you a way to quickly scan your features without actually running them.
4
+
5
+ - Invokes formatters without executing the steps.
6
+ - This also omits the loading of your support/env.rb file if it exists.
7
+
8
+ Scenario: With a failing step
9
+ Given a file named "features/test.feature" with:
10
+ """
11
+ Feature: test
12
+ Scenario:
13
+ Given this step fails
14
+ """
15
+ And the standard step definitions
16
+ When I run `cucumber --dry-run`
17
+ Then it should pass with exactly:
18
+ """
19
+ Feature: test
20
+
21
+ Scenario: # features/test.feature:2
22
+ Given this step fails # features/step_definitions/steps.rb:4
23
+
24
+ 1 scenario (1 skipped)
25
+ 1 step (1 skipped)
26
+
27
+ """
28
+
29
+ Scenario: In strict mode
30
+ Given a file named "features/test.feature" with:
31
+ """
32
+ Feature: test
33
+ Scenario:
34
+ Given this step fails
35
+ """
36
+ And the standard step definitions
37
+ When I run `cucumber --dry-run --strict`
38
+ Then it should pass with exactly:
39
+ """
40
+ Feature: test
41
+
42
+ Scenario: # features/test.feature:2
43
+ Given this step fails # features/step_definitions/steps.rb:4
44
+
45
+ 1 scenario (1 skipped)
46
+ 1 step (1 skipped)
47
+
48
+ """
49
+
50
+ Scenario: In strict mode with an undefined step
51
+ Given a file named "features/test.feature" with:
52
+ """
53
+ Feature: test
54
+ Scenario:
55
+ Given this step is undefined
56
+ """
57
+ When I run `cucumber --dry-run --strict`
58
+ Then it should fail with:
59
+ """
60
+ Feature: test
61
+
62
+ Scenario: # features/test.feature:2
63
+ Given this step is undefined # features/test.feature:3
64
+ Undefined step: "this step is undefined" (Cucumber::Undefined)
65
+ features/test.feature:3:in `Given this step is undefined'
66
+
67
+ 1 scenario (1 undefined)
68
+ 1 step (1 undefined)
69
+
70
+ """
@@ -0,0 +1,18 @@
1
+ Feature: Excluding ruby and feature files from runs
2
+
3
+ Developers are able to easily exclude files from cucumber runs
4
+ This is a nice feature to have in conjunction with profiles, so you can exclude
5
+ certain environment files from certain runs.
6
+
7
+ Scenario: exclude ruby files
8
+ Given an empty file named "features/support/dont_require_me.rb"
9
+ And an empty file named "features/step_definitions/fooz.rb"
10
+ And an empty file named "features/step_definitions/foof.rb"
11
+ And an empty file named "features/step_definitions/foot.rb"
12
+ And an empty file named "features/support/require_me.rb"
13
+ When I run `cucumber features -q --verbose --exclude features/support/dont --exclude foo[zf]`
14
+ Then "features/support/require_me.rb" should be required
15
+ And "features/step_definitions/foot.rb" should be required
16
+ And "features/support/dont_require_me.rb" should not be required
17
+ And "features/step_definitions/foof.rb" should not be required
18
+ And "features/step_definitions/fooz.rb" should not be required
@@ -0,0 +1,117 @@
1
+ Feature: Tag logic
2
+ In order to conveniently run subsets of features
3
+ As a Cuker
4
+ I want to select features using logical AND/OR of tags
5
+
6
+ Background:
7
+ Given a file named "features/test.feature" with:
8
+ """
9
+ @feature
10
+ Feature: Sample
11
+
12
+ @one @three
13
+ Scenario: Example
14
+ Given passing
15
+
16
+ @one
17
+ Scenario: Another Example
18
+ Given passing
19
+
20
+ @three
21
+ Scenario: Yet another Example
22
+ Given passing
23
+
24
+ @ignore
25
+ Scenario: And yet another Example
26
+ """
27
+
28
+ Scenario: ANDing tags
29
+ When I run `cucumber -q -t @one -t @three features/test.feature`
30
+ Then it should pass with:
31
+ """
32
+ @feature
33
+ Feature: Sample
34
+
35
+ @one @three
36
+ Scenario: Example
37
+ Given passing
38
+
39
+ 1 scenario (1 undefined)
40
+ 1 step (1 undefined)
41
+
42
+ """
43
+
44
+ Scenario: ORing tags
45
+ When I run `cucumber -q -t @one,@three features/test.feature`
46
+ Then it should pass with:
47
+ """
48
+ @feature
49
+ Feature: Sample
50
+
51
+ @one @three
52
+ Scenario: Example
53
+ Given passing
54
+
55
+ @one
56
+ Scenario: Another Example
57
+ Given passing
58
+
59
+ @three
60
+ Scenario: Yet another Example
61
+ Given passing
62
+
63
+ 3 scenarios (3 undefined)
64
+ 3 steps (3 undefined)
65
+
66
+ """
67
+
68
+ Scenario: Negative tags
69
+ When I run `cucumber -q -t ~@three features/test.feature`
70
+ Then it should pass with:
71
+ """
72
+ @feature
73
+ Feature: Sample
74
+
75
+ @one
76
+ Scenario: Another Example
77
+ Given passing
78
+
79
+ @ignore
80
+ Scenario: And yet another Example
81
+
82
+ 2 scenarios (1 undefined, 1 passed)
83
+ 1 step (1 undefined)
84
+ """
85
+
86
+ Scenario: Run with limited tag count, blowing it on scenario
87
+ When I run `cucumber -q --no-source --tags @one:1 features/test.feature`
88
+ Then it fails before running features with:
89
+ """
90
+ @one occurred 2 times, but the limit was set to 1
91
+ features/test.feature:5
92
+ features/test.feature:9
93
+ """
94
+
95
+ Scenario: Run with limited tag count, blowing it via feature inheritance
96
+ When I run `cucumber -q --no-source --tags @feature:1 features/test.feature`
97
+ Then it fails before running features with:
98
+ """
99
+ @feature occurred 4 times, but the limit was set to 1
100
+ features/test.feature:5
101
+ features/test.feature:9
102
+ features/test.feature:13
103
+ features/test.feature:17
104
+ """
105
+
106
+ Scenario: Run with limited tag count using negative tag, blowing it via a tag that is not run
107
+ When I run `cucumber -q --no-source --tags ~@one:1 features/test.feature`
108
+ Then it fails before running features with:
109
+ """
110
+ @one occurred 2 times, but the limit was set to 1
111
+ """
112
+
113
+ Scenario: Limiting with tags which do not exist in the features
114
+ Originally added to check [Lighthouse bug #464](https://rspec.lighthouseapp.com/projects/16211/tickets/464).
115
+
116
+ When I run `cucumber -q -t @i_dont_exist features/test.feature`
117
+ Then it should pass
@@ -0,0 +1,46 @@
1
+ @spawn
2
+ Feature: Fail fast
3
+
4
+ The --fail-fast flag causes Cucumber to exit immediately after the first
5
+ scenario fails.
6
+
7
+ Scenario: When a scenario fails
8
+ Given a file named "features/bad.feature" with:
9
+ """
10
+ Feature: Bad
11
+ Scenario: Failing
12
+ Given this step fails
13
+ """
14
+ And a file named "features/good.feature" with:
15
+ """
16
+ Feature: Good
17
+ Scenario: Passing
18
+ Given this step passes
19
+ """
20
+ And the standard step definitions
21
+ When I run `cucumber --fail-fast`
22
+ Then it should fail
23
+ And the output should contain:
24
+ """
25
+ 1 scenario (1 failed)
26
+ """
27
+
28
+ Scenario: When all the scenarios pass
29
+ Given a file named "features/first.feature" with:
30
+ """
31
+ Feature: first feature
32
+ Scenario: foo first
33
+ Given this step passes
34
+ Scenario: bar first
35
+ Given this step passes
36
+ """
37
+ And a file named "features/second.feature" with:
38
+ """
39
+ Feature: second
40
+ Scenario: foo second
41
+ Given this step passes
42
+ Scenario: bar second
43
+ Given this step passes
44
+ """
45
+ When I run `cucumber --fail-fast`
46
+ Then it should pass
@@ -0,0 +1,28 @@
1
+ Feature: Loading the steps users expect
2
+ As a User
3
+ In order to run features in subdirectories without having to pass extra options
4
+ I want cucumber to load all step files
5
+
6
+ Scenario:
7
+ Given a file named "features/nesting/test.feature" with:
8
+ """
9
+ Feature: Feature in Subdirectory
10
+ Scenario: A step not in the subdirectory
11
+ Given not found in subdirectory
12
+ """
13
+ And a file named "features/step_definitions/steps_no_in_subdirectory.rb" with:
14
+ """
15
+ Given(/^not found in subdirectory$/) { }
16
+ """
17
+ When I run `cucumber -q features/nesting/test.feature`
18
+ Then it should pass with:
19
+ """
20
+ Feature: Feature in Subdirectory
21
+
22
+ Scenario: A step not in the subdirectory
23
+ Given not found in subdirectory
24
+
25
+ 1 scenario (1 passed)
26
+ 1 step (1 passed)
27
+ """
28
+
@@ -0,0 +1,140 @@
1
+ Feature: Randomize
2
+
3
+ Use the `--order random` switch to run scenarios in random order.
4
+
5
+ This is especially helpful for detecting situations where you have state
6
+ leaking between scenarios, which can cause flickering or fragile tests.
7
+
8
+ If you do find a random run that exposes dependencies between your tests,
9
+ you can reproduce that run by using the seed that's printed at the end of
10
+ the test run.
11
+
12
+ For a given seed, the order of scenarios is constant, i.e. if step A runs
13
+ before step B, it will always run before step B even if other steps are
14
+ skipped.
15
+
16
+ Background:
17
+ Given a file named "features/bad_practice_part_1.feature" with:
18
+ """
19
+ Feature: Bad practice, part 1
20
+
21
+ Scenario: Set state
22
+ Given I set some state
23
+
24
+ Scenario: Depend on state from a preceding scenario
25
+ When I depend on the state
26
+ """
27
+ And a file named "features/bad_practice_part_2.feature" with:
28
+ """
29
+ Feature: Bad practice, part 2
30
+
31
+ Scenario: Depend on state from a preceding feature
32
+ When I depend on the state
33
+ """
34
+ And a file named "features/unrelated.feature" with:
35
+ """
36
+ Feature: Unrelated
37
+
38
+ @skipme
39
+ Scenario: Do something unrelated
40
+ When I do something
41
+ """
42
+ And a file named "features/step_definitions/steps.rb" with:
43
+ """
44
+ Given(/^I set some state$/) do
45
+ $global_state = "set"
46
+ end
47
+
48
+ Given(/^I depend on the state$/) do
49
+ raise "I expect the state to be set!" unless $global_state == "set"
50
+ end
51
+
52
+ Given(/^I do something$/) do
53
+ end
54
+ """
55
+
56
+ Scenario: Run scenarios in order
57
+ When I run `cucumber`
58
+ Then it should pass
59
+
60
+ @spawn
61
+ Scenario: Run scenarios randomized
62
+ When I run `cucumber --order random:41544 -q`
63
+ Then it should fail
64
+ And the stdout should contain exactly:
65
+ """
66
+ Feature: Bad practice, part 1
67
+
68
+ Scenario: Depend on state from a preceding scenario
69
+ When I depend on the state
70
+ I expect the state to be set! (RuntimeError)
71
+ ./features/step_definitions/steps.rb:6:in `/^I depend on the state$/'
72
+ features/bad_practice_part_1.feature:7:in `When I depend on the state'
73
+
74
+ Feature: Unrelated
75
+
76
+ @skipme
77
+ Scenario: Do something unrelated
78
+ When I do something
79
+
80
+ Feature: Bad practice, part 2
81
+
82
+ Scenario: Depend on state from a preceding feature
83
+ When I depend on the state
84
+ I expect the state to be set! (RuntimeError)
85
+ ./features/step_definitions/steps.rb:6:in `/^I depend on the state$/'
86
+ features/bad_practice_part_2.feature:4:in `When I depend on the state'
87
+
88
+ Feature: Bad practice, part 1
89
+
90
+ Scenario: Set state
91
+ Given I set some state
92
+
93
+ Failing Scenarios:
94
+ cucumber features/bad_practice_part_1.feature:6
95
+ cucumber features/bad_practice_part_2.feature:3
96
+
97
+ 4 scenarios (2 failed, 2 passed)
98
+ 4 steps (2 failed, 2 passed)
99
+
100
+ Randomized with seed 41544
101
+
102
+ """
103
+
104
+ @spawn
105
+ Scenario: Run scenarios randomized with some skipped
106
+ When I run `cucumber --tags ~@skipme --order random:41544 -q`
107
+ Then it should fail
108
+ And the stdout should contain exactly:
109
+ """
110
+ Feature: Bad practice, part 1
111
+
112
+ Scenario: Depend on state from a preceding scenario
113
+ When I depend on the state
114
+ I expect the state to be set! (RuntimeError)
115
+ ./features/step_definitions/steps.rb:6:in `/^I depend on the state$/'
116
+ features/bad_practice_part_1.feature:7:in `When I depend on the state'
117
+
118
+ Feature: Bad practice, part 2
119
+
120
+ Scenario: Depend on state from a preceding feature
121
+ When I depend on the state
122
+ I expect the state to be set! (RuntimeError)
123
+ ./features/step_definitions/steps.rb:6:in `/^I depend on the state$/'
124
+ features/bad_practice_part_2.feature:4:in `When I depend on the state'
125
+
126
+ Feature: Bad practice, part 1
127
+
128
+ Scenario: Set state
129
+ Given I set some state
130
+
131
+ Failing Scenarios:
132
+ cucumber features/bad_practice_part_1.feature:6
133
+ cucumber features/bad_practice_part_2.feature:3
134
+
135
+ 3 scenarios (2 failed, 1 passed)
136
+ 3 steps (2 failed, 1 passed)
137
+
138
+ Randomized with seed 41544
139
+
140
+ """