cucumber 0.1.16 → 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 (322) hide show
  1. data/History.txt +111 -5
  2. data/License.txt +1 -1
  3. data/Manifest.txt +141 -83
  4. data/Rakefile +1 -1
  5. data/bin/cucumber +2 -2
  6. data/config/hoe.rb +8 -2
  7. data/examples/cs/features/addition.feature +4 -5
  8. data/examples/cs/features/step_definitons/calculator_steps.rb +1 -5
  9. data/examples/i18n/README.textile +1 -1
  10. data/examples/i18n/Rakefile +5 -5
  11. data/examples/i18n/ar/features/addition.feature +10 -11
  12. data/examples/i18n/ar/features/step_definitons/calculator_steps.rb +1 -10
  13. data/examples/i18n/da/features/step_definitons/kalkulator_steps.rb +1 -1
  14. data/examples/i18n/de/features/addition.feature +10 -11
  15. data/examples/i18n/de/features/division.feature +0 -1
  16. data/examples/i18n/de/features/step_definitons/calculator_steps.rb +2 -10
  17. data/examples/i18n/en-lol/Rakefile +6 -0
  18. data/examples/i18n/en-lol/features/step_definitions/cucumbrz_steps.rb +16 -0
  19. data/examples/i18n/en-lol/features/stuffing.feature +8 -0
  20. data/examples/i18n/en-lol/features/support/env.rb +8 -0
  21. data/examples/i18n/en-lol/lib/basket.rb +12 -0
  22. data/examples/i18n/en-lol/lib/belly.rb +11 -0
  23. data/examples/i18n/en/features/addition.feature +10 -11
  24. data/examples/i18n/en/features/division.feature +0 -1
  25. data/examples/i18n/en/features/step_definitons/calculator_steps.rb +2 -6
  26. data/examples/i18n/es/features/adicion.feature +11 -12
  27. data/examples/i18n/es/features/step_definitons/calculador_steps.rb +7 -10
  28. data/examples/i18n/es/lib/calculador.rb +4 -1
  29. data/examples/i18n/et/features/jagamine.feature +9 -0
  30. data/examples/i18n/et/features/liitmine.feature +10 -11
  31. data/examples/i18n/et/features/step_definitions/kalkulaator_steps.rb +4 -8
  32. data/examples/i18n/et/lib/kalkulaator.rb +5 -1
  33. data/examples/i18n/fi/Rakefile +6 -0
  34. data/examples/i18n/fi/features/jakolasku.feature +9 -0
  35. data/examples/i18n/fi/features/step_definitons/laskin_steps.rb +24 -0
  36. data/examples/i18n/fi/features/yhteenlasku.feature +16 -0
  37. data/examples/i18n/fi/lib/laskin.rb +14 -0
  38. data/examples/i18n/fr/features/addition.feature +14 -12
  39. data/examples/i18n/fr/features/step_definitions/calculatrice_steps.rb +11 -13
  40. data/examples/i18n/fr/lib/calculatrice.rb +1 -1
  41. data/examples/i18n/id/features/addition.feature +10 -11
  42. data/examples/i18n/id/features/division.feature +0 -1
  43. data/examples/i18n/id/features/step_definitons/calculator_steps.rb +2 -11
  44. data/examples/i18n/it/features/step_definitons/calcolatrice_steps.rb +1 -1
  45. data/examples/i18n/ja/features/addition.feature +10 -11
  46. data/examples/i18n/ja/features/division.feature +2 -3
  47. data/examples/i18n/ja/features/step_definitons/calculator_steps.rb +4 -13
  48. data/examples/i18n/ko/features/addition.feature +7 -8
  49. data/examples/i18n/ko/features/division.feature +3 -4
  50. data/examples/i18n/ko/features/step_definitons/calculator_steps.rb +1 -5
  51. data/examples/i18n/lt/features/addition.feature +11 -11
  52. data/examples/i18n/lt/features/division.feature +0 -1
  53. data/examples/i18n/lt/features/step_definitons/calculator_steps.rb +2 -11
  54. data/examples/i18n/no/features/step_definitons/kalkulator_steps.rb +3 -10
  55. data/examples/i18n/no/features/summering.feature +1 -0
  56. data/examples/i18n/no/features/support/env.rb +6 -0
  57. data/examples/i18n/pt/features/step_definitions/calculadora_steps.rb +1 -1
  58. data/examples/i18n/ro/features/step_definitons/calculator_steps.rb +1 -1
  59. data/examples/i18n/ru/Rakefile +6 -0
  60. data/examples/i18n/ru/features/addition.feature +10 -0
  61. data/examples/i18n/ru/features/consecutive_calculations.feature +16 -0
  62. data/examples/i18n/ru/features/division.feature +15 -0
  63. data/examples/i18n/ru/features/step_definitons/calculator_steps.rb +19 -0
  64. data/examples/i18n/ru/features/support/env.rb +6 -0
  65. data/examples/i18n/ru/features/support/world.rb +7 -0
  66. data/examples/i18n/ru/lib/calculator.rb +24 -0
  67. data/examples/i18n/se/features/step_definitons/kalkulator_steps.rb +1 -1
  68. data/examples/i18n/zh-CN/features/step_definitons/calculator_steps.rb +2 -2
  69. data/examples/i18n/zh-TW/Rakefile +6 -0
  70. data/examples/i18n/zh-TW/features/addition.feature +16 -0
  71. data/examples/i18n/zh-TW/features/division.feature +10 -0
  72. data/examples/i18n/zh-TW/features/step_definitons/calculator_steps.rb +24 -0
  73. data/examples/i18n/zh-TW/lib/calculator.rb +14 -0
  74. data/examples/java/src/cucumber/demo/Hello.java +16 -0
  75. data/examples/jbehave/README.textile +20 -0
  76. data/examples/jbehave/features/support/env.rb +7 -0
  77. data/examples/jbehave/features/trading.feature +28 -0
  78. data/examples/jbehave/pom.xml +53 -0
  79. data/examples/jbehave/src/main/java/cukes/jbehave/examples/trader/converters/TraderConverter.java +32 -0
  80. data/examples/jbehave/src/main/java/cukes/jbehave/examples/trader/model/Stock.java +42 -0
  81. data/examples/jbehave/src/main/java/cukes/jbehave/examples/trader/model/Trader.java +29 -0
  82. data/examples/jbehave/src/main/java/cukes/jbehave/examples/trader/persistence/TraderPersister.java +22 -0
  83. data/examples/jbehave/src/main/java/cukes/jbehave/examples/trader/scenarios/TraderSteps.java +70 -0
  84. data/examples/selenium/features/step_definitons/search_steps.rb +13 -0
  85. data/examples/selenium/features/support/env.rb +19 -0
  86. data/examples/{calculator_ruby_features → selenium_webrat}/Rakefile +0 -0
  87. data/examples/selenium_webrat/features/search.feature +9 -0
  88. data/examples/selenium_webrat/features/step_definitons/search_steps.rb +13 -0
  89. data/examples/selenium_webrat/features/support/env.rb +41 -0
  90. data/examples/self_test/README.textile +4 -1
  91. data/examples/self_test/Rakefile +6 -0
  92. data/examples/self_test/features/background/failing_background.feature +11 -0
  93. data/examples/self_test/features/background/failing_background_after_success.feature +11 -0
  94. data/examples/self_test/features/background/multiline_args_background.feature +32 -0
  95. data/examples/self_test/features/background/passing_background.feature +10 -0
  96. data/examples/self_test/features/background/pending_background.feature +10 -0
  97. data/examples/self_test/features/background/scenario_outline_failing_background.feature +16 -0
  98. data/examples/self_test/features/background/scenario_outline_passing_background.feature +16 -0
  99. data/examples/self_test/features/call_undefined_step_from_step_def.feature +7 -0
  100. data/examples/self_test/features/failing_expectation.feature +4 -0
  101. data/examples/self_test/features/lots_of_undefined.feature +8 -0
  102. data/examples/self_test/features/outline_sample.feature +11 -5
  103. data/examples/self_test/features/sample.feature +8 -3
  104. data/examples/self_test/features/step_definitions/sample_steps.rb +55 -4
  105. data/examples/self_test/features/support/env.rb +1 -0
  106. data/examples/self_test/features/support/tag_count_formatter.rb +25 -0
  107. data/examples/sinatra/Rakefile +6 -0
  108. data/examples/sinatra/app.rb +14 -0
  109. data/examples/sinatra/features/add.feature +11 -0
  110. data/examples/sinatra/features/step_definitions/add_steps.rb +15 -0
  111. data/examples/sinatra/features/support/env.rb +20 -0
  112. data/examples/sinatra/views/add.erb +5 -0
  113. data/examples/sinatra/views/layout.erb +8 -0
  114. data/examples/tickets/Rakefile +13 -8
  115. data/examples/tickets/cucumber.yml +2 -1
  116. data/examples/tickets/features/172.feature +28 -0
  117. data/examples/tickets/features/177/1.feature +29 -0
  118. data/examples/tickets/features/177/2.feature +21 -0
  119. data/examples/tickets/features/177/3.feature +18 -0
  120. data/examples/tickets/features/180.feature +7 -0
  121. data/examples/tickets/features/236.feature +13 -0
  122. data/examples/tickets/features/241.feature +13 -0
  123. data/examples/tickets/features/scenario_outline.feature +6 -1
  124. data/examples/tickets/features/step_definitons/tickets_steps.rb +41 -4
  125. data/examples/tickets/features/tickets.feature +5 -1
  126. data/features/background.feature +221 -0
  127. data/features/cucumber_cli.feature +263 -97
  128. data/features/cucumber_cli_diff_disabled.feature +45 -0
  129. data/features/cucumber_cli_outlines.feature +50 -42
  130. data/features/custom_formatter.feature +11 -0
  131. data/features/report_called_undefined_steps.feature +34 -0
  132. data/features/step_definitions/cucumber_steps.rb +6 -3
  133. data/features/step_definitions/extra_steps.rb +1 -1
  134. data/features/support/env.rb +3 -2
  135. data/gem_tasks/features.rake +1 -1
  136. data/gem_tasks/flog.rake +1 -1
  137. data/gem_tasks/gemspec.rake +2 -2
  138. data/gem_tasks/jar.rake +67 -0
  139. data/gem_tasks/rspec.rake +2 -0
  140. data/lib/autotest/cucumber_mixin.rb +18 -23
  141. data/lib/cucumber.rb +55 -11
  142. data/lib/cucumber/ast.rb +29 -0
  143. data/lib/cucumber/ast/background.rb +50 -0
  144. data/lib/cucumber/ast/comment.rb +26 -0
  145. data/lib/cucumber/ast/examples.rb +38 -0
  146. data/lib/cucumber/ast/feature.rb +62 -0
  147. data/lib/cucumber/ast/feature_element.rb +46 -0
  148. data/lib/cucumber/ast/features.rb +20 -0
  149. data/lib/cucumber/ast/outline_table.rb +81 -0
  150. data/lib/cucumber/ast/py_string.rb +58 -0
  151. data/lib/cucumber/ast/scenario.rb +64 -0
  152. data/lib/cucumber/ast/scenario_outline.rb +90 -0
  153. data/lib/cucumber/ast/step.rb +122 -0
  154. data/lib/cucumber/ast/step_collection.rb +66 -0
  155. data/lib/cucumber/ast/step_invocation.rb +110 -0
  156. data/lib/cucumber/ast/table.rb +318 -0
  157. data/lib/cucumber/ast/tags.rb +33 -0
  158. data/lib/cucumber/ast/visitor.rb +125 -0
  159. data/lib/cucumber/broadcaster.rb +2 -9
  160. data/lib/cucumber/cli/configuration.rb +364 -0
  161. data/lib/cucumber/cli/language_help_formatter.rb +59 -0
  162. data/lib/cucumber/cli/main.rb +109 -0
  163. data/lib/cucumber/core_ext/exception.rb +41 -8
  164. data/lib/cucumber/core_ext/instance_exec.rb +54 -0
  165. data/lib/cucumber/core_ext/proc.rb +29 -65
  166. data/lib/cucumber/core_ext/string.rb +19 -0
  167. data/lib/cucumber/formatter.rb +1 -0
  168. data/lib/cucumber/{formatters → formatter}/ansicolor.rb +13 -16
  169. data/lib/cucumber/formatter/color_io.rb +23 -0
  170. data/lib/cucumber/formatter/console.rb +109 -0
  171. data/lib/cucumber/formatter/cucumber.css +55 -0
  172. data/lib/cucumber/formatter/cucumber.sass +49 -0
  173. data/lib/cucumber/formatter/html.rb +133 -0
  174. data/lib/cucumber/formatter/pretty.rb +179 -0
  175. data/lib/cucumber/formatter/profile.rb +77 -0
  176. data/lib/cucumber/formatter/progress.rb +60 -0
  177. data/lib/cucumber/formatter/rerun.rb +35 -0
  178. data/lib/cucumber/formatter/unicode.rb +35 -0
  179. data/lib/cucumber/formatters/unicode.rb +2 -35
  180. data/lib/cucumber/jbehave.rb +97 -0
  181. data/lib/cucumber/languages.yml +196 -80
  182. data/lib/cucumber/parser.rb +43 -0
  183. data/lib/cucumber/parser/basic.rb +0 -0
  184. data/lib/cucumber/parser/feature.rb +1487 -0
  185. data/lib/cucumber/parser/feature.tt +193 -0
  186. data/lib/cucumber/parser/i18n.tt +31 -0
  187. data/lib/cucumber/parser/table.rb +402 -0
  188. data/lib/cucumber/parser/table.tt +59 -0
  189. data/lib/cucumber/parser/treetop_ext.rb +75 -0
  190. data/lib/cucumber/platform.rb +2 -17
  191. data/lib/cucumber/rails/rspec.rb +5 -9
  192. data/lib/cucumber/rails/world.rb +2 -2
  193. data/lib/cucumber/rake/task.rb +39 -7
  194. data/lib/cucumber/step_definition.rb +103 -0
  195. data/lib/cucumber/step_match.rb +49 -0
  196. data/lib/cucumber/step_mother.rb +183 -67
  197. data/lib/cucumber/version.rb +2 -2
  198. data/lib/cucumber/world.rb +53 -1
  199. data/rails_generators/cucumber/cucumber_generator.rb +22 -3
  200. data/rails_generators/cucumber/templates/cucumber +2 -1
  201. data/rails_generators/cucumber/templates/cucumber.rake +13 -5
  202. data/rails_generators/cucumber/templates/env.rb +4 -3
  203. data/rails_generators/cucumber/templates/paths.rb +18 -11
  204. data/rails_generators/cucumber/templates/webrat_steps.rb +41 -25
  205. data/rails_generators/feature/feature_generator.rb +4 -0
  206. data/rails_generators/feature/templates/steps.erb +0 -4
  207. data/spec/cucumber/ast/background_spec.rb +49 -0
  208. data/spec/cucumber/ast/feature_factory.rb +63 -0
  209. data/spec/cucumber/ast/feature_spec.rb +37 -0
  210. data/spec/cucumber/ast/py_string_spec.rb +47 -0
  211. data/spec/cucumber/ast/scenario_outline_spec.rb +67 -0
  212. data/spec/cucumber/ast/scenario_spec.rb +65 -0
  213. data/spec/cucumber/ast/step_collection_spec.rb +8 -0
  214. data/spec/cucumber/ast/step_spec.rb +66 -0
  215. data/spec/cucumber/ast/table_spec.rb +149 -0
  216. data/spec/cucumber/ast/tags_spec.rb +19 -0
  217. data/spec/cucumber/broadcaster_spec.rb +6 -18
  218. data/spec/cucumber/cli/configuration_spec.rb +275 -0
  219. data/spec/cucumber/cli/main_spec.rb +203 -0
  220. data/spec/cucumber/core_ext/proc_spec.rb +27 -35
  221. data/spec/cucumber/core_ext/string_spec.rb +8 -0
  222. data/spec/cucumber/{formatters → formatter}/ansicolor_spec.rb +2 -2
  223. data/spec/cucumber/formatter/color_io_spec.rb +26 -0
  224. data/spec/cucumber/formatter/html/cucumber.css +37 -0
  225. data/spec/cucumber/formatter/html/cucumber.js +13 -0
  226. data/spec/cucumber/formatter/html/index.html +45 -0
  227. data/spec/cucumber/formatter/html/jquery-1.3.min.js +19 -0
  228. data/spec/cucumber/formatter/html/jquery.uitableedit.js +100 -0
  229. data/spec/cucumber/formatters/profile_formatter_spec.rb +17 -16
  230. data/spec/cucumber/parser/feature_parser_spec.rb +282 -0
  231. data/spec/cucumber/parser/table_parser_spec.rb +48 -0
  232. data/spec/cucumber/step_definition_spec.rb +81 -0
  233. data/spec/cucumber/step_mother_spec.rb +50 -51
  234. data/spec/cucumber/treetop_parser/empty_feature.feature +1 -1
  235. data/spec/cucumber/treetop_parser/multiple_tables.feature +6 -8
  236. data/spec/cucumber/treetop_parser/scenario_outline.feature +1 -1
  237. data/spec/cucumber/treetop_parser/spaces.feature +3 -1
  238. data/spec/cucumber/treetop_parser/with_comments.feature +1 -1
  239. data/spec/cucumber/treetop_parser/with_tags.feature +18 -0
  240. data/spec/cucumber/world/pending_spec.rb +13 -12
  241. data/spec/spec_helper.rb +1 -1
  242. metadata +165 -88
  243. data/examples/calculator_ruby_features/features/addition.rb +0 -39
  244. data/examples/calculator_ruby_features/features/step_definitons/calculator_steps.rb +0 -43
  245. data/examples/i18n/ja/README.txt +0 -5
  246. data/examples/selenium/features/step_definitons/stories_steps.rb +0 -40
  247. data/gem_tasks/treetop.rake +0 -41
  248. data/lib/cucumber/cli.rb +0 -356
  249. data/lib/cucumber/executor.rb +0 -205
  250. data/lib/cucumber/formatters.rb +0 -1
  251. data/lib/cucumber/formatters/autotest_formatter.rb +0 -23
  252. data/lib/cucumber/formatters/cucumber.css +0 -132
  253. data/lib/cucumber/formatters/cucumber.js +0 -11
  254. data/lib/cucumber/formatters/html_formatter.rb +0 -151
  255. data/lib/cucumber/formatters/jquery.js +0 -32
  256. data/lib/cucumber/formatters/pretty_formatter.rb +0 -285
  257. data/lib/cucumber/formatters/profile_formatter.rb +0 -92
  258. data/lib/cucumber/formatters/progress_formatter.rb +0 -61
  259. data/lib/cucumber/model.rb +0 -1
  260. data/lib/cucumber/model/table.rb +0 -32
  261. data/lib/cucumber/step_methods.rb +0 -49
  262. data/lib/cucumber/tree.rb +0 -16
  263. data/lib/cucumber/tree/feature.rb +0 -105
  264. data/lib/cucumber/tree/features.rb +0 -21
  265. data/lib/cucumber/tree/given_scenario.rb +0 -13
  266. data/lib/cucumber/tree/scenario.rb +0 -240
  267. data/lib/cucumber/tree/step.rb +0 -173
  268. data/lib/cucumber/tree/table.rb +0 -26
  269. data/lib/cucumber/tree/top_down_visitor.rb +0 -23
  270. data/lib/cucumber/treetop_parser/feature.treetop.erb +0 -254
  271. data/lib/cucumber/treetop_parser/feature_ar.rb +0 -1951
  272. data/lib/cucumber/treetop_parser/feature_cy.rb +0 -1951
  273. data/lib/cucumber/treetop_parser/feature_da.rb +0 -1951
  274. data/lib/cucumber/treetop_parser/feature_de.rb +0 -1951
  275. data/lib/cucumber/treetop_parser/feature_en-lol.rb +0 -1951
  276. data/lib/cucumber/treetop_parser/feature_en-tx.rb +0 -1951
  277. data/lib/cucumber/treetop_parser/feature_en.rb +0 -1951
  278. data/lib/cucumber/treetop_parser/feature_es.rb +0 -1951
  279. data/lib/cucumber/treetop_parser/feature_et.rb +0 -1951
  280. data/lib/cucumber/treetop_parser/feature_fr.rb +0 -1951
  281. data/lib/cucumber/treetop_parser/feature_id.rb +0 -1951
  282. data/lib/cucumber/treetop_parser/feature_it.rb +0 -1951
  283. data/lib/cucumber/treetop_parser/feature_ja.rb +0 -1951
  284. data/lib/cucumber/treetop_parser/feature_ko.rb +0 -1951
  285. data/lib/cucumber/treetop_parser/feature_lt.rb +0 -1951
  286. data/lib/cucumber/treetop_parser/feature_nl.rb +0 -1951
  287. data/lib/cucumber/treetop_parser/feature_no.rb +0 -1951
  288. data/lib/cucumber/treetop_parser/feature_parser.rb +0 -36
  289. data/lib/cucumber/treetop_parser/feature_pl.rb +0 -1951
  290. data/lib/cucumber/treetop_parser/feature_pt.rb +0 -1951
  291. data/lib/cucumber/treetop_parser/feature_ro.rb +0 -1951
  292. data/lib/cucumber/treetop_parser/feature_ro2.rb +0 -1951
  293. data/lib/cucumber/treetop_parser/feature_ru.rb +0 -1951
  294. data/lib/cucumber/treetop_parser/feature_se.rb +0 -1951
  295. data/lib/cucumber/treetop_parser/feature_zh-CN.rb +0 -1951
  296. data/lib/cucumber/world/pending.rb +0 -22
  297. data/script/console +0 -10
  298. data/script/console.cmd +0 -1
  299. data/script/destroy +0 -14
  300. data/script/destroy.cmd +0 -1
  301. data/script/generate +0 -14
  302. data/script/generate.cmd +0 -1
  303. data/script/txt2html +0 -74
  304. data/script/txt2html.cmd +0 -1
  305. data/setup.rb +0 -1585
  306. data/spec/cucumber/cli_spec.rb +0 -521
  307. data/spec/cucumber/executor_spec.rb +0 -382
  308. data/spec/cucumber/formatters/autotest_formatter_spec.rb +0 -26
  309. data/spec/cucumber/formatters/features.html +0 -269
  310. data/spec/cucumber/formatters/html_formatter_spec.rb +0 -104
  311. data/spec/cucumber/formatters/pretty_formatter_spec.rb +0 -410
  312. data/spec/cucumber/formatters/progress_formatter_spec.rb +0 -81
  313. data/spec/cucumber/model/table_spec.rb +0 -32
  314. data/spec/cucumber/tree/feature_spec.rb +0 -122
  315. data/spec/cucumber/tree/row_scenario_outline_spec.rb +0 -73
  316. data/spec/cucumber/tree/row_scenario_spec.rb +0 -55
  317. data/spec/cucumber/tree/row_step_outline_spec.rb +0 -38
  318. data/spec/cucumber/tree/scenario_outline_spec.rb +0 -50
  319. data/spec/cucumber/tree/scenario_spec.rb +0 -134
  320. data/spec/cucumber/tree/step_outline_spec.rb +0 -17
  321. data/spec/cucumber/tree/step_spec.rb +0 -59
  322. data/spec/cucumber/treetop_parser/feature_parser_spec.rb +0 -120
