kbaum-cucumber 0.4.5.pre

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 (511) hide show
  1. data/.gitattributes +1 -0
  2. data/.gitignore +18 -0
  3. data/Caliper.yml +5 -0
  4. data/History.txt +1292 -0
  5. data/LICENSE +22 -0
  6. data/README.rdoc +26 -0
  7. data/Rakefile +63 -0
  8. data/VERSION.yml +5 -0
  9. data/bin/cucumber +16 -0
  10. data/cucumber.gemspec +741 -0
  11. data/cucumber.yml +10 -0
  12. data/examples/dos_line_endings/Rakefile +6 -0
  13. data/examples/dos_line_endings/features/dos_line_endings.feature +9 -0
  14. data/examples/i18n/README.textile +18 -0
  15. data/examples/i18n/Rakefile +32 -0
  16. data/examples/i18n/ar/Rakefile +6 -0
  17. data/examples/i18n/ar/features/addition.feature +17 -0
  18. data/examples/i18n/ar/features/step_definitons/calculator_steps.rb +24 -0
  19. data/examples/i18n/ar/lib/calculator.rb +11 -0
  20. data/examples/i18n/bg/Rakefile +6 -0
  21. data/examples/i18n/bg/features/addition.feature +12 -0
  22. data/examples/i18n/bg/features/consecutive_calculations.feature +19 -0
  23. data/examples/i18n/bg/features/division.feature +17 -0
  24. data/examples/i18n/bg/features/step_definitons/calculator_steps.rb +24 -0
  25. data/examples/i18n/bg/features/support/env.rb +6 -0
  26. data/examples/i18n/bg/features/support/world.rb +8 -0
  27. data/examples/i18n/bg/lib/calculator.rb +24 -0
  28. data/examples/i18n/cat/Rakefile +6 -0
  29. data/examples/i18n/cat/features/step_definitons/calculator_steps.rb +21 -0
  30. data/examples/i18n/cat/features/suma.feature +17 -0
  31. data/examples/i18n/cat/lib/calculadora.rb +16 -0
  32. data/examples/i18n/da/Rakefile +6 -0
  33. data/examples/i18n/da/features/sammenlaegning.feature +18 -0
  34. data/examples/i18n/da/features/step_definitons/lommeregner_steps.rb +24 -0
  35. data/examples/i18n/da/lib/lommeregner.rb +11 -0
  36. data/examples/i18n/de/.gitignore +1 -0
  37. data/examples/i18n/de/Rakefile +6 -0
  38. data/examples/i18n/de/features/addition.feature +17 -0
  39. data/examples/i18n/de/features/division.feature +10 -0
  40. data/examples/i18n/de/features/step_definitons/calculator_steps.rb +24 -0
  41. data/examples/i18n/de/lib/calculator.rb +14 -0
  42. data/examples/i18n/en-lol/Rakefile +4 -0
  43. data/examples/i18n/en-lol/features/step_definitions/cucumbrz_steps.rb +16 -0
  44. data/examples/i18n/en-lol/features/stuffing.feature +8 -0
  45. data/examples/i18n/en-lol/features/support/env.rb +8 -0
  46. data/examples/i18n/en-lol/lib/basket.rb +12 -0
  47. data/examples/i18n/en-lol/lib/belly.rb +11 -0
  48. data/examples/i18n/en/.gitignore +1 -0
  49. data/examples/i18n/en/Rakefile +6 -0
  50. data/examples/i18n/en/features/addition.feature +17 -0
  51. data/examples/i18n/en/features/division.feature +10 -0
  52. data/examples/i18n/en/features/step_definitons/calculator_steps.rb +24 -0
  53. data/examples/i18n/en/lib/calculator.rb +14 -0
  54. data/examples/i18n/es/Rakefile +6 -0
  55. data/examples/i18n/es/features/adicion.feature +17 -0
  56. data/examples/i18n/es/features/step_definitons/calculador_steps.rb +21 -0
  57. data/examples/i18n/es/lib/calculador.rb +14 -0
  58. data/examples/i18n/et/Rakefile +6 -0
  59. data/examples/i18n/et/features/jagamine.feature +10 -0
  60. data/examples/i18n/et/features/liitmine.feature +17 -0
  61. data/examples/i18n/et/features/step_definitions/kalkulaator_steps.rb +24 -0
  62. data/examples/i18n/et/lib/kalkulaator.rb +14 -0
  63. data/examples/i18n/fi/.gitignore +1 -0
  64. data/examples/i18n/fi/Rakefile +6 -0
  65. data/examples/i18n/fi/features/jakolasku.feature +10 -0
  66. data/examples/i18n/fi/features/step_definitons/laskin_steps.rb +24 -0
  67. data/examples/i18n/fi/features/yhteenlasku.feature +17 -0
  68. data/examples/i18n/fi/lib/laskin.rb +14 -0
  69. data/examples/i18n/fr/Rakefile +6 -0
  70. data/examples/i18n/fr/features/addition.feature +18 -0
  71. data/examples/i18n/fr/features/addition2.feature +17 -0
  72. data/examples/i18n/fr/features/step_definitions/calculatrice_steps.rb +38 -0
  73. data/examples/i18n/fr/lib/calculatrice.rb +10 -0
  74. data/examples/i18n/he/Rakefile +6 -0
  75. data/examples/i18n/he/features/addition.feature +17 -0
  76. data/examples/i18n/he/features/division.feature +10 -0
  77. data/examples/i18n/he/features/step_definitons/calculator_steps.rb +24 -0
  78. data/examples/i18n/he/lib/calculator.rb +14 -0
  79. data/examples/i18n/hu/.gitignore +1 -0
  80. data/examples/i18n/hu/Rakefile +6 -0
  81. data/examples/i18n/hu/features/addition.feature +17 -0
  82. data/examples/i18n/hu/features/division.feature +10 -0
  83. data/examples/i18n/hu/features/step_definitons/calculator_steps.rb +25 -0
  84. data/examples/i18n/hu/lib/calculator.rb +14 -0
  85. data/examples/i18n/id/.gitignore +1 -0
  86. data/examples/i18n/id/Rakefile +6 -0
  87. data/examples/i18n/id/features/addition.feature +17 -0
  88. data/examples/i18n/id/features/division.feature +10 -0
  89. data/examples/i18n/id/features/step_definitons/calculator_steps.rb +24 -0
  90. data/examples/i18n/id/lib/calculator.rb +14 -0
  91. data/examples/i18n/it/Rakefile +6 -0
  92. data/examples/i18n/it/features/somma.feature +11 -0
  93. data/examples/i18n/it/features/step_definitons/calcolatrice_steps.rb +24 -0
  94. data/examples/i18n/it/lib/calcolatrice.rb +11 -0
  95. data/examples/i18n/ja/.gitignore +1 -0
  96. data/examples/i18n/ja/Rakefile +6 -0
  97. data/examples/i18n/ja/features/addition.feature +17 -0
  98. data/examples/i18n/ja/features/division.feature +10 -0
  99. data/examples/i18n/ja/features/step_definitons/calculator_steps.rb +24 -0
  100. data/examples/i18n/ja/lib/calculator.rb +14 -0
  101. data/examples/i18n/ko/.gitignore +1 -0
  102. data/examples/i18n/ko/Rakefile +6 -0
  103. data/examples/i18n/ko/features/addition.feature +17 -0
  104. data/examples/i18n/ko/features/division.feature +11 -0
  105. data/examples/i18n/ko/features/step_definitons/calculator_steps.rb +24 -0
  106. data/examples/i18n/ko/lib/calculator.rb +14 -0
  107. data/examples/i18n/lt/.gitignore +1 -0
  108. data/examples/i18n/lt/Rakefile +6 -0
  109. data/examples/i18n/lt/features/addition.feature +17 -0
  110. data/examples/i18n/lt/features/division.feature +10 -0
  111. data/examples/i18n/lt/features/step_definitons/calculator_steps.rb +24 -0
  112. data/examples/i18n/lt/lib/calculator.rb +14 -0
  113. data/examples/i18n/lv/Rakefile +6 -0
  114. data/examples/i18n/lv/features/addition.feature +17 -0
  115. data/examples/i18n/lv/features/division.feature +10 -0
  116. data/examples/i18n/lv/features/step_definitons/calculator_steps.rb +24 -0
  117. data/examples/i18n/lv/lib/calculator.rb +14 -0
  118. data/examples/i18n/no/Rakefile +6 -0
  119. data/examples/i18n/no/features/step_definitons/kalkulator_steps.rb +17 -0
  120. data/examples/i18n/no/features/summering.feature +19 -0
  121. data/examples/i18n/no/features/support/env.rb +6 -0
  122. data/examples/i18n/no/lib/kalkulator.rb +11 -0
  123. data/examples/i18n/pl/.gitignore +1 -0
  124. data/examples/i18n/pl/Rakefile +6 -0
  125. data/examples/i18n/pl/features/addition.feature +17 -0
  126. data/examples/i18n/pl/features/division.feature +10 -0
  127. data/examples/i18n/pl/features/step_definitons/calculator_steps.rb +24 -0
  128. data/examples/i18n/pl/features/support/env.rb +6 -0
  129. data/examples/i18n/pl/lib/calculator.rb +14 -0
  130. data/examples/i18n/pt/Rakefile +6 -0
  131. data/examples/i18n/pt/features/adicao.feature +11 -0
  132. data/examples/i18n/pt/features/step_definitions/calculadora_steps.rb +20 -0
  133. data/examples/i18n/pt/features/support/env.rb +6 -0
  134. data/examples/i18n/pt/lib/calculadora.rb +10 -0
  135. data/examples/i18n/ro/Rakefile +6 -0
  136. data/examples/i18n/ro/features/step_definitons/calculator_steps.rb +24 -0
  137. data/examples/i18n/ro/features/suma.feature +11 -0
  138. data/examples/i18n/ro/lib/calculator.rb +11 -0
  139. data/examples/i18n/ru/Rakefile +6 -0
  140. data/examples/i18n/ru/features/addition.feature +11 -0
  141. data/examples/i18n/ru/features/consecutive_calculations.feature +17 -0
  142. data/examples/i18n/ru/features/division.feature +16 -0
  143. data/examples/i18n/ru/features/step_definitons/calculator_steps.rb +19 -0
  144. data/examples/i18n/ru/features/support/env.rb +6 -0
  145. data/examples/i18n/ru/features/support/world.rb +8 -0
  146. data/examples/i18n/ru/lib/calculator.rb +24 -0
  147. data/examples/i18n/se/Rakefile +6 -0
  148. data/examples/i18n/se/features/step_definitons/kalkulator_steps.rb +24 -0
  149. data/examples/i18n/se/features/summering.feature +18 -0
  150. data/examples/i18n/se/lib/kalkulator.rb +11 -0
  151. data/examples/i18n/sk/.gitignore +1 -0
  152. data/examples/i18n/sk/Rakefile +6 -0
  153. data/examples/i18n/sk/features/addition.feature +17 -0
  154. data/examples/i18n/sk/features/division.feature +10 -0
  155. data/examples/i18n/sk/features/step_definitons/calculator_steps.rb +24 -0
  156. data/examples/i18n/sk/lib/calculator.rb +14 -0
  157. data/examples/i18n/sr-latn/Rakefile +6 -0
  158. data/examples/i18n/sr-latn/features/sabiranje.feature +18 -0
  159. data/examples/i18n/sr-latn/features/step_definitons/calculator_steps.rb +24 -0
  160. data/examples/i18n/sr-latn/lib/calculator.rb +12 -0
  161. data/examples/i18n/sr/Rakefile +6 -0
  162. data/examples/i18n/sr/features/sabiranje.feature +18 -0
  163. data/examples/i18n/sr/features/step_definitons/calculator_steps.rb +24 -0
  164. data/examples/i18n/sr/lib/calculator.rb +12 -0
  165. data/examples/i18n/tr/.gitignore +1 -0
  166. data/examples/i18n/tr/Rakefile +6 -0
  167. data/examples/i18n/tr/features/bolme.feature +10 -0
  168. data/examples/i18n/tr/features/step_definitons/hesap_makinesi_adimlari.rb +24 -0
  169. data/examples/i18n/tr/features/toplama.feature +18 -0
  170. data/examples/i18n/tr/lib/hesap_makinesi.rb +15 -0
  171. data/examples/i18n/uz/Rakefile +6 -0
  172. data/examples/i18n/uz/features/addition.feature +10 -0
  173. data/examples/i18n/uz/features/consecutive_calculations.feature +17 -0
  174. data/examples/i18n/uz/features/division.feature +17 -0
  175. data/examples/i18n/uz/features/step_definitons/calculator_steps.rb +19 -0
  176. data/examples/i18n/uz/features/support/env.rb +6 -0
  177. data/examples/i18n/uz/features/support/world.rb +8 -0
  178. data/examples/i18n/uz/lib/calculator.rb +24 -0
  179. data/examples/i18n/zh-CN/Rakefile +4 -0
  180. data/examples/i18n/zh-CN/features/addition.feature +18 -0
  181. data/examples/i18n/zh-CN/features/step_definitons/calculator_steps.rb +26 -0
  182. data/examples/i18n/zh-CN/lib/calculator.rb +10 -0
  183. data/examples/i18n/zh-TW/.gitignore +1 -0
  184. data/examples/i18n/zh-TW/Rakefile +4 -0
  185. data/examples/i18n/zh-TW/features/addition.feature +17 -0
  186. data/examples/i18n/zh-TW/features/division.feature +11 -0
  187. data/examples/i18n/zh-TW/features/step_definitons/calculator_steps.rb +24 -0
  188. data/examples/i18n/zh-TW/lib/calculator.rb +14 -0
  189. data/examples/junit/features/one_passing_one_failing.feature +8 -0
  190. data/examples/junit/features/pending.feature +5 -0
  191. data/examples/junit/features/step_definitions/steps.rb +11 -0
  192. data/examples/python/features/fibonacci.feature +19 -0
  193. data/examples/python/features/step_definitions/fib_steps.py +11 -0
  194. data/examples/python/lib/.gitignore +1 -0
  195. data/examples/python/lib/fib.py +7 -0
  196. data/examples/ramaze/README.textile +7 -0
  197. data/examples/ramaze/Rakefile +6 -0
  198. data/examples/ramaze/app.rb +21 -0
  199. data/examples/ramaze/features/add.feature +11 -0
  200. data/examples/ramaze/features/step_definitions/add_steps.rb +15 -0
  201. data/examples/ramaze/features/support/env.rb +32 -0
  202. data/examples/ramaze/layout/default.html.erb +8 -0
  203. data/examples/ramaze/view/index.html.erb +5 -0
  204. data/examples/ruby2python/features/fibonacci.feature +19 -0
  205. data/examples/ruby2python/features/step_definitions/fib_steps.rb +7 -0
  206. data/examples/ruby2python/features/support/env.rb +21 -0
  207. data/examples/ruby2python/lib/.gitignore +1 -0
  208. data/examples/ruby2python/lib/fib.py +7 -0
  209. data/examples/selenium/Rakefile +6 -0
  210. data/examples/selenium/features/search.feature +9 -0
  211. data/examples/selenium/features/step_definitons/search_steps.rb +13 -0
  212. data/examples/selenium/features/support/env.rb +19 -0
  213. data/examples/selenium_webrat/Rakefile +6 -0
  214. data/examples/selenium_webrat/config.ru +0 -0
  215. data/examples/selenium_webrat/features/search.feature +9 -0
  216. data/examples/selenium_webrat/features/step_definitons/search_steps.rb +13 -0
  217. data/examples/selenium_webrat/features/support/env.rb +45 -0
  218. data/examples/self_test/.gitignore +1 -0
  219. data/examples/self_test/README.textile +6 -0
  220. data/examples/self_test/Rakefile +6 -0
  221. data/examples/self_test/features/background/background_tagged_before_on_outline.feature +12 -0
  222. data/examples/self_test/features/background/background_with_name.feature +7 -0
  223. data/examples/self_test/features/background/failing_background.feature +12 -0
  224. data/examples/self_test/features/background/failing_background_after_success.feature +11 -0
  225. data/examples/self_test/features/background/multiline_args_background.feature +32 -0
  226. data/examples/self_test/features/background/passing_background.feature +10 -0
  227. data/examples/self_test/features/background/pending_background.feature +10 -0
  228. data/examples/self_test/features/background/scenario_outline_failing_background.feature +16 -0
  229. data/examples/self_test/features/background/scenario_outline_passing_background.feature +16 -0
  230. data/examples/self_test/features/call_undefined_step_from_step_def.feature +7 -0
  231. data/examples/self_test/features/failing_expectation.feature +4 -0
  232. data/examples/self_test/features/lots_of_undefined.feature +8 -0
  233. data/examples/self_test/features/multiline_name.feature +27 -0
  234. data/examples/self_test/features/outline_sample.feature +15 -0
  235. data/examples/self_test/features/sample.feature +21 -0
  236. data/examples/self_test/features/search_sample.feature +32 -0
  237. data/examples/self_test/features/step_definitions/sample_steps.rb +81 -0
  238. data/examples/self_test/features/support/env.rb +18 -0
  239. data/examples/self_test/features/tags_sample.feature +17 -0
  240. data/examples/self_test/features/tons_of_cukes.feature +52 -0
  241. data/examples/self_test/features/undefined_multiline_args.feature +12 -0
  242. data/examples/self_test/list-of-features.txt +1 -0
  243. data/examples/sinatra/README.textile +13 -0
  244. data/examples/sinatra/Rakefile +6 -0
  245. data/examples/sinatra/app.rb +14 -0
  246. data/examples/sinatra/features/add.feature +11 -0
  247. data/examples/sinatra/features/step_definitions/add_steps.rb +15 -0
  248. data/examples/sinatra/features/support/env.rb +30 -0
  249. data/examples/sinatra/views/add.erb +5 -0
  250. data/examples/sinatra/views/layout.erb +8 -0
  251. data/examples/steps_library/features/step_definitions/steps_lib1.rb +8 -0
  252. data/examples/steps_library/features/step_definitions/steps_lib2.rb +8 -0
  253. data/examples/tcl/README.textile +11 -0
  254. data/examples/tcl/Rakefile +6 -0
  255. data/examples/tcl/features/fibonnacci.feature +17 -0
  256. data/examples/tcl/features/step_definitions/fib_steps.rb +7 -0
  257. data/examples/tcl/features/support/env.rb +6 -0
  258. data/examples/tcl/src/fib.tcl +3 -0
  259. data/examples/test_unit/Rakefile +6 -0
  260. data/examples/test_unit/features/step_definitions/test_unit_steps.rb +23 -0
  261. data/examples/test_unit/features/test_unit.feature +9 -0
  262. data/examples/tickets/Rakefile +20 -0
  263. data/examples/tickets/features.html +138 -0
  264. data/examples/tickets/features/172.feature +28 -0
  265. data/examples/tickets/features/177/1.feature +28 -0
  266. data/examples/tickets/features/177/2.feature +20 -0
  267. data/examples/tickets/features/177/3.feature +18 -0
  268. data/examples/tickets/features/180.feature +7 -0
  269. data/examples/tickets/features/229/tagged_hooks.feature +8 -0
  270. data/examples/tickets/features/229/tagged_hooks.rb +14 -0
  271. data/examples/tickets/features/236.feature +13 -0
  272. data/examples/tickets/features/241.feature +12 -0
  273. data/examples/tickets/features/246.feature +4 -0
  274. data/examples/tickets/features/248.feature +11 -0
  275. data/examples/tickets/features/270/back.feature +14 -0
  276. data/examples/tickets/features/270/back.steps.rb +14 -0
  277. data/examples/tickets/features/272/hooks.feature +26 -0
  278. data/examples/tickets/features/272/hooks_steps.rb +53 -0
  279. data/examples/tickets/features/279/py_string_indent.feature +25 -0
  280. data/examples/tickets/features/279/py_string_indent.steps.rb +12 -0
  281. data/examples/tickets/features/279/wrong.feature_ +11 -0
  282. data/examples/tickets/features/301/filter_background_tagged_hooks.feature +6 -0
  283. data/examples/tickets/features/301/filter_background_tagged_hooks_steps.rb +12 -0
  284. data/examples/tickets/features/306/only_background.feature +4 -0
  285. data/examples/tickets/features/lib/eatting_machine.rb +18 -0
  286. data/examples/tickets/features/lib/pantry.rb +20 -0
  287. data/examples/tickets/features/scenario_outline.feature +95 -0
  288. data/examples/tickets/features/step_definitons/246_steps.rb +3 -0
  289. data/examples/tickets/features/step_definitons/248_steps.rb +15 -0
  290. data/examples/tickets/features/step_definitons/scenario_outline_steps.rb +42 -0
  291. data/examples/tickets/features/step_definitons/tickets_steps.rb +81 -0
  292. data/examples/tickets/features/table_diffing.feature +13 -0
  293. data/examples/tickets/features/tickets.feature +28 -0
  294. data/examples/watir/README.textile +16 -0
  295. data/examples/watir/Rakefile +10 -0
  296. data/examples/watir/features/search.feature +12 -0
  297. data/examples/watir/features/step_definitions/search_steps.rb +26 -0
  298. data/examples/watir/features/support/env.rb +32 -0
  299. data/examples/watir/features/support/screenshots.rb +44 -0
  300. data/examples/webrat/features/search.feature +12 -0
  301. data/examples/webrat/features/step_definitions/kvasir_steps.rb +14 -0
  302. data/examples/webrat/features/support/env.rb +17 -0
  303. data/features/announce.feature +122 -0
  304. data/features/background.feature +308 -0
  305. data/features/bug_371.feature +32 -0
  306. data/features/bug_464.feature +16 -0
  307. data/features/bug_475.feature +43 -0
  308. data/features/call_many_steps.feature +124 -0
  309. data/features/cucumber_cli.feature +654 -0
  310. data/features/cucumber_cli_diff_disabled.feature +52 -0
  311. data/features/cucumber_cli_outlines.feature +105 -0
  312. data/features/custom_formatter.feature +47 -0
  313. data/features/default_snippets.feature +42 -0
  314. data/features/drb_server_integration.feature +174 -0
  315. data/features/exception_in_after_block.feature +100 -0
  316. data/features/exception_in_after_step_block.feature +102 -0
  317. data/features/exception_in_before_block.feature +78 -0
  318. data/features/exclude_files.feature +20 -0
  319. data/features/expand.feature +60 -0
  320. data/features/html_formatter.feature +7 -0
  321. data/features/html_formatter/a.html +400 -0
  322. data/features/junit_formatter.feature +88 -0
  323. data/features/language_from_header.feature +30 -0
  324. data/features/language_help.feature +68 -0
  325. data/features/listener_debugger_formatter.feature +41 -0
  326. data/features/multiline_names.feature +43 -0
  327. data/features/negative_tagged_hooks.feature +61 -0
  328. data/features/post_configuration_hook.feature +37 -0
  329. data/features/profiles.feature +112 -0
  330. data/features/rake_task.feature +152 -0
  331. data/features/report_called_undefined_steps.feature +34 -0
  332. data/features/simplest.feature +11 -0
  333. data/features/snippet.feature +22 -0
  334. data/features/step_definitions/cucumber_steps.rb +154 -0
  335. data/features/step_definitions/extra_steps.rb +2 -0
  336. data/features/step_definitions/simplest_steps.rb +3 -0
  337. data/features/step_definitions/wire_steps.rb +14 -0
  338. data/features/support/env.rb +141 -0
  339. data/features/support/env.rb.simplest +7 -0
  340. data/features/support/fake_wire_server.rb +63 -0
  341. data/features/table_diffing.feature +45 -0
  342. data/features/table_mapping.feature +35 -0
  343. data/features/tag_logic.feature +258 -0
  344. data/features/transform.feature +245 -0
  345. data/features/unicode_table.feature +35 -0
  346. data/features/usage_and_stepdefs_formatter.feature +169 -0
  347. data/features/wire_protocol.feature +177 -0
  348. data/features/work_in_progress.feature +156 -0
  349. data/gem_tasks/contributors.rake +13 -0
  350. data/gem_tasks/environment.rake +7 -0
  351. data/gem_tasks/features.rake +18 -0
  352. data/gem_tasks/fix_cr_lf.rake +10 -0
  353. data/gem_tasks/flog.rake +4 -0
  354. data/gem_tasks/rspec.rake +15 -0
  355. data/gem_tasks/sass.rake +4 -0
  356. data/gem_tasks/sdoc.rake +12 -0
  357. data/lib/README.rdoc +12 -0
  358. data/lib/autotest/cucumber.rb +6 -0
  359. data/lib/autotest/cucumber_mixin.rb +131 -0
  360. data/lib/autotest/cucumber_rails.rb +6 -0
  361. data/lib/autotest/cucumber_rails_rspec.rb +6 -0
  362. data/lib/autotest/cucumber_rspec.rb +6 -0
  363. data/lib/autotest/discover.rb +9 -0
  364. data/lib/cucumber.rb +15 -0
  365. data/lib/cucumber/ast.rb +30 -0
  366. data/lib/cucumber/ast/background.rb +75 -0
  367. data/lib/cucumber/ast/comment.rb +31 -0
  368. data/lib/cucumber/ast/examples.rb +36 -0
  369. data/lib/cucumber/ast/feature.rb +85 -0
  370. data/lib/cucumber/ast/feature_element.rb +68 -0
  371. data/lib/cucumber/ast/features.rb +40 -0
  372. data/lib/cucumber/ast/outline_table.rb +166 -0
  373. data/lib/cucumber/ast/py_string.rb +59 -0
  374. data/lib/cucumber/ast/scenario.rb +111 -0
  375. data/lib/cucumber/ast/scenario_outline.rb +100 -0
  376. data/lib/cucumber/ast/step.rb +121 -0
  377. data/lib/cucumber/ast/step_collection.rb +76 -0
  378. data/lib/cucumber/ast/step_invocation.rb +190 -0
  379. data/lib/cucumber/ast/table.rb +655 -0
  380. data/lib/cucumber/ast/tags.rb +122 -0
  381. data/lib/cucumber/ast/tree_walker.rb +201 -0
  382. data/lib/cucumber/ast/visitor.rb +11 -0
  383. data/lib/cucumber/broadcaster.rb +13 -0
  384. data/lib/cucumber/cli/configuration.rb +180 -0
  385. data/lib/cucumber/cli/drb_client.rb +32 -0
  386. data/lib/cucumber/cli/language_help_formatter.rb +72 -0
  387. data/lib/cucumber/cli/main.rb +121 -0
  388. data/lib/cucumber/cli/options.rb +404 -0
  389. data/lib/cucumber/cli/profile_loader.rb +82 -0
  390. data/lib/cucumber/constantize.rb +34 -0
  391. data/lib/cucumber/core_ext/instance_exec.rb +98 -0
  392. data/lib/cucumber/core_ext/proc.rb +30 -0
  393. data/lib/cucumber/core_ext/string.rb +16 -0
  394. data/lib/cucumber/feature_file.rb +54 -0
  395. data/lib/cucumber/filter.rb +41 -0
  396. data/lib/cucumber/formatter/ansicolor.rb +157 -0
  397. data/lib/cucumber/formatter/color_io.rb +23 -0
  398. data/lib/cucumber/formatter/console.rb +205 -0
  399. data/lib/cucumber/formatter/cucumber.css +248 -0
  400. data/lib/cucumber/formatter/cucumber.sass +241 -0
  401. data/lib/cucumber/formatter/debug.rb +33 -0
  402. data/lib/cucumber/formatter/duration.rb +13 -0
  403. data/lib/cucumber/formatter/html.rb +545 -0
  404. data/lib/cucumber/formatter/io.rb +33 -0
  405. data/lib/cucumber/formatter/junit.rb +149 -0
  406. data/lib/cucumber/formatter/ordered_xml_markup.rb +24 -0
  407. data/lib/cucumber/formatter/pdf.rb +234 -0
  408. data/lib/cucumber/formatter/pretty.rb +237 -0
  409. data/lib/cucumber/formatter/progress.rb +75 -0
  410. data/lib/cucumber/formatter/rerun.rb +50 -0
  411. data/lib/cucumber/formatter/stepdefs.rb +14 -0
  412. data/lib/cucumber/formatter/steps.rb +49 -0
  413. data/lib/cucumber/formatter/summary.rb +35 -0
  414. data/lib/cucumber/formatter/tag_cloud.rb +34 -0
  415. data/lib/cucumber/formatter/unicode.rb +35 -0
  416. data/lib/cucumber/formatter/usage.rb +127 -0
  417. data/lib/cucumber/language_support.rb +30 -0
  418. data/lib/cucumber/language_support/language_methods.rb +110 -0
  419. data/lib/cucumber/languages.yml +535 -0
  420. data/lib/cucumber/parser.rb +8 -0
  421. data/lib/cucumber/parser/common.rb +170 -0
  422. data/lib/cucumber/parser/common.tt +21 -0
  423. data/lib/cucumber/parser/feature.rb +1783 -0
  424. data/lib/cucumber/parser/feature.tt +317 -0
  425. data/lib/cucumber/parser/i18n.tt +34 -0
  426. data/lib/cucumber/parser/natural_language.rb +108 -0
  427. data/lib/cucumber/parser/py_string.rb +276 -0
  428. data/lib/cucumber/parser/py_string.tt +45 -0
  429. data/lib/cucumber/parser/table.rb +305 -0
  430. data/lib/cucumber/parser/table.tt +60 -0
  431. data/lib/cucumber/parser/treetop_ext.rb +53 -0
  432. data/lib/cucumber/platform.rb +31 -0
  433. data/lib/cucumber/py_support/py_dsl.py +10 -0
  434. data/lib/cucumber/py_support/py_language.py +10 -0
  435. data/lib/cucumber/py_support/py_language.rb +81 -0
  436. data/lib/cucumber/rake/task.rb +166 -0
  437. data/lib/cucumber/rb_support/rb_dsl.rb +102 -0
  438. data/lib/cucumber/rb_support/rb_hook.rb +19 -0
  439. data/lib/cucumber/rb_support/rb_language.rb +179 -0
  440. data/lib/cucumber/rb_support/rb_step_definition.rb +75 -0
  441. data/lib/cucumber/rb_support/rb_transform.rb +37 -0
  442. data/lib/cucumber/rb_support/rb_world.rb +81 -0
  443. data/lib/cucumber/rb_support/regexp_argument_matcher.rb +21 -0
  444. data/lib/cucumber/rspec_neuter.rb +23 -0
  445. data/lib/cucumber/step_argument.rb +9 -0
  446. data/lib/cucumber/step_definition_light.rb +20 -0
  447. data/lib/cucumber/step_match.rb +107 -0
  448. data/lib/cucumber/step_mother.rb +350 -0
  449. data/lib/cucumber/webrat/element_locator.rb +93 -0
  450. data/lib/cucumber/webrat/table_locator.rb +1 -0
  451. data/lib/cucumber/wire_support/connection.rb +42 -0
  452. data/lib/cucumber/wire_support/request_handler.rb +19 -0
  453. data/lib/cucumber/wire_support/wire_exception.rb +10 -0
  454. data/lib/cucumber/wire_support/wire_language.rb +52 -0
  455. data/lib/cucumber/wire_support/wire_packet.rb +34 -0
  456. data/lib/cucumber/wire_support/wire_protocol.rb +64 -0
  457. data/lib/cucumber/wire_support/wire_step_definition.rb +21 -0
  458. data/spec/cucumber/ast/background_spec.rb +54 -0
  459. data/spec/cucumber/ast/feature_element_spec.rb +41 -0
  460. data/spec/cucumber/ast/feature_factory.rb +62 -0
  461. data/spec/cucumber/ast/feature_spec.rb +44 -0
  462. data/spec/cucumber/ast/outline_table_spec.rb +21 -0
  463. data/spec/cucumber/ast/py_string_spec.rb +51 -0
  464. data/spec/cucumber/ast/scenario_outline_spec.rb +73 -0
  465. data/spec/cucumber/ast/scenario_spec.rb +45 -0
  466. data/spec/cucumber/ast/step_collection_spec.rb +17 -0
  467. data/spec/cucumber/ast/step_spec.rb +66 -0
  468. data/spec/cucumber/ast/table_spec.rb +422 -0
  469. data/spec/cucumber/ast/tags_spec.rb +29 -0
  470. data/spec/cucumber/ast/tree_walker_spec.rb +11 -0
  471. data/spec/cucumber/broadcaster_spec.rb +15 -0
  472. data/spec/cucumber/cli/configuration_spec.rb +396 -0
  473. data/spec/cucumber/cli/drb_client_spec.rb +77 -0
  474. data/spec/cucumber/cli/main_spec.rb +172 -0
  475. data/spec/cucumber/cli/options_spec.rb +335 -0
  476. data/spec/cucumber/cli/profile_loader_spec.rb +10 -0
  477. data/spec/cucumber/core_ext/proc_spec.rb +68 -0
  478. data/spec/cucumber/formatter/ansicolor_spec.rb +31 -0
  479. data/spec/cucumber/formatter/color_io_spec.rb +27 -0
  480. data/spec/cucumber/formatter/console_spec.rb +20 -0
  481. data/spec/cucumber/formatter/duration_spec.rb +22 -0
  482. data/spec/cucumber/formatter/html_spec.rb +213 -0
  483. data/spec/cucumber/formatter/junit_spec.rb +110 -0
  484. data/spec/cucumber/formatter/progress_spec.rb +38 -0
  485. data/spec/cucumber/formatter/spec_helper.rb +50 -0
  486. data/spec/cucumber/parser/feature_parser_spec.rb +400 -0
  487. data/spec/cucumber/parser/table_parser_spec.rb +52 -0
  488. data/spec/cucumber/rb_support/rb_step_definition_spec.rb +132 -0
  489. data/spec/cucumber/rb_support/regexp_argument_matcher_spec.rb +18 -0
  490. data/spec/cucumber/sell_cucumbers.feature +19 -0
  491. data/spec/cucumber/step_match_spec.rb +56 -0
  492. data/spec/cucumber/step_mother_spec.rb +270 -0
  493. data/spec/cucumber/treetop_parser/empty_feature.feature +4 -0
  494. data/spec/cucumber/treetop_parser/empty_scenario.feature +9 -0
  495. data/spec/cucumber/treetop_parser/empty_scenario_outline.feature +3 -0
  496. data/spec/cucumber/treetop_parser/fit_scenario.feature +8 -0
  497. data/spec/cucumber/treetop_parser/given_scenario.feature +9 -0
  498. data/spec/cucumber/treetop_parser/invalid_scenario_outlines.feature +7 -0
  499. data/spec/cucumber/treetop_parser/multiline_steps.feature +17 -0
  500. data/spec/cucumber/treetop_parser/multiple_tables.feature +27 -0
  501. data/spec/cucumber/treetop_parser/scenario_outline.feature +16 -0
  502. data/spec/cucumber/treetop_parser/spaces.feature +12 -0
  503. data/spec/cucumber/treetop_parser/test_dos.feature +25 -0
  504. data/spec/cucumber/treetop_parser/with_comments.feature +23 -0
  505. data/spec/cucumber/treetop_parser/with_tags.feature +18 -0
  506. data/spec/cucumber/wire_support/wire_language_spec.rb +47 -0
  507. data/spec/cucumber/wire_support/wire_packet_spec.rb +26 -0
  508. data/spec/cucumber/world/pending_spec.rb +46 -0
  509. data/spec/spec.opts +4 -0
  510. data/spec/spec_helper.rb +18 -0
  511. metadata +813 -0
