jwilger-cucumber 0.3.11.200906161550

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 (411) hide show
  1. data/History.txt +830 -0
  2. data/License.txt +20 -0
  3. data/Manifest.txt +410 -0
  4. data/README.txt +4 -0
  5. data/Rakefile +9 -0
  6. data/bin/cucumber +17 -0
  7. data/config/hoe.rb +76 -0
  8. data/config/requirements.rb +15 -0
  9. data/cucumber.yml +2 -0
  10. data/examples/cs/README.textile +1 -0
  11. data/examples/cs/Rakefile +12 -0
  12. data/examples/cs/compile.bat +1 -0
  13. data/examples/cs/features/addition.feature +16 -0
  14. data/examples/cs/features/step_definitons/calculator_steps.rb +19 -0
  15. data/examples/cs/src/demo/Calculator.cs +20 -0
  16. data/examples/dos_line_endings/Rakefile +6 -0
  17. data/examples/dos_line_endings/features/dos_line_endings.feature +9 -0
  18. data/examples/i18n/README.textile +18 -0
  19. data/examples/i18n/Rakefile +30 -0
  20. data/examples/i18n/ar/Rakefile +6 -0
  21. data/examples/i18n/ar/features/addition.feature +17 -0
  22. data/examples/i18n/ar/features/step_definitons/calculator_steps.rb +24 -0
  23. data/examples/i18n/ar/lib/calculator.rb +11 -0
  24. data/examples/i18n/bg/Rakefile +6 -0
  25. data/examples/i18n/bg/features/addition.feature +12 -0
  26. data/examples/i18n/bg/features/consecutive_calculations.feature +19 -0
  27. data/examples/i18n/bg/features/division.feature +17 -0
  28. data/examples/i18n/bg/features/step_definitons/calculator_steps.rb +24 -0
  29. data/examples/i18n/bg/features/support/env.rb +6 -0
  30. data/examples/i18n/bg/features/support/world.rb +8 -0
  31. data/examples/i18n/bg/lib/calculator.rb +24 -0
  32. data/examples/i18n/cat/Rakefile +6 -0
  33. data/examples/i18n/cat/features/step_definitons/calculator_steps.rb +21 -0
  34. data/examples/i18n/cat/features/suma.feature +17 -0
  35. data/examples/i18n/cat/lib/calculadora.rb +16 -0
  36. data/examples/i18n/da/Rakefile +6 -0
  37. data/examples/i18n/da/features/step_definitons/kalkulator_steps.rb +24 -0
  38. data/examples/i18n/da/features/summering.feature +18 -0
  39. data/examples/i18n/da/lib/kalkulator.rb +11 -0
  40. data/examples/i18n/de/Rakefile +6 -0
  41. data/examples/i18n/de/features/addition.feature +17 -0
  42. data/examples/i18n/de/features/division.feature +10 -0
  43. data/examples/i18n/de/features/step_definitons/calculator_steps.rb +24 -0
  44. data/examples/i18n/de/lib/calculator.rb +14 -0
  45. data/examples/i18n/en/Rakefile +6 -0
  46. data/examples/i18n/en/features/addition.feature +17 -0
  47. data/examples/i18n/en/features/division.feature +10 -0
  48. data/examples/i18n/en/features/step_definitons/calculator_steps.rb +24 -0
  49. data/examples/i18n/en/lib/calculator.rb +14 -0
  50. data/examples/i18n/en-lol/Rakefile +6 -0
  51. data/examples/i18n/en-lol/features/step_definitions/cucumbrz_steps.rb +16 -0
  52. data/examples/i18n/en-lol/features/stuffing.feature +8 -0
  53. data/examples/i18n/en-lol/features/support/env.rb +8 -0
  54. data/examples/i18n/en-lol/lib/basket.rb +12 -0
  55. data/examples/i18n/en-lol/lib/belly.rb +11 -0
  56. data/examples/i18n/es/Rakefile +6 -0
  57. data/examples/i18n/es/features/adicion.feature +17 -0
  58. data/examples/i18n/es/features/step_definitons/calculador_steps.rb +21 -0
  59. data/examples/i18n/es/lib/calculador.rb +14 -0
  60. data/examples/i18n/et/Rakefile +6 -0
  61. data/examples/i18n/et/features/jagamine.feature +10 -0
  62. data/examples/i18n/et/features/liitmine.feature +17 -0
  63. data/examples/i18n/et/features/step_definitions/kalkulaator_steps.rb +24 -0
  64. data/examples/i18n/et/lib/kalkulaator.rb +14 -0
  65. data/examples/i18n/fi/Rakefile +6 -0
  66. data/examples/i18n/fi/features/jakolasku.feature +10 -0
  67. data/examples/i18n/fi/features/step_definitons/laskin_steps.rb +24 -0
  68. data/examples/i18n/fi/features/yhteenlasku.feature +16 -0
  69. data/examples/i18n/fi/lib/laskin.rb +14 -0
  70. data/examples/i18n/fr/Rakefile +6 -0
  71. data/examples/i18n/fr/features/addition.feature +18 -0
  72. data/examples/i18n/fr/features/step_definitions/calculatrice_steps.rb +25 -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/Rakefile +6 -0
  80. data/examples/i18n/hu/features/addition.feature +17 -0
  81. data/examples/i18n/hu/features/division.feature +10 -0
  82. data/examples/i18n/hu/features/step_definitons/calculator_steps.rb +25 -0
  83. data/examples/i18n/hu/lib/calculator.rb +14 -0
  84. data/examples/i18n/id/Rakefile +6 -0
  85. data/examples/i18n/id/features/addition.feature +17 -0
  86. data/examples/i18n/id/features/division.feature +10 -0
  87. data/examples/i18n/id/features/step_definitons/calculator_steps.rb +24 -0
  88. data/examples/i18n/id/lib/calculator.rb +14 -0
  89. data/examples/i18n/it/Rakefile +6 -0
  90. data/examples/i18n/it/features/somma.feature +11 -0
  91. data/examples/i18n/it/features/step_definitons/calcolatrice_steps.rb +24 -0
  92. data/examples/i18n/it/lib/calcolatrice.rb +11 -0
  93. data/examples/i18n/ja/Rakefile +6 -0
  94. data/examples/i18n/ja/features/addition.feature +17 -0
  95. data/examples/i18n/ja/features/division.feature +10 -0
  96. data/examples/i18n/ja/features/step_definitons/calculator_steps.rb +24 -0
  97. data/examples/i18n/ja/lib/calculator.rb +14 -0
  98. data/examples/i18n/ko/Rakefile +6 -0
  99. data/examples/i18n/ko/features/addition.feature +17 -0
  100. data/examples/i18n/ko/features/division.feature +11 -0
  101. data/examples/i18n/ko/features/step_definitons/calculator_steps.rb +24 -0
  102. data/examples/i18n/ko/lib/calculator.rb +14 -0
  103. data/examples/i18n/lt/Rakefile +6 -0
  104. data/examples/i18n/lt/features/addition.feature +17 -0
  105. data/examples/i18n/lt/features/division.feature +10 -0
  106. data/examples/i18n/lt/features/step_definitons/calculator_steps.rb +24 -0
  107. data/examples/i18n/lt/lib/calculator.rb +14 -0
  108. data/examples/i18n/lv/Rakefile +6 -0
  109. data/examples/i18n/lv/features/addition.feature +17 -0
  110. data/examples/i18n/lv/features/division.feature +10 -0
  111. data/examples/i18n/lv/features/step_definitons/calculator_steps.rb +24 -0
  112. data/examples/i18n/lv/lib/calculator.rb +14 -0
  113. data/examples/i18n/no/Rakefile +6 -0
  114. data/examples/i18n/no/features/step_definitons/kalkulator_steps.rb +17 -0
  115. data/examples/i18n/no/features/summering.feature +19 -0
  116. data/examples/i18n/no/features/support/env.rb +6 -0
  117. data/examples/i18n/no/lib/kalkulator.rb +11 -0
  118. data/examples/i18n/pl/Rakefile +6 -0
  119. data/examples/i18n/pl/features/addition.feature +17 -0
  120. data/examples/i18n/pl/features/division.feature +10 -0
  121. data/examples/i18n/pl/features/step_definitons/calculator_steps.rb +24 -0
  122. data/examples/i18n/pl/features/support/env.rb +6 -0
  123. data/examples/i18n/pl/lib/calculator.rb +14 -0
  124. data/examples/i18n/pt/Rakefile +6 -0
  125. data/examples/i18n/pt/features/adicao.feature +11 -0
  126. data/examples/i18n/pt/features/step_definitions/calculadora_steps.rb +20 -0
  127. data/examples/i18n/pt/features/support/env.rb +6 -0
  128. data/examples/i18n/pt/lib/calculadora.rb +10 -0
  129. data/examples/i18n/ro/Rakefile +6 -0
  130. data/examples/i18n/ro/features/step_definitons/calculator_steps.rb +24 -0
  131. data/examples/i18n/ro/features/suma.feature +11 -0
  132. data/examples/i18n/ro/lib/calculator.rb +11 -0
  133. data/examples/i18n/ru/Rakefile +6 -0
  134. data/examples/i18n/ru/features/addition.feature +11 -0
  135. data/examples/i18n/ru/features/consecutive_calculations.feature +17 -0
  136. data/examples/i18n/ru/features/division.feature +16 -0
  137. data/examples/i18n/ru/features/step_definitons/calculator_steps.rb +19 -0
  138. data/examples/i18n/ru/features/support/env.rb +6 -0
  139. data/examples/i18n/ru/features/support/world.rb +8 -0
  140. data/examples/i18n/ru/lib/calculator.rb +24 -0
  141. data/examples/i18n/se/Rakefile +6 -0
  142. data/examples/i18n/se/features/step_definitons/kalkulator_steps.rb +24 -0
  143. data/examples/i18n/se/features/summering.feature +18 -0
  144. data/examples/i18n/se/lib/kalkulator.rb +11 -0
  145. data/examples/i18n/sk/Rakefile +6 -0
  146. data/examples/i18n/sk/features/addition.feature +17 -0
  147. data/examples/i18n/sk/features/division.feature +10 -0
  148. data/examples/i18n/sk/features/step_definitons/calculator_steps.rb +24 -0
  149. data/examples/i18n/sk/lib/calculator.rb +14 -0
  150. data/examples/i18n/zh-CN/Rakefile +6 -0
  151. data/examples/i18n/zh-CN/features/addition.feature +18 -0
  152. data/examples/i18n/zh-CN/features/step_definitons/calculator_steps.rb +26 -0
  153. data/examples/i18n/zh-CN/lib/calculator.rb +10 -0
  154. data/examples/i18n/zh-TW/Rakefile +6 -0
  155. data/examples/i18n/zh-TW/features/addition.feature +17 -0
  156. data/examples/i18n/zh-TW/features/division.feature +11 -0
  157. data/examples/i18n/zh-TW/features/step_definitons/calculator_steps.rb +24 -0
  158. data/examples/i18n/zh-TW/lib/calculator.rb +14 -0
  159. data/examples/java/README.textile +18 -0
  160. data/examples/java/build.xml +33 -0
  161. data/examples/java/features/hello.feature +11 -0
  162. data/examples/java/features/step_definitons/hello_steps.rb +23 -0
  163. data/examples/java/features/step_definitons/tree_steps.rb +14 -0
  164. data/examples/java/features/tree.feature +9 -0
  165. data/examples/java/src/cucumber/demo/Hello.java +16 -0
  166. data/examples/junit/features/one_passing_one_failing.feature +8 -0
  167. data/examples/junit/features/pending.feature +5 -0
  168. data/examples/junit/features/step_definitions/steps.rb +11 -0
  169. data/examples/pure_java/README.textile +5 -0
  170. data/examples/selenium/Rakefile +6 -0
  171. data/examples/selenium/features/search.feature +9 -0
  172. data/examples/selenium/features/step_definitons/search_steps.rb +13 -0
  173. data/examples/selenium/features/support/env.rb +19 -0
  174. data/examples/selenium_webrat/Rakefile +6 -0
  175. data/examples/selenium_webrat/config.ru +0 -0
  176. data/examples/selenium_webrat/features/search.feature +9 -0
  177. data/examples/selenium_webrat/features/step_definitons/search_steps.rb +13 -0
  178. data/examples/selenium_webrat/features/support/env.rb +45 -0
  179. data/examples/self_test/README.textile +6 -0
  180. data/examples/self_test/Rakefile +6 -0
  181. data/examples/self_test/features/background/background_tagged_before_on_outline.feature +12 -0
  182. data/examples/self_test/features/background/background_with_name.feature +7 -0
  183. data/examples/self_test/features/background/failing_background.feature +12 -0
  184. data/examples/self_test/features/background/failing_background_after_success.feature +11 -0
  185. data/examples/self_test/features/background/multiline_args_background.feature +32 -0
  186. data/examples/self_test/features/background/passing_background.feature +10 -0
  187. data/examples/self_test/features/background/pending_background.feature +10 -0
  188. data/examples/self_test/features/background/scenario_outline_failing_background.feature +16 -0
  189. data/examples/self_test/features/background/scenario_outline_passing_background.feature +16 -0
  190. data/examples/self_test/features/call_undefined_step_from_step_def.feature +7 -0
  191. data/examples/self_test/features/failing_expectation.feature +4 -0
  192. data/examples/self_test/features/lots_of_undefined.feature +8 -0
  193. data/examples/self_test/features/multiline_name.feature +27 -0
  194. data/examples/self_test/features/outline_sample.feature +15 -0
  195. data/examples/self_test/features/sample.feature +21 -0
  196. data/examples/self_test/features/search_sample.feature +32 -0
  197. data/examples/self_test/features/step_definitions/sample_steps.rb +81 -0
  198. data/examples/self_test/features/support/env.rb +17 -0
  199. data/examples/self_test/features/tons_of_cukes.feature +52 -0
  200. data/examples/self_test/features/undefined_multiline_args.feature +12 -0
  201. data/examples/sinatra/Rakefile +6 -0
  202. data/examples/sinatra/app.rb +14 -0
  203. data/examples/sinatra/features/add.feature +11 -0
  204. data/examples/sinatra/features/step_definitions/add_steps.rb +15 -0
  205. data/examples/sinatra/features/support/env.rb +28 -0
  206. data/examples/sinatra/views/add.erb +5 -0
  207. data/examples/sinatra/views/layout.erb +8 -0
  208. data/examples/steps_library/features/step_definitions/steps_lib1.rb +8 -0
  209. data/examples/steps_library/features/step_definitions/steps_lib2.rb +8 -0
  210. data/examples/test_unit/Rakefile +6 -0
  211. data/examples/test_unit/features/step_definitions/test_unit_steps.rb +23 -0
  212. data/examples/test_unit/features/test_unit.feature +9 -0
  213. data/examples/tickets/Rakefile +16 -0
  214. data/examples/tickets/features/172.feature +28 -0
  215. data/examples/tickets/features/177/1.feature +29 -0
  216. data/examples/tickets/features/177/2.feature +21 -0
  217. data/examples/tickets/features/177/3.feature +18 -0
  218. data/examples/tickets/features/180.feature +7 -0
  219. data/examples/tickets/features/229/tagged_hooks.feature +8 -0
  220. data/examples/tickets/features/229/tagged_hooks.rb +14 -0
  221. data/examples/tickets/features/236.feature +13 -0
  222. data/examples/tickets/features/241.feature +13 -0
  223. data/examples/tickets/features/246.feature +4 -0
  224. data/examples/tickets/features/248.feature +11 -0
  225. data/examples/tickets/features/270/back.feature +14 -0
  226. data/examples/tickets/features/270/back.steps.rb +14 -0
  227. data/examples/tickets/features/272/hooks.feature +26 -0
  228. data/examples/tickets/features/272/hooks_steps.rb +53 -0
  229. data/examples/tickets/features/279/py_string_indent.feature +25 -0
  230. data/examples/tickets/features/279/py_string_indent.steps.rb +12 -0
  231. data/examples/tickets/features/279/wrong.feature_ +11 -0
  232. data/examples/tickets/features/301/filter_background_tagged_hooks.feature +6 -0
  233. data/examples/tickets/features/301/filter_background_tagged_hooks_steps.rb +12 -0
  234. data/examples/tickets/features/306/only_background.feature +4 -0
  235. data/examples/tickets/features/lib/eatting_machine.rb +18 -0
  236. data/examples/tickets/features/lib/pantry.rb +20 -0
  237. data/examples/tickets/features/scenario_outline.feature +95 -0
  238. data/examples/tickets/features/step_definitons/246_steps.rb +3 -0
  239. data/examples/tickets/features/step_definitons/248_steps.rb +15 -0
  240. data/examples/tickets/features/step_definitons/scenario_outline_steps.rb +42 -0
  241. data/examples/tickets/features/step_definitons/tickets_steps.rb +66 -0
  242. data/examples/tickets/features/tickets.feature +28 -0
  243. data/examples/watir/README.textile +16 -0
  244. data/examples/watir/Rakefile +6 -0
  245. data/examples/watir/features/search.feature +12 -0
  246. data/examples/watir/features/step_definitons/search_steps.rb +22 -0
  247. data/examples/watir/features/support/env.rb +32 -0
  248. data/features/after_block_exceptions.feature +102 -0
  249. data/features/after_step_block_exceptions.feature +104 -0
  250. data/features/background.feature +311 -0
  251. data/features/bug_371.feature +32 -0
  252. data/features/cucumber_cli.feature +549 -0
  253. data/features/cucumber_cli_diff_disabled.feature +53 -0
  254. data/features/cucumber_cli_outlines.feature +109 -0
  255. data/features/custom_formatter.feature +11 -0
  256. data/features/drb_server_integration.feature +115 -0
  257. data/features/exclude_files.feature +20 -0
  258. data/features/expand.feature +49 -0
  259. data/features/html_formatter/a.html +185 -0
  260. data/features/html_formatter.feature +7 -0
  261. data/features/junit_formatter.feature +71 -0
  262. data/features/language_from_header.feature +30 -0
  263. data/features/multiline_names.feature +43 -0
  264. data/features/rake_task.feature +150 -0
  265. data/features/report_called_undefined_steps.feature +35 -0
  266. data/features/snippet.feature +22 -0
  267. data/features/step_definitions/cucumber_steps.rb +130 -0
  268. data/features/step_definitions/extra_steps.rb +2 -0
  269. data/features/steps_formatter.feature +25 -0
  270. data/features/support/env.rb +120 -0
  271. data/features/usage.feature +126 -0
  272. data/features/work_in_progress.feature +151 -0
  273. data/gem_tasks/deployment.rake +11 -0
  274. data/gem_tasks/environment.rake +7 -0
  275. data/gem_tasks/features.rake +10 -0
  276. data/gem_tasks/fix_cr_lf.rake +10 -0
  277. data/gem_tasks/flog.rake +4 -0
  278. data/gem_tasks/gemspec.rake +10 -0
  279. data/gem_tasks/rspec.rake +45 -0
  280. data/gem_tasks/sass.rake +4 -0
  281. data/gem_tasks/yard.rake +8 -0
  282. data/lib/autotest/cucumber.rb +6 -0
  283. data/lib/autotest/cucumber_mixin.rb +125 -0
  284. data/lib/autotest/cucumber_rails.rb +6 -0
  285. data/lib/autotest/cucumber_rails_rspec.rb +6 -0
  286. data/lib/autotest/cucumber_rspec.rb +6 -0
  287. data/lib/autotest/discover.rb +9 -0
  288. data/lib/cucumber/ast/background.rb +62 -0
  289. data/lib/cucumber/ast/comment.rb +30 -0
  290. data/lib/cucumber/ast/examples.rb +26 -0
  291. data/lib/cucumber/ast/feature.rb +58 -0
  292. data/lib/cucumber/ast/feature_element.rb +57 -0
  293. data/lib/cucumber/ast/features.rb +30 -0
  294. data/lib/cucumber/ast/outline_table.rb +143 -0
  295. data/lib/cucumber/ast/py_string.rb +57 -0
  296. data/lib/cucumber/ast/scenario.rb +83 -0
  297. data/lib/cucumber/ast/scenario_outline.rb +93 -0
  298. data/lib/cucumber/ast/step.rb +112 -0
  299. data/lib/cucumber/ast/step_collection.rb +75 -0
  300. data/lib/cucumber/ast/step_invocation.rb +136 -0
  301. data/lib/cucumber/ast/table.rb +334 -0
  302. data/lib/cucumber/ast/tags.rb +33 -0
  303. data/lib/cucumber/ast/visitor.rb +116 -0
  304. data/lib/cucumber/ast.rb +29 -0
  305. data/lib/cucumber/broadcaster.rb +13 -0
  306. data/lib/cucumber/cli/configuration.rb +427 -0
  307. data/lib/cucumber/cli/drb_client.rb +20 -0
  308. data/lib/cucumber/cli/language_help_formatter.rb +59 -0
  309. data/lib/cucumber/cli/main.rb +136 -0
  310. data/lib/cucumber/core_ext/exception.rb +53 -0
  311. data/lib/cucumber/core_ext/instance_exec.rb +67 -0
  312. data/lib/cucumber/core_ext/proc.rb +29 -0
  313. data/lib/cucumber/core_ext/string.rb +48 -0
  314. data/lib/cucumber/feature_file.rb +47 -0
  315. data/lib/cucumber/filter.rb +50 -0
  316. data/lib/cucumber/formatter/ansicolor.rb +110 -0
  317. data/lib/cucumber/formatter/color_io.rb +23 -0
  318. data/lib/cucumber/formatter/console.rb +149 -0
  319. data/lib/cucumber/formatter/cucumber.css +132 -0
  320. data/lib/cucumber/formatter/cucumber.sass +139 -0
  321. data/lib/cucumber/formatter/duration.rb +10 -0
  322. data/lib/cucumber/formatter/html.rb +258 -0
  323. data/lib/cucumber/formatter/junit.rb +75 -0
  324. data/lib/cucumber/formatter/pretty.rb +188 -0
  325. data/lib/cucumber/formatter/profile.rb +77 -0
  326. data/lib/cucumber/formatter/progress.rb +60 -0
  327. data/lib/cucumber/formatter/rerun.rb +44 -0
  328. data/lib/cucumber/formatter/steps.rb +49 -0
  329. data/lib/cucumber/formatter/tag_cloud.rb +28 -0
  330. data/lib/cucumber/formatter/unicode.rb +35 -0
  331. data/lib/cucumber/formatter/usage.rb +85 -0
  332. data/lib/cucumber/formatters/unicode.rb +7 -0
  333. data/lib/cucumber/languages.yml +532 -0
  334. data/lib/cucumber/parser/feature.rb +1787 -0
  335. data/lib/cucumber/parser/feature.tt +324 -0
  336. data/lib/cucumber/parser/i18n/language.rb +80 -0
  337. data/lib/cucumber/parser/i18n.tt +42 -0
  338. data/lib/cucumber/parser/table.rb +414 -0
  339. data/lib/cucumber/parser/table.tt +71 -0
  340. data/lib/cucumber/parser/treetop_ext.rb +52 -0
  341. data/lib/cucumber/parser.rb +6 -0
  342. data/lib/cucumber/platform.rb +23 -0
  343. data/lib/cucumber/rails/rspec.rb +10 -0
  344. data/lib/cucumber/rails/world.rb +99 -0
  345. data/lib/cucumber/rake/task.rb +233 -0
  346. data/lib/cucumber/rspec_neuter.rb +23 -0
  347. data/lib/cucumber/step_definition.rb +122 -0
  348. data/lib/cucumber/step_match.rb +61 -0
  349. data/lib/cucumber/step_mother.rb +362 -0
  350. data/lib/cucumber/version.rb +10 -0
  351. data/lib/cucumber/world.rb +53 -0
  352. data/lib/cucumber.rb +11 -0
  353. data/rails_generators/cucumber/USAGE +11 -0
  354. data/rails_generators/cucumber/cucumber_generator.rb +66 -0
  355. data/rails_generators/cucumber/templates/cucumber +8 -0
  356. data/rails_generators/cucumber/templates/cucumber.rake +20 -0
  357. data/rails_generators/cucumber/templates/cucumber_environment.rb +23 -0
  358. data/rails_generators/cucumber/templates/env.rb +26 -0
  359. data/rails_generators/cucumber/templates/paths.rb +27 -0
  360. data/rails_generators/cucumber/templates/spork_env.rb +36 -0
  361. data/rails_generators/cucumber/templates/webrat_steps.rb +147 -0
  362. data/rails_generators/feature/USAGE +12 -0
  363. data/rails_generators/feature/feature_generator.rb +40 -0
  364. data/rails_generators/feature/templates/feature.erb +31 -0
  365. data/rails_generators/feature/templates/steps.erb +20 -0
  366. data/spec/cucumber/ast/background_spec.rb +50 -0
  367. data/spec/cucumber/ast/feature_element_spec.rb +40 -0
  368. data/spec/cucumber/ast/feature_factory.rb +63 -0
  369. data/spec/cucumber/ast/feature_spec.rb +38 -0
  370. data/spec/cucumber/ast/py_string_spec.rb +51 -0
  371. data/spec/cucumber/ast/scenario_outline_spec.rb +67 -0
  372. data/spec/cucumber/ast/scenario_spec.rb +38 -0
  373. data/spec/cucumber/ast/step_collection_spec.rb +17 -0
  374. data/spec/cucumber/ast/step_spec.rb +66 -0
  375. data/spec/cucumber/ast/table_spec.rb +186 -0
  376. data/spec/cucumber/ast/visitor_spec.rb +27 -0
  377. data/spec/cucumber/broadcaster_spec.rb +15 -0
  378. data/spec/cucumber/cli/configuration_spec.rb +396 -0
  379. data/spec/cucumber/cli/drb_client_spec.rb +43 -0
  380. data/spec/cucumber/cli/main_spec.rb +140 -0
  381. data/spec/cucumber/core_ext/proc_spec.rb +54 -0
  382. data/spec/cucumber/core_ext/string_spec.rb +42 -0
  383. data/spec/cucumber/formatter/ansicolor_spec.rb +35 -0
  384. data/spec/cucumber/formatter/color_io_spec.rb +27 -0
  385. data/spec/cucumber/formatter/duration_spec.rb +22 -0
  386. data/spec/cucumber/formatter/progress_spec.rb +36 -0
  387. data/spec/cucumber/parser/feature_parser_spec.rb +387 -0
  388. data/spec/cucumber/parser/table_parser_spec.rb +48 -0
  389. data/spec/cucumber/rails/stubs/mini_rails.rb +18 -0
  390. data/spec/cucumber/rails/stubs/test_help.rb +1 -0
  391. data/spec/cucumber/rails/world_spec.rb +11 -0
  392. data/spec/cucumber/sell_cucumbers.feature +19 -0
  393. data/spec/cucumber/step_definition_spec.rb +101 -0
  394. data/spec/cucumber/step_mother_spec.rb +155 -0
  395. data/spec/cucumber/treetop_parser/empty_feature.feature +4 -0
  396. data/spec/cucumber/treetop_parser/empty_scenario.feature +9 -0
  397. data/spec/cucumber/treetop_parser/empty_scenario_outline.feature +3 -0
  398. data/spec/cucumber/treetop_parser/fit_scenario.feature +8 -0
  399. data/spec/cucumber/treetop_parser/given_scenario.feature +9 -0
  400. data/spec/cucumber/treetop_parser/invalid_scenario_outlines.feature +7 -0
  401. data/spec/cucumber/treetop_parser/multiline_steps.feature +17 -0
  402. data/spec/cucumber/treetop_parser/multiple_tables.feature +27 -0
  403. data/spec/cucumber/treetop_parser/scenario_outline.feature +16 -0
  404. data/spec/cucumber/treetop_parser/spaces.feature +12 -0
  405. data/spec/cucumber/treetop_parser/test_dos.feature +25 -0
  406. data/spec/cucumber/treetop_parser/with_comments.feature +10 -0
  407. data/spec/cucumber/treetop_parser/with_tags.feature +18 -0
  408. data/spec/cucumber/world/pending_spec.rb +47 -0
  409. data/spec/spec.opts +2 -0
  410. data/spec/spec_helper.rb +13 -0
  411. metadata +506 -0
