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
@@ -0,0 +1,6 @@
1
+ $:.unshift(File.dirname(__FILE__) + '/../../../lib')
2
+ require 'cucumber/rake/task'
3
+
4
+ Cucumber::Rake::Task.new do |t|
5
+ t.cucumber_opts = "--language zh-TW"
6
+ end
@@ -0,0 +1,16 @@
1
+ 功能: 加法
2
+ 為了避免愚蠢的錯誤
3
+ 作為一個數學白痴
4
+ 我希望有人能告訴我兩個數相加的結果
5
+
6
+ 場景大綱: 將兩個數相加
7
+ 假設我已經在計算機上輸入 <數值_1>
8
+ 而且我已經在計算機上輸入 <數值_2>
9
+ 當我按下 <按鈕>
10
+ 那麼螢幕上應該顯示 <結果>
11
+
12
+ 例子:
13
+ | 數值_1 | 數值_2 | 按鈕 | 結果 |
14
+ | 20 | 30 | add | 50 |
15
+ | 2 | 5 | add | 7 |
16
+ | 0 | 40 | add | 40 |
@@ -0,0 +1,10 @@
1
+ 功能: 除法
2
+ 為了避免愚蠢的錯誤
3
+ 收銀機必須要能夠計算除法
4
+ 而且必需能顯示非整數的結果
5
+
6
+ 場景: 將兩個數相除
7
+ 假設我已經在計算機上輸入 3
8
+ 而且我已經在計算機上輸入 2
9
+ 當我按下 divide
10
+ 那麼螢幕上應該顯示 1.5
@@ -0,0 +1,24 @@
1
+ # encoding: utf-8
2
+ require 'spec/expectations'
3
+ $:.unshift(File.dirname(__FILE__) + '/../../lib') # This line is not needed in your own project
4
+ require 'cucumber/formatters/unicode'
5
+ require 'calculator'
6
+
7
+ Before do
8
+ @calc = Calculator.new
9
+ end
10
+
11
+ After do
12
+ end
13
+
14
+ Given /我已經在計算機上輸入 (\d+)/ do |n|
15
+ @calc.push n.to_i
16
+ end
17
+
18
+ When /我按下 (\w+)/ do |op|
19
+ @result = @calc.send op
20
+ end
21
+
22
+ Then /螢幕上應該顯示 (.*)/ do |result|
23
+ @result.should == result.to_f
24
+ end
@@ -0,0 +1,14 @@
1
+ class Calculator
2
+ def push(n)
3
+ @args ||= []
4
+ @args << n
5
+ end
6
+
7
+ def add
8
+ @args.inject(0){|n,sum| sum+=n}
9
+ end
10
+
11
+ def divide
12
+ @args[0].to_f / @args[1].to_f
13
+ end
14
+ end
@@ -1,4 +1,4 @@
1
- require 'spec' # so we can call .should
1
+ require 'spec/expectations' # so we can call .should
2
2
  $LOAD_PATH.unshift(File.dirname(__FILE__) + '/../../src') # so the jar is found
3
3
  require 'cucumber_demo' # puts the jar on the classpath
4
4
  include_class 'cucumber.demo.Hello'
@@ -1,4 +1,4 @@
1
- require 'spec'
1
+ require 'spec/expectations'
2
2
  include_class 'java.util.TreeSet'
3
3
 
4
4
  Given /I have an empty set/ do
