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,919 @@
1
+ require 'spec_helper'
2
+ require 'cucumber/formatter/spec_helper'
3
+ require 'cucumber/formatter/pretty'
4
+ require 'cucumber/cli/options'
5
+
6
+ module Cucumber
7
+ module Formatter
8
+ describe Pretty do
9
+ extend SpecHelperDsl
10
+ include SpecHelper
11
+
12
+ context "With no options" do
13
+ before(:each) do
14
+ Cucumber::Term::ANSIColor.coloring = false
15
+ @out = StringIO.new
16
+ @formatter = Pretty.new(runtime, @out, {})
17
+ end
18
+
19
+ describe "given a single feature" do
20
+ before(:each) do
21
+ run_defined_feature
22
+ end
23
+
24
+ describe "with a scenario with no steps" do
25
+ define_feature <<-FEATURE
26
+ Feature: Banana party
27
+
28
+ Scenario: Monkey eats banana
29
+ FEATURE
30
+
31
+ it "outputs the scenario name" do
32
+ expect(@out.string).to include "Scenario: Monkey eats banana"
33
+ end
34
+ end
35
+
36
+
37
+ describe "with a scenario" do
38
+ define_feature <<-FEATURE
39
+ Feature: Banana party
40
+
41
+ Scenario: Monkey eats banana
42
+ Given there are bananas
43
+ FEATURE
44
+
45
+ it "outputs the scenario name" do
46
+ expect(@out.string).to include "Scenario: Monkey eats banana"
47
+ end
48
+
49
+ it "outputs the step" do
50
+ expect(@out.string).to include "Given there are bananas"
51
+ end
52
+ end
53
+
54
+ describe "with a background" do
55
+ define_feature <<-FEATURE
56
+ Feature: Banana party
57
+
58
+ Background:
59
+ Given a tree
60
+
61
+ Scenario: Monkey eats banana
62
+ Given there are bananas
63
+ FEATURE
64
+
65
+ it "outputs the gherkin" do
66
+ expect(@out.string).to include(self.class.feature_content)
67
+ end
68
+
69
+ it "outputs the scenario name" do
70
+ expect(@out.string).to include "Scenario: Monkey eats banana"
71
+ end
72
+
73
+ it "outputs the step" do
74
+ expect(@out.string).to include "Given there are bananas"
75
+ end
76
+ end
77
+
78
+ describe "with a scenario outline" do
79
+ define_feature <<-FEATURE
80
+ Feature: Fud Pyramid
81
+
82
+ Scenario Outline: Monkey eats a balanced diet
83
+ Given there are <Things>
84
+
85
+ Examples: Fruit
86
+ | Things |
87
+ | apples |
88
+ | bananas |
89
+ Examples: Vegetables
90
+ | Things |
91
+ | broccoli |
92
+ | carrots |
93
+ FEATURE
94
+
95
+ it "outputs the scenario outline" do
96
+ lines = <<-OUTPUT
97
+ Examples: Fruit
98
+ | Things |
99
+ | apples |
100
+ | bananas |
101
+ Examples: Vegetables
102
+ | Things |
103
+ | broccoli |
104
+ | carrots |
105
+ OUTPUT
106
+ lines.split("\n").each do |line|
107
+ expect(@out.string).to include line.strip
108
+ end
109
+ end
110
+
111
+ it "has 4 undefined scenarios" do
112
+ expect(@out.string).to include "4 scenarios (4 undefined)"
113
+ end
114
+
115
+ it "has 4 undefined steps" do
116
+ expect(@out.string).to include "4 steps (4 undefined)"
117
+ end
118
+
119
+ context 'when the examples table header is wider than the rows' do
120
+ define_feature <<-FEATURE
121
+ Feature: Monkey Business
122
+
123
+ Scenario Outline: Types of monkey
124
+ Given there are <Types of monkey>
125
+
126
+ Examples:
127
+ | Types of monkey |
128
+ | Hominidae |
129
+ FEATURE
130
+
131
+ it "outputs the scenario outline" do
132
+ lines = <<-OUTPUT
133
+ Examples:
134
+ | Types of monkey |
135
+ | Hominidae |
136
+ OUTPUT
137
+ lines.split("\n").each do |line|
138
+ expect(@out.string).to include line.strip
139
+ end
140
+ end
141
+ end
142
+ end
143
+
144
+ # To ensure https://rspec.lighthouseapp.com/projects/16211/tickets/475 remains fixed.
145
+ describe "with a scenario outline with a pystring" do
146
+ define_feature <<-FEATURE
147
+ Feature:
148
+ Scenario Outline: Monkey eats a balanced diet
149
+ Given a multiline string:
150
+ """
151
+ Monkeys eat <things>
152
+ """
153
+
154
+ Examples:
155
+ | things |
156
+ | apples |
157
+ FEATURE
158
+
159
+ it "outputs the scenario outline" do
160
+ lines = <<-OUTPUT
161
+ Given a multiline string:
162
+ """
163
+ Monkeys eat <things>
164
+ """
165
+
166
+ Examples:
167
+ | things |
168
+ | apples |
169
+ OUTPUT
170
+ lines.split("\n").each do |line|
171
+ expect(@out.string).to include line.strip
172
+ end
173
+ end
174
+ end
175
+
176
+ describe "with a step with a py string" do
177
+ define_feature <<-FEATURE
178
+ Feature: Traveling circus
179
+
180
+ Scenario: Monkey goes to town
181
+ Given there is a monkey called:
182
+ """
183
+ foo
184
+ """
185
+ FEATURE
186
+
187
+ it "displays the pystring nested" do
188
+ expect(@out.string).to include <<OUTPUT
189
+ """
190
+ foo
191
+ """
192
+ OUTPUT
193
+ end
194
+ end
195
+
196
+ describe "with a multiline step arg" do
197
+ define_feature <<-FEATURE
198
+ Feature: Traveling circus
199
+
200
+ Scenario: Monkey goes to town
201
+ Given there are monkeys:
202
+ | name |
203
+ | foo |
204
+ | bar |
205
+ FEATURE
206
+
207
+ it "displays the multiline string" do
208
+ expect(@out.string).to include <<OUTPUT
209
+ Given there are monkeys:
210
+ | name |
211
+ | foo |
212
+ | bar |
213
+ OUTPUT
214
+ end
215
+ end
216
+
217
+ describe "with a table in the background and the scenario" do
218
+ define_feature <<-FEATURE
219
+ Feature: accountant monkey
220
+
221
+ Background:
222
+ Given table:
223
+ | a | b |
224
+ | c | d |
225
+ Scenario:
226
+ Given another table:
227
+ | e | f |
228
+ | g | h |
229
+ FEATURE
230
+
231
+ it "displays the table for the background" do
232
+ expect(@out.string).to include <<OUTPUT
233
+ Given table:
234
+ | a | b |
235
+ | c | d |
236
+ OUTPUT
237
+ end
238
+
239
+ it "displays the table for the scenario" do
240
+ expect(@out.string).to include <<OUTPUT
241
+ Given another table:
242
+ | e | f |
243
+ | g | h |
244
+ OUTPUT
245
+ end
246
+ end
247
+
248
+ describe "with a py string in the background and the scenario" do
249
+ define_feature <<-FEATURE
250
+ Feature: py strings
251
+
252
+ Background:
253
+ Given stuff:
254
+ """
255
+ foo
256
+ """
257
+ Scenario:
258
+ Given more stuff:
259
+ """
260
+ bar
261
+ """
262
+ FEATURE
263
+
264
+ it "displays the background py string" do
265
+ expect(@out.string).to include <<OUTPUT
266
+ Given stuff:
267
+ """
268
+ foo
269
+ """
270
+ OUTPUT
271
+ end
272
+
273
+ it "displays the scenario py string" do
274
+ expect(@out.string).to include <<OUTPUT
275
+ Given more stuff:
276
+ """
277
+ bar
278
+ """
279
+ OUTPUT
280
+ end
281
+ end
282
+
283
+ describe "with output from hooks" do
284
+ define_feature <<-FEATURE
285
+ Feature:
286
+ Scenario:
287
+ Given this step passes
288
+ Scenario Outline:
289
+ Given this step <status>
290
+ Examples:
291
+ | status |
292
+ | passes |
293
+ FEATURE
294
+
295
+ define_steps do
296
+ Before do
297
+ puts "Before hook"
298
+ end
299
+ AfterStep do
300
+ puts "AfterStep hook"
301
+ end
302
+ After do
303
+ puts "After hook"
304
+ end
305
+ Given(/^this step passes$/) {}
306
+ end
307
+
308
+ it "displays hook output appropriately " do
309
+ expect( @out.string ).to include <<OUTPUT
310
+ Feature:
311
+
312
+ Scenario:
313
+ Before hook
314
+ Given this step passes
315
+ AfterStep hook
316
+ After hook
317
+
318
+ Scenario Outline:
319
+ Given this step <status>
320
+
321
+ Examples:
322
+ | status |
323
+ | passes | Before hook, AfterStep hook, After hook
324
+
325
+ 2 scenarios (2 passed)
326
+ 2 steps (2 passed)
327
+ OUTPUT
328
+ end
329
+ end
330
+
331
+ describe "with background and output from hooks" do
332
+ define_feature <<-FEATURE
333
+ Feature:
334
+ Background:
335
+ Given this step passes
336
+ Scenario:
337
+ Given this step passes
338
+ FEATURE
339
+
340
+ define_steps do
341
+ Before do
342
+ puts "Before hook"
343
+ end
344
+ AfterStep do
345
+ puts "AfterStep hook"
346
+ end
347
+ After do
348
+ puts "After hook"
349
+ end
350
+ Given(/^this step passes$/) {}
351
+ end
352
+
353
+ it "displays hook output appropriately " do
354
+ expect( @out.string ).to include <<OUTPUT
355
+ Feature:
356
+
357
+ Background:
358
+ Before hook
359
+ Given this step passes
360
+ AfterStep hook
361
+
362
+ Scenario:
363
+ Given this step passes
364
+ AfterStep hook
365
+ After hook
366
+
367
+ 1 scenario (1 passed)
368
+ 2 steps (2 passed)
369
+ OUTPUT
370
+ end
371
+ end
372
+
373
+ describe "with tags on all levels" do
374
+ define_feature <<-FEATURE
375
+ @tag1
376
+ Feature:
377
+ @tag2
378
+ Scenario:
379
+ Given this step passes
380
+ @tag3
381
+ Scenario Outline:
382
+ Given this step passes
383
+ @tag4
384
+ Examples:
385
+ | dummy |
386
+ | dummy |
387
+ FEATURE
388
+
389
+
390
+ it "includes the tags in the output " do
391
+ expect( @out.string ).to include <<OUTPUT
392
+ @tag1
393
+ Feature:
394
+
395
+ @tag2
396
+ Scenario:
397
+ Given this step passes
398
+
399
+ @tag3
400
+ Scenario Outline:
401
+ Given this step passes
402
+
403
+ @tag4
404
+ Examples:
405
+ | dummy |
406
+ | dummy |
407
+ OUTPUT
408
+ end
409
+ end
410
+
411
+ describe "with comments on all levels" do
412
+ define_feature <<-FEATURE
413
+ #comment1
414
+ Feature:
415
+ #comment2
416
+ Background:
417
+ #comment3
418
+ Given this step passes
419
+ #comment4
420
+ Scenario:
421
+ #comment5
422
+ Given this step passes
423
+ #comment6
424
+ | dummy |
425
+ #comment7
426
+ Scenario Outline:
427
+ #comment8
428
+ Given this step passes
429
+ #comment9
430
+ Examples:
431
+ #comment10
432
+ | dummy |
433
+ #comment11
434
+ | dummy |
435
+ FEATURE
436
+
437
+
438
+ it "includes the all comments except for data table rows in the output " do
439
+ expect( @out.string ).to include <<OUTPUT
440
+ #comment1
441
+ Feature:
442
+
443
+ #comment2
444
+ Background:
445
+ #comment3
446
+ Given this step passes
447
+
448
+ #comment4
449
+ Scenario:
450
+ #comment5
451
+ Given this step passes
452
+ | dummy |
453
+
454
+ #comment7
455
+ Scenario Outline:
456
+ #comment8
457
+ Given this step passes
458
+
459
+ #comment9
460
+ Examples:
461
+ #comment10
462
+ | dummy |
463
+ #comment11
464
+ | dummy |
465
+ OUTPUT
466
+ end
467
+ end
468
+ end
469
+ end
470
+
471
+ context "With --no-multiline passed as an option" do
472
+ before(:each) do
473
+ Cucumber::Term::ANSIColor.coloring = false
474
+ @out = StringIO.new
475
+ @formatter = Pretty.new(runtime, @out, {:no_multiline => true})
476
+ end
477
+
478
+ describe "given a single feature" do
479
+ before(:each) do
480
+ run_defined_feature
481
+ end
482
+
483
+ describe "with a scenario" do
484
+ define_feature <<-FEATURE
485
+ Feature: Banana party
486
+
487
+ Scenario: Monkey eats banana
488
+ Given there are bananas
489
+ FEATURE
490
+
491
+ it "outputs the scenario name" do
492
+ expect(@out.string).to include "Scenario: Monkey eats banana"
493
+ end
494
+
495
+ it "outputs the step" do
496
+ expect(@out.string).to include "Given there are bananas"
497
+ end
498
+ end
499
+
500
+ describe "with a scenario outline" do
501
+ define_feature <<-FEATURE
502
+ Feature: Fud Pyramid
503
+
504
+ Scenario Outline: Monkey eats a balanced diet
505
+ Given there are <Things>
506
+
507
+ Examples: Fruit
508
+ | Things |
509
+ | apples |
510
+ | bananas |
511
+ Examples: Vegetables
512
+ | Things |
513
+ | broccoli |
514
+ | carrots |
515
+ FEATURE
516
+
517
+ it "outputs the scenario outline" do
518
+ lines = <<-OUTPUT
519
+ Examples: Fruit
520
+ | Things |
521
+ | apples |
522
+ | bananas |
523
+ Examples: Vegetables
524
+ | Things |
525
+ | broccoli |
526
+ | carrots |
527
+ OUTPUT
528
+ lines.split("\n").each do |line|
529
+ expect(@out.string).to include line.strip
530
+ end
531
+ end
532
+
533
+ it "has 4 undefined scenarios" do
534
+ expect(@out.string).to include "4 scenarios (4 undefined)"
535
+ end
536
+
537
+ it "has 4 undefined steps" do
538
+ expect(@out.string).to include "4 steps (4 undefined)"
539
+ end
540
+ end
541
+
542
+ describe "with a step with a py string" do
543
+ define_feature <<-FEATURE
544
+ Feature: Traveling circus
545
+
546
+ Scenario: Monkey goes to town
547
+ Given there is a monkey called:
548
+ """
549
+ foo
550
+ """
551
+ FEATURE
552
+
553
+ it "does not display the pystring" do
554
+ expect(@out.string).not_to include <<OUTPUT
555
+ """
556
+ foo
557
+ """
558
+ OUTPUT
559
+ end
560
+ end
561
+
562
+ describe "with a multiline step arg" do
563
+ define_feature <<-FEATURE
564
+ Feature: Traveling circus
565
+
566
+ Scenario: Monkey goes to town
567
+ Given there are monkeys:
568
+ | name |
569
+ | foo |
570
+ | bar |
571
+ FEATURE
572
+
573
+ it "does not display the multiline string" do
574
+ expect(@out.string).not_to include <<OUTPUT
575
+ | name |
576
+ | foo |
577
+ | bar |
578
+ OUTPUT
579
+ end
580
+ end
581
+
582
+ describe "with a table in the background and the scenario" do
583
+ define_feature <<-FEATURE
584
+ Feature: accountant monkey
585
+
586
+ Background:
587
+ Given table:
588
+ | a | b |
589
+ | c | d |
590
+ Scenario:
591
+ Given another table:
592
+ | e | f |
593
+ | g | h |
594
+ FEATURE
595
+
596
+ it "does not display the table for the background" do
597
+ expect(@out.string).not_to include <<OUTPUT
598
+ | a | b |
599
+ | c | d |
600
+ OUTPUT
601
+ end
602
+ it "does not display the table for the scenario" do
603
+ expect(@out.string).not_to include <<OUTPUT
604
+ | e | f |
605
+ | g | h |
606
+ OUTPUT
607
+ end
608
+ end
609
+
610
+ describe "with a py string in the background and the scenario" do
611
+ define_feature <<-FEATURE
612
+ Feature: py strings
613
+
614
+ Background:
615
+ Given stuff:
616
+ """
617
+ foo
618
+ """
619
+ Scenario:
620
+ Given more stuff:
621
+ """
622
+ bar
623
+ """
624
+ FEATURE
625
+
626
+ it "does not display the background py string" do
627
+ expect(@out.string).not_to include <<OUTPUT
628
+ """
629
+ foo
630
+ """
631
+ OUTPUT
632
+ end
633
+ it "does not display the scenario py string" do
634
+ expect(@out.string).not_to include <<OUTPUT
635
+ """
636
+ bar
637
+ """
638
+ OUTPUT
639
+ end
640
+ end
641
+ end
642
+ end
643
+
644
+ context "In --expand mode" do
645
+ let(:options) { { expand: true } }
646
+ before(:each) do
647
+ Cucumber::Term::ANSIColor.coloring = false
648
+ @out = StringIO.new
649
+ @formatter = Pretty.new(runtime, @out, {})
650
+ end
651
+
652
+ describe "given a single feature" do
653
+ before(:each) do
654
+ run_defined_feature
655
+ end
656
+
657
+ describe "with a scenario outline" do
658
+ define_feature <<-FEATURE
659
+ Feature: Fud Pyramid
660
+
661
+ Scenario Outline: Monkey eats a balanced diet
662
+ Given there are <Things>
663
+
664
+ Examples: Fruit
665
+ | Things |
666
+ | apples |
667
+ | bananas |
668
+ Examples: Vegetables
669
+ | Things |
670
+ | broccoli |
671
+ | carrots |
672
+ FEATURE
673
+
674
+ it "outputs the instantiated scenarios" do
675
+ lines = <<-OUTPUT
676
+ Examples: Fruit
677
+ Scenario: | apples |
678
+ Given there are apples
679
+ Scenario: | bananas |
680
+ Given there are bananas
681
+ Examples: Vegetables
682
+ Scenario: | broccoli |
683
+ Given there are broccoli
684
+ Scenario: | carrots |
685
+ Given there are carrots
686
+ OUTPUT
687
+ lines.split("\n").each do |line|
688
+ expect(@out.string).to include line.strip
689
+ end
690
+ end
691
+ end
692
+
693
+ describe "with a scenario outline in en-lol" do
694
+ define_feature <<-FEATURE
695
+ # language: en-lol
696
+ OH HAI: STUFFING
697
+
698
+ MISHUN SRSLY: CUCUMBR
699
+ I CAN HAZ IN TEH BEGINNIN <BEGINNIN> CUCUMBRZ
700
+ WEN I EAT <EAT> CUCUMBRZ
701
+ DEN I HAS <EAT> CUCUMBERZ IN MAH BELLY
702
+ AN IN TEH END <KTHXBAI> CUCUMBRZ KTHXBAI
703
+
704
+ EXAMPLZ:
705
+ | BEGINNIN | EAT | KTHXBAI |
706
+ | 3 | 2 | 1 |
707
+ FEATURE
708
+
709
+ it "outputs localized text" do
710
+ lines = <<-OUTPUT
711
+ OH HAI: STUFFING
712
+
713
+ MISHUN SRSLY: CUCUMBR
714
+ I CAN HAZ IN TEH BEGINNIN <BEGINNIN> CUCUMBRZ
715
+ WEN I EAT <EAT> CUCUMBRZ
716
+ DEN I HAS <EAT> CUCUMBERZ IN MAH BELLY
717
+ AN IN TEH END <KTHXBAI> CUCUMBRZ KTHXBAI
718
+ EXAMPLZ:
719
+ MISHUN: | 3 | 2 | 1 |
720
+ I CAN HAZ IN TEH BEGINNIN 3 CUCUMBRZ
721
+ WEN I EAT 2 CUCUMBRZ
722
+ DEN I HAS 2 CUCUMBERZ IN MAH BELLY
723
+ AN IN TEH END 1 CUCUMBRZ KTHXBAI
724
+ OUTPUT
725
+ lines.split("\n").each do |line|
726
+ expect(@out.string).to include line.strip
727
+ end
728
+ end
729
+ end
730
+ end
731
+ end
732
+
733
+ context "In --expand mode with --source as an option" do
734
+ let(:options) { { expand: true } }
735
+ before(:each) do
736
+ Cucumber::Term::ANSIColor.coloring = false
737
+ @out = StringIO.new
738
+ @formatter = Pretty.new(runtime, @out, {:source => true})
739
+ end
740
+
741
+ describe "given a single feature" do
742
+ before(:each) do
743
+ run_defined_feature
744
+ end
745
+
746
+ describe "with a scenario outline" do
747
+ define_feature <<-FEATURE
748
+ Feature: Fud Pyramid
749
+
750
+ Scenario Outline: Monkey eats a balanced diet
751
+ Given there are <Things>
752
+
753
+ Examples: Fruit
754
+ | Things |
755
+ | apples |
756
+ | bananas |
757
+ Examples: Vegetables
758
+ | Things |
759
+ | broccoli |
760
+ | carrots |
761
+ FEATURE
762
+
763
+ it "includes the source in the output" do
764
+ lines = <<-OUTPUT
765
+ Scenario Outline: Monkey eats a balanced diet # spec.feature:3
766
+ Given there are <Things> # spec.feature:4
767
+ Examples: Fruit
768
+ Scenario: | apples | # spec.feature:8
769
+ Given there are apples # spec.feature:8
770
+ Scenario: | bananas | # spec.feature:9
771
+ Given there are bananas # spec.feature:9
772
+ Examples: Vegetables
773
+ Scenario: | broccoli | # spec.feature:12
774
+ Given there are broccoli # spec.feature:12
775
+ Scenario: | carrots | # spec.feature:13
776
+ Given there are carrots # spec.feature:13
777
+ OUTPUT
778
+ lines.split("\n").each do |line|
779
+ expect(@out.string).to include line.strip
780
+ end
781
+ end
782
+
783
+ context "With very wide cells" do
784
+ define_feature <<-FEATURE
785
+ Feature: Monkey Business
786
+
787
+ Scenario Outline: Types of monkey
788
+ Given there are <Types of monkey>
789
+
790
+ Examples:
791
+ | Types of monkey | Extra |
792
+ | Hominidae | Very long cell content |
793
+ FEATURE
794
+
795
+ it "the scenario line controls the source indentation" do
796
+ lines = <<-OUTPUT
797
+ Examples:
798
+ Scenario: | Hominidae | Very long cell content | # spec.feature:8
799
+ Given there are Hominidae # spec.feature:8
800
+
801
+ OUTPUT
802
+ lines.split("\n").each do |line|
803
+ expect(@out.string).to include line.strip
804
+ end
805
+ end
806
+ end
807
+ end
808
+ end
809
+ end
810
+
811
+ context "snippets contain relevant keyword replacements" do
812
+
813
+ before(:each) do
814
+ Cucumber::Term::ANSIColor.coloring = false
815
+ @out = StringIO.new
816
+ @formatter = Pretty.new(runtime, @out, {snippets: true})
817
+ run_defined_feature
818
+ end
819
+
820
+ describe "With a scenario that has undefined steps" do
821
+ define_feature <<-FEATURE
822
+ Feature: Banana party
823
+
824
+ Scenario: many monkeys eat many things
825
+ Given there are bananas and apples
826
+ And other monkeys are around
827
+ When one monkey eats a banana
828
+ And the other monkeys eat all the apples
829
+ Then bananas remain
830
+ But there are no apples left
831
+ FEATURE
832
+
833
+ it "containes snippets with 'And' or 'But' replaced by previous step name" do
834
+ expect(@out.string).to include("Given(/^there are bananas and apples$/)")
835
+ expect(@out.string).to include("Given(/^other monkeys are around$/)")
836
+ expect(@out.string).to include("When(/^one monkey eats a banana$/)")
837
+ expect(@out.string).to include("When(/^the other monkeys eat all the apples$/)")
838
+ expect(@out.string).to include("Then(/^bananas remain$/)")
839
+ expect(@out.string).to include("Then(/^there are no apples left$/)")
840
+ end
841
+ end
842
+
843
+ describe "With a scenario that uses * and 'But'" do
844
+ define_feature <<-FEATURE
845
+ Feature: Banana party
846
+
847
+ Scenario: many monkeys eat many things
848
+ * there are bananas and apples
849
+ * other monkeys are around
850
+ When one monkey eats a banana
851
+ * the other monkeys eat all the apples
852
+ Then bananas remain
853
+ * there are no apples left
854
+ FEATURE
855
+ it "replaces the first step with 'Given'" do
856
+ expect(@out.string).to include("Given(/^there are bananas and apples$/)")
857
+ end
858
+ it "uses actual keywords as the 'previous' keyword for future replacements" do
859
+ expect(@out.string).to include("Given(/^other monkeys are around$/)")
860
+ expect(@out.string).to include("When(/^the other monkeys eat all the apples$/)")
861
+ expect(@out.string).to include("Then(/^there are no apples left$/)")
862
+ end
863
+ end
864
+
865
+ describe "With a scenario where the only undefined step uses 'And'" do
866
+ define_feature <<-FEATURE
867
+ Feature:
868
+
869
+ Scenario:
870
+ Given this step passes
871
+ Then this step passes
872
+ And this step is undefined
873
+ FEATURE
874
+ define_steps do
875
+ Given(/^this step passes$/) {}
876
+ end
877
+ it "uses actual keyword of the previous passing step for the undefined step" do
878
+ expect(@out.string).to include("Then(/^this step is undefined$/)")
879
+ end
880
+ end
881
+
882
+ describe "With scenarios where the first step is undefined and uses '*'" do
883
+ define_feature <<-FEATURE
884
+ Feature:
885
+
886
+ Scenario:
887
+ * this step is undefined
888
+ Then this step passes
889
+
890
+ Scenario:
891
+ * this step is also undefined
892
+ Then this step passes
893
+ FEATURE
894
+ define_steps do
895
+ Given(/^this step passes$/) {}
896
+ end
897
+ it "uses 'Given' as actual keyword the step in each scenario" do
898
+ expect(@out.string).to include("Given(/^this step is undefined$/)")
899
+ expect(@out.string).to include("Given(/^this step is also undefined$/)")
900
+ end
901
+ end
902
+
903
+ describe "with a scenario in en-lol" do
904
+ define_feature <<-FEATURE
905
+ # language: en-lol
906
+ OH HAI: STUFFING
907
+
908
+ MISHUN: CUCUMBR
909
+ I CAN HAZ IN TEH BEGINNIN CUCUMBRZ
910
+ AN I EAT CUCUMBRZ
911
+ FEATURE
912
+ it "uses actual keyword of the previous passing step for the undefined step" do
913
+ expect(@out.string).to include("ICANHAZ(/^I EAT CUCUMBRZ$/)")
914
+ end
915
+ end
916
+ end
917
+ end
918
+ end
919
+ end