@@ -0,0 +1,60 @@
1
+ require 'cucumber/formatter/console'
2
+
3
+ module Cucumber
4
+ module Formatter
5
+ class Progress < Ast::Visitor
6
+ include Console
7
+
8
+ def initialize(step_mother, io, options)
9
+ super(step_mother)
10
+ @io = io
11
+ @options = options
12
+ end
13
+
14
+ def visit_features(features)
15
+ super
16
+ @io.puts
17
+ @io.puts
18
+ print_summary
19
+ end
20
+
21
+ def visit_multiline_arg(multiline_arg)
22
+ @multiline_arg = true
23
+ super
24
+ @multiline_arg = false
25
+ end
26
+
27
+ def visit_step_name(keyword, step_match, status, source_indent, background)
28
+ progress(status) unless status == :outline
29
+ end
30
+
31
+ def visit_table_cell_value(value, width, status)
32
+ progress(status) if (status != :thead) && !@multiline_arg
33
+ end
34
+
35
+ private
36
+
37
+ def print_summary
38
+ print_steps(:pending)
39
+ print_steps(:failed)
40
+ print_counts
41
+ print_snippets(@options)
42
+ end
43
+
44
+ CHARS = {
45
+ :passed => '.',
46
+ :failed => 'F',
47
+ :undefined => 'U',
48
+ :pending => 'P',
49
+ :skipped => '-'
50
+ }
51
+
52
+ def progress(status)
53
+ char = CHARS[status]
54
+ @io.print(format_string(char, status))
55
+ @io.flush
56
+ end
57
+
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,35 @@
1
+ module Cucumber
2
+ module Formatter
3
+ class Rerun < Ast::Visitor
4
+ def initialize(step_mother, io, options)
5
+ super(step_mother)
6
+ @io = io
7
+ @file_names = []
8
+ @file_colon_lines = Hash.new{|h,k| h[k] = []}
9
+ end
10
+
11
+ def visit_features(features)
12
+ super
13
+ files = @file_names.uniq.map do |file|
14
+ lines = @file_colon_lines[file]
15
+ "#{file}:#{lines.join(':')}"
16
+ end
17
+ @io.puts files.join(' ')
18
+ end
19
+
20
+ def visit_feature_element(feature_element)
21
+ @rerun = false
22
+ super
23
+ if @rerun
24
+ file, line = *feature_element.file_colon_line.split(':')
25
+ @file_colon_lines[file] << line
26
+ @file_names << file
27
+ end
28
+ end
29
+
30
+ def visit_step_name(keyword, step_match, status, source_indent, background)
31
+ @rerun = true if [:failed].index(status)
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,35 @@
1
+ # Require this file if you need Unicode support.
2
+ require 'cucumber/platform'
3
+ require 'cucumber/formatter/ansicolor'
4
+
5
+ $KCODE='u' unless Cucumber::RUBY_1_9
6
+
7
+ if Cucumber::WINDOWS_MRI && `chcp` =~ /(\d+)/
8
+ codepage = $1.to_i
9
+ codepages = (1251..1252)
10
+
11
+ if codepages.include?(codepage)
12
+ Cucumber::CODEPAGE = "cp#{codepage}"
13
+
14
+ require 'iconv'
15
+ module Kernel
16
+ alias cucumber_print print
17
+ def print(*a)
18
+ begin
19
+ cucumber_print(*Iconv.iconv(Cucumber::CODEPAGE, "UTF-8", *a))
20
+ rescue Iconv::IllegalSequence
21
+ cucumber_print(*a)
22
+ end
23
+ end
24
+
25
+ alias cucumber_puts puts
26
+ def puts(*a)
27
+ begin
28
+ cucumber_puts(*Iconv.iconv(Cucumber::CODEPAGE, "UTF-8", *a))
29
+ rescue Iconv::IllegalSequence
30
+ cucumber_puts(*a)
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -1,35 +1,2 @@
1
- # Require this file if you need Unicode support.
2
- require 'cucumber/platform'
3
- require 'cucumber/formatters/ansicolor'
4
-
5
- $KCODE='u' unless Cucumber::RUBY_1_9
6
-
7
- if Cucumber::WINDOWS_MRI && `chcp` =~ /Active code page: (\d+)/
8
- codepage = $1.to_i
9
- codepages = (1251..1252)
10
-
11
- if codepages.include?(codepage)
12
- Cucumber::CODEPAGE = "cp#{codepage}"
13
-
14
- require 'iconv'
15
- module Kernel
16
- alias cucumber_print print
17
- def print(*a)
18
- begin
19
- cucumber_print *Iconv.iconv(Cucumber::CODEPAGE, "UTF-8", *a)
20
- rescue Iconv::IllegalSequence
21
- cucumber_print(*a)
22
- end
23
- end
24
-
25
- alias cucumber_puts puts
26
- def puts(*a)
27
- begin
28
- cucumber_puts *Iconv.iconv(Cucumber::CODEPAGE, "UTF-8", *a)
29
- rescue Iconv::IllegalSequence
30
- cucumber_puts(*a)
31
- end
32
- end
33
- end
34
- end
35
- end
1
+ # This is for backwards compatibility
2
+ require 'cucumber/formatter/unicode'
@@ -0,0 +1,97 @@
1
+ if defined?(JRUBY_VERSION)
2
+ require 'java'
3
+
4
+ Exception::CUCUMBER_FILTER_PATTERNS.unshift(/^org\/jruby|^org\/jbehave|^org\/junit|^java\/|^sun\/|^\$_dot_dot_/)
5
+
6
+ module Cucumber
7
+ module JBehave
8
+ # Register an instance of org.jbehave.scenario.steps.Steps
9
+ def JBehave(jbehave_steps)
10
+ jbehave_steps.getSteps.each do |jbehave_candidate_step|
11
+ step_definitions << JBehaveStepDefinition.new(jbehave_steps, jbehave_candidate_step)
12
+ end
13
+ end
14
+
15
+ # Open up so we can get the pattern....
16
+ JBehaveCandidateStep = org.jbehave.scenario.steps.CandidateStep
17
+ class JBehaveCandidateStep
18
+ field_reader :pattern
19
+ end
20
+
21
+ # Adapter for JBehave org.jbehave.scenario.steps.CandidateStep
22
+ class JBehaveStepDefinition
23
+ def initialize(jbehave_steps, jbehave_candidate_step)
24
+ @jbehave_steps = jbehave_steps
25
+ @jbehave_candidate_step = jbehave_candidate_step
26
+ @regexp = Regexp.new(jbehave_candidate_step.pattern.pattern)
27
+ end
28
+
29
+ def step_match(name_to_match, name_to_report)
30
+ if(match = name_to_match.match(@regexp))
31
+ StepMatch.new(self, name_to_match, name_to_report, match.captures)
32
+ else
33
+ nil
34
+ end
35
+ end
36
+
37
+ def file_colon_line
38
+ @jbehave_steps.java_class.name
39
+ end
40
+
41
+ def format_args(step_name, format)
42
+ step_name.gzub(@regexp, format)
43
+ end
44
+
45
+ def invoke(world, args, step_name)
46
+ step = @jbehave_candidate_step.createFrom("Given #{step_name}") # JBehave doesn't care about the adverb.
47
+ step = @jbehave_candidate_step.__send__(:createStep, "Given #{step_name}", args) # JBehave doesn't care about the adverb.
48
+
49
+ result = step.perform
50
+ result.describeTo(Reporter)
51
+ end
52
+ end
53
+
54
+ # Implements the org.jbehave.scenario.reporters.ScenarioReporter methods
55
+ class Reporter
56
+ def self.successful(step_text)
57
+ # noop
58
+ end
59
+
60
+ def self.failed(step, java_exception)
61
+ raise java_exception_to_ruby_exception(java_exception)
62
+ end
63
+
64
+ private
65
+
66
+ def self.java_exception_to_ruby_exception(java_exception)
67
+ # OK, this is a little funky - JRuby weirdness
68
+ ruby_exception = org.jruby.NativeException.new(JRuby.runtime, JBehaveException, java_exception)
69
+ ruby_exception.set_backtrace([]) # work around backtrace bug in jruby
70
+ exception = JBehaveException.new("#{java_exception.getClass.getName}: #{java_exception.getMessage}")
71
+ bt = ruby_exception.backtrace
72
+ Exception.cucumber_strip_backtrace!(bt, nil, nil)
73
+ exception.set_backtrace(bt)
74
+ exception
75
+ end
76
+ end
77
+
78
+ class JBehaveException < Exception
79
+ end
80
+
81
+ def self.snippet_text(step_keyword, step_name)
82
+ camel = step_name.gsub(/(\s.)/) {$1.upcase.strip}
83
+ method = camel[0..0].downcase + camel[1..-1]
84
+ snippet = %{ @#{step_keyword}("#{step_name}")
85
+ public void #{method}() {
86
+ throw new RuntimeException("pending");
87
+ }}
88
+ end
89
+ end
90
+ end
91
+
92
+ self.extend(Cucumber::JBehave)
93
+ self.snippet_generator = Cucumber::JBehave
94
+ else
95
+ STDERR.puts "ERROR: cucumber/jbehave only works with JRuby"
96
+ Kernel.exit(1)
97
+ end
@@ -1,273 +1,389 @@
1
- # http://www.ietf.org/rfc/rfc4646.txt
2
- # http://www.ietf.org/rfc/rfc4647.txt
3
- # Others:
4
- # http://en.wikipedia.org/wiki/IETF_language_tag
5
- # http://www.iana.org/assignments/language-subtag-registry
6
- # http://ftp.ics.uci.edu/pub/ietf/http/related/iso639.txt (Use this I think)
1
+ # encoding: UTF-8
2
+ # We use the codes here (prefer 2 letters when possible)
3
+ # http://en.wikipedia.org/wiki/List_of_ISO_639-2_codes
4
+ #
5
+ # If you want several aliases for a keyword, just separate them
6
+ # with a | character. Make sure there are no ambiguities in the
7
+ # keywords.
8
+ #
7
9
  "en":
