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
@@ -1,173 +0,0 @@
1
- module Cucumber
2
- module Tree
3
- class BaseStep
4
- attr_reader :scenario
5
- attr_accessor :error
6
-
7
- def self.new_id!
8
- @next_id ||= -1
9
- @next_id += 1
10
- end
11
-
12
- attr_reader :error
13
-
14
- def file
15
- @scenario.file
16
- end
17
-
18
- def steps
19
- self
20
- end
21
-
22
- def length
23
- keyword.jlength + 1 + name.jlength
24
- end
25
-
26
- if defined?(JRUBY_VERSION)
27
- PENDING_ADJUSTMENT = 2
28
- REGULAR_ADJUSTMENT = 1
29
- else
30
- PENDING_ADJUSTMENT = 3
31
- REGULAR_ADJUSTMENT = 2
32
- end
33
-
34
- def execute_in(world, regexp, args, proc)
35
- strip_pos = nil
36
- begin
37
- proc.call_in(world, *args)
38
- rescue ArityMismatchError => e
39
- e.backtrace[0] = proc.to_backtrace_line
40
- strip_pos = e.backtrace.index("#{__FILE__}:#{__LINE__ - 3}:in `execute_in'")
41
- format_error(strip_pos, proc, e)
42
- rescue => e
43
- method_line = "#{__FILE__}:#{__LINE__ - 6}:in `execute_in'"
44
-
45
- # IronRuby returns nil for backtrace...
46
- if e.backtrace.nil?
47
- def e.backtrace
48
- @cucumber_backtrace ||= []
49
- end
50
- end
51
-
52
- method_line_pos = e.backtrace.index(method_line)
53
- if method_line_pos
54
- strip_pos = method_line_pos - (Pending === e ? PENDING_ADJUSTMENT : REGULAR_ADJUSTMENT)
55
- else
56
- # This happens with rails, because they screw up the backtrace
57
- # before we get here (injecting erb stacktrace and such)
58
- end
59
- format_error(strip_pos, proc, e)
60
- end
61
- end
62
-
63
- def format_error(strip_pos, proc, e)
64
- @error = e
65
- # Remove lines underneath the plain text step
66
- e.backtrace[strip_pos..-1] = nil unless strip_pos.nil?
67
- e.backtrace.compact!
68
- # Replace the step line with something more readable
69
- e.backtrace.replace(e.backtrace.map{|l| l.gsub(/`#{proc.meth}'/, "`#{keyword} #{proc.name}'")})
70
- if row?
71
- e.backtrace << "#{file}:#{line}:in `#{proc.name}'"
72
- else
73
- e.backtrace << "#{file}:#{line}:in `#{keyword} #{name}'"
74
- end
75
- raise e
76
- end
77
-
78
- def id
79
- @id ||= self.class.new_id!
80
- end
81
-
82
- def actual_keyword
83
- keyword == Cucumber.language['and'] ? previous_step.actual_keyword : keyword
84
- end
85
-
86
- def previous_step
87
- @scenario.previous_step(self)
88
- end
89
-
90
- def padding_length
91
- @scenario.step_padding_length(self)
92
- end
93
-
94
- def forced_to_pending?
95
- @error.kind_of?(ForcedPending)
96
- end
97
-
98
- def outline?
99
- false
100
- end
101
- end
102
-
103
- class Step < BaseStep
104
- attr_reader :keyword, :name, :line
105
- attr_accessor :arity, :extra_args
106
-
107
- def row?
108
- false
109
- end
110
-
111
- def initialize(scenario, keyword, name, line)
112
- @scenario, @keyword, @name, @line = scenario, keyword, name, line
113
- @extra_args ||= []
114
- @arity = 0
115
- end
116
-
117
- def regexp_args_proc(step_mother)
118
- regexp, args, proc = step_mother.regexp_args_proc(name)
119
- @arity = args.length
120
- [regexp, (args + extra_args), proc]
121
- end
122
-
123
- def format(regexp, format=nil, &proc)
124
- regexp.nil? ? name : name.gzub(regexp, format, &proc)
125
- end
126
- end
127
-
128
- class StepOutline < Step
129
- def outline?
130
- true
131
- end
132
- end
133
-
134
- class RowStep < BaseStep
135
- attr_reader :keyword
136
-
137
- def initialize(scenario, step, args)
138
- @scenario, @step, @args = scenario, step, args
139
- end
140
-
141
- def regexp_args_proc(step_mother)
142
- regexp, _, proc = @step.regexp_args_proc(step_mother)
143
- [regexp, @args, proc]
144
- end
145
-
146
- def row?
147
- true
148
- end
149
-
150
- def line
151
- @scenario.line
152
- end
153
- end
154
-
155
- class RowStepOutline < Step
156
- attr_reader :visible_args
157
-
158
- def initialize(scenario, step, name, visible_args, line)
159
- @visible_args = visible_args
160
- @extra_args = step.extra_args
161
- super(scenario, keyword, name, line)
162
- end
163
-
164
- def row?
165
- true
166
- end
167
-
168
- def outline?
169
- true
170
- end
171
- end
172
- end
173
- end
@@ -1,26 +0,0 @@
1
- module Cucumber
2
- module Tree
3
- class Table
4
- def initialize(rows)
5
- @rows = rows
6
- end
7
-
8
- def |(cell)
9
- @row ||= []
10
- if cell == self
11
- line = *caller[0].split(':')[1].to_i
12
- @row.instance_eval %{
13
- def line
14
- #{line}
15
- end
16
- }
17
- @rows << @row
18
- @row = nil
19
- else
20
- @row << cell.to_s
21
- end
22
- self
23
- end
24
- end
25
- end
26
- end
@@ -1,23 +0,0 @@
1
- module Cucumber
2
- module Tree
3
- class TopDownVisitor
4
- def visit_features(features)
5
- features.accept(self)
6
- end
7
-
8
- def visit_feature(feature)
9
- feature.accept(self)
10
- end
11
-
12
- def visit_header(header)
13
- end
14
-
15
- def visit_scenario(scenario)
16
- scenario.accept(self)
17
- end
18
-
19
- def visit_step(step)
20
- end
21
- end
22
- end
23
- end
@@ -1,254 +0,0 @@
1
- # encoding: utf-8
2
- module Cucumber
3
- # :stopdoc:
4
- module TreetopParser
5
- grammar Feature
6
- rule root
7
- space? header scenario_sequence space? {
8
- def compile
9
- feature = Tree::Feature.new(header.text_value.strip)
10
- scenario_sequence.compile(feature)
11
- feature
12
- end
13
- }
14
- end
15
-
16
- rule header
17
- (!(scenario_keyword / scenario_outline_keyword / comment_to_eol) .)+
18
- end
19
-
20
- rule scenario_sequence
21
- head:scenario_outline_or_scenario? tail:(space scenario_or_scenario_outline_or_table)* {
22
- def compile(feature)
23
- ([head] + tail).each do |scenario_or_scenario_outline_or_table|
24
- scenario_or_scenario_outline_or_table.compile(feature) if scenario_or_scenario_outline_or_table.respond_to?(:compile)
25
- end
26
- end
27
-
28
- def tail
29
- super.elements.map { |elt| elt.scenario_or_scenario_outline_or_table }
30
- end
31
- }
32
- end
33
-
34
- rule scenario_outline_or_scenario
35
- scenario_outline / scenario
36
- end
37
-
38
- rule scenario
39
- scenario_keyword space? name:line_to_eol steps:(space step_sequence)? {
40
- def compile(feature)
41
- line = input.line_of(interval.first)
42
- scenario = feature.add_scenario(name.text_value.strip, line)
43
- steps.step_sequence.compile(scenario) if steps.respond_to?(:step_sequence)
44
- # TODO - GET RID OF THIS last_scenario NASTINESS
45
- # Use a better datastructure, like a linked list...
46
- Feature.last_scenario = scenario
47
- end
48
- }
49
- end
50
-
51
- rule scenario_outline
52
- scenario_outline_keyword space? name:line_to_eol outline_body:(steps_and_optional_examples)? {
53
- def compile(feature)
54
- line = input.line_of(interval.first)
55
- scenario = feature.add_scenario_outline(name.text_value.strip, line)
56
- Feature.last_scenario = scenario
57
- outline_body.compile(feature, scenario) if outline_body.respond_to?(:compile)
58
- end
59
- }
60
- end
61
-
62
- rule scenario_or_scenario_outline_or_table
63
- scenario_outline / (scenario / more_examples)
64
- end
65
-
66
- rule steps_and_optional_examples
67
- steps:(space step_sequence) table:(space examples)? {
68
- def compile(feature, scenario)
69
- steps.step_sequence.compile(scenario) if steps.respond_to?(:step_sequence)
70
- table.examples.compile(feature, scenario) if table.respond_to?(:examples) && table.examples.respond_to?(:compile)
71
- end
72
- }
73
- end
74
-
75
- rule more_examples
76
- more_examples_keyword table {
77
- def compile(f)
78
- table.compile(f)
79
- end
80
- }
81
- end
82
-
83
- rule examples
84
- examples_keyword table {
85
- def compile(feature, scenario)
86
- table.compile_examples(feature, scenario)
87
- end
88
- }
89
- end
90
-
91
- rule table
92
- space head:table_line body:(blank* eol space? table_line)* {
93
- def compile(feature)
94
- Feature.last_scenario.table_header = head.cell_values
95
- body.each do |table_line|
96
- feature.add_row_scenario(Feature.last_scenario, table_line.cell_values, table_line.line)
97
- end
98
- end
99
-
100
- def compile_examples(feature, scenario)
101
- scenario.table_header = head.cell_values
102
- body.each do |table_line|
103
- feature.add_row_scenario_outline(scenario, table_line.cell_values, table_line.line)
104
- end
105
- end
106
-
107
- def matrix
108
- ([head] + body).map do |table_line|
109
- table_line.cell_values # We're losing the line - we'll get it back when we make our own class
110
- end
111
- end
112
-
113
- def to_arg
114
- Model::Table.new(matrix)
115
- end
116
-
117
- def body
118
- super.elements.map { |elt| elt.table_line }
119
- end
120
- }
121
- end
122
-
123
- rule table_line
124
- separator cells:(blank* cell_value blank* separator)+ {
125
- def cell_values
126
- cells.elements.map { |elt| elt.cell_value.text_value.strip }
127
- end
128
-
129
- def line
130
- input.line_of(interval.first)
131
- end
132
- }
133
- end
134
-
135
- rule cell_value
136
- (!(separator / eol) .)*
137
- end
138
-
139
- rule step_sequence
140
- head:step tail:(space step)* {
141
- def compile(scenario)
142
- ([head] + tail).each do |step|
143
- step.compile(scenario)
144
- end
145
- end
146
-
147
- def tail
148
- super.elements.map { |elt| elt.step }
149
- end
150
- }
151
- end
152
-
153
- rule step
154
- given_scenario / plain_step
155
- end
156
-
157
- rule given_scenario
158
- given_scenario_keyword space? name:line_to_eol {
159
- def compile(scenario)
160
- line = input.line_of(interval.first)
161
- scenario.create_given_scenario(name.text_value.strip, line)
162
- end
163
- }
164
- end
165
-
166
- rule plain_step
167
- step_keyword space? name:line_to_eol multi:multiline_arg? {
168
- def compile(scenario)
169
- line = input.line_of(interval.first)
170
- step = scenario.create_step(step_keyword.text_value, name.text_value.strip, line)
171
-
172
- if multi.respond_to?(:to_arg)
173
- step.extra_args << multi.to_arg
174
- end
175
- end
176
- }
177
- end
178
-
179
- rule multiline_arg
180
- table / multiline_string
181
- end
182
-
183
- rule multiline_string
184
- eol indent:space triple_quote string:(!triple_quote .)* triple_quote {
185
- def to_arg
186
- indent_length = indent.text_value.length
187
- significant_lines = string.text_value.split("\n")[1..-2]
188
- significant_lines.map do |l|
189
- l[indent_length..-1]
190
- end.join("\n")
191
- end
192
- }
193
- end
194
-
195
- rule triple_quote
196
- '"""'
197
- end
198
-
199
- rule separator
200
- '|'
201
- end
202
-
203
- rule space
204
- (white / comment_to_eol)+
205
- end
206
-
207
- rule line_to_eol
208
- (!eol .)*
209
- end
210
-
211
- rule comment_to_eol
212
- '#' line_to_eol
213
- end
214
-
215
- rule white
216
- blank / eol
217
- end
218
-
219
- rule blank
220
- [ \t]
221
- end
222
-
223
- rule eol
224
- ("\r" "\n"?) / "\n"
225
- end
226
-
227
- rule step_keyword
228
- "<%= words['given'] %>" / "<%= words['when'] %>" / "<%= words['then'] %>" / "<%= words['and'] %>" / "<%= words['but'] %>"
229
- end
230
-
231
- rule scenario_keyword
232
- "<%= words['scenario'] %>" ":"?
233
- end
234
-
235
- rule scenario_outline_keyword
236
- "<%= words['scenario_outline'] %>" ":"?
237
- end
238
-
239
- rule more_examples_keyword
240
- "<%= words['more_examples'] %>" ":"?
241
- end
242
-
243
- rule examples_keyword
244
- "<%= words['examples'] %>" ":"?
245
- end
246
-
247
- rule given_scenario_keyword
248
- "<%= words['given_scenario'] %>" ":"?
249
- end
250
-
251
- end
252
-
253
- end
254
- end