cucumber 0.1.10 → 0.2.0

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 (348) hide show
  1. data/History.txt +223 -5
  2. data/License.txt +1 -1
  3. data/Manifest.txt +174 -85
  4. data/README.txt +2 -39
  5. data/Rakefile +1 -2
  6. data/bin/cucumber +2 -2
  7. data/config/hoe.rb +9 -3
  8. data/examples/cs/README.textile +1 -22
  9. data/examples/cs/Rakefile +1 -1
  10. data/examples/cs/compile.bat +1 -0
  11. data/examples/cs/features/addition.feature +16 -0
  12. data/examples/cs/features/step_definitons/calculator_steps.rb +19 -0
  13. data/examples/cs/src/demo/Calculator.cs +20 -0
  14. data/examples/i18n/README.textile +1 -1
  15. data/examples/i18n/Rakefile +20 -4
  16. data/examples/i18n/ar/features/addition.feature +10 -11
  17. data/examples/i18n/ar/features/step_definitons/calculator_steps.rb +4 -12
  18. data/examples/i18n/da/features/step_definitons/kalkulator_steps.rb +4 -2
  19. data/examples/i18n/de/features/addition.feature +10 -11
  20. data/examples/i18n/de/features/division.feature +0 -1
  21. data/examples/i18n/de/features/step_definitons/calculator_steps.rb +5 -11
  22. data/examples/i18n/en/features/addition.feature +10 -11
  23. data/examples/i18n/en/features/division.feature +0 -1
  24. data/examples/i18n/en/features/step_definitons/calculator_steps.rb +5 -12
  25. data/examples/i18n/en-lol/Rakefile +6 -0
  26. data/examples/i18n/en-lol/features/step_definitions/cucumbrz_steps.rb +16 -0
  27. data/examples/i18n/en-lol/features/stuffing.feature +8 -0
  28. data/examples/i18n/en-lol/features/support/env.rb +8 -0
  29. data/examples/i18n/en-lol/lib/basket.rb +12 -0
  30. data/examples/i18n/en-lol/lib/belly.rb +11 -0
  31. data/examples/i18n/es/features/adicion.feature +11 -12
  32. data/examples/i18n/es/features/step_definitons/calculador_steps.rb +10 -11
  33. data/examples/i18n/es/lib/calculador.rb +4 -1
  34. data/examples/i18n/et/features/jagamine.feature +9 -0
  35. data/examples/i18n/et/features/liitmine.feature +10 -11
  36. data/examples/i18n/et/features/step_definitions/kalkulaator_steps.rb +7 -9
  37. data/examples/i18n/et/lib/kalkulaator.rb +5 -1
  38. data/examples/i18n/fi/Rakefile +6 -0
  39. data/examples/i18n/fi/features/jakolasku.feature +9 -0
  40. data/examples/i18n/fi/features/step_definitons/laskin_steps.rb +24 -0
  41. data/examples/i18n/fi/features/yhteenlasku.feature +16 -0
  42. data/examples/i18n/fi/lib/laskin.rb +14 -0
  43. data/examples/i18n/fr/features/addition.feature +16 -12
  44. data/examples/i18n/fr/features/step_definitions/calculatrice_steps.rb +14 -11
  45. data/examples/i18n/fr/lib/calculatrice.rb +1 -1
  46. data/examples/i18n/id/features/addition.feature +10 -11
  47. data/examples/i18n/id/features/division.feature +0 -1
  48. data/examples/i18n/id/features/step_definitons/calculator_steps.rb +5 -12
  49. data/examples/i18n/it/features/step_definitons/calcolatrice_steps.rb +4 -2
  50. data/examples/i18n/ja/features/addition.feature +10 -11
  51. data/examples/i18n/ja/features/division.feature +2 -3
  52. data/examples/i18n/ja/features/step_definitons/calculator_steps.rb +6 -12
  53. data/examples/i18n/ko/Rakefile +6 -0
  54. data/examples/i18n/ko/features/addition.feature +16 -0
  55. data/examples/i18n/ko/features/division.feature +10 -0
  56. data/examples/i18n/ko/features/step_definitons/calculator_steps.rb +24 -0
  57. data/examples/i18n/ko/lib/calculator.rb +14 -0
  58. data/examples/i18n/lt/features/addition.feature +11 -11
  59. data/examples/i18n/lt/features/division.feature +0 -1
  60. data/examples/i18n/lt/features/step_definitons/calculator_steps.rb +5 -12
  61. data/examples/i18n/no/features/step_definitons/kalkulator_steps.rb +4 -9
  62. data/examples/i18n/no/features/summering.feature +1 -0
  63. data/examples/i18n/no/features/support/env.rb +6 -0
  64. data/examples/i18n/pt/features/step_definitions/calculadora_steps.rb +4 -2
  65. data/examples/i18n/ro/features/step_definitons/calculator_steps.rb +4 -2
  66. data/examples/i18n/ru/Rakefile +6 -0
  67. data/examples/i18n/ru/features/addition.feature +10 -0
  68. data/examples/i18n/ru/features/consecutive_calculations.feature +16 -0
  69. data/examples/i18n/ru/features/division.feature +15 -0
  70. data/examples/i18n/ru/features/step_definitons/calculator_steps.rb +19 -0
  71. data/examples/i18n/ru/features/support/env.rb +6 -0
  72. data/examples/i18n/ru/features/support/world.rb +7 -0
  73. data/examples/i18n/ru/lib/calculator.rb +24 -0
  74. data/examples/i18n/se/features/step_definitons/kalkulator_steps.rb +4 -2
  75. data/examples/i18n/zh-CN/features/step_definitons/calculator_steps.rb +5 -3
  76. data/examples/i18n/zh-TW/Rakefile +6 -0
  77. data/examples/i18n/zh-TW/features/addition.feature +16 -0
  78. data/examples/i18n/zh-TW/features/division.feature +10 -0
  79. data/examples/i18n/zh-TW/features/step_definitons/calculator_steps.rb +24 -0
  80. data/examples/i18n/zh-TW/lib/calculator.rb +14 -0
  81. data/examples/java/features/step_definitons/hello_steps.rb +1 -1
  82. data/examples/java/features/step_definitons/tree_steps.rb +1 -1
  83. data/examples/jbehave/README.textile +20 -0
  84. data/examples/jbehave/features/support/env.rb +7 -0
  85. data/examples/jbehave/features/trading.feature +28 -0
  86. data/examples/jbehave/pom.xml +53 -0
  87. data/examples/jbehave/src/main/java/cukes/jbehave/examples/trader/converters/TraderConverter.java +32 -0
  88. data/examples/jbehave/src/main/java/cukes/jbehave/examples/trader/model/Stock.java +42 -0
  89. data/examples/jbehave/src/main/java/cukes/jbehave/examples/trader/model/Trader.java +29 -0
  90. data/examples/jbehave/src/main/java/cukes/jbehave/examples/trader/persistence/TraderPersister.java +22 -0
  91. data/examples/jbehave/src/main/java/cukes/jbehave/examples/trader/scenarios/TraderSteps.java +70 -0
  92. data/examples/selenium/features/search.feature +1 -1
  93. data/examples/selenium/features/step_definitons/search_steps.rb +13 -0
  94. data/examples/selenium/features/support/env.rb +19 -0
  95. data/examples/selenium_webrat/features/search.feature +9 -0
  96. data/examples/selenium_webrat/features/step_definitons/search_steps.rb +13 -0
  97. data/examples/selenium_webrat/features/support/env.rb +41 -0
  98. data/examples/self_test/README.textile +6 -0
  99. data/examples/self_test/Rakefile +6 -0
  100. data/examples/self_test/features/background/failing_background.feature +11 -0
  101. data/examples/self_test/features/background/failing_background_after_success.feature +11 -0
  102. data/examples/self_test/features/background/multiline_args_background.feature +32 -0
  103. data/examples/self_test/features/background/passing_background.feature +10 -0
  104. data/examples/self_test/features/background/pending_background.feature +10 -0
  105. data/examples/self_test/features/background/scenario_outline_failing_background.feature +16 -0
  106. data/examples/self_test/features/background/scenario_outline_passing_background.feature +16 -0
  107. data/examples/self_test/features/call_undefined_step_from_step_def.feature +7 -0
  108. data/examples/self_test/features/failing_expectation.feature +4 -0
  109. data/examples/self_test/features/lots_of_undefined.feature +8 -0
  110. data/examples/self_test/features/outline_sample.feature +15 -0
  111. data/examples/self_test/features/sample.feature +19 -0
  112. data/examples/self_test/features/step_definitions/sample_steps.rb +64 -0
  113. data/examples/self_test/features/support/env.rb +1 -0
  114. data/examples/self_test/features/support/tag_count_formatter.rb +25 -0
  115. data/examples/sinatra/Rakefile +6 -0
  116. data/examples/sinatra/app.rb +14 -0
  117. data/examples/sinatra/features/add.feature +11 -0
  118. data/examples/sinatra/features/step_definitions/add_steps.rb +15 -0
  119. data/examples/sinatra/features/support/env.rb +20 -0
  120. data/examples/sinatra/views/add.erb +5 -0
  121. data/examples/sinatra/views/layout.erb +8 -0
  122. data/examples/tickets/Rakefile +13 -8
  123. data/examples/tickets/cucumber.yml +2 -1
  124. data/examples/tickets/features/172.feature +28 -0
  125. data/examples/tickets/features/177/1.feature +29 -0
  126. data/examples/tickets/features/177/2.feature +21 -0
  127. data/examples/tickets/features/177/3.feature +18 -0
  128. data/examples/tickets/features/180.feature +7 -0
  129. data/examples/tickets/features/236.feature +13 -0
  130. data/examples/tickets/features/241.feature +13 -0
  131. data/examples/tickets/features/lib/eatting_machine.rb +18 -0
  132. data/examples/tickets/features/lib/pantry.rb +20 -0
  133. data/examples/tickets/features/scenario_outline.feature +95 -0
  134. data/examples/tickets/features/step_definitons/scenario_outline_steps.rb +42 -0
  135. data/examples/tickets/features/step_definitons/tickets_steps.rb +46 -5
  136. data/examples/tickets/features/tickets.feature +5 -1
  137. data/examples/watir/README.textile +16 -0
  138. data/examples/watir/features/step_definitons/search_steps.rb +24 -0
  139. data/examples/watir/features/support/env.rb +32 -0
  140. data/features/background.feature +221 -0
  141. data/features/cucumber_cli.feature +389 -0
  142. data/features/cucumber_cli_diff_disabled.feature +45 -0
  143. data/features/cucumber_cli_outlines.feature +81 -0
  144. data/features/custom_formatter.feature +11 -0
  145. data/features/report_called_undefined_steps.feature +34 -0
  146. data/features/step_definitions/cucumber_steps.rb +30 -0
  147. data/features/step_definitions/extra_steps.rb +2 -0
  148. data/features/support/env.rb +8 -0
  149. data/gem_tasks/deployment.rake +0 -23
  150. data/gem_tasks/features.rake +1 -1
  151. data/gem_tasks/fix_cr_lf.rake +1 -1
  152. data/gem_tasks/flog.rake +1 -1
  153. data/gem_tasks/gemspec.rake +4 -0
  154. data/gem_tasks/jar.rake +67 -0
  155. data/gem_tasks/rspec.rake +31 -15
  156. data/gem_tasks/yard.rake +8 -0
  157. data/lib/autotest/cucumber_mixin.rb +41 -25
  158. data/lib/cucumber/ast/background.rb +50 -0
  159. data/lib/cucumber/ast/comment.rb +26 -0
  160. data/lib/cucumber/ast/examples.rb +38 -0
  161. data/lib/cucumber/ast/feature.rb +62 -0
  162. data/lib/cucumber/ast/feature_element.rb +46 -0
  163. data/lib/cucumber/ast/features.rb +20 -0
  164. data/lib/cucumber/ast/outline_table.rb +81 -0
  165. data/lib/cucumber/ast/py_string.rb +58 -0
  166. data/lib/cucumber/ast/scenario.rb +64 -0
  167. data/lib/cucumber/ast/scenario_outline.rb +90 -0
  168. data/lib/cucumber/ast/step.rb +122 -0
  169. data/lib/cucumber/ast/step_collection.rb +66 -0
  170. data/lib/cucumber/ast/step_invocation.rb +110 -0
  171. data/lib/cucumber/ast/table.rb +318 -0
  172. data/lib/cucumber/ast/tags.rb +33 -0
  173. data/lib/cucumber/ast/visitor.rb +125 -0
  174. data/lib/cucumber/ast.rb +29 -0
  175. data/lib/cucumber/broadcaster.rb +2 -9
  176. data/lib/cucumber/cli/configuration.rb +364 -0
  177. data/lib/cucumber/cli/language_help_formatter.rb +59 -0
  178. data/lib/cucumber/cli/main.rb +109 -0
  179. data/lib/cucumber/core_ext/exception.rb +53 -0
  180. data/lib/cucumber/core_ext/instance_exec.rb +54 -0
  181. data/lib/cucumber/core_ext/proc.rb +29 -65
  182. data/lib/cucumber/core_ext/string.rb +26 -0
  183. data/lib/cucumber/formatter/ansicolor.rb +102 -0
  184. data/lib/cucumber/formatter/color_io.rb +23 -0
  185. data/lib/cucumber/formatter/console.rb +109 -0
  186. data/lib/cucumber/formatter/cucumber.css +55 -0
  187. data/lib/cucumber/formatter/cucumber.sass +49 -0
  188. data/lib/cucumber/formatter/html.rb +133 -0
  189. data/lib/cucumber/formatter/pretty.rb +179 -0
  190. data/lib/cucumber/formatter/profile.rb +77 -0
  191. data/lib/cucumber/formatter/progress.rb +60 -0
  192. data/lib/cucumber/formatter/rerun.rb +35 -0
  193. data/lib/cucumber/formatter/unicode.rb +35 -0
  194. data/lib/cucumber/formatter.rb +1 -0
  195. data/lib/cucumber/formatters/unicode.rb +2 -0
  196. data/lib/cucumber/jbehave.rb +97 -0
  197. data/lib/cucumber/languages.yml +214 -72
  198. data/lib/cucumber/parser/basic.rb +0 -0
  199. data/lib/cucumber/parser/feature.rb +1487 -0
  200. data/lib/cucumber/parser/feature.tt +193 -0
  201. data/lib/cucumber/parser/i18n.tt +31 -0
  202. data/lib/cucumber/parser/table.rb +402 -0
  203. data/lib/cucumber/parser/table.tt +59 -0
  204. data/lib/cucumber/parser/treetop_ext.rb +75 -0
  205. data/lib/cucumber/parser.rb +43 -0
  206. data/lib/cucumber/platform.rb +13 -8
  207. data/lib/cucumber/rails/rspec.rb +6 -10
  208. data/lib/cucumber/rails/world.rb +8 -8
  209. data/lib/cucumber/rake/task.rb +46 -9
  210. data/lib/cucumber/step_definition.rb +103 -0
  211. data/lib/cucumber/step_match.rb +49 -0
  212. data/lib/cucumber/step_mother.rb +184 -65
  213. data/lib/cucumber/version.rb +4 -3
  214. data/lib/cucumber/world.rb +53 -0
  215. data/lib/cucumber.rb +45 -21
  216. data/rails_generators/cucumber/cucumber_generator.rb +23 -3
  217. data/rails_generators/cucumber/templates/cucumber +2 -1
  218. data/rails_generators/cucumber/templates/cucumber.rake +13 -5
  219. data/rails_generators/cucumber/templates/env.rb +11 -2
  220. data/rails_generators/cucumber/templates/paths.rb +19 -0
  221. data/rails_generators/cucumber/templates/webrat_steps.rb +60 -40
  222. data/rails_generators/feature/feature_generator.rb +26 -2
  223. data/rails_generators/feature/templates/feature.erb +15 -12
  224. data/rails_generators/feature/templates/steps.erb +14 -16
  225. data/spec/cucumber/ast/background_spec.rb +49 -0
  226. data/spec/cucumber/ast/feature_factory.rb +63 -0
  227. data/spec/cucumber/ast/feature_spec.rb +37 -0
  228. data/spec/cucumber/ast/py_string_spec.rb +47 -0
  229. data/spec/cucumber/ast/scenario_outline_spec.rb +67 -0
  230. data/spec/cucumber/ast/scenario_spec.rb +65 -0
  231. data/spec/cucumber/ast/step_collection_spec.rb +8 -0
  232. data/spec/cucumber/ast/step_spec.rb +66 -0
  233. data/spec/cucumber/ast/table_spec.rb +149 -0
  234. data/spec/cucumber/ast/tags_spec.rb +19 -0
  235. data/spec/cucumber/broadcaster_spec.rb +6 -18
  236. data/spec/cucumber/cli/configuration_spec.rb +275 -0
  237. data/spec/cucumber/cli/main_spec.rb +203 -0
  238. data/spec/cucumber/core_ext/proc_spec.rb +27 -35
  239. data/spec/cucumber/core_ext/string_spec.rb +8 -0
  240. data/spec/cucumber/formatter/ansicolor_spec.rb +35 -0
  241. data/spec/cucumber/formatter/color_io_spec.rb +26 -0
  242. data/spec/cucumber/formatter/html/cucumber.css +37 -0
  243. data/spec/cucumber/formatter/html/cucumber.js +13 -0
  244. data/spec/cucumber/formatter/html/index.html +45 -0
  245. data/spec/cucumber/formatter/html/jquery-1.3.min.js +19 -0
  246. data/spec/cucumber/formatter/html/jquery.uitableedit.js +100 -0
  247. data/spec/cucumber/formatters/profile_formatter_spec.rb +22 -16
  248. data/spec/cucumber/parser/feature_parser_spec.rb +282 -0
  249. data/spec/cucumber/parser/table_parser_spec.rb +48 -0
  250. data/spec/cucumber/rails/stubs/mini_rails.rb +4 -3
  251. data/spec/cucumber/step_definition_spec.rb +81 -0
  252. data/spec/cucumber/step_mother_spec.rb +50 -51
  253. data/spec/cucumber/treetop_parser/empty_feature.feature +1 -1
  254. data/spec/cucumber/treetop_parser/empty_scenario_outline.feature +3 -0
  255. data/spec/cucumber/treetop_parser/invalid_scenario_outlines.feature +7 -0
  256. data/spec/cucumber/treetop_parser/multiple_tables.feature +6 -8
  257. data/spec/cucumber/treetop_parser/scenario_outline.feature +16 -0
  258. data/spec/cucumber/treetop_parser/spaces.feature +3 -1
  259. data/spec/cucumber/treetop_parser/with_comments.feature +1 -1
  260. data/spec/cucumber/treetop_parser/with_tags.feature +18 -0
  261. data/spec/cucumber/world/pending_spec.rb +47 -0
  262. data/spec/spec_helper.rb +4 -3
  263. metadata +192 -95
  264. data/TODO.txt +0 -26
  265. data/examples/calculator_ruby_features/features/addition.rb +0 -23
  266. data/examples/calculator_ruby_features/features/step_definitons/calculator_steps.rb +0 -43
  267. data/examples/cs/features/hello.feature +0 -11
  268. data/examples/cs/features/step_definitons/hello_steps.rb +0 -25
  269. data/examples/cs/features/step_definitons/tree_steps.rb +0 -14
  270. data/examples/cs/features/tree.feature +0 -9
  271. data/examples/cs/src/Hello.cs +0 -18
  272. data/examples/i18n/ja/README.txt +0 -5
  273. data/examples/selenium/features/step_definitons/stories_steps.rb +0 -41
  274. data/examples/watir/features/step_definitons/stories_steps.rb +0 -51
  275. data/features/see_features.feature +0 -8
  276. data/features/steps/features_steps.rb +0 -9
  277. data/gem_tasks/treetop.rake +0 -41
  278. data/lib/cucumber/cli.rb +0 -279
  279. data/lib/cucumber/executor.rb +0 -190
  280. data/lib/cucumber/formatters/ansicolor.rb +0 -109
  281. data/lib/cucumber/formatters/autotest_formatter.rb +0 -23
  282. data/lib/cucumber/formatters/cucumber.css +0 -132
  283. data/lib/cucumber/formatters/cucumber.js +0 -11
  284. data/lib/cucumber/formatters/html_formatter.rb +0 -128
  285. data/lib/cucumber/formatters/jquery.js +0 -32
  286. data/lib/cucumber/formatters/pretty_formatter.rb +0 -234
  287. data/lib/cucumber/formatters/profile_formatter.rb +0 -92
  288. data/lib/cucumber/formatters/progress_formatter.rb +0 -58
  289. data/lib/cucumber/formatters.rb +0 -1
  290. data/lib/cucumber/model/table.rb +0 -28
  291. data/lib/cucumber/model.rb +0 -1
  292. data/lib/cucumber/step_methods.rb +0 -49
  293. data/lib/cucumber/tree/feature.rb +0 -63
  294. data/lib/cucumber/tree/features.rb +0 -21
  295. data/lib/cucumber/tree/given_scenario.rb +0 -13
  296. data/lib/cucumber/tree/scenario.rb +0 -174
  297. data/lib/cucumber/tree/step.rb +0 -134
  298. data/lib/cucumber/tree/table.rb +0 -26
  299. data/lib/cucumber/tree/top_down_visitor.rb +0 -23
  300. data/lib/cucumber/tree.rb +0 -18
  301. data/lib/cucumber/treetop_parser/feature.treetop.erb +0 -206
  302. data/lib/cucumber/treetop_parser/feature_ar.rb +0 -1591
  303. data/lib/cucumber/treetop_parser/feature_cy.rb +0 -1591
  304. data/lib/cucumber/treetop_parser/feature_da.rb +0 -1591
  305. data/lib/cucumber/treetop_parser/feature_de.rb +0 -1591
  306. data/lib/cucumber/treetop_parser/feature_en-tx.rb +0 -1591
  307. data/lib/cucumber/treetop_parser/feature_en.rb +0 -1591
  308. data/lib/cucumber/treetop_parser/feature_es.rb +0 -1591
  309. data/lib/cucumber/treetop_parser/feature_et.rb +0 -1591
  310. data/lib/cucumber/treetop_parser/feature_fr.rb +0 -1591
  311. data/lib/cucumber/treetop_parser/feature_id.rb +0 -1591
  312. data/lib/cucumber/treetop_parser/feature_it.rb +0 -1591
  313. data/lib/cucumber/treetop_parser/feature_ja.rb +0 -1591
  314. data/lib/cucumber/treetop_parser/feature_lt.rb +0 -1591
  315. data/lib/cucumber/treetop_parser/feature_nl.rb +0 -1591
  316. data/lib/cucumber/treetop_parser/feature_no.rb +0 -1591
  317. data/lib/cucumber/treetop_parser/feature_parser.rb +0 -34
  318. data/lib/cucumber/treetop_parser/feature_pl.rb +0 -1591
  319. data/lib/cucumber/treetop_parser/feature_pt.rb +0 -1591
  320. data/lib/cucumber/treetop_parser/feature_ro.rb +0 -1591
  321. data/lib/cucumber/treetop_parser/feature_ro2.rb +0 -1591
  322. data/lib/cucumber/treetop_parser/feature_ru.rb +0 -1591
  323. data/lib/cucumber/treetop_parser/feature_se.rb +0 -1591
  324. data/lib/cucumber/treetop_parser/feature_zh-CN.rb +0 -1591
  325. data/script/console +0 -10
  326. data/script/console.cmd +0 -1
  327. data/script/destroy +0 -14
  328. data/script/destroy.cmd +0 -1
  329. data/script/generate +0 -14
  330. data/script/generate.cmd +0 -1
  331. data/script/txt2html +0 -74
  332. data/script/txt2html.cmd +0 -1
  333. data/setup.rb +0 -1585
  334. data/spec/cucumber/cli_spec.rb +0 -274
  335. data/spec/cucumber/executor_spec.rb +0 -298
  336. data/spec/cucumber/formatters/ansicolor_spec.rb +0 -35
  337. data/spec/cucumber/formatters/autotest_formatter_spec.rb +0 -26
  338. data/spec/cucumber/formatters/features.html +0 -269
  339. data/spec/cucumber/formatters/html_formatter_spec.rb +0 -74
  340. data/spec/cucumber/formatters/pretty_formatter_spec.rb +0 -204
  341. data/spec/cucumber/formatters/progress_formatter_spec.rb +0 -65
  342. data/spec/cucumber/model/table_spec.rb +0 -20
  343. data/spec/cucumber/tree/feature_spec.rb +0 -43
  344. data/spec/cucumber/tree/row_scenario_spec.rb +0 -55
  345. data/spec/cucumber/tree/scenario_spec.rb +0 -76
  346. data/spec/cucumber/tree/step_spec.rb +0 -50
  347. data/spec/cucumber/treetop_parser/feature_parser_spec.rb +0 -98
  348. /data/examples/{calculator_ruby_features → selenium_webrat}/Rakefile +0 -0