10
+ name: English
11
+ native: English
12
+ encoding: UTF-8
8
13
  feature: Feature
14
+ background: Background
9
15
  scenario: Scenario
10
16
  scenario_outline: Scenario Outline
11
- examples: Examples
12
- more_examples: More Examples
13
- given_scenario: GivenScenario
17
+ examples: Examples|Scenarios
14
18
  given: Given
15
19
  when: When
16
20
  then: Then
17
21
  and: And
18
22
  but: But
23
+
19
24
  # Please help us keeping the languages below uptodate. The parsers for a language
20
25
  # that is missing a keyword will expect the English word until the missing word(s)
21
26
  # are added.
22
27
  #
23
- # Please keep the grammars in alphabetical order from here and down.
28
+ # Please keep the grammars in alphabetical order by name from here and down.
24
29
 
25
- # Arabic
26
30
  "ar":
31
+ name: Arabic
32
+ native: العربية
33
+ encoding: UTF-8
27
34
  feature: خاصية
35
+ background: الخلفية
28
36
  scenario: سيناريو
29
- more_examples: امثلة اكثر
30
- given_scenario: بفرض سيناريو معين
37
+ scenario_outline: سيناريو مخطط
38
+ examples: امثلة
31
39
  given: بفرض
32
- when: متى
33
- then: اذاً
40
+ when: متى|عندما
41
+ then: اذاً|ثم
34
42
  and: و