@@ -0,0 +1,20 @@
1
+ h1. Cucumber and JBehave
2
+
3
+ Look ma - no Ruby!
4
+
5
+ h2. Running the example
6
+
7
+ First, compile the java code (and JBehave steps)
8
+
9
+ <code>mvn compile jar:jar</code>
10
+
11
+ Second, set your CLASSPATH
12
+ <code>export CLASSPATH=~/.m2/repository/cucumber/cucumber-support/0.2/cucumber-support-0.2.jar:~/.m2/repository/org/jbehave/jbehave-core/2.1.1/jbehave-core-2.1.1.jar:~/.m2/repository/org/hamcrest/hamcrest-all/1.1/hamcrest-all-1.1.jar:~/.m2/repository/junit/junit/4.4/junit-4.4.jar</code>
13
+
14
+ Third, run Cucumber:
15
+
16
+ <code>jruby -S cucumber features</code>
17
+
18
+ Or if you got the source with Git:
19
+
20
+ <code>jruby ../../bin/cucumber features</code>
@@ -0,0 +1,7 @@
1
+ require 'cucumber/jbehave'
2
+
3
+ project_code = File.expand_path(File.dirname(__FILE__) + '/../../target/jbehave-example-0.2-SNAPSHOT.jar')
4
+ require project_code
5
+
6
+ import 'cukes.jbehave.examples.trader.scenarios.TraderSteps'
7
+ JBehave(TraderSteps.new)
@@ -0,0 +1,28 @@
1
+ Feature: Trading
2
+ In order to avoid lost trades
3
+ Traders should be alerted about stocks
4
+
5
+ Scenario: Status alert can be activated
6
+ Given a stock of prices 0.5,1.0 and a threshold of 10.0
7
+ When the stock is traded at 5.0
8
+ Then the alert status should be OFF
9
+ When the stock is traded at 11.0
10
+ Then the alert status should be ON
11
+
12
+ Scenario: Status alert is never activated
13
+ Given a stock of prices 0.5,1.0 and a threshold of 15.0
14
+ When the stock is traded at 5.0
15
+ Then the alert status should be OFF
16
+ When the stock is traded at 11.0
17
+ Then the alert status should be OFF
18
+
19
+ Scenario: Trader sells all stocks
20
+ # Given the following table
21
+ # | a | b |
22
+ # | 1 | 2 |
23
+ # | 3 | 4 |
24
+ Given a trader of name Mauro
25
+ Given a stock of prices 0.5,1.0 and a threshold of 1.5
26
+ When the stock is traded at 2.0
27
+ Then the trader sells all stocks
28
+ And the trader gets a bonus
@@ -0,0 +1,53 @@
1
+ <project xmlns="http://maven.apache.org/POM/4.0.0"
2
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
4
+ http://maven.apache.org/xsd/maven-4.0.0.xsd">
5
+ <modelVersion>4.0.0</modelVersion>
6
+ <groupId>cukes</groupId>
7
+ <artifactId>jbehave-example</artifactId>
8
+ <packaging>jar</packaging>
9
+ <version>0.2-SNAPSHOT</version>
10
+ <name>Cucumber JBehave Example</name>
11
+ <url>http://cukes.info/</url>
12
+
13
+ <repositories>
14
+ <repository>
15
+ <id>codehaus</id>
16
+ <url>http://repository.codehaus.org</url>
17
+ </repository>
18
+ </repositories>
19
+
20
+ <dependencies>
21
+ <dependency>
22
+ <groupId>cucumber</groupId>
23
+ <artifactId>cucumber-support</artifactId>
24
+ <version>0.2</version>
25
+ </dependency>
26
+ <dependency>
27
+ <groupId>org.jbehave</groupId>
28
+ <artifactId>jbehave-core</artifactId>
29
+ <version>2.1.1</version>
30
+ </dependency>
31
+ <dependency>
32
+ <groupId>junit</groupId>
33
+ <artifactId>junit</artifactId>
34
+ <version>4.4</version>
35
+ </dependency>
36
+ </dependencies>
37
+
38
+ <build>
39
+ <pluginManagement>
40
+ <plugins>
41
+ <plugin>
42
+ <groupId>org.apache.maven.plugins</groupId>
43
+ <artifactId>maven-compiler-plugin</artifactId>
44
+ <version>2.0.2</version>
45
+ <configuration>
46
+ <source>1.5</source>
47
+ <target>1.5</target>
48
+ </configuration>
49
+ </plugin>
50
+ </plugins>
51
+ </pluginManagement>
52
+ </build>
53
+ </project>
@@ -0,0 +1,32 @@
1
+ package cukes.jbehave.examples.trader.converters;
2
+
3
+ import java.lang.reflect.Type;
4
+
5
+ import cukes.jbehave.examples.trader.model.Trader;
6
+ import cukes.jbehave.examples.trader.persistence.TraderPersister;
7
+ import org.jbehave.scenario.steps.ParameterConverters.InvalidParameterException;
8
+ import org.jbehave.scenario.steps.ParameterConverters.ParameterConverter;
9
+
10
+ public class TraderConverter implements ParameterConverter {
11
+ private TraderPersister persister;
12
+
13
+ public TraderConverter(TraderPersister persister) {
14
+ this.persister = persister;
15
+ }
16
+
17
+ public boolean accept(Type type) {
18
+ if (type instanceof Class) {
19
+ return Trader.class.isAssignableFrom((Class<?>) type);
20
+ }
21
+ return false;
22
+ }
23
+
24
+ public Object convertValue(String value, Type type) {
25
+ Trader trader = persister.retrieveTrader(value);
26
+ if (trader == null) {
27
+ throw new InvalidParameterException("Trader not found for name " + value, null);
28
+ }
29
+ return trader;
30
+ }
31
+
32
+ }
@@ -0,0 +1,42 @@
1
+ package cukes.jbehave.examples.trader.model;
2
+
3
+ import static cukes.jbehave.examples.trader.model.Stock.AlertStatus.OFF;
4
+ import static cukes.jbehave.examples.trader.model.Stock.AlertStatus.ON;
5
+
6
+ import java.util.List;
7
+
8
+ public class Stock {
9
+
10
+ public enum AlertStatus {
11
+ ON, OFF
12
+ };
13
+
14
+ private List<Double> prices;
15
+ private double alertPrice;
16
+ private AlertStatus status = OFF;
17
+
18
+ public Stock(List<Double> prices, double alertPrice) {
19
+ this.prices = prices;
20
+ this.alertPrice = alertPrice;
21
+ }
22
+
23
+ public List<Double> getPrices() {
24
+ return prices;
25
+ }
26
+
27
+ public void tradeAt(double price) {
28
+ this.prices.add(price);
29
+ if (price > alertPrice) {
30
+ status = ON;
31
+ }
32
+ }
33
+
34
+ public void resetAlert() {
35
+ status = OFF;
36
+ }
37
+
38
+ public AlertStatus getStatus() {
39
+ return status;
40
+ }
41
+
42
+ }
@@ -0,0 +1,29 @@
1
+ package cukes.jbehave.examples.trader.model;
2
+
3
+ import static java.util.Arrays.asList;
4
+
5
+ import java.util.List;
6
+
7
+ public class Trader {
8
+
9
+ private final String name;
10
+ private List<Stock> stocks;
11
+
12
+ public Trader(String name, List<Stock> stocks) {
13
+ this.name = name;
14
+ this.stocks = stocks;
15
+ }
16
+
17
+ public String getName() {
18
+ return name;
19
+ }
20
+
21
+ public List<Stock> getStocks() {
22
+ return stocks;
23
+ }
24
+
25
+ public void sellAllStocks(){
26
+ this.stocks = asList(new Stock[]{});
27
+ }
28
+
29
+ }
@@ -0,0 +1,22 @@
1
+ package cukes.jbehave.examples.trader.persistence;
2
+
3
+ import cukes.jbehave.examples.trader.model.Trader;
4
+
5
+ public class TraderPersister {
6
+
7
+ private Trader[] traders;
8
+
9
+ public TraderPersister(Trader... traders) {
10
+ this.traders = traders;
11
+ }
12
+
13
+ public Trader retrieveTrader(String name) {
14
+ for (Trader trader : traders) {
15
+ if (trader.getName().equals(name)) {
16
+ return trader;
17
+ }
18
+ }
19
+ return null;
20
+ }
21
+
22
+ }
@@ -0,0 +1,70 @@
1
+ package cukes.jbehave.examples.trader.scenarios;
2
+
3
+ import static java.util.Arrays.asList;
4
+ import static org.hamcrest.CoreMatchers.equalTo;
5
+ import static org.jbehave.Ensure.ensureThat;
6
+
7
+ import java.util.List;
8
+
9
+ import cukes.jbehave.examples.trader.converters.TraderConverter;
10
+ import cukes.jbehave.examples.trader.model.Stock;
11
+ import cukes.jbehave.examples.trader.model.Trader;
12
+ import cukes.jbehave.examples.trader.persistence.TraderPersister;
13
+ import org.jbehave.scenario.annotations.Given;
14
+ import org.jbehave.scenario.annotations.Then;
15
+ import org.jbehave.scenario.annotations.When;
16
+ import org.jbehave.scenario.parser.PrefixCapturingPatternBuilder;
17
+ import org.jbehave.scenario.steps.ParameterConverters;
18
+ import org.jbehave.scenario.steps.SilentStepMonitor;
19
+ import org.jbehave.scenario.steps.Steps;
20
+ import org.jbehave.scenario.steps.StepsConfiguration;
21
+ import cucumber.ast.Table;
22
+
23
+ public class TraderSteps extends Steps {
24
+
25
+ private static final StepsConfiguration configuration = new StepsConfiguration();
26
+ private Stock stock;
27
+ private Trader trader;
28
+
29
+ public TraderSteps() {
30
+ super(configuration);
31
+ configuration.useParameterConverters(new ParameterConverters(
32
+ new SilentStepMonitor(), new TraderConverter(mockTradePersister())));
33
+ configuration.usePatternBuilder(new PrefixCapturingPatternBuilder("%"));
34
+ }
35
+
36
+ private TraderPersister mockTradePersister() {
37
+ return new TraderPersister(new Trader("Mauro", asList(new Stock(asList(1.0d), 10.d))));
38
+ }
39
+
40
+ @Given("a trader of name %trader")
41
+ public void aTrader(Trader trader) {
42
+ this.trader = trader;
43
+ }
44
+
45
+ @Given("a stock of prices %prices and a threshold of %threshold")
46
+ public void aStockOfPrice(List<Double> prices, double threshold) {
47
+ stock = new Stock(prices, threshold);
48
+ }
49
+
50
+ @Given("the following table")
51
+ public void theFollowingTable(Table table) {
52
+ System.out.println("My table:" + table);
53
+ }
54
+
55
+ @When("the stock is traded at %price")
56
+ public void theStockIsTradedAt(double price) {
57
+ stock.tradeAt(price);
58
+ }
59
+
60
+ @Then("the alert status should be %status")
61
+ public void theAlertStatusShouldBe(String status) {
62
+ ensureThat(stock.getStatus().name(), equalTo(status));
63
+ }
64
+
65
+ @Then("the trader sells all stocks")
66
+ public void theTraderSellsAllStocks() {
67
+ trader.sellAllStocks();
68
+ ensureThat(trader.getStocks().size(), equalTo(0));
69
+ }
70
+ }
@@ -6,4 +6,4 @@ Feature: Search
6
6
  Scenario: Find what I'm looking for
