cucumber 0.1.16 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
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: 하지만