35
43
  but: لكن
36
- # Welsh
37
44
  "cy":
45
+ name: Welsh
46
+ native: Cymraeg
47
+ encoding: UTF-8
38
48
  feature: Arwedd
39
49
  scenario: Scenario
40
- more_examples: Hychwaneg enghreifftiau
41
- given_scenario: Anrhegedig scenario
50
+ examples: Enghreifftiau
42
51
  given: anrhegedig a
43
52
  when: Pryd
44
53
  then: Yna
45
54
  and: A
46
55
  but: Ond
47
- # Danish
56
+ "cz":
57
+ name: Czech
58
+ native: Česky
59
+ encoding: UTF-8
60
+ feature: Požadavek
61
+ background: Pozadí
62
+ scenario: Scénář
63
+ scenario_outline: Náčrt Scénáře
64
+ examples: Příklady
65
+ given: Pokud
66
+ when: Když
67
+ then: Pak
68
+ and: A
69
+ but: Ale
48
70
  "da":
71
+ name: Danish
72
+ native: dansk
73
+ encoding: UTF-8
49
74
  feature: Egenskab
75
+ background: Baggrund
50
76
  scenario: Scenarie
51
- given_scenario: GivetScenarie
77
+ scenario_outline: Abstrakt Scenario
78
+ examples: Eksempler
52
79
  given: Givet