@@ -0,0 +1,35 @@
1
+ Feature: Unicode in tables
2
+ In order to please the whole world,
3
+ unicode characters in tables should be
4
+ properly aligned
5
+
6
+ Scenario: All sorts of weird stuff
7
+ Given a standard Cucumber project directory structure
8
+ And a file named "features/unicode.feature" with:
9
+ """
10
+ Feature: Featuring unicode
11
+
12
+ Scenario: So what, whatever
13
+ Given passing
14
+ | Brüno | abc |
15
+ | Bruno | æøå |
16
+ """
17
+ And a file named "features/env.rb" with:
18
+ """
19
+ $KCODE='u'
20
+ """
21
+ When I run cucumber -q --dry-run features/unicode.feature
22
+ Then it should pass with
23
+ """
24
+ Feature: Featuring unicode
25
+
26
+ Scenario: So what, whatever
27
+ Given passing
28
+ | Brüno | abc |
29
+ | Bruno | æøå |
30
+
31
+ 1 scenario (1 undefined)
32
+ 1 step (1 undefined)
33
+
34
+ """
35
+
@@ -0,0 +1,169 @@
1
+ Feature: Cucumber command line
2
+ In order to be able to write an editor plugin that can jump between
3
+ steps and step definitions, Cucumber must provide a way to
4
+ display how they are related.
5
+
6
+ Scenario: List usage of step definitions
7
+ When I run cucumber features --format usage --dry-run
8
+ Then STDERR should be empty
9
+ And it should pass with
10
+ """
11
+ -------------------------------------UU-U--------------UUUUU---------U-------U--------------U-UU-------------------------------------------------UU
12
+
13
+ /^'(.+)' cukes$/ # features/step_definitions/sample_steps.rb:27
14
+ Given '10' cukes # features/background/background_with_name.feature:4
15
+ Given '10' cukes # features/background/background_with_name.feature:4
16
+ And '10' cukes # features/background/failing_background.feature:6
17
+ And '10' cukes # features/background/failing_background.feature:6
18
+ And '10' cukes # features/background/failing_background.feature:6
19
+ Given '10' cukes # features/background/passing_background.feature:4
20
+ Given '10' cukes # features/background/passing_background.feature:4
21
+ Given '10' cukes # features/background/passing_background.feature:4
22
+ Given '10' cukes # features/background/scenario_outline_passing_background.feature:4
23
+ Given '2' cukes # features/tons_of_cukes.feature:4
24
+ Given '2' cukes # features/tons_of_cukes.feature:5
25
+ Given '2' cukes # features/tons_of_cukes.feature:6
26
+ Given '2' cukes # features/tons_of_cukes.feature:7
27
+ Given '2' cukes # features/tons_of_cukes.feature:8
28
+ Given '2' cukes # features/tons_of_cukes.feature:9
29
+ Given '2' cukes # features/tons_of_cukes.feature:10
30
+ Given '2' cukes # features/tons_of_cukes.feature:11
31
+ Given '2' cukes # features/tons_of_cukes.feature:12
32
+ Given '2' cukes # features/tons_of_cukes.feature:13
33
+ Given '2' cukes # features/tons_of_cukes.feature:14
34
+ Given '2' cukes # features/tons_of_cukes.feature:15
35
+ Given '2' cukes # features/tons_of_cukes.feature:16
36
+ Given '2' cukes # features/tons_of_cukes.feature:17
37
+ Given '2' cukes # features/tons_of_cukes.feature:18
38
+ Given '2' cukes # features/tons_of_cukes.feature:19
39
+ Given '2' cukes # features/tons_of_cukes.feature:20
40
+ Given '2' cukes # features/tons_of_cukes.feature:21
41
+ Given '2' cukes # features/tons_of_cukes.feature:22
42
+ Given '2' cukes # features/tons_of_cukes.feature:23
43
+ Given '2' cukes # features/tons_of_cukes.feature:24
44
+ Given '2' cukes # features/tons_of_cukes.feature:25
45
+ Given '2' cukes # features/tons_of_cukes.feature:26
46
+ Given '2' cukes # features/tons_of_cukes.feature:27
47
+ Given '2' cukes # features/tons_of_cukes.feature:28
48
+ Given '2' cukes # features/tons_of_cukes.feature:29
49
+ Given '2' cukes # features/tons_of_cukes.feature:30
50
+ Given '2' cukes # features/tons_of_cukes.feature:31
51
+ Given '2' cukes # features/tons_of_cukes.feature:32
52
+ Given '2' cukes # features/tons_of_cukes.feature:33
53
+ Given '2' cukes # features/tons_of_cukes.feature:34
54
+ Given '2' cukes # features/tons_of_cukes.feature:35
55
+ Given '2' cukes # features/tons_of_cukes.feature:36
56
+ Given '2' cukes # features/tons_of_cukes.feature:37
57
+ Given '2' cukes # features/tons_of_cukes.feature:38
58
+ Given '2' cukes # features/tons_of_cukes.feature:39
59
+ Given '2' cukes # features/tons_of_cukes.feature:40
60
+ Given '2' cukes # features/tons_of_cukes.feature:41
61
+ Given '2' cukes # features/tons_of_cukes.feature:42
62
+ Given '2' cukes # features/tons_of_cukes.feature:43
63
+ Given '2' cukes # features/tons_of_cukes.feature:44
64
+ Given '2' cukes # features/tons_of_cukes.feature:45
65
+ Given '2' cukes # features/tons_of_cukes.feature:46
66
+ Given '2' cukes # features/tons_of_cukes.feature:47
67
+ Given '2' cukes # features/tons_of_cukes.feature:48
68
+ Given '2' cukes # features/tons_of_cukes.feature:49
69
+ Given '2' cukes # features/tons_of_cukes.feature:50
70
+ Given '2' cukes # features/tons_of_cukes.feature:51
71
+ Given '2' cukes # features/tons_of_cukes.feature:52
72
+ /^'(.+)' global cukes$/ # features/step_definitions/sample_steps.rb:35
73
+ And '10' global cukes # features/background/failing_background_after_success.feature:5
74
+ And '10' global cukes # features/background/failing_background_after_success.feature:5
75
+ And '10' global cukes # features/background/failing_background_after_success.feature:5
76
+ /^I should have '(.+)' cukes$/ # features/step_definitions/sample_steps.rb:31
77
+ Then I should have '10' cukes # features/background/background_with_name.feature:7
78
+ Then I should have '10' cukes # features/background/failing_background.feature:9
79
+ Then I should have '10' cukes # features/background/failing_background.feature:12
80
+ Then I should have '10' cukes # features/background/passing_background.feature:7
81
+ Then I should have '10' cukes # features/background/passing_background.feature:10
82
+ Then I should have '10' cukes # features/background/pending_background.feature:7
83
+ Then I should have '10' cukes # features/background/pending_background.feature:10
84
+ /^I should have '(.+)' global cukes$/ # features/step_definitions/sample_steps.rb:42
85
+ Then I should have '10' global cukes # features/background/failing_background_after_success.feature:8
86
+ Then I should have '10' global cukes # features/background/failing_background_after_success.feature:11
87
+ /^a step definition that calls an undefined step$/ # features/step_definitions/sample_steps.rb:19
88
+ Given a step definition that calls an undefined step # features/call_undefined_step_from_step_def.feature:4
89
+ /^another unused$/ # features/step_definitions/sample_steps.rb:69
90
+ NOT MATCHED BY ANY STEPS
91
+ /^call step "(.*)"$/ # features/step_definitions/sample_steps.rb:23
92
+ Given call step "a step definition that calls an undefined step" # features/call_undefined_step_from_step_def.feature:7
93
+ /^failing expectation$/ # features/step_definitions/sample_steps.rb:62
94
+ Given failing expectation # features/failing_expectation.feature:4
95
+ /^failing without a table$/ # features/step_definitions/sample_steps.rb:15
96
+ Given failing without a table # features/background/failing_background.feature:5
97
+ Given failing without a table # features/background/failing_background.feature:5
98
+ Given failing without a table # features/background/failing_background.feature:5
99
+ Given failing without a table # features/background/scenario_outline_failing_background.feature:4
100
+ Given failing without a table # features/search_sample.feature:10
101
+ /^failing$/ # features/step_definitions/sample_steps.rb:8
102
+ Given failing # features/sample.feature:18
103
+ /^multiline string$/ # features/step_definitions/sample_steps.rb:50
104
+ And multiline string # features/background/multiline_args_background.feature:7
105
+ And multiline string # features/background/multiline_args_background.feature:7
106
+ And multiline string # features/background/multiline_args_background.feature:7
107
+ /^passing without a table$/ # features/step_definitions/sample_steps.rb:12
108
+ Given passing without a table # features/background/background_tagged_before_on_outline.feature:5
109
+ Given passing without a table # features/background/failing_background_after_success.feature:4
110
+ Given passing without a table # features/background/failing_background_after_success.feature:4
111
+ Given passing without a table # features/background/failing_background_after_success.feature:4
112
+ Given passing without a table # features/multiline_name.feature:6
113
+ Given passing without a table # features/multiline_name.feature:6
114
+ Given passing without a table # features/multiline_name.feature:11
115
+ Given passing without a table # features/search_sample.feature:4
116
+ Given passing without a table # features/search_sample.feature:4
117
+ Given passing without a table # features/search_sample.feature:7
118
+ Given passing without a table # features/search_sample.feature:4
119
+ /^passing$/ # features/step_definitions/sample_steps.rb:5
120
+ Given passing # features/sample.feature:12
121
+ /^table$/ # features/step_definitions/sample_steps.rb:46
122
+ Given table # features/background/multiline_args_background.feature:4
123
+ Given table # features/background/multiline_args_background.feature:4
124
+ Given table # features/background/multiline_args_background.feature:4
125
+ /^the multiline string should be$/ # features/step_definitions/sample_steps.rb:58
126
+ Then the multiline string should be # features/background/multiline_args_background.feature:17
127
+ Then the multiline string should be # features/background/multiline_args_background.feature:27
128
+ /^the table should be$/ # features/step_definitions/sample_steps.rb:54
129
+ Then the table should be # features/background/multiline_args_background.feature:14
130
+ Then the table should be # features/background/multiline_args_background.feature:24
131
+ /^unused$/ # features/step_definitions/sample_steps.rb:66
132
+ NOT MATCHED BY ANY STEPS
133
+
134
+ 43 scenarios (32 skipped, 10 undefined, 1 passed)
135
+ 131 steps (117 skipped, 14 undefined)
136
+
137
+ """
138
+
139
+ Scenario: --format steps
140
+ When I run cucumber features --format stepdefs --dry-run
141
+ Then STDERR should be empty
142
+ And it should pass with
143
+ """
144
+ -------------------------------------UU-U--------------UUUUU---------U-------U--------------U-UU-------------------------------------------------UU
145
+
146
+ /^'(.+)' cukes$/ # features/step_definitions/sample_steps.rb:27
147
+ /^'(.+)' global cukes$/ # features/step_definitions/sample_steps.rb:35
148
+ /^I should have '(.+)' cukes$/ # features/step_definitions/sample_steps.rb:31
149
+ /^I should have '(.+)' global cukes$/ # features/step_definitions/sample_steps.rb:42
150
+ /^a step definition that calls an undefined step$/ # features/step_definitions/sample_steps.rb:19
151
+ /^another unused$/ # features/step_definitions/sample_steps.rb:69
152
+ NOT MATCHED BY ANY STEPS
153
+ /^call step "(.*)"$/ # features/step_definitions/sample_steps.rb:23
154
+ /^failing expectation$/ # features/step_definitions/sample_steps.rb:62
155
+ /^failing without a table$/ # features/step_definitions/sample_steps.rb:15
156
+ /^failing$/ # features/step_definitions/sample_steps.rb:8
157
+ /^multiline string$/ # features/step_definitions/sample_steps.rb:50
158
+ /^passing without a table$/ # features/step_definitions/sample_steps.rb:12
159
+ /^passing$/ # features/step_definitions/sample_steps.rb:5
160
+ /^table$/ # features/step_definitions/sample_steps.rb:46
161
+ /^the multiline string should be$/ # features/step_definitions/sample_steps.rb:58
162
+ /^the table should be$/ # features/step_definitions/sample_steps.rb:54
163
+ /^unused$/ # features/step_definitions/sample_steps.rb:66
164
+ NOT MATCHED BY ANY STEPS
165
+
166
+ 43 scenarios (32 skipped, 10 undefined, 1 passed)
167
+ 131 steps (117 skipped, 14 undefined)
168
+
169
+ """
@@ -0,0 +1,177 @@
1
+ @wire
2
+ Feature: Wire Protocol
3
+ In order to be allow Cucumber to touch my app in intimate places
4
+ As a developer on platform which doesn't support Ruby
5
+ I want a low-level protocol which Cucumber can use to run steps within my app
6
+
7
+ #
8
+ # Cucumber's wire protocol is an implementation of Cucumber's internal 'programming language' abstraction,
9
+ # and allows step definitions to be implemented and invoked on any platform.
10
+ #
11
+ # Communication is over a TCP socket, which Cucumber connects to when it finds a definition file with the
12
+ # .wire extension in the step_definitions folder (or other load path).
13
+ #
14
+ # There are currently two messages which Cucumber sends over the wire:
15
+ #
16
+ # * step_matches : this is used to find out whether the wire end has a definition for a given step
17
+ # * invoke : this is used to ask for a step definition to be invoked
18
+ #
19
+ # Message packets are formatted as JSON-encoded strings, with a newline character signalling the end of a
20
+ # packet. These messages are described below, with examples.
21
+ #
22
+
23
+ Background:
24
+ Given a standard Cucumber project directory structure
25
+ And a file named "features/wired.feature" with:
26
+ """
27
+ Scenario: Wired
28
+ Given we're all wired
29
+
30
+ """
31
+ And a file named "features/step_definitions/some_remote_place.wire" with:
32
+ """
33
+ host: localhost
34
+ port: 54321
35
+
36
+ """
37
+
38
+
39
+ #
40
+ # step_matches
41
+ #
42
+ # When the features have been parsed, Cucumber will send a step_matches message to ask the wire end
43
+ # if it can match a step name. This happens for each of the steps in each of the features.
44
+ # The wire end replies with a step_match array, containing the IDs of any step definitions that could
45
+ # be invoked for the given step name.
46
+
47
+ Scenario: Dry run finds no step match
48
+ Given there is a wire server running on port 54321 which understands the following protocol:
49
+ | request | response |
50
+ | ["step_matches",{"name_to_match":"we're all wired"}] | ["step_matches",[]] |
51
+ When I run cucumber --dry-run -f progress features
52
+ And it should pass with
53
+ """
54
+ U
55
+
56
+ 1 scenario (1 undefined)
57
+ 1 step (1 undefined)
58
+
59
+ """
60
+
61
+ # When a step match is returned, it contains an identifier for the step definition to be used
62
+ # later when referring to this step definition again if it needs to be invoked. The identifier
63
+ # can take any form (as long as it's within a string) and is simply used for the wire end's own
64
+ # reference.
65
+ # The step match also contains any argument values as parsed out by the wire end's own regular
66
+ # expression or other argument matching process.
67
+ Scenario: Dry run finds a step match
68
+ Given there is a wire server running on port 54321 which understands the following protocol:
69
+ | request | response |
70
+ | ["step_matches",{"name_to_match":"we're all wired"}] | ["step_matches",[{"id":"1", "args":[]}]] |
71
+ When I run cucumber --dry-run -f progress features
72
+ And it should pass with
73
+ """
74
+ -
75
+
76
+ 1 scenario (1 skipped)
77
+ 1 step (1 skipped)
78
+
79
+ """
80
+
81
+
82
+ #
83
+ # invoke
84
+ #
85
+ # Assuming a step_match was returned for a given step name, when it's time to invoke that
86
+ # step definition, Cucumber will send an invoke message.
87
+ # The message contains the ID of the step definition, as returned by the wire end from the
88
+ # step_matches call, along with the arguments that were parsed from the step name during the
89
+ # same step_matches call.
90
+ # The wire end will reply with either a step_failed or a success message.
91
+
92
+ Scenario: Invoke a step definition which passes
93
+ Given there is a wire server running on port 54321 which understands the following protocol:
94
+ | request | response |
95
+ | ["step_matches",{"name_to_match":"we're all wired"}] | ["step_matches",[{"id":"1", "args":[]}]] |
96
+ | ["begin_scenario",null] | ["success",null] |
97
+ | ["invoke",{"id":"1","args":[]}] | ["success",null] |
98
+ | ["end_scenario",null] | ["success",null] |
99
+ When I run cucumber -f progress --backtrace features
100
+ And it should pass with
101
+ """
102
+ .
103
+
104
+ 1 scenario (1 passed)
105
+ 1 step (1 passed)
106
+
107
+ """
108
+
109
+ # When a step definition fails, it can return details of the exception in the reply to invoke. These
110
+ # will then be passed by Cucumber to the formatters for display to the user.
111
+ #
112
+ Scenario: Invoke a step definition which fails
113
+ Given there is a wire server running on port 54321 which understands the following protocol:
114
+ | request | response |
115
+ | ["step_matches",{"name_to_match":"we're all wired"}] | ["step_matches",[{"id":"1", "args":[]}]] |
116
+ | ["begin_scenario",null] | ["success",null] |
117
+ | ["invoke",{"id":"1","args":[]}] | ["step_failed",{"message":"The wires are down"}] |
118
+ | ["end_scenario",null] | ["success",null] |
119
+ When I run cucumber -f progress features
120
+ Then STDERR should be empty
121
+ And it should fail with
122
+ """
123
+ F
124
+
125
+ (::) failed steps (::)
126
+
127
+ The wires are down (Cucumber::WireSupport::WireException)
128
+ features/wired.feature:2:in `Given we're all wired'
129
+
130
+ Failing Scenarios:
131
+ cucumber features/wired.feature:1 # Scenario: Wired
132
+
133
+ 1 scenario (1 failed)
134
+ 1 step (1 failed)
135
+
136
+ """
137
+
138
+ # Imagine we have a step definition like:
139
+ #
140
+ # Given /we're all (.*)/ do |what_we_are|
141
+ # end
142
+ #
143
+ # When this step definition matches the step name in our feature, the word 'wired' will be parsed as an
144
+ # argument.
145
+ #
146
+ # Cucumber expects this StepArgument to be returned in the StepMatch. The keys have the following meanings:
147
+ # * val : the value of the string captured for that argument from the step name passed in step_matches
148
+ # * pos : the position within the step name that the argument was matched (used for formatter highlighting)
149
+ #
150
+ Scenario: Invoke a step definition which takes arguments (and passes)
151
+ Given there is a wire server running on port 54321 which understands the following protocol:
152
+ | request | response |
153
+ | ["step_matches",{"name_to_match":"we're all wired"}] | ["step_matches",[{"id":"1", "args":[{"val":"wired", "pos":10}]}]] |
154
+ | ["begin_scenario",null] | ["success",null] |
155
+ | ["invoke",{"id":"1","args":["wired"]}] | ["success",null] |
156
+ | ["end_scenario",null] | ["success",null] |
157
+ When I run cucumber -f progress --backtrace features
158
+ Then STDERR should be empty
159
+ And it should pass with
160
+ """
161
+ .
162
+
163
+ 1 scenario (1 passed)
164
+ 1 step (1 passed)
165
+
166
+ """
167
+
168
+
169
+ Scenario: Unexpected response
170
+ Given there is a wire server running on port 54321 which understands the following protocol:
171
+ | request | response |
172
+ | ["begin_scenario",null] | ["yikes"] |
173
+ When I run cucumber -f progress features
174
+ Then STDERR should match
175
+ """
176
+ undefined method `handle_yikes'
177
+ """
@@ -0,0 +1,156 @@
1
+ Feature: Cucumber --work-in-progress switch
2
+ In order to ensure that feature scenarios do not pass until they are expected to
3
+ Developers should be able to run cucumber in a mode that
4
+ - will fail if any scenario passes completely
5
+ - will not fail otherwise
6
+
7
+ Background: A passing and a pending feature
8
+ Given a standard Cucumber project directory structure
9
+ Given a file named "features/wip.feature" with:
10
+ """
11
+ Feature: WIP
12
+ @failing
13
+ Scenario: Failing
14
+ Given a failing step
15
+
16
+ @undefined
17
+ Scenario: Undefined
18
+ Given an undefined step
19
+
20
+ @pending
21
+ Scenario: Pending
22
+ Given a pending step
23
+
24
+ @passing
25
+ Scenario: Passing
26
+ Given a passing step
27
+ """
28
+ And a file named "features/passing_outline.feature" with:
29
+ """
30
+ Feature: Not WIP
31
+ Scenario Outline: Passing
32
+ Given a <what> step
33
+
34
+ Examples:
35
+ | what |
36
+ | passing |
37
+ """
38
+ And a file named "features/step_definitions/steps.rb" with:
39
+ """
40
+ Given /^a failing step$/ do
41
+ raise "I fail"
42
+ end
43
+
44
+ Given /^a passing step$/ do
45
+ end
46
+
47
+ Given /^a pending step$/ do
48
+ pending
49
+ end
50
+ """
51
+
52
+ Scenario: Pass with Failing Scenarios
53
+ When I run cucumber -q -w -t @failing features/wip.feature
54
+ Then STDERR should be empty
55
+ Then it should pass with
56
+ """
57
+ Feature: WIP
58
+
59
+ @failing
60
+ Scenario: Failing
61
+ Given a failing step
62
+ I fail (RuntimeError)
63
+ ./features/step_definitions/steps.rb:2:in `/^a failing step$/'
64
+ features/wip.feature:4:in `Given a failing step'
65
+
66
+ Failing Scenarios:
67
+ cucumber features/wip.feature:3 # Scenario: Failing
68
+
69
+ 1 scenario (1 failed)
70
+ 1 step (1 failed)
71
+
72
+ The --wip switch was used, so the failures were expected. All is good.
73
+
74
+ """
75
+
76
+ Scenario: Pass with Undefined Scenarios
77
+ When I run cucumber -q -w -t @undefined features/wip.feature
78
+ Then it should pass with
79
+ """
80
+ Feature: WIP
81
+
82
+ @undefined
83
+ Scenario: Undefined
84
+ Given an undefined step
85
+
86
+ 1 scenario (1 undefined)
87
+ 1 step (1 undefined)
88
+
89
+ The --wip switch was used, so the failures were expected. All is good.
90
+
91
+ """
92
+
93
+ Scenario: Pass with Undefined Scenarios
94
+ When I run cucumber -q -w -t @pending features/wip.feature
95
+ Then it should pass with
96
+ """
97
+ Feature: WIP
98
+
99
+ @pending
100
+ Scenario: Pending
101
+ Given a pending step
102
+ TODO (Cucumber::Pending)
103
+ ./features/step_definitions/steps.rb:9:in `/^a pending step$/'
104
+ features/wip.feature:12:in `Given a pending step'
105
+
106
+ 1 scenario (1 pending)
107
+ 1 step (1 pending)
108
+
109
+ The --wip switch was used, so the failures were expected. All is good.
110
+
111
+ """
112
+
113
+ Scenario: Fail with Passing Scenarios
114
+ When I run cucumber -q -w -t @passing features/wip.feature
115
+ Then it should fail with
116
+ """
117
+ Feature: WIP
118
+
119
+ @passing
120
+ Scenario: Passing
121
+ Given a passing step
122
+
123
+ 1 scenario (1 passed)
124
+ 1 step (1 passed)
125
+
126
+ The --wip switch was used, so I didn't expect anything to pass. These scenarios passed:
127
+ (::) passed scenarios (::)
128
+
129
+ features/wip.feature:15:in `Scenario: Passing'
130
+
131
+
132
+ """
133
+
134
+ Scenario: Fail with Passing Scenario Outline
135
+ When I run cucumber -q -w features/passing_outline.feature
136
+ Then it should fail with
137
+ """
138
+ Feature: Not WIP
139
+
140
+ Scenario Outline: Passing
141
+ Given a <what> step
142
+
143
+ Examples:
144
+ | what |
145
+ | passing |
146
+
147
+ 1 scenario (1 passed)
148
+ 1 step (1 passed)
149
+
150
+ The --wip switch was used, so I didn't expect anything to pass. These scenarios passed:
151
+ (::) passed scenarios (::)
152
+
153
+ features/passing_outline.feature:7:in `| passing |'
154
+
155
+
156
+ """