@@ -0,0 +1,14 @@
1
+ require 'spec/expectations'
2
+
3
+ Given /^plop$/ do
4
+ raise "Only one plop!" if @plop
5
+ @plop = true
6
+ end
7
+
8
+ When /^I barp$/ do
9
+ @plop.should == true
10
+ end
11
+
12
+ When /^I wibble$/ do
13
+ @plop.should == true
14
+ end
@@ -0,0 +1,26 @@
1
+ @intentional_failure
2
+ Feature: Hooks
3
+ In order to integrate with my complex environment
4
+ I need to check scenario status in an After block
5
+
6
+ @272_failed
7
+ Scenario: Failed
8
+ Given I fail
9
+
10
+ @272_undefined
11
+ Scenario: Undefined
12
+ Given I am undefined
13
+
14
+ @272_passed
15
+ Scenario: Passed
16
+ Given I pass
17
+
18
+ @272_outline
19
+ Scenario Outline: Should work too
20
+ Given <something>
21
+
22
+ Examples:
23
+ | something |
24
+ | I fail |
25
+ | I am undefined |
26
+ | I pass |
@@ -0,0 +1,53 @@
1
+ require 'spec/expectations'
2
+
3
+ Given /^I fail$/ do
4
+ raise "BOOM (this is expected)"
5
+ end
6
+
7
+ Given /^I pass$/ do
8
+ end
9
+
10
+ module HookChecks
11
+ def check_failed(scenario)
12
+ scenario.should be_failed
13
+ scenario.should_not be_passed
14
+ scenario.exception.message.should == "BOOM (this is expected)"
15
+ end
16
+
17
+ def check_undefined(scenario)
18
+ scenario.should_not be_failed
19
+ scenario.should_not be_passed
20
+ end
21
+
22
+ def check_passed(scenario)
23
+ scenario.should_not be_failed
24
+ scenario.should be_passed
25
+ end
26
+ end
27
+
28
+ World(HookChecks)
29
+
30
+ After('@272_failed') do |scenario|
31
+ check_failed(scenario)
32
+ end
33
+
34
+ After('@272_undefined') do |scenario|
35
+ check_undefined(scenario)
36
+ end
37
+
38
+ After('@272_passed') do |scenario|
39
+ check_passed(scenario)
40
+ end
41
+
42
+ counter = 0
43
+ After('@272_outline') do |scenario|
44
+ case(counter)
45
+ when 0
46
+ check_failed(scenario)
47
+ when 1
48
+ check_undefined(scenario)
49
+ when 2
50
+ check_passed(scenario)
51
+ end
52
+ counter +=1
53
+ end
@@ -0,0 +1,25 @@
1
+ Feature: pystring indentaion testcase
2
+
3
+ Scenario: example of correct indentation
4
+ Given multiline string
5
+ """
6
+ I'm a cucumber and I'm ok
7
+ I sleep all night and test all day
8
+ """
9
+ Then string is
10
+ """
11
+ I'm a cucumber and I'm ok
12
+ I sleep all night and test all day
13
+ """
14
+
15
+ Scenario: example of wrong indentation
16
+ Given I am in tickets/features/279
17
+ When I run cucumber -q wrong.feature_
18
+ Then it should fail with
19
+ """
20
+
21
+ """
22
+ And STDERR should match
23
+ """
24
+ wrong.feature_:8:10: Parse error
25
+ """
@@ -0,0 +1,12 @@
1
+ require 'spec/expectations'
2
+
3
+ require File.dirname(__FILE__) + '/../../../../features/step_definitions/cucumber_steps.rb'
4
+ require File.dirname(__FILE__) + '/../../../../features/support/env.rb'
5
+
6
+ Given /^multiline string$/ do |string|
7
+ @string = string
8
+ end
9
+
10
+ Then /^string is$/ do |string|
11
+ @string.should == string
12
+ end
@@ -0,0 +1,11 @@
1
+ Feature: pystring indentaion testcase
2
+
3
+ Scenario: example of wrong indentation
4
+ Given multiline string
5
+
6
+
7
+
8
+ """
9
+ I'm a cucumber and I'm ok
10
+ I sleep all night and test all day
11
+ """
@@ -0,0 +1,6 @@
1
+ Feature https://rspec.lighthouseapp.com/projects/16211/tickets/301
2
+ Background: A background
3
+ Given whatever
4
+
5
+ Scenario: VB is not cool
6
+ Then VB should not be cool
@@ -0,0 +1,12 @@
1
+ require 'spec/expectations'
2
+
3
+ Before('@nothing_has_this_tag') do
4
+ @vb = :cool
5
+ end
6
+
7
+ Given /^whatever$/ do
8
+ end
9
+
10
+ Then /^VB should not be cool$/ do
11
+ @vb.should_not == :cool
12
+ end
@@ -0,0 +1,4 @@
1
+ Feature: woo yeah
2
+
3
+ Background:
4
+ Given passing step without a table
@@ -0,0 +1,18 @@
1
+ class EattingMachine
2
+
3
+ attr_reader :fruit_total, :belly_count
4
+ attr_accessor :belly_count
5
+
6
+ def initialize(fruit_name, fruit_total)
7
+ @fruit_name = fruit_name
8
+ @fruit_total = fruit_total.to_i
9
+ @belly_count = 0
10
+ end
11
+
12
+ def eat(count)
13
+ count = count.to_i
14
+ @fruit_total = @fruit_total - count
15
+ @belly_count += count
16
+ end
17
+
18
+ end
@@ -0,0 +1,20 @@
1
+ class Pantry
2
+
3
+ def initialize
4
+ @items = {}
5
+ end
6
+
7
+ def add(food_name, count)
8
+ @items[food_name] ||= 0
9
+ @items[food_name] += count.to_i
10
+ end
11
+
12
+ def remove(food_name, count)
13
+ @items[food_name] -= count.to_i
14
+ end
15
+
16
+ def count(food_name)
17
+ @items[food_name]
18
+ end
19
+
20
+ end
@@ -0,0 +1,95 @@
1
+ Feature: Outlines
2
+ In order to re-use scenario table values
3
+ As a citizen of Cucumbia
4
+ I want to explicitly mark the parameters in a scenario outline
5
+
6
+ Scenario Outline: controlling order
7
+ Given there are <start> cucumbers
8
+ When I eat <eat> cucumbers
9
+ Then I should have <left> cucumbers
10
+
11
+ Examples:
12
+ | left | start | eat |
13
+ | 7 | 12 | 5 |
14
+ | 15 | 20 | 5 |
15
+
16
+ Scenario Outline: reusing place holder
17
+ Given there are <start> cucumbers
18
+ When I eat <eat> cucumbers
19
+ Then I should have <left> cucumbers
20
+ And I should have <eat> cucumbers in my belly
21
+
22
+ Examples: Lots of cukes
23
+ | start | eat | left |
24
+ | 12 | 5 | 7 |
25
+ | 20 | 5 | 15 |
26
+
27
+ Examples: Ridiculous amounts of cukes
28
+ | start | eat | left |
29
+ | 120 | 50 | 70 |
30
+ | 200 | 50 | 150 |
31
+
32
+ Scenario Outline: no placeholders
33
+ Given there are 12 cucumbers
34
+ When I eat 5 cucumbers
35
+ Then I should have 7 cucumbers
36
+
37
+ Examples:
38
+ | start | eat | left |
39
+ | 12 | 5 | 7 |
40
+ | 20 | 5 | 15 |
41
+
42
+ Scenario Outline: using '<' and '>' not as placeholder
43
+ Given the belly space is < 12 and > 6
44
+ And there are <start> cucumbers
45
+ When I eat <eat> cucumbers
46
+ Then I should have <left> cucumbers
47
+
48
+ Examples:
49
+ | start | eat | left |
50
+ | 12 | 5 | 7 |
51
+ | 20 | 5 | 15 |
52
+
53
+ Scenario Outline: with step tables
54
+ Given I have the following fruits in my pantry
55
+ | name | quantity |
56
+ | cucumbers | 10 |
57
+ | strawberrys | 5 |
58
+ | apricots | 7 |
59
+
60
+ When I eat <number> <fruits> from the pantry
61
+ Then I should have <left> <fruits> in the pantry
62
+
63
+ Examples:
64
+ | number | fruits | left |
65
+ | 2 | cucumbers | 8 |
66
+ | 4 | strawberrys| 1 |
67
+ | 2 | apricots | 5 |
68
+
69
+ Scenario Outline: placeholder in a multiline string
70
+ Given my shopping list
71
+ """
72
+ Must buy some <fruits>
73
+ """
74
+ Then my shopping list should equal
75
+ """
76
+ Must buy some cucumbers
77
+ """
78
+
79
+ Examples:
80
+ | fruits |
81
+ | cucumbers |
82
+
83
+ Scenario Outline: placeholder in step table
84
+ Given I have the following fruits in my pantry
85
+ | name | quantity |
86
+ | cucumbers | <quant_cukes> |
87
+ | strawberrys | <quant_straw> |
88
+
89
+ When I eat <number> <fruits> from the pantry
90
+ Then I should have <left> <fruits> in the pantry
91
+
92
+ Examples:
93
+ | quant_cukes | quant_straw | number | fruits | left |
94
+ | 10 | 5 | 2 | cucumbers | 8 |
95
+ | 5 | 5 | 4 | strawberrys | 1 |
@@ -0,0 +1,3 @@
1
+ Given /^no ([a-z]+(?: [a-z]+)*) exists in the system$/ do |resource|
2
+ resource.should == "public holiday"
3
+ end
@@ -0,0 +1,15 @@
1
+ Given /^this is pending until we fix it$/ do
2
+ pending
3
+ end
4
+
5
+ Given /^context with Cheese$/ do
6
+ pending
7
+ end
8
+
9
+ When /^action$/ do
10
+ pending
11
+ end
12
+
13
+ Then /^outcome with Pepper Jack$/ do
14
+ pending
15
+ end
@@ -0,0 +1,42 @@
1
+ Given /^there are (\d+) (\w+)$/ do |count, fruit|
2
+ @eattingMachine = EattingMachine.new(fruit, count)
3
+ end
4
+
5
+ Given "the belly space is < 12 and > 6" do
6
+ end
7
+
8
+ Given "I have the following fruits in my pantry" do |pantry_table|
9
+ @pantry = Pantry.new
10
+ pantry_table.hashes.each do |item|
11
+ @pantry.add(item['name'].downcase, item['quantity'])
12
+ end
13
+ end
14
+
15
+ Given "my shopping list" do |list|
16
+ @shopping_list = list
17
+ end
18
+
19
+ When /^I eat (\d+) (\w+)$/ do |count, fruit|
20
+ @eattingMachine.eat(count)
21
+ @eattingMachine.belly_count = count.to_i
22
+ end
23
+
24
+ When /^I eat (\d+) (\w+) from the pantry$/ do |count, fruit|
25
+ @pantry.remove(fruit, count.to_i)
26
+ end
27
+
28
+ Then /^I should have (\d+) (\w+)$/ do |count, fruit|
29
+ @eattingMachine.fruit_total.should == count.to_i
30
+ end
31
+
32
+ Then /^I should have (\d+) (\w+) in my belly$/ do |count, fruit|
33
+ @eattingMachine.belly_count.should == count.to_i
34
+ end
35
+
36
+ Then /^I should have (\d+) (\w+) in the pantry$/ do |count, fruit|
37
+ @pantry.count(fruit).should == count.to_i
38
+ end
39
+
40
+ Then /^my shopping list should equal$/ do |list|
41
+ @shopping_list.should == list
42
+ end
@@ -0,0 +1,66 @@
1
+ require 'spec/expectations'
2
+
3
+ Given "be_empty" do
4
+ [1,2].should_not be_empty
5
+ end
6
+
7
+ Given "nested step is called" do
8
+ Given "I like mushroom", Cucumber::Ast::Table.new([
9
+ %w{sponge bob},
10
+ %w{is cool}
11
+ ])
12
+ end
13
+
14
+ Given 'nested step is called using text table' do
15
+ Given "I like mushroom", table(%{
16
+ | sponge | bob |
17
+ | is | cool |
18
+ })
19
+
20
+ # Alternative syntax (file and line will be reported on parse error)
21
+ # Given "I like mushroom", table(<<-EOT, __FILE__, __LINE__)
22
+ # | sponge | bob |
23
+ # | is | cool
24
+ # EOT
25
+ end
26
+
27
+ Given "I like $what" do |what, table|
28
+ @magic = what
29
+ @tool = table.raw[0][0]
30
+ end
31
+
32
+ Then "nested step should be executed" do
33
+ @magic.should == 'mushroom'
34
+ @tool.should == 'sponge'
35
+ end
36
+
37
+ Given /^the following table$/ do |table|
38
+ @table = table
39
+ end
40
+
41
+ Then /^I should be (\w+) in (\w+)$/ do |key, value|
42
+ hash = @table.hashes[0]
43
+ hash[key].should == value
44
+ end
45
+
46
+ Then /^I should see a multiline string like$/ do |s|
47
+ s.should == %{A string
48
+ that spans
49
+ several lines}
50
+ end
51
+
52
+ Given /^the following users exist in the system$/ do |table|
53
+ table.hashes[0][:role_assignments].should == 'HUMAN RESOURCE'
54
+ end
55
+
56
+ Given /^I have a pending step$/ do
57
+ pending
58
+ end
59
+
60
+ When /^I run this feature with the progress format$/ do
61
+ pending
62
+ end
63
+
64
+ Then /^I should get a no method error for 'backtrace_line'$/ do
65
+ pending
66
+ end
@@ -0,0 +1,28 @@
1
+ Feature: Cucumber
2
+ In order to have a happy user base
3
+ As a Cucumber user
4
+ I don't want no stinkin bugs
5
+
6
+ Scenario: RSpec be_*
7
+ Given be_empty
8
+
9
+ Scenario: Call step from step
10
+ Given nested step is called
11
+ Then nested step should be executed
12
+
13
+ Scenario: Call step from step using text table
14
+ Given nested step is called using text table
15
+ Then nested step should be executed
16
+
17
+ Scenario: Reading a table
18
+ Given the following table
19
+ | born | working |
20
+ | Oslo | London |
21
+ Then I should be working in London
22
+ And I should be born in Oslo
23
+ And I should see a multiline string like
24
+ """
25
+ A string
26
+ that spans
27
+ several lines
28
+ """
@@ -0,0 +1,16 @@
1
+ Here you'll find examples for Watir, FireWatir, SafariWatir and Celerity.
2
+ All of these browser libraries have the same API, so the example code will
3
+ work with all of them.
4
+
5
+ Just run with:
6
+
7
+ rake features
8
+
9
+ This will use Watir/IE if you're on Windows, and SafariWatir/Safari if you're on OS X.
10
+ You can force the use of FireWatir/Firefox on any platform like this:
11
+
12
+ rake features FIREWATIR=true
13
+
14
+ And finally, you can use Celerity by running in JRuby:
15
+
16
+ jruby -S rake features
@@ -0,0 +1,6 @@
1
+ $:.unshift(File.dirname(__FILE__) + '/../../lib')
2
+ require 'cucumber/rake/task'
3
+
4
+ Cucumber::Rake::Task.new do |t|
5
+ t.cucumber_opts = %w{--format pretty}
6
+ end
@@ -0,0 +1,12 @@
1
+ Feature: Search
2
+ In order to learn more
3
+ As an information seeker
4
+ I want to find more information
5
+
6
+ Scenario: Find what I'm looking for
7
+ Given I am on the Google search page
8
+ When I search for "cucumber github"
9
+ Then I should see
10
+ """
11
+ BDD that talks to domain experts first and code second
12
+ """
@@ -0,0 +1,22 @@
1
+ # Full Watir API: http://wtr.rubyforge.org/rdoc/
2
+ # Full RSpec API: http://rspec.rubyforge.org/
3
+
4
+ Given 'I am on the Google search page' do
5
+ @browser.goto 'http://www.google.com/'
6
+ end
7
+
8
+ When /I search for "(.*)"/ do |query|
9
+ @browser.text_field(:name, 'q').set(query)
10
+ @browser.button(:name, 'btnG').click
11
+ end
12
+
13
+ Then /I should see/ do |text|
14
+ @browser.text.should =~ /#{text}/m
15
+ end
16
+
17
+ # To avoid step definitions that are tightly coupled to your user interface,
18
+ # consider creating classes for your pages - such as this:
19
+ # http://github.com/aslakhellesoy/cucumber/tree/v0.1.15/examples/watir/features/step_definitons/search_steps.rb
20
+ #
21
+ # You may keep the page classes along your steps, or even better, put them in separate files, e.g.
22
+ # support/pages/google_search.rb
@@ -0,0 +1,32 @@
1
+ require 'spec/expectations'
2
+
3
+ if ENV['FIREWATIR']
4
+ require 'firewatir'
5
+ Browser = FireWatir::Firefox
6
+ else
7
+ case RUBY_PLATFORM
8
+ when /darwin/
9
+ require 'safariwatir'
10
+ Browser = Watir::Safari
11
+ when /win32|mingw/
12
+ require 'watir'
13
+ Browser = Watir::IE
14
+ when /java/
15
+ require 'celerity'
16
+ Browser = Celerity::Browser
17
+ else
18
+ raise "This platform is not supported (#{PLATFORM})"
19
+ end
20
+ end
21
+
22
+ # "before all"
23
+ browser = Browser.new
24
+
25
+ Before do
26
+ @browser = browser
27
+ end
28
+
29
+ # "after all"
30
+ at_exit do
31
+ browser.close
32
+ end
@@ -0,0 +1,102 @@
1
+ Feature: After Block Exceptions
2
+ In order to use custom assertions at the end of each scenario
3
+ As a developer
4
+ I want exceptions raised in After blocks to be handled gracefully and reported by the formatters
5
+
6
+ Background:
7
+ Given a standard Cucumber project directory structure
8
+ And a file named "features/step_definitions/steps.rb" with:
9
+ """
10
+ Given /^this step does something naughty$/ do
11
+ @naughty = true
12
+ end
13
+
14
+ Given /^this step works$/ do
15
+ end
16
+ """
17
+ And a file named "features/support/env.rb" with:
18
+ """
19
+ class NaughtyScenarioException < Exception; end
20
+ After do
21
+ if @naughty
22
+ raise NaughtyScenarioException.new("This scenario has been very very naughty")
23
+ end
24
+ end
25
+ """
26
+
27
+ @mri186
28
+ Scenario: Handle Exception in standard scenario step and carry on
29
+ Given a file named "features/naughty_step_in_scenario.feature" with:
30
+ """
31
+ Feature: Sample
32
+
33
+ Scenario: Naughty Step
34
+ Given this step does something naughty
35
+
36
+ Scenario: Success
37
+ Given this step works
38
+ """
39
+ When I run cucumber features
40
+ Then it should fail with
41
+ """
42
+ Feature: Sample
43
+
44
+ Scenario: Naughty Step # features/naughty_step_in_scenario.feature:3
45
+ Given this step does something naughty # features/step_definitions/steps.rb:1
46
+ This scenario has been very very naughty (NaughtyScenarioException)
47
+ ./features/support/env.rb:4:in `After'
48
+
49
+ Scenario: Success # features/naughty_step_in_scenario.feature:6
50
+ Given this step works # features/step_definitions/steps.rb:5
51
+
52
+ Failing Scenarios:
53
+ cucumber features/naughty_step_in_scenario.feature:3 # Scenario: Naughty Step
54
+
55
+ 2 scenarios (1 failed, 1 passed)
56
+ 2 steps (2 passed)
57
+
58
+ """
59
+
60
+ @mri186
61
+ Scenario: Handle Exception in scenario outline table row and carry on
62
+ Given a file named "features/naughty_step_in_scenario_outline.feature" with:
63
+ """
64
+ Feature: Sample
65
+
66
+ Scenario Outline: Naughty Step
67
+ Given this step <Might Work>
68
+
69
+ Examples:
70
+ | Might Work |
71
+ | works |
72
+ | does something naughty |
73
+ | works |
74
+
75
+ Scenario: Success
76
+ Given this step works
77
+
78
+ """
79
+ When I run cucumber features
80
+ Then it should fail with
81
+ """
82
+ Feature: Sample
83
+
84
+ Scenario Outline: Naughty Step # features/naughty_step_in_scenario_outline.feature:3
85
+ Given this step <Might Work> # features/step_definitions/steps.rb:5
86
+
87
+ Examples:
88
+ | Might Work |
89
+ | works |
90
+ | does something naughty |
91
+ This scenario has been very very naughty (NaughtyScenarioException)
92
+ ./features/support/env.rb:4:in `After'
93
+ | works |
94
+
95
+ Scenario: Success # features/naughty_step_in_scenario_outline.feature:12
96
+ Given this step works # features/step_definitions/steps.rb:5
97
+
98
+ 4 scenarios (1 failed, 3 passed)
99
+ 4 steps (4 passed)
100
+
101
+ """
102
+