square-cucumber 0.3.12.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (408) 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-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 +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/test_unit/Rakefile +6 -0
  209. data/examples/test_unit/features/step_definitions/test_unit_steps.rb +23 -0
  210. data/examples/test_unit/features/test_unit.feature +9 -0
  211. data/examples/tickets/Rakefile +16 -0
  212. data/examples/tickets/features/172.feature +28 -0
  213. data/examples/tickets/features/177/1.feature +29 -0
  214. data/examples/tickets/features/177/2.feature +21 -0
  215. data/examples/tickets/features/177/3.feature +18 -0
  216. data/examples/tickets/features/180.feature +7 -0
  217. data/examples/tickets/features/229/tagged_hooks.feature +8 -0
  218. data/examples/tickets/features/229/tagged_hooks.rb +14 -0
  219. data/examples/tickets/features/236.feature +13 -0
  220. data/examples/tickets/features/241.feature +13 -0
  221. data/examples/tickets/features/246.feature +4 -0
  222. data/examples/tickets/features/248.feature +11 -0
  223. data/examples/tickets/features/270/back.feature +14 -0
  224. data/examples/tickets/features/270/back.steps.rb +14 -0
  225. data/examples/tickets/features/272/hooks.feature +26 -0
  226. data/examples/tickets/features/272/hooks_steps.rb +53 -0
  227. data/examples/tickets/features/279/py_string_indent.feature +25 -0
  228. data/examples/tickets/features/279/py_string_indent.steps.rb +12 -0
  229. data/examples/tickets/features/279/wrong.feature_ +11 -0
  230. data/examples/tickets/features/301/filter_background_tagged_hooks.feature +6 -0
  231. data/examples/tickets/features/301/filter_background_tagged_hooks_steps.rb +12 -0
  232. data/examples/tickets/features/306/only_background.feature +4 -0
  233. data/examples/tickets/features/lib/eatting_machine.rb +18 -0
  234. data/examples/tickets/features/lib/pantry.rb +20 -0
  235. data/examples/tickets/features/scenario_outline.feature +95 -0
  236. data/examples/tickets/features/step_definitons/246_steps.rb +3 -0
  237. data/examples/tickets/features/step_definitons/248_steps.rb +15 -0
  238. data/examples/tickets/features/step_definitons/scenario_outline_steps.rb +42 -0
  239. data/examples/tickets/features/step_definitons/tickets_steps.rb +66 -0
  240. data/examples/tickets/features/tickets.feature +28 -0
  241. data/examples/watir/README.textile +16 -0
  242. data/examples/watir/Rakefile +6 -0
  243. data/examples/watir/features/search.feature +12 -0
  244. data/examples/watir/features/step_definitons/search_steps.rb +22 -0
  245. data/examples/watir/features/support/env.rb +32 -0
  246. data/features/after_block_exceptions.feature +102 -0
  247. data/features/after_step_block_exceptions.feature +104 -0
  248. data/features/background.feature +311 -0
  249. data/features/bug_371.feature +32 -0
  250. data/features/cucumber_cli.feature +549 -0
  251. data/features/cucumber_cli_diff_disabled.feature +53 -0
  252. data/features/cucumber_cli_outlines.feature +109 -0
  253. data/features/custom_formatter.feature +11 -0
  254. data/features/drb_server_integration.feature +115 -0
  255. data/features/exclude_files.feature +20 -0
  256. data/features/expand.feature +49 -0
  257. data/features/html_formatter.feature +7 -0
  258. data/features/html_formatter/a.html +185 -0
  259. data/features/junit_formatter.feature +71 -0
  260. data/features/language_from_header.feature +30 -0
  261. data/features/multiline_names.feature +43 -0
  262. data/features/rake_task.feature +150 -0
  263. data/features/report_called_undefined_steps.feature +35 -0
  264. data/features/snippet.feature +22 -0
  265. data/features/step_definitions/cucumber_steps.rb +130 -0
  266. data/features/step_definitions/extra_steps.rb +2 -0
  267. data/features/support/env.rb +120 -0
  268. data/features/usage.feature +126 -0
  269. data/features/work_in_progress.feature +151 -0
  270. data/gem_tasks/deployment.rake +11 -0
  271. data/gem_tasks/environment.rake +7 -0
  272. data/gem_tasks/features.rake +10 -0
  273. data/gem_tasks/fix_cr_lf.rake +10 -0
  274. data/gem_tasks/flog.rake +4 -0
  275. data/gem_tasks/gemspec.rake +10 -0
  276. data/gem_tasks/rspec.rake +45 -0
  277. data/gem_tasks/sass.rake +4 -0
  278. data/gem_tasks/yard.rake +8 -0
  279. data/lib/autotest/cucumber.rb +6 -0
  280. data/lib/autotest/cucumber_mixin.rb +125 -0
  281. data/lib/autotest/cucumber_rails.rb +6 -0
  282. data/lib/autotest/cucumber_rails_rspec.rb +6 -0
  283. data/lib/autotest/cucumber_rspec.rb +6 -0
  284. data/lib/autotest/discover.rb +9 -0
  285. data/lib/cucumber.rb +11 -0
  286. data/lib/cucumber/ast.rb +29 -0
  287. data/lib/cucumber/ast/background.rb +62 -0
  288. data/lib/cucumber/ast/comment.rb +30 -0
  289. data/lib/cucumber/ast/examples.rb +26 -0
  290. data/lib/cucumber/ast/feature.rb +58 -0
  291. data/lib/cucumber/ast/feature_element.rb +57 -0
  292. data/lib/cucumber/ast/features.rb +30 -0
  293. data/lib/cucumber/ast/outline_table.rb +143 -0
  294. data/lib/cucumber/ast/py_string.rb +57 -0
  295. data/lib/cucumber/ast/scenario.rb +83 -0
  296. data/lib/cucumber/ast/scenario_outline.rb +93 -0
  297. data/lib/cucumber/ast/step.rb +112 -0
  298. data/lib/cucumber/ast/step_collection.rb +75 -0
  299. data/lib/cucumber/ast/step_invocation.rb +136 -0
  300. data/lib/cucumber/ast/table.rb +334 -0
  301. data/lib/cucumber/ast/tags.rb +33 -0
  302. data/lib/cucumber/ast/visitor.rb +116 -0
  303. data/lib/cucumber/broadcaster.rb +13 -0
  304. data/lib/cucumber/cli/configuration.rb +425 -0
  305. data/lib/cucumber/cli/drb_client.rb +20 -0
  306. data/lib/cucumber/cli/language_help_formatter.rb +59 -0
  307. data/lib/cucumber/cli/main.rb +136 -0
  308. data/lib/cucumber/core_ext/exception.rb +53 -0
  309. data/lib/cucumber/core_ext/instance_exec.rb +67 -0
  310. data/lib/cucumber/core_ext/proc.rb +29 -0
  311. data/lib/cucumber/core_ext/string.rb +48 -0
  312. data/lib/cucumber/feature_file.rb +47 -0
  313. data/lib/cucumber/filter.rb +50 -0
  314. data/lib/cucumber/formatter/ansicolor.rb +110 -0
  315. data/lib/cucumber/formatter/color_io.rb +23 -0
  316. data/lib/cucumber/formatter/console.rb +149 -0
  317. data/lib/cucumber/formatter/cucumber.css +132 -0
  318. data/lib/cucumber/formatter/cucumber.sass +139 -0
  319. data/lib/cucumber/formatter/duration.rb +10 -0
  320. data/lib/cucumber/formatter/html.rb +258 -0
  321. data/lib/cucumber/formatter/junit.rb +75 -0
  322. data/lib/cucumber/formatter/pretty.rb +188 -0
  323. data/lib/cucumber/formatter/profile.rb +77 -0
  324. data/lib/cucumber/formatter/progress.rb +60 -0
  325. data/lib/cucumber/formatter/rerun.rb +44 -0
  326. data/lib/cucumber/formatter/tag_cloud.rb +28 -0
  327. data/lib/cucumber/formatter/unicode.rb +35 -0
  328. data/lib/cucumber/formatter/usage.rb +85 -0
  329. data/lib/cucumber/formatters/unicode.rb +7 -0
  330. data/lib/cucumber/languages.yml +532 -0
  331. data/lib/cucumber/parser.rb +6 -0
  332. data/lib/cucumber/parser/feature.rb +1787 -0
  333. data/lib/cucumber/parser/feature.tt +324 -0
  334. data/lib/cucumber/parser/i18n.tt +42 -0
  335. data/lib/cucumber/parser/i18n/language.rb +80 -0
  336. data/lib/cucumber/parser/table.rb +414 -0
  337. data/lib/cucumber/parser/table.tt +71 -0
  338. data/lib/cucumber/parser/treetop_ext.rb +52 -0
  339. data/lib/cucumber/platform.rb +23 -0
  340. data/lib/cucumber/rails/rspec.rb +10 -0
  341. data/lib/cucumber/rails/world.rb +99 -0
  342. data/lib/cucumber/rake/task.rb +233 -0
  343. data/lib/cucumber/rspec_neuter.rb +23 -0
  344. data/lib/cucumber/step_definition.rb +122 -0
  345. data/lib/cucumber/step_match.rb +61 -0
  346. data/lib/cucumber/step_mother.rb +362 -0
  347. data/lib/cucumber/version.rb +10 -0
  348. data/lib/cucumber/webrat/mechanize_world.rb +82 -0
  349. data/lib/cucumber/world.rb +53 -0
  350. data/rails_generators/cucumber/USAGE +11 -0
  351. data/rails_generators/cucumber/cucumber_generator.rb +66 -0
  352. data/rails_generators/cucumber/templates/cucumber +8 -0
  353. data/rails_generators/cucumber/templates/cucumber.rake +20 -0
  354. data/rails_generators/cucumber/templates/cucumber_environment.rb +23 -0
  355. data/rails_generators/cucumber/templates/env.rb +26 -0
  356. data/rails_generators/cucumber/templates/paths.rb +27 -0
  357. data/rails_generators/cucumber/templates/spork_env.rb +36 -0
  358. data/rails_generators/cucumber/templates/webrat_steps.rb +147 -0
  359. data/rails_generators/feature/USAGE +12 -0
  360. data/rails_generators/feature/feature_generator.rb +40 -0
  361. data/rails_generators/feature/templates/feature.erb +31 -0
  362. data/rails_generators/feature/templates/steps.erb +20 -0
  363. data/spec/cucumber/ast/background_spec.rb +50 -0
  364. data/spec/cucumber/ast/feature_element_spec.rb +40 -0
  365. data/spec/cucumber/ast/feature_factory.rb +63 -0
  366. data/spec/cucumber/ast/feature_spec.rb +38 -0
  367. data/spec/cucumber/ast/py_string_spec.rb +51 -0
  368. data/spec/cucumber/ast/scenario_outline_spec.rb +67 -0
  369. data/spec/cucumber/ast/scenario_spec.rb +38 -0
  370. data/spec/cucumber/ast/step_collection_spec.rb +17 -0
  371. data/spec/cucumber/ast/step_spec.rb +66 -0
  372. data/spec/cucumber/ast/table_spec.rb +186 -0
  373. data/spec/cucumber/ast/visitor_spec.rb +27 -0
  374. data/spec/cucumber/broadcaster_spec.rb +15 -0
  375. data/spec/cucumber/cli/configuration_spec.rb +396 -0
  376. data/spec/cucumber/cli/drb_client_spec.rb +43 -0
  377. data/spec/cucumber/cli/main_spec.rb +140 -0
  378. data/spec/cucumber/core_ext/proc_spec.rb +54 -0
  379. data/spec/cucumber/core_ext/string_spec.rb +42 -0
  380. data/spec/cucumber/formatter/ansicolor_spec.rb +35 -0
  381. data/spec/cucumber/formatter/color_io_spec.rb +27 -0
  382. data/spec/cucumber/formatter/duration_spec.rb +22 -0
  383. data/spec/cucumber/formatter/progress_spec.rb +36 -0
  384. data/spec/cucumber/parser/feature_parser_spec.rb +387 -0
  385. data/spec/cucumber/parser/table_parser_spec.rb +48 -0
  386. data/spec/cucumber/rails/stubs/mini_rails.rb +18 -0
  387. data/spec/cucumber/rails/stubs/test_help.rb +1 -0
  388. data/spec/cucumber/rails/world_spec.rb +11 -0
  389. data/spec/cucumber/sell_cucumbers.feature +19 -0
  390. data/spec/cucumber/step_definition_spec.rb +101 -0
  391. data/spec/cucumber/step_mother_spec.rb +155 -0
  392. data/spec/cucumber/treetop_parser/empty_feature.feature +4 -0
  393. data/spec/cucumber/treetop_parser/empty_scenario.feature +9 -0
  394. data/spec/cucumber/treetop_parser/empty_scenario_outline.feature +3 -0
  395. data/spec/cucumber/treetop_parser/fit_scenario.feature +8 -0
  396. data/spec/cucumber/treetop_parser/given_scenario.feature +9 -0
  397. data/spec/cucumber/treetop_parser/invalid_scenario_outlines.feature +7 -0
  398. data/spec/cucumber/treetop_parser/multiline_steps.feature +17 -0
  399. data/spec/cucumber/treetop_parser/multiple_tables.feature +27 -0
  400. data/spec/cucumber/treetop_parser/scenario_outline.feature +16 -0
  401. data/spec/cucumber/treetop_parser/spaces.feature +12 -0
  402. data/spec/cucumber/treetop_parser/test_dos.feature +25 -0
  403. data/spec/cucumber/treetop_parser/with_comments.feature +10 -0
  404. data/spec/cucumber/treetop_parser/with_tags.feature +18 -0
  405. data/spec/cucumber/world/pending_spec.rb +47 -0
  406. data/spec/spec.opts +2 -0
  407. data/spec/spec_helper.rb +13 -0
  408. metadata +504 -0