@@ -1,204 +0,0 @@
1
- require File.dirname(__FILE__) + '/../../spec_helper'
2
-
3
- module Cucumber
4
- module Formatters
5
- describe PrettyFormatter do
6
-
7
- def mock_step(stubs={})
8
- stub('step', {
9
- :keyword => 'Given',
10
- :format => 'formatted yes',
11
- :name => 'example',
12
- :error => nil,
13
- :padding_length => 2,
14
- :file => 'test',
15
- :line => 1,
16
- :row? => false}.merge(stubs))
17
- end
18
-
19
- def mock_scenario(stubs={})
20
- stub('scenario', {
21
- :name => 'test',
22
- :row? => false,
23
- :pending? => false,
24
- :file => 'file',
25
- :line => 1,
26
- :padding_length => 2}.merge(stubs))
27
- end
28
-
29
- def mock_feature(stubs={})
30
- stub("feature", stubs)
31
- end
32
-
33
- def mock_error(stubs={})
34
- stub('error', {
35
- :message => 'failed',
36
- :backtrace => 'example backtrace'}.merge(stubs))
37
- end
38
-
39
- def mock_proc
40
- stub(Proc, :to_comment_line => '# steps/example_steps.rb:11')
41
- end
42
-
43
- it "should print step file and line when passed" do
44
- io = StringIO.new
45
- formatter = PrettyFormatter.new io, StepMother.new
46
- step = stub('step',
47
- :error => nil, :row? => false, :keyword => 'Given', :format => 'formatted yes'
48
- )
49
- formatter.step_passed(step, nil, nil)
50
- io.string.should == " Given formatted yes\n"
51
- end
52
-
53
- describe "scenario without any steps" do
54
- before :each do
55
- @io = StringIO.new
56
- @formatter = PrettyFormatter.new(@io, StepMother.new)
57
- @scenario = mock_scenario(:name => "title", :pending? => true)
58
- end
59
-
60
- it "should display as pending when executing" do
61
- @formatter.should_receive(:pending).with(" Scenario: title")
62
- @formatter.scenario_executing(@scenario)
63
- end
64
-
65
- it "should display as pending in the dump" do
66
- @formatter.scenario_executing(@scenario)
67
- @formatter.dump
68
- @io.string.should include("1 scenarios pending")
69
- end
70
- end
71
-
72
- it "should put a line between last row scenario and new scenario" do
73
- io = StringIO.new
74
- formatter = PrettyFormatter.new io, mock('step_mother'), :source => true
75
- scenario = mock_scenario(:row? => true)
76
-
77
- formatter.scenario_executing(scenario)
78
- formatter.scenario_executed(scenario)
79
- formatter.scenario_executing(mock_scenario(:name => 'spacey', :row? => false))
80
-
81
- io.string.should =~ /\n\n Scenario: spacey/
82
- end
83
-
84
- {'should' => true, 'should not' => false}.each do |should_or_should_not, show_snippet|
85
- describe "snippets option #{show_snippet}" do
86
-
87
- it "#{should_or_should_not} show snippet for pending step" do
88
- @io = StringIO.new
89
- step_mother = mock('step_mother', :has_step_definition? => false)
90
- @formatter = PrettyFormatter.new @io, step_mother, :snippets => show_snippet
91
-
92
- @formatter.step_pending(mock_step(:actual_keyword => 'Given', :name => 'pending step snippet'), nil, nil)
93
- @formatter.dump
94
-
95
- @io.string.send(should_or_should_not.gsub(' ','_').to_sym, include("Given /^pending step snippet$/ do"))
96
- end
97
-
98
- end
99
- end
100
-
101
- it "should escape snippets which have special regular expression characters" do
102
- @io = StringIO.new
103
- step_mother = mock('step_mother', :has_step_definition? => false)
104
- @formatter = PrettyFormatter.new @io, step_mother, :snippets => true
105
-
106
- @formatter.step_pending(mock_step(:actual_keyword => 'Given', :name => "$1 millon /'s"), nil, nil)
107
- @formatter.dump
108
-
109
- @io.string.should include("Given /^\\$1 millon \\/'s$/ do")
110
- end
111
-
112
- it "should not show the snippet for a step which already has a step definition" do
113
- @io = StringIO.new
114
- step_mother = mock('step_mother', :has_step_definition? => true)
115
- @formatter = PrettyFormatter.new @io, step_mother, :snippets => true
116
-
117
- @formatter.step_pending(mock_step(:actual_keyword => 'Given', :name => 'pending step snippet'), nil, nil)
118
- @formatter.dump
119
-
120
- @io.string.should_not include("Given /^pending step snippet$/ do")
121
- end
122
-
123
- describe "show source option true" do
124
-
125
- before(:each) do
126
- @io = StringIO.new
127
- step_mother = mock('step_mother')
128
- @formatter = PrettyFormatter.new @io, step_mother, :source => true
129
- end
130
-
131
- %w{passed failed skipped}.each do |result|
132
- it "should display step source for #{result} step" do
133
- @formatter.send("step_#{result}".to_sym, mock_step(:regexp_args_proc => [nil, nil, mock_proc], :error => StandardError.new, :padding_length => 2), nil, nil)
134
-
135
- @io.string.should include("Given formatted yes # steps/example_steps.rb:11")
136
- end
137
- end
138
-
139
- it "should display feature file and line for pending step" do
140
- @formatter.step_pending(mock_step(:name => 'test', :file => 'features/example.feature', :line => 5, :padding_length => 2), nil, nil)
141
-
142
- @io.string.should include("Given test # features/example.feature:5")
143
- end
144
-
145
- it "should display file and line for scenario" do
146
- @formatter.scenario_executing(mock_scenario(:name => "title", :file => 'features/example.feature', :line => 2 , :padding_length => 2, :pending? => false))
147
-
148
- @io.string.should include("Scenario: title # features/example.feature:2")
149
- end
150
-
151
- it "should display file for feature" do
152
- @formatter.feature_executing(mock_feature(:file => 'features/example.feature', :padding_length => 2))
153
- @formatter.header_executing("Feature: test\n In order to ...\n As a ...\n I want to ...\n")
154
-
155
- @io.string.should include("Feature: test # features/example.feature\n")
156
- @io.string.should include("In order to ...\n")
157
- @io.string.should include("As a ...\n")
158
- @io.string.should include("I want to ...\n")
159
- end
160
-
161
- it "should align step comments" do
162
- step_1 = mock_step(:regexp_args_proc => [nil, nil, mock_proc], :format => "1", :padding_length => 10)
163
- step_4 = mock_step(:regexp_args_proc => [nil, nil, mock_proc], :format => "4444", :padding_length => 7)
164
- step_9 = mock_step(:regexp_args_proc => [nil, nil, mock_proc], :format => "999999999", :padding_length => 2)
165
-
166
- @formatter.step_passed(step_1, nil, nil)
167
- @formatter.step_passed(step_4, nil, nil)
168
- @formatter.step_passed(step_9, nil, nil)
169
-
170
- @io.string.should include("Given 1 # steps/example_steps.rb:11")
171
- @io.string.should include("Given 4444 # steps/example_steps.rb:11")
172
- @io.string.should include("Given 999999999 # steps/example_steps.rb:11")
173
- end
174
-
175
- it "should align step comments with respect to their scenario's comment" do
176
- step = mock_step(:regexp_args_proc => [nil, nil, mock_proc], :error => StandardError.new, :padding_length => 6)
177
-
178
- @formatter.scenario_executing(mock_scenario(:name => "very long title", :file => 'features/example.feature', :line => 5, :steps => [step], :padding_length => 2, :pending? => false))
179
- @formatter.step_passed(step, nil, nil)
180
-
181
- @io.string.should include("Scenario: very long title # features/example.feature:5")
182
- @io.string.should include(" Given formatted yes # steps/example_steps.rb:11")
183
- end
184
-
185
- end
186
-
187
- it "should reset the column count correctly" do
188
- io = StringIO.new
189
- formatter = PrettyFormatter.new io, mock('step_mother'), :source => true
190
-
191
- large_scenario = mock_scenario(:row? => false, :table_column_widths => [3,3,5,4,4], :table_header => %w(one two three four five))
192
- formatter.scenario_executing(large_scenario)
193
- formatter.scenario_executed(large_scenario)
194
-
195
- small_scenario = mock_scenario(:row? => false, :table_column_widths => [3,3], :table_header => %w(one two))
196
- formatter.scenario_executing(small_scenario)
197
- lambda {
198
- formatter.scenario_executed(small_scenario)
199
- }.should_not raise_error(TypeError)
200
- end
201
-
202
- end
203
- end
204
- end
@@ -1,65 +0,0 @@
1
- require File.dirname(__FILE__) + '/../../spec_helper'
2
-
3
- module Cucumber
4
- module Formatters
5
- describe ProgressFormatter do
6
- it "should print . when passed" do
7
- io = StringIO.new
8
- formatter = ProgressFormatter.new io
9
- step = stub('step',
10
- :error => nil
11
- )
12
- formatter.step_passed(step,nil,nil)
13
- io.string.should =~ /^\.$/
14
- end
15
-
16
- it "should print F when failed" do
17
- io = StringIO.new
18
- formatter = ProgressFormatter.new io
19
- step = stub('step',
20
- :error => StandardError.new
21
- )
22
- formatter.step_failed(step,nil,nil)
23
- io.string.should =~ /^\F$/
24
- end
25
-
26
- it "should print P when pending" do
27
- io = StringIO.new
28
- formatter = ProgressFormatter.new io
29
- step = stub('step',
30
- :error => Pending.new,
31
- :scenario => mock('scenario')
32
- )
33
- formatter.step_pending(step,nil,nil)
34
- io.string.should =~ /^\P$/
35
- end
36
-
37
- it "should print _ when skipped" do
38
- io = StringIO.new
39
- formatter = ProgressFormatter.new io
40
- formatter.step_skipped(nil,nil,nil)
41
- io.string.should =~ /^_$/
42
- end
43
-
44
- describe "scenario without any steps" do
45
- before :each do
46
- @io = StringIO.new
47
- @formatter = ProgressFormatter.new(@io)
48
- @feature = stub("feature", :header => "Feature Header")
49
- @scenario = stub("scenario", :feature => @feature, :name => "Scenario Title", :row? => false, :pending? => true)
50
- end
51
-
52
- it "should print a P when executing" do
53
- @formatter.should_receive(:pending).with("P")
54
- @formatter.scenario_executing(@scenario)
55
- end
56
-
57
- it "should display as pending in the dump" do
58
- @formatter.scenario_executing(@scenario)
59
- @formatter.dump
60
- @io.string.should include("Feature Header (Scenario Title)")
61
- end
62
- end
63
- end
64
- end
65
- end
@@ -1,20 +0,0 @@
1
- require File.dirname(__FILE__) + '/../../spec_helper'
2
-
3
- module Cucumber
4
- module Model
5
- describe Table do
6
- it "should convert into hash-array" do
7
- raw = [
8
- %w{name gender},
9
- %w{aslak male},
10
- %w{patty female},
11
- ]
12
- ha = Table.new(raw).hashes
13
- ha.should == [
14
- {'name' => 'aslak', 'gender' => 'male'},
15
- {'name' => 'patty', 'gender' => 'female'}
16
- ]
17
- end
18
- end
19
- end
20
- end
@@ -1,43 +0,0 @@
1
- require File.dirname(__FILE__) + '/../../spec_helper'
2
-
3
- module Cucumber
4
- module Tree
5
- describe Feature do
6
-
7
- it "should have padding_length 2 when alone" do
8
- feature = Feature.new('header')
9
- feature.padding_length.should == 2
10
- end
11
-
12
- describe "creating a Scenario" do
13
-
14
- it "should create a new scenario for a feature" do
15
- feature = Feature.new('header')
16
-
17
- Scenario.should_receive(:new).with(feature, 'test scenario', "19")
18
-
19
- feature.Scenario('test scenario') {}
20
- end
21
-
22
- end
23
-
24
- describe "creating a Table" do
25
-
26
- it "should set the table header of the template scenario" do
27
- feature = Feature.new('header')
28
- mock_scenario = mock("scenario", :update_table_column_widths => nil)
29
- Scenario.stub!(:new).and_return(mock_scenario)
30
- feature.add_scenario('scenario', 5)
31
-
32
- mock_scenario.should_receive(:table_header=).with(["input_1", "input_2"])
33
-
34
- feature.Table do |t|
35
- t | "input_1" | "input_2" | t
36
- t | 1 | 2 | t
37
- end
38
- end
39
-
40
- end
41
- end
42
- end
43
- end
@@ -1,55 +0,0 @@
1
- require File.dirname(__FILE__) + '/../../spec_helper'
2
-
3
- module Cucumber
4
- module Tree
5
- describe RowScenario do
6
-
7
- def mock_scenario(stubs = {})
8
- mock('scenario', {:update_table_column_widths => nil, :steps => []}.merge(stubs))
9
- end
10
-
11
- describe "pending?" do
12
- before :each do
13
- @scenario = Scenario.new(nil, '', 1)
14
- @row_scenario = RowScenario.new(mock('feature'), @scenario, [], 1)
15
- end
16
-
17
- it "should return true if the template scenario has no steps" do
18
- @row_scenario.should be_pending
19
- end
20
-
21
- it "should return false if the template scenario has no steps" do
22
- @scenario.create_step('Given', 'a long step', 1)
23
- @row_scenario.should_not be_pending
24
- end
25
- end
26
-
27
- describe "generating row steps" do
28
-
29
- it "should cache unbound steps" do
30
- row_scenario = RowScenario.new(mock('feature'), mock_scenario, [], 1)
31
-
32
- row_scenario.steps.should equal(row_scenario.steps)
33
- end
34
-
35
- it "should cache bound steps" do
36
- mock_step = mock('step', :arity => 1)
37
- row_scenario = RowScenario.new(mock('feature'), mock_scenario(:steps => [mock_step]), [], 1)
38
-
39
- row_scenario.steps.should equal(row_scenario.steps)
40
- end
41
-
42
- it "should regenerate row steps when scenario template steps have been matched" do
43
- mock_step = mock('step', :arity => 0)
44
- row_scenario = RowScenario.new(mock('feature'), mock_scenario(:steps => [mock_step]), [], 1)
45
- unbound_steps = row_scenario.steps
46
- mock_step.stub!(:arity => 1)
47
-
48
- unbound_steps.should_not equal(row_scenario.steps)
49
- end
50
-
51
- end
52
-
53
- end
54
- end
55
- end
@@ -1,76 +0,0 @@
1
- require File.dirname(__FILE__) + '/../../spec_helper'
2
-
3
- module Cucumber
4
- module Tree
5
- describe Scenario do
6
- xit "should reuse steps in GivenScenario" do
7
- given_scenario = GivenScenario.new(scenario_2, "First", 99)
8
-
9
- scenario_2.create_step(given_scenario)
10
- scenario_2.create_step(step_a)
11
- scenario_2.steps.should == [step_1, step_2, step_a]
12
- end
13
-
14
- it "should have padding_length 2 when alone" do
15
- scenario = Scenario.new(nil, 'test', 1)
16
- scenario.padding_length.should == 2
17
- end
18
-
19
- it "should include indent when padding to step" do
20
- scenario = Scenario.new(nil, '', 1)
21
- scenario.create_step('Given', 'a long step', 1)
22
-
23
- #Scenario: *********
24
- # Given a long step
25
- scenario.padding_length.should == 9 + Scenario::INDENT
26
- end
27
-
28
- it "should ignore step padding if scenario is longer than all steps" do
29
- scenario = Scenario.new(nil, 'Very long scenario and then some', 1)
30
- scenario.create_step('Given', 'test', 1)
31
-
32
- scenario.padding_length.should == 2
33
- end
34
-
35
- describe "utf-8 strings" do
36
- describe "when calculating padding" do
37
-
38
- it "should take into consideration utf-8 scenario names" do
39
- scenario = Scenario.new(nil, 'こんばんは', 1)
40
- scenario.create_step('Given', 'a long step', 1)
41
-
42
- #Scenario: こんばんは****
43
- # Given a long step
44
- scenario.padding_length.should == 4 + Scenario::INDENT
45
- end
46
-
47
- it "should take into consideration a utf-8 keyword for 'scenario'" do
48
- Cucumber.language.stub!(:[]).with('scenario').and_return("シナリオ")
49
- scenario = Scenario.new(nil, '', 1)
50
- scenario.create_step('Given', 'step', 1)
51
-
52
- #シナリオ: ******
53
- # Given step
54
- scenario.padding_length.should == 6 + Scenario::INDENT
55
- end
56
-
57
- end
58
- end
59
-
60
- describe "pending?" do
61
- before :each do
62
- @scenario = Scenario.new(nil, '', 1)
63
- end
64
-
65
- it "should return true if there aren't any steps" do
66
- @scenario.should be_pending
67
- end
68
-
69
- it "should return false if there are steps" do
70
- @scenario.create_step('Given', 'a long step', 1)
71
- @scenario.should_not be_pending
72
- end
73
- end
74
- end
75
- end
76
- end
@@ -1,50 +0,0 @@
1
- require File.dirname(__FILE__) + '/../../spec_helper'
2
-
3
- module Cucumber
4
- module Tree
5
- describe Step do
6
- it "should have padding_length 2 when alone" do
7
- scenario = Scenario.new(nil, nil, 1)
8
- step = scenario.create_step('Given', '666666', 98)
9
- step.padding_length.should == 2
10
- end
11
-
12
- it "should have padding_length 5 when 3 shorter" do
13
- scenario = Scenario.new(nil, nil, 1)
14
- long = scenario.create_step('Given', '999999999', 80)
15
- step = scenario.create_step('Given', '666666', 98)
16
- step.padding_length.should == 5
17
- end
18
-
19
- it "should remove indent from padding_length if padding to scenario" do
20
- scenario = Scenario.new(nil, '9', 1)
21
- step = scenario.create_step('Given', '9', 80)
22
-
23
- #Scenario: 9 #
24
- # Given 9****
25
- step.padding_length.should == 4
26
- end
27
-
28
- it "should default step arity to 0" do
29
- scenario = Scenario.new(nil, '9', 1)
30
- step = scenario.create_step('Given', '9', 80)
31
-
32
- step.arity.should == 0
33
- end
34
-
35
- describe "utf-8 strings" do
36
-
37
- it "should have padding_length 6 when 4 shorter" do
38
- scenario = Scenario.new(nil, nil, 1)
39
- long = scenario.create_step('Given', '999999999', 2)
40
- step = scenario.create_step('Given', "こんばんは", 3)
41
-
42
- step.padding_length.should == 6
43
- end
44
-
45
- end
46
-
47
- end
48
- end
49
- end
50
-
@@ -1,98 +0,0 @@
1
- require File.dirname(__FILE__) + '/../../spec_helper'
2
-
3
- module Cucumber
4
- module TreetopParser
5
- describe FeatureParser do
6
- it "should parse features with weird spaces" do
7
- p = FeatureParser.new
8
- f = p.parse_feature(File.dirname(__FILE__) + '/spaces.feature')
9
- f.header.should == "Some title"
10
- f.should have(2).scenarios
11
-
12
- first = f.scenarios[0]
13
- first.name.should == "first"
14
- first.should have(1).steps
15
- first.steps[0].name.should == "a"
16
-
17
- second = f.scenarios[1]
18
- second.name.should == "second"
19
- second.should have(1).steps
20
- second.steps[0].name.should == "b"
21
- end
22
-
23
- it "should parse GivenScenario" do
24
- p = FeatureParser.new
25
- f = p.parse_feature(File.dirname(__FILE__) + '/given_scenario.feature')
26
-
27
- f.header.should == "Some title"
28
- f.should have(2).scenarios
29
-
30
- first = f.scenarios[0]
31
- first.should have(2).steps
32
-
33
- second = f.scenarios[1]
34
- second.should have(3).steps
35
- end
36
-
37
- it "should allow spaces between FIT values" do
38
- p = FeatureParser.new
39
- Cucumber::Tree::RowScenario.should_receive(:new).with(anything, anything, ['I can have spaces'], anything)
40
-
41
- f = p.parse_feature(File.dirname(__FILE__) + '/fit_scenario.feature')
42
- end
43
-
44
- it "should allow comments in feature files" do
45
- p = FeatureParser.new
46
- f = p.parse_feature(File.dirname(__FILE__) + '/with_comments.feature')
47
- f.scenarios[0].should have(2).steps
48
- end
49
-
50
- it "should skip comments in feature header" do
51
- p = FeatureParser.new
52
- f = p.parse_feature(File.dirname(__FILE__) + '/with_comments.feature')
53
- f.header.should == "Some header"
54
- end
55
-
56
- it "should skip comments in scenario header" do
57
- p = FeatureParser.new
58
- f = p.parse_feature(File.dirname(__FILE__) + '/with_comments.feature')
59
- f.scenarios[0].name.should == "Some scenario"
60
- end
61
-
62
- it "should allow empty scenarios" do
63
- p = FeatureParser.new
64
- f = p.parse_feature(File.dirname(__FILE__) + '/empty_scenario.feature')
65
- f.scenarios[0].should have(1).steps
66
- f.scenarios[1].should have(0).steps
67
- f.scenarios[2].should have(1).steps
68
- end
69
-
70
- it "should allow multiple tables" do
71
- p = FeatureParser.new
72
- f = p.parse_feature(File.dirname(__FILE__) + '/multiple_tables.feature')
73
- f.should have(6).scenarios
74
- f.scenarios[0].should have(5).steps
75
- end
76
-
77
- it "should allow empty features" do
78
- p = FeatureParser.new
79
- f = p.parse_feature(File.dirname(__FILE__) + '/empty_feature.feature')
80
- f.should have(0).scenarios
81
- end
82
-
83
- it "should parse features with dos line endings" do
84
- p = FeatureParser.new
85
- f = p.parse_feature(File.dirname(__FILE__) + '/test_dos.feature')
86
- f.should have(5).scenarios
87
- end
88
-
89
- it "should parse multiline steps" do
90
- p = FeatureParser.new
91
- f = p.parse_feature(File.dirname(__FILE__) + '/multiline_steps.feature')
92
- f.should have(1).scenarios
93
- step = f.scenarios[0].steps[3]
94
- step.extra_args[0].should == "A string\n that \"indents\"\nand spans\nseveral lines\n"
95
- end
96
- end
97
- end
98
- end