7
7
  Given I am on the Google search page
8
8
  When I search for "rspec"
9
- Then I should see a link to "RSpec-1.1.4: Overview":http://rspec.info/
9
+ Then I should see a link to http://rspec.info/
@@ -0,0 +1,13 @@
1
+ Given 'I am on the Google search page' do
2
+ @browser.open('http://www.google.com/')
3
+ end
4
+
5
+ When /I search for "(.*)"/ do |query|
6
+ @browser.type('q', query)
7
+ @browser.click 'btnG'
8
+ @browser.wait_for_page_to_load
9
+ end
10
+
11
+ Then /I should see a link to (.*)/ do |expected_url|
12
+ @browser.is_element_present("css=a[href='#{expected_url}']").should be_true
13
+ end
@@ -0,0 +1,19 @@
1
+ require 'spec/expectations'
2
+ require 'selenium'
3
+
4
+ # "before all"
5
+ browser = Selenium::SeleniumDriver.new("localhost", 4444, "*chrome", "http://localhost", 15000)
6
+
7
+ Before do
8
+ @browser = browser
9
+ @browser.start
10
+ end
11
+
12
+ After do
13
+ @browser.stop
14
+ end
15
+
16
+ # "after all"
17
+ at_exit do
18
+ browser.close rescue nil
19
+ end
@@ -0,0 +1,9 @@
1
+ Feature: Search
2
+ In order to learn more
3
+ As an information seeker
4
+ I want to find more information
5
+
6
+ Scenario: Find what I'm looking for
7
+ Given I am on the Google search page
8
+ When I search for "rspec"
9
+ Then I should see a link to http://rspec.info/
@@ -0,0 +1,13 @@
1
+ Given 'I am on the Google search page' do
2
+ visit('http://www.google.com/')
3
+ end
4
+
5
+ When /I search for "(.*)"/ do |query|
6
+ fill_in('q', :with => query)
7
+ click_button('btnG')
8
+ selenium.wait_for_page_to_load
9
+ end
10
+
11
+ Then /I should see a link to (.*)/ do |expected_url|
12
+ click_link(expected_url)
13
+ end
@@ -0,0 +1,41 @@
1
+ require 'spec/expectations'
2
+
3
+ # START HACK
4
+ # Webrat's Selenium wrongly assumes Rails in available. # We'll just fool it...
5
+ module ActionController
6
+ class IntegrationTest
7
+ end
8
+ end
9
+
10
+ def silence_stream(*args)
11
+ yield if block_given?
12
+ end
13
+ # END HACK
14
+
15
+ # RSpec
16
+ require 'spec/expectations'
17
+
18
+ # Webrat
19
+ require 'webrat'
20
+ Webrat.configure do |config|
21
+ config.mode = :selenium
22
+ end
23
+
24
+ World do
25
+ session = Webrat::SeleniumSession.new
26
+ session.extend(Webrat::Methods)
27
+ session.extend(Webrat::Selenium::Methods)
28
+ session.extend(Webrat::Selenium::Matchers)
29
+ session
30
+ end
31
+
32
+ # START HACK
33
+ # Disable Rails-specific code
34
+ module Webrat
35
+ def self.start_app_server
36
+ end
37
+
38
+ def self.stop_app_server
39
+ end
40
+ end
41
+ # END HACK
@@ -0,0 +1,6 @@
1
+ h1. Self Test
2
+
3
+ Cucumber's own features (ROOT_DIR/features) run the features in this directory and look at the output.
4
+
5
+ Note that several of these fail intentionally. The purpose is to verify actual output against expected
6
+ output.
@@ -0,0 +1,6 @@
1
+ $:.unshift(File.dirname(__FILE__) + '/../../lib')
2
+ require 'cucumber/rake/task'
3
+
4
+ Cucumber::Rake::Task.new(:features)
5
+
6
+ task :default => :features
@@ -0,0 +1,11 @@
1
+ Feature: Failing background sample
2
+
3
+ Background:
4
+ Given failing without a table
5
+ And '10' cukes
6
+
7
+ Scenario: failing background
8
+ Then I should have '10' cukes
9
+
10
+ Scenario: another failing background
11
+ Then I should have '10' cukes
@@ -0,0 +1,11 @@
1
+ Feature: Failing background after previously successful background sample
2
+
3
+ Background:
4
+ Given passing without a table
5
+ And '10' global cukes
6
+
7
+ Scenario: passing background
8
+ Then I should have '10' global cukes
9
+
10
+ Scenario: failing background
11
+ Then I should have '10' global cukes
@@ -0,0 +1,32 @@
1
+ Feature: Passing background with multiline args
2
+
3
+ Background:
4
+ Given table
5
+ |a|b|
6
+ |c|d|
7
+ And multiline string
8
+ """
9
+ I'm a cucumber and I'm okay.
10
+ I sleep all night and I test all day
11
+ """
12
+
13
+ Scenario: passing background
14
+ Then the table should be
15
+ |a|b|
16
+ |c|d|
17
+ Then the multiline string should be
18
+ """
19
+ I'm a cucumber and I'm okay.
20
+ I sleep all night and I test all day
21
+ """
22
+
23
+ Scenario: another passing background
24
+ Then the table should be
25
+ |a|b|
26
+ |c|d|
27
+ Then the multiline string should be
28
+ """
29
+ I'm a cucumber and I'm okay.
30
+ I sleep all night and I test all day
31
+ """
32
+
@@ -0,0 +1,10 @@
1
+ Feature: Passing background sample
2
+
3
+ Background:
4
+ Given '10' cukes
5
+
6
+ Scenario: passing background
7
+ Then I should have '10' cukes
8
+
9
+ Scenario: another passing background
10
+ Then I should have '10' cukes
@@ -0,0 +1,10 @@
1
+ Feature: Pending background sample
2
+
3
+ Background:
4
+ Given pending
5
+
6
+ Scenario: pending background
7
+ Then I should have '10' cukes
8
+
9
+ Scenario: another pending background
10
+ Then I should have '10' cukes
@@ -0,0 +1,16 @@
1
+ Feature: Failing background with scenario outlines sample
2
+
3
+ Background:
4
+ Given failing without a table
5
+
6
+ Scenario Outline: failing background
7
+ Then I should have '<count>' cukes
8
+ Examples:
9
+ |count|
10
+ | 10 |
11
+
12
+ Scenario Outline: another failing background
13
+ Then I should have '<count>' cukes
14
+ Examples:
15
+ |count|
16
+ | 10 |
@@ -0,0 +1,16 @@
1
+ Feature: Passing background with scenario outlines sample
2
+
3
+ Background:
4
+ Given '10' cukes
5
+
6
+ Scenario Outline: passing background
7
+ Then I should have '<count>' cukes
8
+ Examples:
9
+ |count|
10
+ | 10 |
11
+
12
+ Scenario Outline: another passing background
13
+ Then I should have '<count>' cukes
14
+ Examples:
15
+ |count|
16
+ | 10 |
@@ -0,0 +1,7 @@
1
+ Feature: Calling undefined step
2
+
3
+ Scenario: Call directly
4
+ Given a step definition that calls an undefined step
5
+
6
+ Scenario: Call via another
7
+ Given call step "a step definition that calls an undefined step"
@@ -0,0 +1,4 @@
1
+ Feature: Failing expectation
2
+
3
+ Scenario: Failing expectation
4
+ Given failing expectation
@@ -0,0 +1,8 @@
1
+ Feature: Lots of undefined
2
+
3
+ Scenario: Implement me
4
+ Given it snows in Sahara
5
+ Given it's 40 degrees in Norway
6
+ And it's 40 degrees in Norway
7
+ When I stop procrastinating
8
+ And there is world peace