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,7 @@
1
+ require 'rubygems'
2
+
3
+ class SomeException < Exception; end
4
+
5
+ Before do
6
+ raise SomeException.new("I cannot even start this scenario")
7
+ end
@@ -0,0 +1,63 @@
1
+ require 'socket'
2
+ require 'json'
3
+
4
+ class FakeWireServer
5
+ def initialize(port, protocol_table)
6
+ @port, @protocol_table = port, protocol_table
7
+ end
8
+
9
+ def run
10
+ @server = TCPServer.open(@port)
11
+ loop { handle_connections }
12
+ end
13
+
14
+ private
15
+
16
+ def handle_connections
17
+ Thread.start(@server.accept) { |socket| open_session_on socket }
18
+ end
19
+
20
+ def open_session_on(socket)
21
+ begin
22
+ SocketSession.new(socket, @protocol_table).start
23
+ rescue Exception => e
24
+ raise e
25
+ ensure
26
+ socket.close
27
+ end
28
+ end
29
+
30
+ class SocketSession
31
+ def initialize(socket, protocol)
32
+ @socket = socket
33
+ @protocol = protocol
34
+ end
35
+
36
+ def start
37
+ while message = @socket.gets
38
+ handle(message)
39
+ end
40
+ end
41
+
42
+ private
43
+
44
+ def handle(data)
45
+ if protocol_entry = response_to(data.strip)
46
+ send_response(protocol_entry['response'])
47
+ else
48
+ serialized_exception = { :message => "Not understood: #{data}", :backtrace => [] }
49
+ send_response(['fail', serialized_exception ].to_json)
50
+ end
51
+ end
52
+
53
+ def response_to(data)
54
+ @protocol.detect do |entry|
55
+ JSON.parse(entry['request']) == JSON.parse(data)
56
+ end
57
+ end
58
+
59
+ def send_response(response)
60
+ @socket.puts response + "\n"
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,45 @@
1
+ Feature: Table diffing
2
+ In order to more easily compare data in tables
3
+ step definition writers should be able to diff
4
+ a table with expected data and see the diff inline
5
+
6
+ Scenario: Extra row
7
+ Given a standard Cucumber project directory structure
8
+ And a file named "features/tables.feature" with:
9
+ """
10
+ Feature: Tables
11
+ Scenario: Extra row
12
+ Then the table should be:
13
+ | x | y |
14
+ | a | b |
15
+ """
16
+ And a file named "features/step_definitions/table_steps.rb" with:
17
+ """
18
+ Then /the table should be:/ do |expected|
19
+ expected.diff!(table(%{
20
+ | x | y |
21
+ | a | c |
22
+ }))
23
+ end
24
+ """
25
+ When I run cucumber -i features/tables.feature
26
+ Then it should fail with
27
+ """
28
+ Feature: Tables
29
+
30
+ Scenario: Extra row # features/tables.feature:2
31
+ Then the table should be: # features/step_definitions/table_steps.rb:1
32
+ | x | y |
33
+ | a | b |
34
+ | a | c |
35
+ Tables were not identical (Cucumber::Ast::Table::Different)
36
+ ./features/step_definitions/table_steps.rb:2:in `/the table should be:/'
37
+ features/tables.feature:3:in `Then the table should be:'
38
+
39
+ Failing Scenarios:
40
+ cucumber features/tables.feature:2 # Scenario: Extra row
41
+
42
+ 1 scenario (1 failed)
43
+ 1 step (1 failed)
44
+
45
+ """
@@ -0,0 +1,35 @@
1
+ Feature: Table mapping
2
+ Scenario: Mapping table shouldn't change output
3
+ Given a standard Cucumber project directory structure
4
+ And a file named "features/f.feature" with:
5
+ """
6
+ Feature: F
7
+ Scenario: S
8
+ Given a table:
9
+ | who |
10
+ | aslak |
11
+ """
12
+ And a file named "features/step_definitions/steps.rb" with:
13
+ """
14
+ Given /a table:/ do |table|
15
+ table.map_headers!(/who/i => 'Who')
16
+ table.map_column!('Who') { |who| "Cuke" }
17
+ table.hashes[0]['Who'] = "Joe"
18
+ table.hashes.should == [{"Who"=>"Joe"}]
19
+ end
20
+ """
21
+ When I run cucumber features/f.feature
22
+ Then STDERR should be empty
23
+ And it should pass with
24
+ """
25
+ Feature: F
26
+
27
+ Scenario: S # features/f.feature:2
28
+ Given a table: # features/step_definitions/steps.rb:1
29
+ | who |
30
+ | aslak |
31
+
32
+ 1 scenario (1 passed)
33
+ 1 step (1 passed)
34
+
35
+ """
@@ -0,0 +1,258 @@
1
+ Feature: Tag logic
2
+ In order to conveniently run subsets of features
3
+ As a Cuker
4
+ I want to select features using logical AND/OR of tags
5
+
6
+ Background:
7
+ Given a standard Cucumber project directory structure
8
+ And a file named "features/tagulicious.feature" with:
9
+ """
10
+ Feature: Sample
11
+
12
+ @one @three
13
+ Scenario: Example
14
+ Given passing
15
+
16
+ @one
17
+ Scenario: Another Example
18
+ Given passing
19
+
20
+ @three
21
+ Scenario: Yet another Example
22
+ Given passing
23
+
24
+ @ignore
25
+ Scenario: And yet another Example
26
+ """
27
+
28
+ Scenario: ANDing tags
29
+ When I run cucumber -q -t @one,@three features/tagulicious.feature
30
+ Then it should pass
31
+ And the output should contain
32
+ """
33
+ Feature: Sample
34
+
35
+ @one @three
36
+ Scenario: Example
37
+ Given passing
38
+
39
+ 1 scenario (1 undefined)
40
+ 1 step (1 undefined)
41
+
42
+ """
43
+
44
+ Scenario: ORing tags
45
+ When I run cucumber -q -t @one -t @three features/tagulicious.feature
46
+ Then it should pass
47
+ And the output should contain
48
+ """
49
+ Feature: Sample
50
+
51
+ @one @three
52
+ Scenario: Example
53
+ Given passing
54
+
55
+ @one
56
+ Scenario: Another Example
57
+ Given passing
58
+
59
+ @three
60
+ Scenario: Yet another Example
61
+ Given passing
62
+
63
+ 3 scenarios (3 undefined)
64
+ 3 steps (3 undefined)
65
+
66
+ """
67
+
68
+ Scenario: Before hooks ORing
69
+ Given a file named "features/support/hooks.rb" with:
70
+ """
71
+ Before('@one', '@three') do
72
+ raise 'boom'
73
+ end
74
+ """
75
+ When I run cucumber -q features/tagulicious.feature
76
+ Then it should fail with
77
+ """
78
+ Feature: Sample
79
+
80
+ @one @three
81
+ Scenario: Example
82
+ boom (RuntimeError)
83
+ ./features/support/hooks.rb:2:in `Before'
84
+ Given passing
85
+
86
+ @one
87
+ Scenario: Another Example
88
+ boom (RuntimeError)
89
+ ./features/support/hooks.rb:2:in `Before'
90
+ Given passing
91
+
92
+ @three
93
+ Scenario: Yet another Example
94
+ boom (RuntimeError)
95
+ ./features/support/hooks.rb:2:in `Before'
96
+ Given passing
97
+
98
+ @ignore
99
+ Scenario: And yet another Example
100
+
101
+ Failing Scenarios:
102
+ cucumber features/tagulicious.feature:4 # Scenario: Example
103
+ cucumber features/tagulicious.feature:8 # Scenario: Another Example
104
+ cucumber features/tagulicious.feature:12 # Scenario: Yet another Example
105
+
106
+ 4 scenarios (3 failed, 1 passed)
107
+ 3 steps (3 undefined)
108
+
109
+ """
110
+
111
+ Scenario: Before hooks ANDing
112
+ Given a file named "features/support/hooks.rb" with:
113
+ """
114
+ Before('@one,@three') do
115
+ raise 'boom'
116
+ end
117
+ """
118
+ When I run cucumber -q features/tagulicious.feature
119
+ Then it should fail with
120
+ """
121
+ Feature: Sample
122
+
123
+ @one @three
124
+ Scenario: Example
125
+ boom (RuntimeError)
126
+ ./features/support/hooks.rb:2:in `Before'
127
+ Given passing
128
+
129
+ @one
130
+ Scenario: Another Example
131
+ Given passing
132
+
133
+ @three
134
+ Scenario: Yet another Example
135
+ Given passing
136
+
137
+ @ignore
138
+ Scenario: And yet another Example
139
+
140
+ Failing Scenarios:
141
+ cucumber features/tagulicious.feature:4 # Scenario: Example
142
+
143
+ 4 scenarios (1 failed, 2 undefined, 1 passed)
144
+ 3 steps (3 undefined)
145
+
146
+ """
147
+
148
+ Scenario: Before hooks ANDing with a bad hook matching nothing
149
+ Given a file named "features/support/hooks.rb" with:
150
+ """
151
+ Before('@one,@notused') do
152
+ raise 'boom'
153
+ end
154
+ """
155
+ When I run cucumber -q features/tagulicious.feature
156
+ Then it should pass with
157
+ """
158
+ Feature: Sample
159
+
160
+ @one @three
161
+ Scenario: Example
162
+ Given passing
163
+
164
+ @one
165
+ Scenario: Another Example
166
+ Given passing
167
+
168
+ @three
169
+ Scenario: Yet another Example
170
+ Given passing
171
+
172
+ @ignore
173
+ Scenario: And yet another Example
174
+
175
+ 4 scenarios (3 undefined, 1 passed)
176
+ 3 steps (3 undefined)
177
+
178
+ """
179
+
180
+ Scenario: After hooks ORing
181
+ Given a file named "features/support/hooks.rb" with:
182
+ """
183
+ After('@one', '@three') do
184
+ raise 'boom'
185
+ end
186
+ """
187
+ When I run cucumber -q features/tagulicious.feature
188
+ Then it should fail with
189
+ """
190
+ Feature: Sample
191
+
192
+ @one @three
193
+ Scenario: Example
194
+ Given passing
195
+ boom (RuntimeError)
196
+ ./features/support/hooks.rb:2:in `After'
197
+
198
+ @one
199
+ Scenario: Another Example
200
+ Given passing
201
+ boom (RuntimeError)
202
+ ./features/support/hooks.rb:2:in `After'
203
+
204
+ @three
205
+ Scenario: Yet another Example
206
+ Given passing
207
+ boom (RuntimeError)
208
+ ./features/support/hooks.rb:2:in `After'
209
+
210
+ @ignore
211
+ Scenario: And yet another Example
212
+
213
+ Failing Scenarios:
214
+ cucumber features/tagulicious.feature:4 # Scenario: Example
215
+ cucumber features/tagulicious.feature:8 # Scenario: Another Example
216
+ cucumber features/tagulicious.feature:12 # Scenario: Yet another Example
217
+
218
+ 4 scenarios (3 failed, 1 passed)
219
+ 3 steps (3 undefined)
220
+
221
+ """
222
+
223
+ Scenario: After hooks ANDing
224
+ Given a file named "features/support/hooks.rb" with:
225
+ """
226
+ After('@one,@three') do
227
+ raise 'boom'
228
+ end
229
+ """
230
+ When I run cucumber -q features/tagulicious.feature
231
+ Then it should fail with
232
+ """
233
+ Feature: Sample
234
+
235
+ @one @three
236
+ Scenario: Example
237
+ Given passing
238
+ boom (RuntimeError)
239
+ ./features/support/hooks.rb:2:in `After'
240
+
241
+ @one
242
+ Scenario: Another Example
243
+ Given passing
244
+
245
+ @three
246
+ Scenario: Yet another Example
247
+ Given passing
248
+
249
+ @ignore
250
+ Scenario: And yet another Example
251
+
252
+ Failing Scenarios:
253
+ cucumber features/tagulicious.feature:4 # Scenario: Example
254
+
255
+ 4 scenarios (1 failed, 2 undefined, 1 passed)
256
+ 3 steps (3 undefined)
257
+
258
+ """
@@ -0,0 +1,245 @@
1
+ Feature: transform
2
+ In order to maintain modularity within step definitions
3
+ As a step definition editor
4
+ I want to register a regex to capture and tranform step definition arguments.
5
+
6
+ Background:
7
+ Given a standard Cucumber project directory structure
8
+ And a file named "features/step_definitions/steps.rb" with:
9
+ """
10
+ Then /^I should transform ('\d+' to an Integer)$/ do |integer|
11
+ integer.should be_kind_of(Integer)
12
+ end
13
+
14
+ Then /^I should transform ('\w+' to a Symbol)$/ do |symbol|
15
+ symbol.should be_kind_of(Symbol)
16
+ end
17
+
18
+ Then /^I should transform ('\d+' to a Float)$/ do |float|
19
+ float.should be_kind_of(Float)
20
+ end
21
+
22
+ Then /^I should transform ('\w+' to an Array)$/ do |array|
23
+ array.should be_kind_of(Array)
24
+ end
25
+
26
+ Then /^I should transform ('\w+' to Nil)$/ do |string|
27
+ string.should be_nil
28
+ end
29
+
30
+ Then /^I should not transform ('\d+') to an Integer$/ do |string|
31
+ string.should be_kind_of(String)
32
+ end
33
+
34
+ Then /^I should transform ((?:nothing|'\d+') to an optional Integer)$/ do |integer|
35
+ integer.should be_nil
36
+ end
37
+ """
38
+ And a file named "features/support/env.rb" with:
39
+ """
40
+ Transform /^'\d+' to an Integer$/ do |step_arg|
41
+ /'(\d+)' to an Integer/.match(step_arg).captures[0].to_i
42
+ end
43
+
44
+ Transform /^(?:nothing|'(\d+)') to an optional Integer$/ do |str|
45
+ str ? str.to_i : nil
46
+ end
47
+
48
+ Transform /^'(\d+)' to a Float$/ do |integer_string|
49
+ Transform("'#{integer_string}' to an Integer").to_f
50
+ end
51
+
52
+ Transform(/^('\w+') to Nil$/) {|str| nil }
53
+
54
+ Transform(/^('\w+') to a Symbol$/) {|str| str.to_sym }
55
+
56
+ module MyHelpers
57
+ def fetch_array
58
+ @array
59
+ end
60
+ end
61
+
62
+ World(MyHelpers)
63
+
64
+ Before do
65
+ @array = []
66
+ end
67
+
68
+ Transform(/^('\w+') to an Array$/) {|str| fetch_array }
69
+ """
70
+
71
+ Scenario: run a specific scenario with a registered transform
72
+ Given a file named "features/transform_sample.feature" with:
73
+ """
74
+ Feature: Step argument transformations
75
+
76
+ Scenario: transform with matches
77
+ Then I should transform '10' to an Integer
78
+
79
+ Scenario: transform with matches that capture
80
+ Then I should transform 'abc' to a Symbol
81
+
82
+ Scenario: transform with matches that reuse transforms
83
+ Then I should transform '10' to a Float
84
+
85
+ Scenario: transform with matches that use current world
86
+ Then I should transform 'abc' to an Array
87
+
88
+ Scenario: transform with matches that return nil
89
+ Then I should transform 'nil' to Nil
90
+
91
+ Scenario: transform without matches
92
+ Then I should not transform '10' to an Integer
93
+
94
+ Scenario: transform with optional arguments not given
95
+ Then I should transform nothing to an optional Integer
96
+ """
97
+ When I run cucumber --backtrace -s features
98
+ Then it should pass with
99
+ """
100
+ Feature: Step argument transformations
101
+
102
+ Scenario: transform with matches
103
+ Then I should transform '10' to an Integer
104
+
105
+ Scenario: transform with matches that capture
106
+ Then I should transform 'abc' to a Symbol
107
+
108
+ Scenario: transform with matches that reuse transforms
109
+ Then I should transform '10' to a Float
110
+
111
+ Scenario: transform with matches that use current world
112
+ Then I should transform 'abc' to an Array
113
+
114
+ Scenario: transform with matches that return nil
115
+ Then I should transform 'nil' to Nil
116
+
117
+ Scenario: transform without matches
118
+ Then I should not transform '10' to an Integer
119
+
120
+ Scenario: transform with optional arguments not given
121
+ Then I should transform nothing to an optional Integer
122
+
123
+ 7 scenarios (7 passed)
124
+ 7 steps (7 passed)
125
+
126
+ """
127
+
128
+ Scenario: run a table scenario with an unrelated registered transform
129
+ Given a file named "features/transform_sample.feature" with:
130
+ """
131
+ Feature: Step argument transformations
132
+
133
+ Scenario: A table
134
+ Then I should check the following table:
135
+ | letter | letter_plus_a |
136
+ | r | ra |
137
+ | m | ma |
138
+ | p | pa |
139
+ """
140
+ And a file named "features/support/table.rb" with:
141
+ """
142
+ Transform /^table:number,number_plus_a$/ do |table|
143
+ :not_what_you_were_expecting
144
+ end
145
+
146
+ Then "I should check the following table:" do |table|
147
+ table.hashes.each do |hash|
148
+ hash['letter_plus_a'].should == (hash['letter'] + 'a')
149
+ end
150
+ end
151
+ """
152
+ When I run cucumber -s features
153
+ Then it should pass with
154
+ """
155
+ Feature: Step argument transformations
156
+
157
+ Scenario: A table
158
+ Then I should check the following table:
159
+ | letter | letter_plus_a |
160
+ | r | ra |
161
+ | m | ma |
162
+ | p | pa |
163
+
164
+ 1 scenario (1 passed)
165
+ 1 step (1 passed)
166
+
167
+ """
168
+
169
+ Scenario: run a table scenario with an related registered transform not using table
170
+ Given a file named "features/transform_sample.feature" with:
171
+ """
172
+ Feature: Step argument transformations
173
+
174
+ Scenario: A table
175
+ Then I should check the following table:
176
+ | letter | letter_plus_a |
177
+ | r | ra |
178
+ | m | ma |
179
+ | p | pa |
180
+ """
181
+ And a file named "features/support/table.rb" with:
182
+ """
183
+ Transform /^table:letter,letter_plus_a$/ do |table|
184
+ 1
185
+ end
186
+
187
+ Then "I should check the following table:" do |columns|
188
+ columns.should == 1
189
+ end
190
+ """
191
+ When I run cucumber -s features
192
+ Then it should pass with
193
+ """
194
+ Feature: Step argument transformations
195
+
196
+ Scenario: A table
197
+ Then I should check the following table:
198
+ | letter | letter_plus_a |
199
+ | r | ra |
200
+ | m | ma |
201
+ | p | pa |
202
+
203
+ 1 scenario (1 passed)
204
+ 1 step (1 passed)
205
+
206
+ """
207
+
208
+ Scenario: run a table scenario with an related registered transform using table
209
+ Given a file named "features/transform_sample.feature" with:
210
+ """
211
+ Feature: Step argument transformations
212
+
213
+ Scenario: A table
214
+ Then I should check the following table:
215
+ | letter | letter_plus_a |
216
+ | r | ra |
217
+ | m | ma |
218
+ | p | pa |
219
+ """
220
+ And a file named "features/support/table.rb" with:
221
+ """
222
+ Transform /^table:letter,letter_plus_a$/ do |table|
223
+ table.rows.map { |row| row.join(',') }
224
+ end
225
+
226
+ Then "I should check the following table:" do |rows_in_table|
227
+ rows_in_table.should == ['r,ra','m,ma','p,pa']
228
+ end
229
+ """
230
+ When I run cucumber -b -s features
231
+ Then it should pass with
232
+ """
233
+ Feature: Step argument transformations
234
+
235
+ Scenario: A table
236
+ Then I should check the following table:
237
+ | letter | letter_plus_a |
238
+ | r | ra |
239
+ | m | ma |
240
+ | p | pa |
241
+
242
+ 1 scenario (1 passed)
243
+ 1 step (1 passed)
244
+
245
+ """