53
80
  when: Når
54
81
  then: Så
55
82
  and: Og
56
83
  but: Men
57
- # German
58
84
  "de":
85
+ name: German
86
+ native: Deutsch
87
+ encoding: UTF-8
59
88
  feature: Funktionalität
89
+ background: Grundlage
60
90
  scenario: Szenario
61
91
  scenario_outline: Szenariogrundriss
62
92
  examples: Beispiele
63
- more_examples: Mehr Beispiele
64
- given_scenario: Gegebenes Szenario
65
93
  given: Gegeben sei
66
94
  when: Wenn
67
95
  then: Dann
68
96
  and: Und
69
97
  but: Aber
70
- # LOLCAT
98
+ "en-au":
99
+ name: Australian
100
+ native: Australian
101
+ encoding: UTF-8
102
+ feature: Crikey
103
+ background: Background
104
+ scenario: Mate
105
+ scenario_outline: Blokes
106
+ examples: Cobber
107
+ given: Ya know how
108
+ when: When
109
+ then: Ya gotta
110
+ and: N
111
+ but: Cept
71
112
  "en-lol":
113
+ name: LOLCAT
114
+ native: LOLCAT
115
+ encoding: UTF-8
72
116
  feature: OH HAI
117
+ background: B4
73
118
  scenario: MISHUN
