engineyard-cucumber 0.3.101

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 (454) hide show
  1. data/History.txt +1073 -0
  2. data/License.txt +22 -0
  3. data/Manifest.txt +453 -0
  4. data/README.txt +4 -0
  5. data/Rakefile +9 -0
  6. data/bin/cucumber +17 -0
  7. data/config/hoe.rb +78 -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 +32 -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-lol/Rakefile +6 -0
  46. data/examples/i18n/en-lol/features/step_definitions/cucumbrz_steps.rb +16 -0
  47. data/examples/i18n/en-lol/features/stuffing.feature +8 -0
  48. data/examples/i18n/en-lol/features/support/env.rb +8 -0
  49. data/examples/i18n/en-lol/lib/basket.rb +12 -0
  50. data/examples/i18n/en-lol/lib/belly.rb +11 -0
  51. data/examples/i18n/en/Rakefile +6 -0
  52. data/examples/i18n/en/features/addition.feature +17 -0
  53. data/examples/i18n/en/features/division.feature +10 -0
  54. data/examples/i18n/en/features/step_definitons/calculator_steps.rb +24 -0
  55. data/examples/i18n/en/lib/calculator.rb +14 -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 +17 -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/uz/Rakefile +6 -0
  151. data/examples/i18n/uz/features/addition.feature +10 -0
  152. data/examples/i18n/uz/features/consecutive_calculations.feature +17 -0
  153. data/examples/i18n/uz/features/division.feature +17 -0
  154. data/examples/i18n/uz/features/step_definitons/calculator_steps.rb +19 -0
  155. data/examples/i18n/uz/features/support/env.rb +6 -0
  156. data/examples/i18n/uz/features/support/world.rb +8 -0
  157. data/examples/i18n/uz/lib/calculator.rb +24 -0
  158. data/examples/i18n/zh-CN/Rakefile +6 -0
  159. data/examples/i18n/zh-CN/features/addition.feature +18 -0
  160. data/examples/i18n/zh-CN/features/step_definitons/calculator_steps.rb +26 -0
  161. data/examples/i18n/zh-CN/lib/calculator.rb +10 -0
  162. data/examples/i18n/zh-TW/Rakefile +6 -0
  163. data/examples/i18n/zh-TW/features/addition.feature +17 -0
  164. data/examples/i18n/zh-TW/features/division.feature +11 -0
  165. data/examples/i18n/zh-TW/features/step_definitons/calculator_steps.rb +24 -0
  166. data/examples/i18n/zh-TW/lib/calculator.rb +14 -0
  167. data/examples/java/README.textile +18 -0
  168. data/examples/java/build.xml +33 -0
  169. data/examples/java/features/hello.feature +11 -0
  170. data/examples/java/features/step_definitons/hello_steps.rb +23 -0
  171. data/examples/java/features/step_definitons/tree_steps.rb +14 -0
  172. data/examples/java/features/tree.feature +9 -0
  173. data/examples/java/src/cucumber/demo/Hello.java +16 -0
  174. data/examples/junit/features/one_passing_one_failing.feature +8 -0
  175. data/examples/junit/features/pending.feature +5 -0
  176. data/examples/junit/features/step_definitions/steps.rb +11 -0
  177. data/examples/pure_java/README.textile +5 -0
  178. data/examples/python/features/fibonacci.feature +19 -0
  179. data/examples/python/features/step_definitions/fib_steps.py +3 -0
  180. data/examples/python/features/step_definitions/fib_steps.rb +7 -0
  181. data/examples/python/features/support/env.rb +21 -0
  182. data/examples/python/lib/fib.py +7 -0
  183. data/examples/selenium/Rakefile +6 -0
  184. data/examples/selenium/features/search.feature +9 -0
  185. data/examples/selenium/features/step_definitons/search_steps.rb +13 -0
  186. data/examples/selenium/features/support/env.rb +19 -0
  187. data/examples/selenium_webrat/Rakefile +6 -0
  188. data/examples/selenium_webrat/config.ru +0 -0
  189. data/examples/selenium_webrat/features/search.feature +9 -0
  190. data/examples/selenium_webrat/features/step_definitons/search_steps.rb +13 -0
  191. data/examples/selenium_webrat/features/support/env.rb +45 -0
  192. data/examples/self_test/README.textile +6 -0
  193. data/examples/self_test/Rakefile +6 -0
  194. data/examples/self_test/features/background/background_tagged_before_on_outline.feature +12 -0
  195. data/examples/self_test/features/background/background_with_name.feature +7 -0
  196. data/examples/self_test/features/background/failing_background.feature +12 -0
  197. data/examples/self_test/features/background/failing_background_after_success.feature +11 -0
  198. data/examples/self_test/features/background/multiline_args_background.feature +32 -0
  199. data/examples/self_test/features/background/passing_background.feature +10 -0
  200. data/examples/self_test/features/background/pending_background.feature +10 -0
  201. data/examples/self_test/features/background/scenario_outline_failing_background.feature +16 -0
  202. data/examples/self_test/features/background/scenario_outline_passing_background.feature +16 -0
  203. data/examples/self_test/features/call_undefined_step_from_step_def.feature +7 -0
  204. data/examples/self_test/features/failing_expectation.feature +4 -0
  205. data/examples/self_test/features/lots_of_undefined.feature +8 -0
  206. data/examples/self_test/features/multiline_name.feature +27 -0
  207. data/examples/self_test/features/outline_sample.feature +15 -0
  208. data/examples/self_test/features/sample.feature +21 -0
  209. data/examples/self_test/features/search_sample.feature +32 -0
  210. data/examples/self_test/features/step_definitions/sample_steps.rb +93 -0
  211. data/examples/self_test/features/support/env.rb +24 -0
  212. data/examples/self_test/features/tags_sample.feature +17 -0
  213. data/examples/self_test/features/tons_of_cukes.feature +52 -0
  214. data/examples/self_test/features/transform_sample.feature +10 -0
  215. data/examples/self_test/features/undefined_multiline_args.feature +12 -0
  216. data/examples/self_test/list-of-features.txt +1 -0
  217. data/examples/sinatra/README.textile +13 -0
  218. data/examples/sinatra/Rakefile +6 -0
  219. data/examples/sinatra/app.rb +14 -0
  220. data/examples/sinatra/features/add.feature +11 -0
  221. data/examples/sinatra/features/step_definitions/add_steps.rb +15 -0
  222. data/examples/sinatra/features/support/env.rb +32 -0
  223. data/examples/sinatra/views/add.erb +5 -0
  224. data/examples/sinatra/views/layout.erb +8 -0
  225. data/examples/steps_library/features/step_definitions/steps_lib1.rb +8 -0
  226. data/examples/steps_library/features/step_definitions/steps_lib2.rb +8 -0
  227. data/examples/test_unit/Rakefile +6 -0
  228. data/examples/test_unit/features/step_definitions/test_unit_steps.rb +23 -0
  229. data/examples/test_unit/features/test_unit.feature +9 -0
  230. data/examples/tickets/Rakefile +16 -0
  231. data/examples/tickets/features/172.feature +28 -0
  232. data/examples/tickets/features/177/1.feature +29 -0
  233. data/examples/tickets/features/177/2.feature +21 -0
  234. data/examples/tickets/features/177/3.feature +18 -0
  235. data/examples/tickets/features/180.feature +7 -0
  236. data/examples/tickets/features/229/tagged_hooks.feature +8 -0
  237. data/examples/tickets/features/229/tagged_hooks.rb +14 -0
  238. data/examples/tickets/features/236.feature +13 -0
  239. data/examples/tickets/features/241.feature +13 -0
  240. data/examples/tickets/features/246.feature +4 -0
  241. data/examples/tickets/features/248.feature +11 -0
  242. data/examples/tickets/features/270/back.feature +14 -0
  243. data/examples/tickets/features/270/back.steps.rb +14 -0
  244. data/examples/tickets/features/272/hooks.feature +26 -0
  245. data/examples/tickets/features/272/hooks_steps.rb +53 -0
  246. data/examples/tickets/features/279/py_string_indent.feature +25 -0
  247. data/examples/tickets/features/279/py_string_indent.steps.rb +12 -0
  248. data/examples/tickets/features/279/wrong.feature_ +11 -0
  249. data/examples/tickets/features/301/filter_background_tagged_hooks.feature +6 -0
  250. data/examples/tickets/features/301/filter_background_tagged_hooks_steps.rb +12 -0
  251. data/examples/tickets/features/306/only_background.feature +4 -0
  252. data/examples/tickets/features/lib/eatting_machine.rb +18 -0
  253. data/examples/tickets/features/lib/pantry.rb +20 -0
  254. data/examples/tickets/features/scenario_outline.feature +95 -0
  255. data/examples/tickets/features/step_definitons/246_steps.rb +3 -0
  256. data/examples/tickets/features/step_definitons/248_steps.rb +15 -0
  257. data/examples/tickets/features/step_definitons/scenario_outline_steps.rb +42 -0
  258. data/examples/tickets/features/step_definitons/tickets_steps.rb +81 -0
  259. data/examples/tickets/features/table_diffing.feature +13 -0
  260. data/examples/tickets/features/tickets.feature +28 -0
  261. data/examples/watir/README.textile +16 -0
  262. data/examples/watir/Rakefile +6 -0
  263. data/examples/watir/features/search.feature +12 -0
  264. data/examples/watir/features/step_definitons/search_steps.rb +26 -0
  265. data/examples/watir/features/support/env.rb +32 -0
  266. data/features/background.feature +311 -0
  267. data/features/bug_371.feature +32 -0
  268. data/features/cucumber_cli.feature +667 -0
  269. data/features/cucumber_cli_diff_disabled.feature +54 -0
  270. data/features/cucumber_cli_outlines.feature +109 -0
  271. data/features/custom_formatter.feature +11 -0
  272. data/features/drb_server_integration.feature +173 -0
  273. data/features/exception_in_after_block.feature +102 -0
  274. data/features/exception_in_after_step_block.feature +104 -0
  275. data/features/exception_in_before_block.feature +47 -0
  276. data/features/exclude_files.feature +20 -0
  277. data/features/expand.feature +49 -0
  278. data/features/html_formatter.feature +7 -0
  279. data/features/html_formatter/a.html +183 -0
  280. data/features/junit_formatter.feature +89 -0
  281. data/features/language_from_header.feature +30 -0
  282. data/features/multiline_names.feature +43 -0
  283. data/features/post_configuration_hook.feature +37 -0
  284. data/features/profiles.feature +112 -0
  285. data/features/rake_task.feature +178 -0
  286. data/features/report_called_undefined_steps.feature +35 -0
  287. data/features/snippet.feature +22 -0
  288. data/features/step_definitions/cucumber_steps.rb +154 -0
  289. data/features/step_definitions/extra_steps.rb +2 -0
  290. data/features/steps_formatter.feature +25 -0
  291. data/features/support/env.rb +139 -0
  292. data/features/table_diffing.feature +45 -0
  293. data/features/transform.feature +24 -0
  294. data/features/unicode_table.feature +35 -0
  295. data/features/usage.feature +132 -0
  296. data/features/work_in_progress.feature +158 -0
  297. data/gem_tasks/contributors.rake +12 -0
  298. data/gem_tasks/deployment.rake +11 -0
  299. data/gem_tasks/environment.rake +7 -0
  300. data/gem_tasks/features.rake +11 -0
  301. data/gem_tasks/fix_cr_lf.rake +10 -0
  302. data/gem_tasks/flog.rake +4 -0
  303. data/gem_tasks/gemspec.rake +10 -0
  304. data/gem_tasks/rspec.rake +45 -0
  305. data/gem_tasks/sass.rake +4 -0
  306. data/gem_tasks/sdoc.rake +7 -0
  307. data/lib/README.rdoc +12 -0
  308. data/lib/autotest/cucumber.rb +6 -0
  309. data/lib/autotest/cucumber_mixin.rb +125 -0
  310. data/lib/autotest/cucumber_rails.rb +6 -0
  311. data/lib/autotest/cucumber_rails_rspec.rb +6 -0
  312. data/lib/autotest/cucumber_rspec.rb +6 -0
  313. data/lib/autotest/discover.rb +9 -0
  314. data/lib/cucumber.rb +10 -0
  315. data/lib/cucumber/ast.rb +29 -0
  316. data/lib/cucumber/ast/background.rb +63 -0
  317. data/lib/cucumber/ast/comment.rb +31 -0
  318. data/lib/cucumber/ast/examples.rb +32 -0
  319. data/lib/cucumber/ast/feature.rb +81 -0
  320. data/lib/cucumber/ast/feature_element.rb +61 -0
  321. data/lib/cucumber/ast/features.rb +40 -0
  322. data/lib/cucumber/ast/outline_table.rb +146 -0
  323. data/lib/cucumber/ast/py_string.rb +57 -0
  324. data/lib/cucumber/ast/scenario.rb +108 -0
  325. data/lib/cucumber/ast/scenario_outline.rb +96 -0
  326. data/lib/cucumber/ast/step.rb +116 -0
  327. data/lib/cucumber/ast/step_collection.rb +76 -0
  328. data/lib/cucumber/ast/step_invocation.rb +166 -0
  329. data/lib/cucumber/ast/table.rb +626 -0
  330. data/lib/cucumber/ast/tags.rb +44 -0
  331. data/lib/cucumber/ast/visitor.rb +115 -0
  332. data/lib/cucumber/broadcaster.rb +13 -0
  333. data/lib/cucumber/cli/configuration.rb +190 -0
  334. data/lib/cucumber/cli/drb_client.rb +26 -0
  335. data/lib/cucumber/cli/language_help_formatter.rb +61 -0
  336. data/lib/cucumber/cli/main.rb +116 -0
  337. data/lib/cucumber/cli/options.rb +394 -0
  338. data/lib/cucumber/cli/profile_loader.rb +70 -0
  339. data/lib/cucumber/constantize.rb +28 -0
  340. data/lib/cucumber/core_ext/instance_exec.rb +93 -0
  341. data/lib/cucumber/core_ext/proc.rb +29 -0
  342. data/lib/cucumber/core_ext/string.rb +48 -0
  343. data/lib/cucumber/feature_file.rb +54 -0
  344. data/lib/cucumber/filter.rb +52 -0
  345. data/lib/cucumber/formatter/ansicolor.rb +143 -0
  346. data/lib/cucumber/formatter/color_io.rb +23 -0
  347. data/lib/cucumber/formatter/console.rb +185 -0
  348. data/lib/cucumber/formatter/cucumber.css +132 -0
  349. data/lib/cucumber/formatter/cucumber.sass +139 -0
  350. data/lib/cucumber/formatter/duration.rb +13 -0
  351. data/lib/cucumber/formatter/html.rb +261 -0
  352. data/lib/cucumber/formatter/junit.rb +121 -0
  353. data/lib/cucumber/formatter/ordered_xml_markup.rb +24 -0
  354. data/lib/cucumber/formatter/pdf.rb +217 -0
  355. data/lib/cucumber/formatter/pretty.rb +222 -0
  356. data/lib/cucumber/formatter/profile.rb +78 -0
  357. data/lib/cucumber/formatter/progress.rb +67 -0
  358. data/lib/cucumber/formatter/rerun.rb +46 -0
  359. data/lib/cucumber/formatter/steps.rb +50 -0
  360. data/lib/cucumber/formatter/tag_cloud.rb +29 -0
  361. data/lib/cucumber/formatter/unicode.rb +35 -0
  362. data/lib/cucumber/formatter/usage.rb +86 -0
  363. data/lib/cucumber/formatters/unicode.rb +7 -0
  364. data/lib/cucumber/language_support.rb +30 -0
  365. data/lib/cucumber/language_support/language_methods.rb +75 -0
  366. data/lib/cucumber/language_support/step_definition_methods.rb +46 -0
  367. data/lib/cucumber/languages.yml +561 -0
  368. data/lib/cucumber/parser.rb +6 -0
  369. data/lib/cucumber/parser/feature.rb +1838 -0
  370. data/lib/cucumber/parser/feature.tt +351 -0
  371. data/lib/cucumber/parser/i18n.tt +42 -0
  372. data/lib/cucumber/parser/natural_language.rb +72 -0
  373. data/lib/cucumber/parser/table.rb +417 -0
  374. data/lib/cucumber/parser/table.tt +71 -0
  375. data/lib/cucumber/parser/treetop_ext.rb +53 -0
  376. data/lib/cucumber/platform.rb +27 -0
  377. data/lib/cucumber/py_support/py_dsl.py +8 -0
  378. data/lib/cucumber/py_support/py_language.py +2 -0
  379. data/lib/cucumber/py_support/py_language.rb +68 -0
  380. data/lib/cucumber/rails/rspec.rb +10 -0
  381. data/lib/cucumber/rails/world.rb +100 -0
  382. data/lib/cucumber/rake/task.rb +241 -0
  383. data/lib/cucumber/rb_support/rb_dsl.rb +100 -0
  384. data/lib/cucumber/rb_support/rb_hook.rb +18 -0
  385. data/lib/cucumber/rb_support/rb_language.rb +153 -0
  386. data/lib/cucumber/rb_support/rb_step_definition.rb +60 -0
  387. data/lib/cucumber/rb_support/rb_world.rb +93 -0
  388. data/lib/cucumber/rspec_neuter.rb +23 -0
  389. data/lib/cucumber/step_match.rb +61 -0
  390. data/lib/cucumber/step_mother.rb +307 -0
  391. data/lib/cucumber/version.rb +10 -0
  392. data/lib/cucumber/webrat/element_locator.rb +87 -0
  393. data/lib/cucumber/webrat/table_locator.rb +1 -0
  394. data/rails_generators/cucumber/USAGE +11 -0
  395. data/rails_generators/cucumber/cucumber_generator.rb +70 -0
  396. data/rails_generators/cucumber/templates/cucumber +9 -0
  397. data/rails_generators/cucumber/templates/cucumber.rake +36 -0
  398. data/rails_generators/cucumber/templates/cucumber_environment.rb +26 -0
  399. data/rails_generators/cucumber/templates/env.rb +27 -0
  400. data/rails_generators/cucumber/templates/paths.rb +27 -0
  401. data/rails_generators/cucumber/templates/spork_env.rb +35 -0
  402. data/rails_generators/cucumber/templates/webrat_steps.rb +236 -0
  403. data/rails_generators/feature/USAGE +12 -0
  404. data/rails_generators/feature/feature_generator.rb +40 -0
  405. data/rails_generators/feature/templates/feature.erb +31 -0
  406. data/rails_generators/feature/templates/steps.erb +14 -0
  407. data/spec/cucumber/ast/background_spec.rb +60 -0
  408. data/spec/cucumber/ast/feature_element_spec.rb +40 -0
  409. data/spec/cucumber/ast/feature_factory.rb +62 -0
  410. data/spec/cucumber/ast/feature_spec.rb +44 -0
  411. data/spec/cucumber/ast/py_string_spec.rb +51 -0
  412. data/spec/cucumber/ast/scenario_outline_spec.rb +72 -0
  413. data/spec/cucumber/ast/scenario_spec.rb +43 -0
  414. data/spec/cucumber/ast/step_collection_spec.rb +17 -0
  415. data/spec/cucumber/ast/step_spec.rb +66 -0
  416. data/spec/cucumber/ast/table_spec.rb +394 -0
  417. data/spec/cucumber/broadcaster_spec.rb +15 -0
  418. data/spec/cucumber/cli/configuration_spec.rb +396 -0
  419. data/spec/cucumber/cli/drb_client_spec.rb +77 -0
  420. data/spec/cucumber/cli/main_spec.rb +172 -0
  421. data/spec/cucumber/cli/options_spec.rb +331 -0
  422. data/spec/cucumber/cli/profile_loader_spec.rb +10 -0
  423. data/spec/cucumber/core_ext/proc_spec.rb +68 -0
  424. data/spec/cucumber/core_ext/string_spec.rb +43 -0
  425. data/spec/cucumber/formatter/ansicolor_spec.rb +31 -0
  426. data/spec/cucumber/formatter/color_io_spec.rb +27 -0
  427. data/spec/cucumber/formatter/duration_spec.rb +22 -0
  428. data/spec/cucumber/formatter/html_spec.rb +18 -0
  429. data/spec/cucumber/formatter/progress_spec.rb +33 -0
  430. data/spec/cucumber/parser/feature_parser_spec.rb +396 -0
  431. data/spec/cucumber/parser/table_parser_spec.rb +52 -0
  432. data/spec/cucumber/rails/stubs/mini_rails.rb +18 -0
  433. data/spec/cucumber/rails/stubs/test_help.rb +1 -0
  434. data/spec/cucumber/rails/world_spec.rb +16 -0
  435. data/spec/cucumber/rb_support/rb_step_definition_spec.rb +123 -0
  436. data/spec/cucumber/sell_cucumbers.feature +19 -0
  437. data/spec/cucumber/step_mother_spec.rb +282 -0
  438. data/spec/cucumber/treetop_parser/empty_feature.feature +4 -0
  439. data/spec/cucumber/treetop_parser/empty_scenario.feature +9 -0
  440. data/spec/cucumber/treetop_parser/empty_scenario_outline.feature +3 -0
  441. data/spec/cucumber/treetop_parser/fit_scenario.feature +8 -0
  442. data/spec/cucumber/treetop_parser/given_scenario.feature +9 -0
  443. data/spec/cucumber/treetop_parser/invalid_scenario_outlines.feature +7 -0
  444. data/spec/cucumber/treetop_parser/multiline_steps.feature +17 -0
  445. data/spec/cucumber/treetop_parser/multiple_tables.feature +27 -0
  446. data/spec/cucumber/treetop_parser/scenario_outline.feature +16 -0
  447. data/spec/cucumber/treetop_parser/spaces.feature +12 -0
  448. data/spec/cucumber/treetop_parser/test_dos.feature +25 -0
  449. data/spec/cucumber/treetop_parser/with_comments.feature +23 -0
  450. data/spec/cucumber/treetop_parser/with_tags.feature +18 -0
  451. data/spec/cucumber/world/pending_spec.rb +46 -0
  452. data/spec/spec.opts +4 -0
  453. data/spec/spec_helper.rb +18 -0
  454. metadata +561 -0