@@ -0,0 +1,71 @@
1
+ Feature: JUnit output formatter
2
+ In order for developers to create test reports with ant
3
+ Cucumber should be able to output JUnit xml files
4
+
5
+ Background:
6
+ Given I am in junit
7
+ And the tmp directory is empty
8
+
9
+ @mri186 @diffxml
10
+ Scenario: one feature, one passing scenario, one failing scenario
11
+ When I run cucumber --format junit --out tmp/ features/one_passing_one_failing.feature
12
+ Then it should fail with
13
+ """
14
+
15
+ """
16
+ And "examples/junit/tmp/TEST-one_passing_one_failing.xml" should contain XML
17
+ """
18
+ <?xml version="1.0" encoding="UTF-8"?>
19
+ <testsuite errors="0" tests="2" name="One passing scenario, one failing scenario" failures="1">
20
+ <testcase name="Given a passing scenario" classname="One passing scenario, one failing scenario.Passing">
21
+ </testcase>
22
+ <testcase name="Given a failing scenario" classname="One passing scenario, one failing scenario.Failing">
23
+ <failure message="Given a failing scenario">
24
+ (RuntimeError)
25
+ ./features/step_definitions/steps.rb:6:in `/a failing scenario/'
26
+ features/one_passing_one_failing.feature:7:in `Given a failing scenario' </failure>
27
+ </testcase>
28
+ </testsuite>
29
+
30
+ """
31
+
32
+ @mri186 @diffxml
33
+ Scenario: pending step
34
+ When I run cucumber --format junit --out tmp/ features/pending.feature
35
+ Then it should pass with
36
+ """
37
+
38
+ """
39
+ And "examples/junit/tmp/TEST-pending.xml" should contain XML
40
+ """
41
+ <?xml version="1.0" encoding="UTF-8"?>
42
+ <testsuite errors="0" tests="1" name="Pending step" failures="1">
43
+ <testcase name="Given a pending step" classname="Pending step.Pending">
44
+ <failure message="Given a pending step">
45
+ TODO (Cucumber::Pending)
46
+ ./features/step_definitions/steps.rb:10:in `/a pending step/'
47
+ features/pending.feature:4:in `Given a pending step' </failure>
48
+ </testcase>
49
+ </testsuite>
50
+
51
+ """
52
+
53
+ Scenario: run all features
54
+ When I run cucumber --format junit --out tmp/ features
55
+ Then it should fail with
56
+ """
57
+
58
+ """
59
+ And "examples/junit/tmp/TEST-one_passing_one_failing.xml" should exist
60
+ And "examples/junit/tmp/TEST-pending.xml" should exist
61
+
62
+ Scenario: show correct error message if no --out is passed
63
+ When I run cucumber --format junit features
64
+ Then STDERR should not match
65
+ """
66
+ can't convert .* into String \(TypeError\)
67
+ """
68
+ And STDERR should match
69
+ """
70
+ You \*must\* specify \-\-out DIR for the junit formatter
71
+ """
@@ -0,0 +1,30 @@
1
+ Feature: Language from header
2
+ In order to simplify command line and
3
+ settings in IDEs, Cucumber should pick
4
+ up parser language from a header.
5
+
6
+ Scenario: LOLCAT
7
+ Given a standard Cucumber project directory structure
8
+ And a file named "features/lolcat.feature" with:
9
+ """
10
+ # language: en-lol
11
+ OH HAI: STUFFING
12
+ B4: HUNGRY
13
+ MISHUN: CUKES
14
+ DEN KTHXBAI
15
+ """
16
+ When I run cucumber -i features/lolcat.feature
17
+ Then it should pass with
18
+ """
19
+ # language: en-lol
20
+ OH HAI: STUFFING
21
+
22
+ B4: HUNGRY # features/lolcat.feature:3
23
+
24
+ MISHUN: CUKES # features/lolcat.feature:4
25
+ DEN KTHXBAI # features/lolcat.feature:5
26
+
27
+ 1 scenario (1 undefined)
28
+ 1 step (1 undefined)
29
+
30
+ """
@@ -0,0 +1,43 @@
1
+ Feature: Multiline description names
2
+ In order to accurately document feature elements
3
+ As a cucumberist
4
+ I want to have multiline names
5
+
6
+ Scenario: multiline scenario
7
+ When I run cucumber features/multiline_name.feature --no-snippets
8
+ Then it should pass with
9
+ """
10
+ Feature: multiline
11
+
12
+ Background: I'm a multiline name # features/multiline_name.feature:3
13
+ which goes on and on and on for three lines
14
+ yawn
15
+ Given passing without a table # features/step_definitions/sample_steps.rb:12
16
+
17
+ Scenario: I'm a multiline name # features/multiline_name.feature:8
18
+ which goes on and on and on for three lines
19
+ yawn
20
+ Given passing without a table # features/step_definitions/sample_steps.rb:12
21
+
22
+ Scenario Outline: I'm a multiline name # features/multiline_name.feature:13
23
+ which goes on and on and on for three lines
24
+ yawn
25
+ Given <state> without a table # features/step_definitions/sample_steps.rb:12
26
+
27
+ Examples:
28
+ | state |
29
+ | passing |
30
+
31
+ Scenario Outline: name # features/multiline_name.feature:21
32
+ Given <state> without a table # features/step_definitions/sample_steps.rb:12
33
+
34
+ Examples: I'm a multiline name
35
+ which goes on and on and on for three lines
36
+ yawn
37
+ | state |
38
+ | passing |
39
+
40
+ 3 scenarios (3 passed)
41
+ 6 steps (6 passed)
42
+
43
+ """
@@ -0,0 +1,150 @@
1
+ Feature: Rake task
2
+ In order to ease the development process
3
+ As a developer and CI server administrator
4
+ Cucumber features should be executable via Rake
5
+
6
+ Background:
7
+ Given a standard Cucumber project directory structure
8
+ And a file named "features/missing_step_definitions.feature" with:
9
+ """
10
+ Feature: Sample
11
+
12
+ Scenario: Wanted
13
+ Given I want to run this
14
+
15
+ Scenario: Unwanted
16
+ Given I don't want this ran
17
+ """
18
+
19
+
20
+ Scenario: rake task with a defined profile
21
+ Given the following profile is defined:
22
+ """
23
+ foo: --quiet --no-color features/missing_step_definitions.feature:3
24
+ """
25
+ And a file named "Rakefile" with:
26
+ """
27
+ $LOAD_PATH.unshift(CUCUMBER_LIB)
28
+ require 'cucumber/rake/task'
29
+
30
+ Cucumber::Rake::Task.new(:features) do |t|
31
+ t.profile = "foo"
32
+ end
33
+ """
34
+ When I run rake features
35
+ Then it should pass
36
+ And the output should contain
37
+ """
38
+ Feature: Sample
39
+
40
+ Scenario: Wanted
41
+ Given I want to run this
42
+
43
+ 1 scenario (1 undefined)
44
+ 1 step (1 undefined)
45
+ """
46
+
47
+ Scenario: rake task with a defined profile and cucumber_opts
48
+ Given the following profile is defined:
49
+ """
50
+ bar: ['features/missing_step_definitions.feature:3']
51
+ """
52
+ And a file named "Rakefile" with:
53
+ """
54
+ $LOAD_PATH.unshift(CUCUMBER_LIB)
55
+ require 'cucumber/rake/task'
56
+
57
+ Cucumber::Rake::Task.new(:features) do |t|
58
+ t.profile = "bar"
59
+ t.cucumber_opts = %w{--quiet --no-color}
60
+ end
61
+ """
62
+ When I run rake features
63
+ Then it should pass
64
+ And the output should contain
65
+ """
66
+ Feature: Sample
67
+
68
+ Scenario: Wanted
69
+ Given I want to run this
70
+
71
+ 1 scenario (1 undefined)
72
+ 1 step (1 undefined)
73
+ """
74
+
75
+ Scenario: rake task with a defined profile and feature list
76
+ Given a file named "features/the_one_i_want_to_run.feature" with:
77
+ """
78
+ Feature: Desired
79
+
80
+ Scenario: Something
81
+ Given this is missing
82
+ """
83
+ Given the following profile is defined:
84
+ """
85
+ baz: ['--quiet', '--no-color']
86
+ """
87
+ And a file named "Rakefile" with:
88
+ """
89
+ $LOAD_PATH.unshift(CUCUMBER_LIB)
90
+ require 'cucumber/rake/task'
91
+
92
+ Cucumber::Rake::Task.new(:features) do |t|
93
+ t.profile = "baz"
94
+ t.feature_list = ['features/the_one_i_want_to_run.feature']
95
+ end
96
+ """
97
+ When I run rake features
98
+ Then it should pass
99
+ And the output should contain
100
+ """
101
+ Feature: Desired
102
+
103
+ Scenario: Something
104
+ Given this is missing
105
+
106
+ 1 scenario (1 undefined)
107
+ 1 step (1 undefined)
108
+ """
109
+
110
+ Scenario: deprecation warnings
111
+ Given a file named "Rakefile" with:
112
+ """
113
+ $LOAD_PATH.unshift(CUCUMBER_LIB)
114
+ require 'cucumber/rake/task'
115
+
116
+ Cucumber::Rake::Task.new(:features) do |t|
117
+ t.feature_list = ['features/missing_step_definitions.feature']
118
+ end
119
+ """
120
+ When I run rake features
121
+ Then it should pass
122
+ And STDERR should match
123
+ """
124
+ Cucumber::Rake::Task#feature_list is deprecated and will be removed in 0.4.0. Please use profiles for complex settings: http://wiki.github.com/aslakhellesoy/cucumber/using-rake#profiles
125
+ """
126
+
127
+ Scenario: respect requires
128
+ Given a file named "features/support/env.rb"
129
+ And a file named "features/support/dont_require_me.rb"
130
+ And the following profile is defined:
131
+ """
132
+ no_bomb: features/missing_step_definitions.feature:3 --require features/support/env.rb --verbose
133
+ """
134
+ And a file named "Rakefile" with:
135
+ """
136
+ $LOAD_PATH.unshift(CUCUMBER_LIB)
137
+ require 'cucumber/rake/task'
138
+
139
+ Cucumber::Rake::Task.new(:features) do |t|
140
+ t.profile = "no_bomb"
141
+ t.cucumber_opts = %w{--quiet --no-color}
142
+ end
143
+ """
144
+
145
+ When I run rake features
146
+ Then it should pass
147
+ And the output should not contain
148
+ """
149
+ * features/support/dont_require_me.rb
150
+ """
@@ -0,0 +1,35 @@
1
+ Feature: Cucumber command line
2
+ In order to find out what step definitions need to be implemented
3
+ Developers should always see what step definition is missing
4
+
5
+ @mri186
6
+ Scenario: Get info at arbitrary levels of nesting
7
+ When I run cucumber features/call_undefined_step_from_step_def.feature
8
+ Then it should pass with
9
+ """
10
+ Feature: Calling undefined step
11
+
12
+ Scenario: Call directly # features/call_undefined_step_from_step_def.feature:3
13
+ Given a step definition that calls an undefined step # features/step_definitions/sample_steps.rb:19
14
+ Undefined step: "this does not exist" (Cucumber::Undefined)
15
+ ./features/step_definitions/sample_steps.rb:20:in `/^a step definition that calls an undefined step$/'
16
+ features/call_undefined_step_from_step_def.feature:4:in `Given a step definition that calls an undefined step'
17
+
18
+ Scenario: Call via another # features/call_undefined_step_from_step_def.feature:6
19
+ Given call step "a step definition that calls an undefined step" # features/step_definitions/sample_steps.rb:23
20
+ Undefined step: "this does not exist" (Cucumber::Undefined)
21
+ ./features/step_definitions/sample_steps.rb:20:in `/^a step definition that calls an undefined step$/'
22
+ features/call_undefined_step_from_step_def.feature:7:in `Given call step "a step definition that calls an undefined step"'
23
+
24
+ 2 scenarios (2 undefined)
25
+ 2 steps (2 undefined)
26
+
27
+ You can implement step definitions for undefined steps with these snippets:
28
+
29
+ Given /^this does not exist$/ do
30
+ pending
31
+ end
32
+
33
+
34
+ """
35
+
@@ -0,0 +1,22 @@
1
+ Feature: Snippets
2
+ In order to help speed up writing step definitions
3
+ As a feature editor
4
+ I want snippet suggestions for undefined step definitions
5
+
6
+ Scenario: Snippet for undefined step with a pystring
7
+ When I run cucumber features/undefined_multiline_args.feature:3 -s
8
+ Then the output should contain
9
+ """
10
+ Given /^a pystring$/ do |string|
11
+ pending
12
+ end
13
+ """
14
+ Scenario: Snippet for undefined step with a step table
15
+ When I run cucumber features/undefined_multiline_args.feature:9 -s
16
+ Then the output should contain
17
+ """
18
+ Given /^a table$/ do |table|
19
+ # table is a Cucumber::Ast::Table
20
+ pending
21
+ end
22
+ """
@@ -0,0 +1,130 @@
1
+ require 'tempfile'
2
+
3
+ Given /^I am in (.*)$/ do |example_dir_relative_path|
4
+ @current_dir = examples_dir(example_dir_relative_path)
5
+ end
6
+
7
+ Given /^a standard Cucumber project directory structure$/ do
8
+ @current_dir = working_dir
9
+ in_current_dir do
10
+ FileUtils.mkdir_p 'features/support'
11
+ FileUtils.mkdir 'features/step_definitions'
12
+ end
13
+ end
14
+
15
+ Given /^the (.*) directory is empty$/ do |directory|
16
+ in_current_dir do
17
+ FileUtils.remove_dir(directory) rescue nil
18
+ FileUtils.mkdir 'tmp'
19
+ end
20
+ end
21
+
22
+ Given /^a file named "([^\"]*)"$/ do |file_name|
23
+ create_file(file_name, '')
24
+ end
25
+
26
+ Given /^a file named "([^\"]*)" with:$/ do |file_name, file_content|
27
+ create_file(file_name, file_content)
28
+ end
29
+
30
+ Given /^the following profiles? (?:are|is) defined:$/ do |profiles|
31
+ create_file('cucumber.yml', profiles)
32
+ end
33
+
34
+ Given /^I am running spork in the background$/ do
35
+ run_spork_in_background
36
+ end
37
+
38
+ Given /^I am not running (?:.*) in the background$/ do
39
+ # no-op
40
+ end
41
+
42
+
43
+ When /^I run cucumber (.*)$/ do |cucumber_opts|
44
+ run "#{Cucumber::RUBY_BINARY} #{Cucumber::BINARY} --no-color #{cucumber_opts}"
45
+ end
46
+
47
+ When /^I run rake (.*)$/ do |rake_opts|
48
+ run "rake #{rake_opts} --trace"
49
+ end
50
+
51
+ Then /^it should (fail|pass)$/ do |success|
52
+ if success == 'fail'
53
+ last_exit_status.should_not == 0
54
+ else
55
+ if last_exit_status != 0
56
+ raise "Failed with exit status #{last_exit_status}\nSTDOUT:\n#{last_stdout}\nSTDERR:\n#{last_stderr}"
57
+ end
58
+ end
59
+ end
60
+
61
+ Then /^it should (fail|pass) with$/ do |success, output|
62
+ last_stdout.should == output
63
+ Then("it should #{success}")
64
+ end
65
+
66
+ Then /^the output should contain$/ do |text|
67
+ last_stdout.should include(text)
68
+ end
69
+
70
+ Then /^the output should not contain$/ do |text|
71
+ last_stdout.should_not include(text)
72
+ end
73
+
74
+ Then /^the output should be$/ do |text|
75
+ last_stdout.should == text
76
+ end
77
+
78
+ Then /^"(.*)" should contain XML$/ do |file, xml|
79
+ t = Tempfile.new('cucumber-junit')
80
+ t.write(xml)
81
+ t.flush
82
+ t.close
83
+ cmd = "diffxml #{t.path} #{file}"
84
+ diff = `#{cmd}`
85
+ if diff =~ /<delta>/m
86
+ raise diff + "\nXML WAS:\n" + IO.read(file)
87
+ end
88
+ end
89
+
90
+ Then /^"(.*)" should contain$/ do |file, text|
91
+ strip_duration(IO.read(file)).should == text
92
+ end
93
+
94
+ Then /^"(.*)" should match$/ do |file, text|
95
+ IO.read(file).should =~ Regexp.new(text)
96
+ end
97
+
98
+ Then /^"([^\"]*)" should have the same contents as "([^\"]*)"$/ do |actual_file, expected_file|
99
+ actual = IO.read(actual_file)
100
+ actual = replace_duration(actual, '0m30.005s')
101
+ # Comment out to replace expected file. Use with care! Remember to update duration afterwards.
102
+ # File.open(expected_file, "w") {|io| io.write(actual)}
103
+ actual.should == IO.read(expected_file)
104
+ end
105
+
106
+ Then /^STDERR should match$/ do |text|
107
+ last_stderr.should =~ /#{text}/
108
+ end
109
+
110
+ Then /^STDERR should not match$/ do |text|
111
+ last_stderr.should_not =~ /#{text}/
112
+ end
113
+
114
+ Then /^STDERR should be empty$/ do
115
+ last_stderr.should == ""
116
+ end
117
+
118
+ Then /^"(.*)" should exist$/ do |file|
119
+ File.exists?(file).should be_true
120
+ FileUtils.rm(file)
121
+ end
122
+
123
+ Then /^"([^\"]*)" should not be required$/ do |file_name|
124
+ last_stdout.should_not include("* #{file_name}")
125
+ end
126
+
127
+ Then /^"([^\"]*)" should be required$/ do |file_name|
128
+ last_stdout.should include("* #{file_name}")
129
+ end
130
+