74
- more_examples: MOAR EXAMPLZ
75
- given_scenario: SRSLY
76
- given: GIVN
119
+ scenario_outline: MISHUN SRSLY
120
+ examples: EXAMPLZ
121
+ given: I CAN HAZ
77
122
  when: WEN
78
123
  then: DEN
79
124
  and: AN
80
125
  but: BUT
81
- # Texan
82
126
  "en-tx":
127
+ name: Texan
128
+ native: Texan
129
+ encoding: UTF-8
83
130
  feature: Feature
131
+ background: Background
84
132
  scenario: Scenario
85
- more_examples: More Examples
86
- given_scenario: GivenScenario
133
+ scenario_outline: All y'all
134
+ examples: Examples
87
135
  given: Given y'all
88
136
  when: When y'all
89
137
  then: Then y'all
90
138
  and: And y'all
91
139
  but: But y'all
92
- # Spanish
93
140
  "es":
141
+ name: Spanish
142
+ native: español
143
+ encoding: UTF-8
144
+ background: Antecedentes
94
145
  feature: Característica
95
146
  scenario: Escenario
96
- more_examples: Más ejemplos
97
- given_scenario: DadoElEscenario
147
+ scenario_outline: Esquema del escenario
148
+ examples: Ejemplos
98
149
  given: Dado