@@ -0,0 +1,23 @@
1
+ require 'forwardable'
2
+
3
+ module Cucumber
4
+ module Formatter
5
+ # Adapter to make #puts/#print/#flush work with colours on Windows
6
+ class ColorIO #:nodoc:
7
+ extend Forwardable
8
+ def_delegators :@kernel, :puts, :print # win32console colours only work when sent to Kernel
9
+ def_delegators :@stdout, :flush, :tty?, :write, :close
10
+
11
+ def initialize
12
+ @kernel = Kernel
13
+ @stdout = STDOUT
14
+ end
15
+
16
+ # Ensure using << still gets colours in win32console
17
+ def <<(output)
18
+ print(output)
19
+ self
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,185 @@
1
+ require 'cucumber/formatter/ansicolor'
2
+ require 'cucumber/formatter/duration'
3
+
4
+ module Cucumber
5
+ module Formatter
6
+ # This module contains helper methods that are used by formatters
7
+ # that print output to the terminal.
8
+ module Console
9
+ extend ANSIColor
10
+ include Duration
11
+
12
+ FORMATS = Hash.new{|hash, format| hash[format] = method(format).to_proc}
13
+
14
+ def format_step(keyword, step_match, status, source_indent)
15
+ comment = if source_indent
16
+ c = (' # ' + step_match.file_colon_line).indent(source_indent)
17
+ format_string(c, :comment)
18
+ else
19
+ ''
20
+ end
21
+
22
+ format = format_for(status, :param)
23
+ line = keyword + " " + step_match.format_args(format) + comment
24
+ format_string(line, status)
25
+ end
26
+
27
+ def format_string(string, status)
28
+ fmt = format_for(status)
29
+ if Proc === fmt
30
+ fmt.call(string)
31
+ else
32
+ fmt % string
33
+ end
34
+ end
35
+
36
+ def print_steps(status)
37
+ print_elements(step_mother.steps(status), status, 'steps')
38
+ end
39
+
40
+ def print_elements(elements, status, kind)
41
+ if elements.any?
42
+ @io.puts(format_string("(::) #{status} #{kind} (::)", status))
43
+ @io.puts
44
+ @io.flush
45
+ end
46
+
47
+ elements.each_with_index do |element, i|
48
+ if status == :failed
49
+ print_exception(element.exception, status, 0)
50
+ else
51
+ @io.puts(format_string(element.backtrace_line, status))
52
+ end
53
+ @io.puts
54
+ @io.flush
55
+ end
56
+ end
57
+
58
+ def print_counts
59
+ STDERR.puts("The #print_counts method is deprecated and will be removed in 0.4. Use #print_stats instead")
60
+ print_stats(nil)
61
+ end
62
+
63
+ def print_stats(features)
64
+
65
+ @failures = step_mother.scenarios(:failed).select { |s| s.is_a?(Cucumber::Ast::Scenario) }
66
+
67
+ if !@failures.empty?
68
+ @io.puts format_string("Failing Scenarios:", :failed)
69
+ @failures.each do |failure|
70
+ @io.puts format_string("cucumber " + failure.file_colon_line, :failed) +
71
+ format_string(" # Scenario: " + failure.name, :comment)
72
+ end
73
+ @io.puts
74
+ end
75
+
76
+ @io.print dump_count(step_mother.scenarios.length, "scenario")
77
+ print_status_counts{|status| step_mother.scenarios(status)}
78
+
79
+ @io.print dump_count(step_mother.steps.length, "step")
80
+ print_status_counts{|status| step_mother.steps(status)}
81
+
82
+ @io.puts(format_duration(features.duration)) if features && features.duration
83
+
84
+ @io.flush
85
+ end
86
+
87
+ def print_exception(e, status, indent)
88
+ @io.puts(format_string("#{e.message} (#{e.class})\n#{e.backtrace.join("\n")}".indent(indent), status))
89
+ end
90
+
91
+ def print_snippets(options)
92
+ return unless options[:snippets]
93
+ undefined = step_mother.steps(:undefined)
94
+ return if undefined.empty?
95
+ snippets = undefined.map do |step|
96
+ step_name = Undefined === step.exception ? step.exception.step_name : step.name
97
+ step_multiline_class = step.multiline_arg ? step.multiline_arg.class : nil
98
+ snippet = @step_mother.snippet_text(step.actual_keyword, step_name, step_multiline_class)
99
+ snippet
100
+ end.compact.uniq
101
+
102
+ text = "\nYou can implement step definitions for undefined steps with these snippets:\n\n"
103
+ text += snippets.join("\n\n")
104
+
105
+ @io.puts format_string(text, :undefined)
106
+ @io.puts
107
+ @io.flush
108
+ end
109
+
110
+ def print_passing_wip(options)
111
+ return unless options[:wip]
112
+ passed = step_mother.scenarios(:passed)
113
+ if passed.any?
114
+ @io.puts format_string("\nThe --wip switch was used, so I didn't expect anything to pass. These scenarios passed:", :failed)
115
+ print_elements(passed, :passed, "scenarios")
116
+ else
117
+ @io.puts format_string("\nThe --wip switch was used, so the failures were expected. All is good.\n", :passed)
118
+ end
119
+ end
120
+
121
+ def print_tag_limit_warnings(options)
122
+ return unless tag_limit_breached?(options, @tag_occurences)
123
+ @io.puts
124
+ @io.puts format_string("Failed due to exceeding the tag limit", :failed)
125
+ options[:include_tags].each do |tag_name, limit|
126
+ tag_frequnecy = @tag_occurences[tag_name].size
127
+ if limit && tag_frequnecy > limit
128
+ @io.puts format_string("@#{tag_name} occurred:#{tag_frequnecy} limit:#{limit}", :failed)
129
+ @tag_occurences[tag_name].each {|location| @io.puts format_string(" #{location}", :failed)}
130
+ @io.flush
131
+ end
132
+ end
133
+ end
134
+
135
+ def record_tag_occurrences(feature_element, options)
136
+ @tag_occurences ||= Hash.new{|k,v| k[v] = []}
137
+ options[:include_tags].each do |tag_name, limit|
138
+ if feature_element.tag_count(tag_name) > 0
139
+ @tag_occurences[tag_name] << feature_element.file_colon_line
140
+ end
141
+ end
142
+ end
143
+
144
+ def announce(announcement)
145
+ @io.puts
146
+ @io.puts(format_string(announcement, :tag))
147
+ @io.flush
148
+ end
149
+
150
+ private
151
+
152
+ def print_status_counts
153
+ counts = [:failed, :skipped, :undefined, :pending, :passed].map do |status|
154
+ elements = yield status
155
+ elements.any? ? format_string("#{elements.length} #{status.to_s}", status) : nil
156
+ end.compact
157
+ if counts.any?
158
+ @io.puts(" (#{counts.join(', ')})")
159
+ else
160
+ @io.puts
161
+ end
162
+ end
163
+
164
+ def dump_count(count, what, state=nil)
165
+ [count, state, "#{what}#{count == 1 ? '' : 's'}"].compact.join(" ")
166
+ end
167
+
168
+ def format_for(*keys)
169
+ key = keys.join('_').to_sym
170
+ fmt = FORMATS[key]
171
+ raise "No format for #{key.inspect}: #{FORMATS.inspect}" if fmt.nil?
172
+ fmt
173
+ end
174
+
175
+ def tag_limit_breached?(options, tag_occurences)
176
+ return if tag_occurences.nil?
177
+ tag_limit_breached = false
178
+ options[:include_tags].each do |tag_name, limit|
179
+ tag_limit_breached ||= limit && (tag_occurences[tag_name].size > limit)
180
+ end
181
+ tag_limit_breached
182
+ end
183
+ end
184
+ end
185
+ end
@@ -0,0 +1,132 @@
1
+
2
+
3
+ .cucumber {
4
+ font-family: "Lucida Grande", Helvetica, sans-serif;
5
+ font-size: 0.7em;
6
+ background: white;
7
+ padding: 1em;
8
+ }
9
+ .cucumber h1, .cucumber h2, .cucumber h3, .cucumber h4, .cucumber ol, .cucumber li, .cucumber pre, .cucumber p {
10
+ font-size: 1em;
11
+ padding: 0px;
12
+ margin: 0px;
13
+ }
14
+ .cucumber div.feature {
15
+ border: 1px solid;
16
+ padding: 2px;
17
+ margin: 4px;
18
+ }
19
+ .cucumber div.feature div.background, .cucumber div.feature div.scenario, .cucumber div.feature p {
20
+ padding: 0em 0em 0em 1em;
21
+ }
22
+ .cucumber div.feature div.background div.examples, .cucumber div.feature div.scenario div.examples, .cucumber div.feature p div.examples {
23
+ padding: 0em 0em 0em 1em;
24
+ }
25
+ .cucumber .stats {
26
+ margin: 2em;
27
+ }
28
+ .cucumber .summary ul.features li {
29
+ display: inline;
30
+ }
31
+ .cucumber .backtrace {
32
+ margin-top: 0;
33
+ margin-bottom: 0;
34
+ margin-left: 1em;
35
+ }
36
+ .cucumber a {
37
+ text-decoration: none;
38
+ color: inherit;
39
+ }
40
+ .cucumber a:hover {
41
+ text-decoration: underline;
42
+ }
43
+ .cucumber a:visited {
44
+ font-weight: normal;
45
+ }
46
+ .cucumber a div.examples {
47
+ border: 1px solid;
48
+ padding: 2px;
49
+ margin: 4px;
50
+ }
51
+ .cucumber table {
52
+ border-collapse: collapse;
53
+ }
54
+ .cucumber table td, .cucumber table th {
55
+ font-size: 0.7em;
56
+ border: 1px solid #AAAAAA;
57
+ }
58
+ .cucumber table td.failed {
59
+ background: #FFC0CB;
60
+ color: #8B0000;
61
+ }
62
+ .cucumber table td.passed {
63
+ background: #98FB98;
64
+ color: #001111;
65
+ }
66
+ .cucumber table td.skipped {
67
+ background: #e0ffff;
68
+ color: #001111;
69
+ }
70
+ .cucumber table td.pending {
71
+ background: #FFFFE0;
72
+ color: #111100;
73
+ }
74
+ .cucumber table td.undefined {
75
+ background: #FFFFE0;
76
+ color: #111100;
77
+ }
78
+ .cucumber ol {
79
+ list-style: none;
80
+ }
81
+ .cucumber ol li {
82
+ margin: 0em 0em 0em 1em;
83
+ padding: 0em 0em 0em 0.2em;
84
+ }
85
+ .cucumber ol li span.param {
86
+ font-weight: bold;
87
+ }
88
+ .cucumber ol li.failed {
89
+ border-left: 5px solid #ff0000;
90
+ border-bottom: 1px solid #ff0000;
91
+ background: #ffc0cb;
92
+ color: #8b0000;
93
+ }
94
+ .cucumber ol li.failed span.param {
95
+ background: !failed_dark;
96
+ }
97
+ .cucumber ol li.passed {
98
+ border-left: 5px solid #00ff00;
99
+ border-bottom: 1px solid #00ff00;
100
+ background: #98fb98;
101
+ color: #001111;
102
+ }
103
+ .cucumber ol li.passed span.param {
104
+ background: #00ff00;
105
+ }
106
+ .cucumber ol li.skipped {
107
+ border-left: 5px solid #00ffff;
108
+ border-bottom: 1px solid #00ffff;
109
+ background: #e0ffff;
110
+ color: #001111;
111
+ }
112
+ .cucumber ol li.skipped span.param {
113
+ background: #00ffff;
114
+ }
115
+ .cucumber ol li.pending {
116
+ border-left: 5px solid #ff8000;
117
+ border-bottom: 1px solid #ff8000;
118
+ background: #ffff00;
119
+ color: #2a1b0a;
120
+ }
121
+ .cucumber ol li.pending span.param {
122
+ background: #ff8000;
123
+ }
124
+ .cucumber ol li.undefined {
125
+ border-left: 5px solid #ff8000;
126
+ border-bottom: 1px solid #ff8000;
127
+ background: #ffff00;
128
+ color: #2a1b0a;
129
+ }
130
+ .cucumber ol li.undefined span.param {
131
+ background: #ff8000;
132
+ }
@@ -0,0 +1,139 @@
1
+ # cucumber.css is generated from cucumber.sass
2
+ # Regenerate with rake sass
3
+
4
+ !step_left = 5px solid
5
+ !step_bottom = 1px solid
6
+
7
+ !failed = #FFC0CB
8
+ !failed_dark = #FF0000
9
+ !failed_text = #8B0000
10
+
11
+ !passed = #98FB98
12
+ !passed_dark = #00FF00
13
+ !passed_text = #001111
14
+
15
+ !skipped = #E0FFFF
16
+ !skipped_dark = #00FFFF
17
+ !skipped_text = #001111
18
+
19
+ !pending = #FFFF00
20
+ !pending_dark = #FF8000
21
+ !pending_text = #2A1B0A
22
+
23
+ !undefined = #FFFF00
24
+ !undefined_dark = #FF8000
25
+ !undefined_text = #2A1B0A
26
+
27
+ .cucumber
28
+ :font-family "Lucida Grande", Helvetica, sans-serif
29
+ :font-size 0.7em
30
+ :background white
31
+ :padding 1em
32
+
33
+ h1, h2, h3, h4, ol, li, pre, p
34
+ :font-size 1em
35
+ :padding 0px
36
+ :margin 0px
37
+
38
+ div.feature
39
+ :border 1px solid
40
+ :padding 2px
41
+ :margin 4px
42
+
43
+ div.background, div.scenario, p
44
+ :padding 0em 0em 0em 1em
45
+ div.examples
46
+ :padding 0em 0em 0em 1em
47
+
48
+ .stats
49
+ :margin 2em
50
+
51
+ .summary
52
+ ul.features
53
+ li
54
+ :display inline
55
+
56
+ .backtrace
57
+ :margin-top 0
58
+ :margin-bottom 0
59
+ :margin-left 1em
60
+
61
+ a
62
+ :text-decoration none
63
+ :color inherit
64
+
65
+ &:hover
66
+ :text-decoration underline
67
+ &:visited
68
+ :font-weight normal
69
+
70
+ div.examples
71
+ :border 1px solid
72
+ :padding 2px
73
+ :margin 4px
74
+
75
+ table
76
+ :border-collapse collapse
77
+
78
+ td, th
79
+ :font-size 0.7em
80
+ :border 1px solid #AAAAAA
81
+ td.failed
82
+ :background #FFC0CB
83
+ :color #8B0000
84
+ td.passed
85
+ :background #98FB98
86
+ :color= !passed_text
87
+ td.skipped
88
+ :background= !skipped
89
+ :color= !skipped_text
90
+ td.pending
91
+ :background #FFFFE0
92
+ :color #111100
93
+ td.undefined
94
+ :background #FFFFE0
95
+ :color #111100
96
+
97
+ ol
98
+ :list-style none
99
+
100
+ li
101
+ :margin 0em 0em 0em 1em
102
+ :padding 0em 0em 0em 0.2em
103
+ span.param
104
+ :font-weight bold
105
+ li.failed
106
+ :border-left= !step_left !failed_dark
107
+ :border-bottom= !step_bottom !failed_dark
108
+ :background= !failed
109
+ :color= !failed_text
110
+ span.param
111
+ :background !failed_dark
112
+ li.passed
113
+ :border-left= !step_left !passed_dark
114
+ :border-bottom= !step_bottom !passed_dark
115
+ :background= !passed
116
+ :color= !passed_text
117
+ span.param
118
+ :background= !passed_dark
119
+ li.skipped
120
+ :border-left= !step_left !skipped_dark
121
+ :border-bottom= !step_bottom !skipped_dark
122
+ :background= !skipped
123
+ :color= !skipped_text
124
+ span.param
125
+ :background= !skipped_dark
126
+ li.pending
127
+ :border-left= !step_left !pending_dark
128
+ :border-bottom= !step_bottom !pending_dark
129
+ :background= !pending
130
+ :color= !pending_text
131
+ span.param
132
+ :background= !pending_dark
133
+ li.undefined
134
+ :border-left= !step_left !undefined_dark
135
+ :border-bottom= !step_bottom !undefined_dark
136
+ :background= !undefined
137
+ :color= !undefined_text
138
+ span.param
139
+ :background= !undefined_dark