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,27 @@
1
+ Feature: Requiring extra step files
2
+
3
+ Cucumber allows you to require extra files using the `-r` option.
4
+
5
+ Scenario:
6
+ Given a file named "features/test.feature" with:
7
+ """
8
+ Feature: Sample
9
+ Scenario: Sample
10
+ Given found in extra file
11
+ """
12
+ And a file named "tmp/extras.rb" with:
13
+ """
14
+ Given(/^found in extra file$/) { }
15
+ """
16
+ When I run `cucumber -q -r tmp/extras.rb features/test.feature`
17
+ Then it should pass with:
18
+ """
19
+ Feature: Sample
20
+
21
+ Scenario: Sample
22
+ Given found in extra file
23
+
24
+ 1 scenario (1 passed)
25
+ 1 step (1 passed)
26
+ """
27
+
@@ -0,0 +1,32 @@
1
+ @wip
2
+ Feature: Retry failing tests
3
+
4
+ Retry gives you a way to get through flaky tests that usually pass after a few runs.
5
+ This gives a development team a way forward other than disabling a valuable test.
6
+
7
+ - Specify max retry count in option
8
+ - Output information to the screen
9
+ - Output retry information in test report
10
+
11
+ Questions:
12
+ use a tag for flaky tests? Global option to retry any test that fails?
13
+
14
+ Background:
15
+ Given a scenario "Flakey" that fails once, then passes
16
+ And a scenario "Shakey" that fails twice, then passes
17
+ And a scenario "Solid" that passes
18
+ And a scenario "No Dice" that fails
19
+
20
+ Scenario:
21
+ When I run `cucumber -q --retry 1`
22
+ Then it should fail with:
23
+ """
24
+ 4 scenarios (2 passed, 2 failed)
25
+ """
26
+
27
+ Scenario:
28
+ When I run `cucumber -q --retry 2`
29
+ Then it should pass with:
30
+ """
31
+ 4 scenarios (3 passed, 1 failed)
32
+ """
@@ -0,0 +1,104 @@
1
+ Feature: Run feature elements matching a name with --name/-n
2
+
3
+ The `--name NAME` option runs only scenarios which match a certain
4
+ name. The NAME can be a substring of the names of Features, Scenarios,
5
+ Scenario Outlines or Example blocks.
6
+
7
+ Background:
8
+ Given a file named "features/first.feature" with:
9
+ """
10
+ Feature: first feature
11
+ Scenario: foo first
12
+ Given missing
13
+ Scenario: bar first
14
+ Given missing
15
+ """
16
+ Given a file named "features/second.feature" with:
17
+ """
18
+ Feature: second
19
+ Scenario: foo second
20
+ Given missing
21
+ Scenario: bar second
22
+ Given missing
23
+ """
24
+ Given a file named "features/outline.feature" with:
25
+ """
26
+ Feature: outline
27
+ Scenario Outline: baz outline
28
+ Given outline step <name>
29
+
30
+ Examples: quux example
31
+ | name |
32
+ | a |
33
+ | b |
34
+ """
35
+
36
+ Scenario: Matching Feature names
37
+ When I run `cucumber -q --name feature`
38
+ Then it should pass with:
39
+ """
40
+ Feature: first feature
41
+
42
+ Scenario: foo first
43
+ Given missing
44
+
45
+ Scenario: bar first
46
+ Given missing
47
+
48
+ 2 scenarios (2 undefined)
49
+ 2 steps (2 undefined)
50
+ """
51
+
52
+ Scenario: Matching Scenario names
53
+ When I run `cucumber -q --name foo`
54
+ Then it should pass with:
55
+ """
56
+ Feature: first feature
57
+
58
+ Scenario: foo first
59
+ Given missing
60
+
61
+ Feature: second
62
+
63
+ Scenario: foo second
64
+ Given missing
65
+
66
+ 2 scenarios (2 undefined)
67
+ 2 steps (2 undefined)
68
+ """
69
+
70
+ Scenario: Matching Scenario Outline names
71
+ When I run `cucumber -q --name baz`
72
+ Then it should pass with:
73
+ """
74
+ Feature: outline
75
+
76
+ Scenario Outline: baz outline
77
+ Given outline step <name>
78
+
79
+ Examples: quux example
80
+ | name |
81
+ | a |
82
+ | b |
83
+
84
+ 2 scenarios (2 undefined)
85
+ 2 steps (2 undefined)
86
+ """
87
+
88
+ Scenario: Matching Example block names
89
+ When I run `cucumber -q --name quux`
90
+ Then it should pass with:
91
+ """
92
+ Feature: outline
93
+
94
+ Scenario Outline: baz outline
95
+ Given outline step <name>
96
+
97
+ Examples: quux example
98
+ | name |
99
+ | a |
100
+ | b |
101
+
102
+ 2 scenarios (2 undefined)
103
+ 2 steps (2 undefined)
104
+ """
@@ -0,0 +1,77 @@
1
+ Feature: Run specific scenarios
2
+
3
+ You can choose to run a specific scenario using the file:line format,
4
+ or you can pass in a file with a list of scenarios using @-notation.
5
+
6
+ The line number can fall anywhere within the body of a scenario, including
7
+ steps, tags, comments, description, data tables or doc strings.
8
+
9
+ For scenario outlines, if the line hits one example row, just that one
10
+ will be run. Otherwise all examples in the table or outline will be run.
11
+
12
+ Background:
13
+ Given the standard step definitions
14
+
15
+ Scenario: Two scenarios, run just one of them
16
+ Given a file named "features/test.feature" with:
17
+ """
18
+ Feature:
19
+
20
+ Scenario: Miss
21
+ Given this step is undefined
22
+
23
+ Scenario: Hit
24
+ Given this step passes
25
+ """
26
+ When I run `cucumber features/test.feature:7 --format pretty --quiet`
27
+ Then it should pass with exactly:
28
+ """
29
+ Feature:
30
+
31
+ Scenario: Hit
32
+ Given this step passes
33
+
34
+ 1 scenario (1 passed)
35
+ 1 step (1 passed)
36
+
37
+ """
38
+
39
+ Scenario: Use @-notation to specify a file containing feature file list
40
+ Given a file named "features/test.feature" with:
41
+ """
42
+ Feature: Sample
43
+ Scenario: Passing
44
+ Given this step passes
45
+ """
46
+ And a file named "list-of-features.txt" with:
47
+ """
48
+ features/test.feature:2
49
+ """
50
+ When I run `cucumber -q @list-of-features.txt`
51
+ Then it should pass with:
52
+ """
53
+ Feature: Sample
54
+
55
+ Scenario: Passing
56
+ Given this step passes
57
+
58
+ 1 scenario (1 passed)
59
+ 1 step (1 passed)
60
+ """
61
+
62
+ Scenario: Specify order of scenarios
63
+ Given a file named "features/test.feature" with:
64
+ """
65
+ Feature:
66
+ Scenario:
67
+ Given this step passes
68
+
69
+ Scenario:
70
+ Given this step fails
71
+ """
72
+ When I run `cucumber features/test.feature:5 features/test.feature:3 -f progress`
73
+ Then it should fail with:
74
+ """
75
+ F.
76
+ """
77
+
@@ -0,0 +1,43 @@
1
+ Feature: Showing differences to expected output
2
+
3
+ Cucumber will helpfully show you the expectation error that your
4
+ testing library gives you, in the context of the failing scenario.
5
+ When using RSpec, for example, this will show the difference between
6
+ the expected and the actual output.
7
+
8
+ Scenario: Run single failing scenario with default diff enabled
9
+ Given a file named "features/failing_expectation.feature" with:
10
+ """
11
+ Feature: Failing expectation
12
+
13
+ Scenario: Failing expectation
14
+ Given failing expectation
15
+ """
16
+ And a file named "features/step_definitions/steps.rb" with:
17
+ """
18
+ Given /^failing expectation$/ do x=1
19
+ expect('this').to eq 'that'
20
+ end
21
+ """
22
+ When I run `cucumber -q features/failing_expectation.feature`
23
+ Then it should fail with:
24
+ """
25
+ Feature: Failing expectation
26
+
27
+ Scenario: Failing expectation
28
+ Given failing expectation
29
+
30
+ expected: "that"
31
+ got: "this"
32
+
33
+ (compared using ==)
34
+ (RSpec::Expectations::ExpectationNotMetError)
35
+ ./features/step_definitions/steps.rb:2:in `/^failing expectation$/'
36
+ features/failing_expectation.feature:4:in `Given failing expectation'
37
+
38
+ Failing Scenarios:
39
+ cucumber features/failing_expectation.feature:3
40
+
41
+ 1 scenario (1 failed)
42
+ 1 step (1 failed)
43
+ """
@@ -0,0 +1,65 @@
1
+ @spawn
2
+ Feature: Running multiple formatters
3
+
4
+ When running cucumber, you are able to using multiple different
5
+ formatters and redirect the output to text files.
6
+ Two formatters cannot both print to the same file (or to STDOUT)
7
+
8
+ Background:
9
+ Given a file named "features/test.feature" with:
10
+ """
11
+ Feature: Lots of undefined
12
+
13
+ Scenario: Implement me
14
+ Given it snows in Sahara
15
+ Given it's 40 degrees in Norway
16
+ And it's 40 degrees in Norway
17
+ When I stop procrastinating
18
+ And there is world peace
19
+ """
20
+
21
+ Scenario: Multiple formatters and outputs
22
+ When I run `cucumber --no-color --format progress --out progress.txt --format pretty --out pretty.txt --no-source --dry-run --no-snippets features/test.feature`
23
+ Then the stderr should not contain anything
24
+ Then the file "progress.txt" should contain:
25
+ """
26
+ UUUUU
27
+
28
+ 1 scenario (1 undefined)
29
+ 5 steps (5 undefined)
30
+
31
+ """
32
+ And the file "pretty.txt" should contain:
33
+ """
34
+ Feature: Lots of undefined
35
+
36
+ Scenario: Implement me
37
+ Given it snows in Sahara
38
+ Given it's 40 degrees in Norway
39
+ And it's 40 degrees in Norway
40
+ When I stop procrastinating
41
+ And there is world peace
42
+
43
+ 1 scenario (1 undefined)
44
+ 5 steps (5 undefined)
45
+
46
+ """
47
+
48
+ Scenario: Two formatters to stdout
49
+ When I run `cucumber -f progress -f pretty features/test.feature`
50
+ Then it should fail with:
51
+ """
52
+ All but one formatter must use --out, only one can print to each stream (or STDOUT) (RuntimeError)
53
+ """
54
+
55
+ Scenario: Two formatters to stdout when using a profile
56
+ Given the following profiles are defined:
57
+ """
58
+ default: -q
59
+ """
60
+ When I run `cucumber -f progress -f pretty features/test.feature`
61
+ Then it should fail with:
62
+ """
63
+ All but one formatter must use --out, only one can print to each stream (or STDOUT) (RuntimeError)
64
+ """
65
+
@@ -0,0 +1,64 @@
1
+ Feature: Strict mode
2
+
3
+ Using the `--strict` flag will cause cucumber to fail unless all the
4
+ step definitions have been defined.
5
+
6
+ Background:
7
+ Given a file named "features/missing.feature" with:
8
+ """
9
+ Feature: Missing
10
+ Scenario: Missing
11
+ Given this step passes
12
+ """
13
+ And a file named "features/pending.feature" with:
14
+ """
15
+ Feature: Pending
16
+ Scenario: Pending
17
+ Given this step is pending
18
+ """
19
+
20
+ Scenario: Fail with --strict due to undefined step
21
+ When I run `cucumber -q features/missing.feature --strict`
22
+ Then it should fail with:
23
+ """
24
+ Feature: Missing
25
+
26
+ Scenario: Missing
27
+ Given this step passes
28
+ Undefined step: "this step passes" (Cucumber::Undefined)
29
+ features/missing.feature:3:in `Given this step passes'
30
+
31
+ 1 scenario (1 undefined)
32
+ 1 step (1 undefined)
33
+ """
34
+
35
+ Scenario: Fail with --strict due to pending step
36
+ Given the standard step definitions
37
+ When I run `cucumber -q features/pending.feature --strict`
38
+ Then it should fail with:
39
+ """
40
+ Feature: Pending
41
+
42
+ Scenario: Pending
43
+ Given this step is pending
44
+ TODO (Cucumber::Pending)
45
+ ./features/step_definitions/steps.rb:3:in `/^this step is pending$/'
46
+ features/pending.feature:3:in `Given this step is pending'
47
+
48
+ 1 scenario (1 pending)
49
+ 1 step (1 pending)
50
+ """
51
+
52
+ Scenario: Succeed with --strict
53
+ Given the standard step definitions
54
+ When I run `cucumber -q features/missing.feature --strict`
55
+ Then it should pass with:
56
+ """
57
+ Feature: Missing
58
+
59
+ Scenario: Missing
60
+ Given this step passes
61
+
62
+ 1 scenario (1 passed)
63
+ 1 step (1 passed)
64
+ """
@@ -0,0 +1,177 @@
1
+ Feature: Nested Steps
2
+
3
+ Background:
4
+ Given a scenario with a step that looks like this:
5
+ """gherkin
6
+ Given two turtles
7
+ """
8
+ And a step definition that looks like this:
9
+ """ruby
10
+ Given /a turtle/ do
11
+ puts "turtle!"
12
+ end
13
+ """
14
+
15
+ Scenario: Use #steps to call several steps at once
16
+ Given a step definition that looks like this:
17
+ """ruby
18
+ Given /two turtles/ do
19
+ steps %{
20
+ Given a turtle
21
+ And a turtle
22
+ }
23
+ end
24
+ """
25
+ When I run the feature with the progress formatter
26
+ Then the output should contain:
27
+ """
28
+ turtle!
29
+
30
+ turtle!
31
+
32
+ """
33
+
34
+ Scenario: Use #step to call a single step
35
+ Given a step definition that looks like this:
36
+ """ruby
37
+ Given /two turtles/ do
38
+ step "a turtle"
39
+ step "a turtle"
40
+ end
41
+ """
42
+ When I run the feature with the progress formatter
43
+ Then the output should contain:
44
+ """
45
+ turtle!
46
+
47
+ turtle!
48
+
49
+ """
50
+
51
+ Scenario: Use #steps to call a table
52
+ Given a step definition that looks like this:
53
+ """ruby
54
+ Given /turtles:/ do |table|
55
+ table.hashes.each do |row|
56
+ puts row[:name]
57
+ end
58
+ end
59
+ """
60
+ And a step definition that looks like this:
61
+ """ruby
62
+ Given /two turtles/ do
63
+ steps %{
64
+ Given turtles:
65
+ | name |
66
+ | Sturm |
67
+ | Liouville |
68
+ }
69
+ end
70
+ """
71
+ When I run the feature with the progress formatter
72
+ Then the output should contain:
73
+ """
74
+ Sturm
75
+
76
+ Liouville
77
+
78
+ """
79
+
80
+ Scenario: Use #steps to call a multi-line string
81
+ Given a step definition that looks like this:
82
+ """ruby
83
+ Given /two turtles/ do
84
+ steps %Q{
85
+ Given turtles:
86
+ \"\"\"
87
+ Sturm
88
+ Liouville
89
+ \"\"\"
90
+ }
91
+ end
92
+ """
93
+ And a step definition that looks like this:
94
+ """ruby
95
+ Given /turtles:/ do |string|
96
+ puts string
97
+ end
98
+ """
99
+ When I run the feature with the progress formatter
100
+ Then the output should contain:
101
+ """
102
+ Sturm
103
+ Liouville
104
+ """
105
+
106
+ @spawn
107
+ Scenario: Backtrace doesn't skip nested steps
108
+ Given a step definition that looks like this:
109
+ """ruby
110
+ Given /two turtles/ do
111
+ step "I have a couple turtles"
112
+ end
113
+
114
+ When(/I have a couple turtles/) { raise 'error' }
115
+ """
116
+ When I run the feature with the progress formatter
117
+ Then it should fail with:
118
+ """
119
+ error (RuntimeError)
120
+ ./features/step_definitions/steps2.rb:5:in `/I have a couple turtles/'
121
+ ./features/step_definitions/steps2.rb:2:in `/two turtles/'
122
+ features/test_feature_1.feature:3:in `Given two turtles'
123
+
124
+ Failing Scenarios:
125
+ cucumber features/test_feature_1.feature:2 # Scenario: Test Scenario 1
126
+
127
+ 1 scenario (1 failed)
128
+ 1 step (1 failed)
129
+ """
130
+
131
+ Scenario: Undefined nested step
132
+ Given a file named "features/call_undefined_step_from_step_def.feature" with:
133
+ """
134
+ Feature: Calling undefined step
135
+
136
+ Scenario: Call directly
137
+ Given a step that calls an undefined step
138
+
139
+ Scenario: Call via another
140
+ Given a step that calls a step that calls an undefined step
141
+ """
142
+ And a file named "features/step_definitions/steps.rb" with:
143
+ """
144
+ Given /^a step that calls an undefined step$/ do
145
+ step 'this does not exist'
146
+ end
147
+
148
+ Given /^a step that calls a step that calls an undefined step$/ do
149
+ step 'a step that calls an undefined step'
150
+ end
151
+ """
152
+ When I run `cucumber -q features/call_undefined_step_from_step_def.feature`
153
+ Then it should fail with exactly:
154
+ """
155
+ Feature: Calling undefined step
156
+
157
+ Scenario: Call directly
158
+ Given a step that calls an undefined step
159
+ Undefined dynamic step: "this does not exist" (Cucumber::UndefinedDynamicStep)
160
+ ./features/step_definitions/steps.rb:2:in `/^a step that calls an undefined step$/'
161
+ features/call_undefined_step_from_step_def.feature:4:in `Given a step that calls an undefined step'
162
+
163
+ Scenario: Call via another
164
+ Given a step that calls a step that calls an undefined step
165
+ Undefined dynamic step: "this does not exist" (Cucumber::UndefinedDynamicStep)
166
+ ./features/step_definitions/steps.rb:2:in `/^a step that calls an undefined step$/'
167
+ ./features/step_definitions/steps.rb:6:in `/^a step that calls a step that calls an undefined step$/'
168
+ features/call_undefined_step_from_step_def.feature:7:in `Given a step that calls a step that calls an undefined step'
169
+
170
+ Failing Scenarios:
171
+ cucumber features/call_undefined_step_from_step_def.feature:3
172
+ cucumber features/call_undefined_step_from_step_def.feature:6
173
+
174
+ 2 scenarios (2 failed)
175
+ 2 steps (2 failed)
176
+
177
+ """