99
150
  when: Cuando
100
151
  then: Entonces
101
152
  and: Y
102
153
  but: Pero
103
- # Estonian
104
154
  "et":
155
+ name: Estonian
156
+ native: eesti keel
157
+ encoding: UTF-8
105
158
  feature: Omadus
159
+ background: Taust
106
160
  scenario: Stsenaarium
107
- given_scenario: EeldadesStsenaariumit
161
+ scenario_outline: Raamstsenaarium
162
+ examples: Juhtumid
108
163
  given: Eeldades
109
164
  when: Kui
110
165
  then: Siis
111
166
  and: Ja
112
167
  but: Kuid
113
- # French
168
+ "fi":
169
+ name: Finnish
170
+ native: suomi
171
+ encoding: UTF-8
172
+ feature: Ominaisuus
173
+ background: Tausta
174
+ scenario: Tapaus
175
+ scenario_outline: Tapausaihio
176
+ examples: Tapaukset
177
+ given: Oletetaan
178
+ when: Kun
179
+ then: Niin
180
+ and: Ja
181
+ but: Mutta
114
182
  "fr":
183
+ name: French
184
+ native: français
185
+ encoding: UTF-8
115
186
  feature: Fonctionnalité
187
+ background: Contexte
116
188
  scenario: Scénario
117
- more_examples: Plus d'exemples
118
- given_scenario: Soit le Scénario
119
- given: Etant donné
189
+ scenario_outline: Plan du Scénario
190
+ examples: Exemples
191
+ given: Soit
120
192
  when: Lorsque
121
193
  then: Alors
122
194
  and: Et
123
195
  but: Mais
124
- # Malay
125
196
  "id":
197
+ name: Indonesian
198
+ native: Bahasa Indonesia
199
+ encoding: UTF-8
126
200
  feature: Fitur
127
201
  scenario: Skenario
128
- more_examples: Contoh Tambahan
129
- given_scenario: DenganSkenario
202
+ scenario_outline: Skenario konsep
203
+ examples: Contoh
130
204
  given: Dengan
131
205
  when: Ketika
132
206
  then: Maka
133
207
  and: Dan
134
208
  but: Tapi
135
- # Italian
136
209
  "it":
210
+ name: Italian
211
+ native: italiano
212
+ encoding: UTF-8
137
213
  feature: Funzionalità
138
214
  scenario: Scenario
139
215
  more_examples: Più esempi
140
- given_scenario: DatoLoScenario
141
216
  given: Dato
142
217
  when: Quando
143
218
  then: Allora
144
219
  and: E
145
220
  but: Ma
146
- # Japanese
147
221
  "ja":
222
+ name: Japanese
223
+ native: 日本語
224
+ encoding: UTF-8
148
225
  feature: フィーチャ
226
+ background: 背景
149
227
  scenario: シナリオ
150
- more_examples: 他のサンプル
151
- given_scenario: 前提シナリオ
228
+ scenario_outline: シナリオテンプレート|テンプレ|シナリオテンプレ
229
+ examples: 例|サンプル
152
230
  given: 前提
153
231
  when: もし
154
232
  then: ならば
155
233
  and: かつ
156
234
  but: しかし
157
- # Lithuanian
158
235
  "lt":
236
+ name: Lithuanian
237
+ native: lietuvių kalba
238
+ encoding: UTF-8
159
239
  feature: Sąvybė
160
240
  scenario: Scenarijus
161
- more_examples: Daugiau pavyzdžių
162
- given_scenario: DuotasScenarijus
241
+ examples: Pavyzdžių
163
242
  given: Duota
164
243
  when: Kai
165
244
  then: Tada
166
245
  and: Ir
167
246
  but: Bet
168
- # Dutch
169
247
  "nl":
248
+ name: Dutch
249
+ native: Nederlands
250
+ encoding: UTF-8
170
251
  feature: Functionaliteit
171
252
  scenario: Scenario
172
- more_examples: Meer voorbeelden
173
- given_scenario: GegevenScenario
174
253
  given: Gegeven
175
254
  when: Als
176
255
  then: Dan
177
256
  and: En
178
257
  but: Maar
179
- # Norwegian
180
258
  "no":
259
+ name: Norwegian
260
+ native: norsk
261
+ encoding: UTF-8
181
262
  feature: Egenskap
263
+ background: Bakgrunn
182
264
  scenario: Scenario
183
- more_examples: Flere eksempler
184
- given_scenario: GittScenario
265
+ scenario_outline: Abstrakt Scenario
266
+ examples: Eksempler
185
267
  given: Gitt
186
268
  when: Når
187
269
  then: Så
188
270
  and: Og
189
271
  but: Men
190
- # Polish
191
272
  "pl":
273
+ name: Polish
274
+ native: polski
275
+ encoding: UTF-8
192
276
  feature: Właściwość
193
277
  scenario: Scenariusz
194
- more_examples: WięcejPrzykładów
195
- given_scenario: DanyScenariusz
196
278
  given: Dane
197
279
  when: Jeżeli
198
280
  then: Wtedy
199
281
  and: Oraz
200
282
  but: Ale
201
- # Portuguese
202
283
  "pt":
284
+ name: Portuguese
285
+ native: português
286
+ encoding: UTF-8
287
+ background: Contexto
203
288
  feature: Característica
204
289
  scenario: Cenário
205
- given_scenario: DadoOCenário
290
+ scenario_outline: Esquema do Cenário
291
+ examples: Exemplos
206
292
  given: Dado
207
293
  when: Quando
208
294
  then: Então
209
295
  and: E
210
296
  but: Mas
211
- # Romanian (without diacritics - the commonly used)
212
297
  "ro":
298
+ name: Romanian
299
+ native: română
300
+ encoding: UTF-8
213
301
  feature: Functionalitate
214
302
  scenario: Scenariu
215
- more_examples: Mai multe exemple
216
- given_scenario: ScenariuDat
217
303
  given: Daca
218
304
  when: Cand
219
305
  then: Atunci
220
306
  and: Si
221
307
  but: Dar
222
- # Romanian (with diacritics - not commonly used)
223
308
  "ro2":
309
+ name: Romanian (diacritical)
310
+ native: română (diacritical)
311
+ encoding: UTF-8
224
312
  feature: Funcționalitate
225
313
  scenario: Scenariu
226
- more_examples: Mai multe exemple
227
- given_scenario: ScenariuDat
228
314
  given: Dacă
229
315
  when: Când
230
316
  then: Atunci
231
317
  and: Și
232
318
  but: Dar
233
- # Russian
234
319
  "ru":
320
+ name: Russian
321
+ native: русский
322
+ encoding: UTF-8
235
323
  feature: Функционал
324
+ background: Предыстория
236
325
  scenario: Сценарий
237
- given_scenario: ДанныйСценарий
238
- given: Сначала
326
+ scenario_outline: Структура сценария
327
+ examples: Значения
328
+ given: Допустим
239
329
  when: Если
240
330
  then: То
241
- and: И
242
- but: Но
243
- # Swedish
331
+ and: И|К тому же
332
+ but: Но|А
244
333
  "se":
334
+ name: Swedish
335
+ native: Svenska
336
+ encoding: UTF-8
245
337
  feature: Egenskap
338
+ background: Bakgrund
246
339
  scenario: Scenario
247
- given_scenario: GivetScenario
340
+ scenario_outline: Abstrakt Scenario
341
+ examples: Exempel
248
342
  given: Givet
249
343
  when: När
250
344
  then: Så
251
345
  and: Och
252
346
  but: Men
253
- # Chinese simplified
254
347
  "zh-CN":
348
+ name: Chinese simplified
349
+ native: 简体中文
350
+ encoding: UTF-8
255
351
  feature: 功能
352
+ background: 背景
256
353
  scenario: 场景
257
- given_scenario: 引用场景
354
+ scenario_outline: 场景大纲
355
+ examples: 例子
258
356
  given: 假如
259
357
  when: 当
260
358
  then: 那么
261
359
  and: 而且
262
360
  but: 但是
263
- # Korean
361
+ "zh-TW":
362
+ name: Chinese traditional
363
+ native: 繁體中文
364
+ encoding: UTF-8
365
+ feature: 功能
366
+ background: 背景
367
+ scenario: 場景|劇本
368
+ scenario_outline: 場景大綱|劇本大綱
369
+ examples: 例子
370
+ given: 假設
371
+ when: 當
372
+ then: 那麼
373
+ and: 而且|並且
374
+ but: 但是
264
375
  "ko":
376
+ name: Korean
377
+ native: 한국어
378
+ encoding: UTF-8
379
+ background: 배경
265
380
  feature: 기능
266
- scenario:
381
+ scenario: 시나리오
382
+ scenario_outline: 시나리오 개요
383
+ examples: 예
267
384
  more_examples: 다른 예
268
- given_scenario: 주어진 예
269
385
  given: 조건
270
386
  when: 만일
271
387
  then: 그러면
272
388
  and: 그리고
273
- but: 하지만
389
+ but: 하지만