kosmas58-cucumber 0.1.16.6 → 0.1.99.21

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 (248) hide show
  1. data/History.txt +126 -2
  2. data/License.txt +1 -1
  3. data/Manifest.txt +0 -270
  4. data/Rakefile +1 -1
  5. data/bin/cucumber +2 -2
  6. data/config/hoe.rb +7 -2
  7. data/examples/cs/features/step_definitons/calculator_steps.rb +1 -1
  8. data/examples/i18n/README.textile +1 -1
  9. data/examples/i18n/Rakefile +3 -3
  10. data/examples/i18n/ar/features/step_definitons/calculator_steps.rb +1 -6
  11. data/examples/i18n/da/features/step_definitons/kalkulator_steps.rb +1 -1
  12. data/examples/i18n/de/features/addition.feature +6 -6
  13. data/examples/i18n/de/features/step_definitons/calculator_steps.rb +2 -2
  14. data/examples/i18n/en/features/addition.feature +6 -6
  15. data/examples/i18n/en/features/step_definitons/calculator_steps.rb +2 -2
  16. data/examples/i18n/es/features/adicion.feature +11 -12
  17. data/examples/i18n/es/features/step_definitons/calculador_steps.rb +7 -10
  18. data/examples/i18n/es/lib/calculador.rb +4 -1
  19. data/examples/i18n/et/features/liitmine.feature +7 -6
  20. data/examples/i18n/et/features/step_definitions/kalkulaator_steps.rb +1 -1
  21. data/examples/i18n/fi/features/step_definitons/laskin_steps.rb +1 -1
  22. data/examples/i18n/fi/features/yhteenlasku.feature +2 -2
  23. data/examples/i18n/fr/features/addition.feature +2 -2
  24. data/examples/i18n/fr/features/step_definitions/calculatrice_steps.rb +1 -1
  25. data/examples/i18n/id/features/addition.feature +6 -6
  26. data/examples/i18n/id/features/step_definitons/calculator_steps.rb +2 -2
  27. data/examples/i18n/it/features/step_definitons/calcolatrice_steps.rb +1 -1
  28. data/examples/i18n/ja/features/step_definitons/calculator_steps.rb +2 -3
  29. data/examples/i18n/ko/features/step_definitons/calculator_steps.rb +1 -1
  30. data/examples/i18n/lt/features/addition.feature +7 -6
  31. data/examples/i18n/lt/features/step_definitons/calculator_steps.rb +2 -2
  32. data/examples/i18n/no/features/step_definitons/kalkulator_steps.rb +7 -7
  33. data/examples/i18n/no/features/summering.feature +1 -0
  34. data/examples/i18n/pt/features/step_definitions/calculadora_steps.rb +1 -1
  35. data/examples/i18n/ro/features/step_definitons/calculator_steps.rb +1 -1
  36. data/examples/i18n/se/features/step_definitons/kalkulator_steps.rb +1 -1
  37. data/examples/i18n/zh-CN/features/step_definitons/calculator_steps.rb +2 -2
  38. data/examples/java/src/cucumber/demo/Hello.java +16 -0
  39. data/examples/jbehave/README.textile +17 -0
  40. data/examples/jbehave/features/support/env.rb +7 -0
  41. data/examples/jbehave/features/trading.feature +24 -0
  42. data/examples/jbehave/pom.xml +48 -0
  43. data/examples/jbehave/src/main/java/cukes/jbehave/examples/trader/converters/TraderConverter.java +32 -0
  44. data/examples/jbehave/src/main/java/cukes/jbehave/examples/trader/model/Stock.java +42 -0
  45. data/examples/jbehave/src/main/java/cukes/jbehave/examples/trader/model/Trader.java +29 -0
  46. data/examples/jbehave/src/main/java/cukes/jbehave/examples/trader/persistence/TraderPersister.java +22 -0
  47. data/examples/jbehave/src/main/java/cukes/jbehave/examples/trader/scenarios/TraderSteps.java +65 -0
  48. data/examples/self_test/README.textile +4 -1
  49. data/examples/{calculator_ruby_features → self_test}/Rakefile +3 -3
  50. data/examples/self_test/features/background/failing_background.feature +10 -0
  51. data/examples/self_test/features/background/failing_background_after_success.feature +11 -0
  52. data/examples/self_test/features/background/multiline_args_background.feature +32 -0
  53. data/examples/self_test/features/background/passing_background.feature +10 -0
  54. data/examples/self_test/features/background/pending_background.feature +10 -0
  55. data/examples/self_test/features/background/scenario_outline_failing_background.feature +16 -0
  56. data/examples/self_test/features/background/scenario_outline_passing_background.feature +16 -0
  57. data/examples/self_test/features/call_undefined_step_from_step_def.feature +7 -0
  58. data/examples/self_test/features/lots_of_undefined.feature +8 -0
  59. data/examples/self_test/features/outline_sample.feature +11 -5
  60. data/examples/self_test/features/sample.feature +8 -3
  61. data/examples/self_test/features/step_definitions/sample_steps.rb +53 -4
  62. data/examples/self_test/features/support/env.rb +1 -0
  63. data/examples/self_test/features/support/tag_count_formatter.rb +25 -0
  64. data/examples/tickets/features/172.feature +28 -0
  65. data/examples/tickets/features/177/1.feature +29 -0
  66. data/examples/tickets/features/177/2.feature +21 -0
  67. data/examples/tickets/features/177/3.feature +18 -0
  68. data/examples/tickets/features/180.feature +7 -0
  69. data/examples/tickets/features/scenario_outline.feature +6 -1
  70. data/examples/tickets/features/step_definitons/tickets_steps.rb +27 -3
  71. data/examples/tickets/features/tickets.feature +4 -0
  72. data/features/background.feature +223 -0
  73. data/features/cucumber_cli.feature +218 -98
  74. data/features/cucumber_cli_outlines.feature +54 -37
  75. data/features/custom_formatter.feature +11 -0
  76. data/features/report_called_undefined_steps.feature +32 -0
  77. data/features/step_definitions/cucumber_steps.rb +7 -3
  78. data/features/step_definitions/extra_steps.rb +1 -1
  79. data/features/support/env.rb +2 -1
  80. data/gem_tasks/flog.rake +1 -1
  81. data/gem_tasks/gemspec.rake +2 -2
  82. data/gem_tasks/jar.rake +67 -0
  83. data/lib/autotest/cucumber_mixin.rb +17 -23
  84. data/lib/cucumber.rb +63 -11
  85. data/lib/cucumber/ast.rb +29 -0
  86. data/lib/cucumber/ast/background.rb +88 -0
  87. data/lib/cucumber/ast/comment.rb +26 -0
  88. data/lib/cucumber/ast/examples.rb +26 -0
  89. data/lib/cucumber/ast/feature.rb +66 -0
  90. data/lib/cucumber/ast/features.rb +39 -0
  91. data/lib/cucumber/ast/filter.rb +22 -0
  92. data/lib/cucumber/ast/outline_table.rb +49 -0
  93. data/lib/cucumber/ast/py_string.rb +52 -0
  94. data/lib/cucumber/ast/scenario.rb +103 -0
  95. data/lib/cucumber/ast/scenario_outline.rb +92 -0
  96. data/lib/cucumber/ast/step.rb +161 -0
  97. data/lib/cucumber/ast/steps.rb +13 -0
  98. data/lib/cucumber/ast/table.rb +218 -0
  99. data/lib/cucumber/ast/tags.rb +40 -0
  100. data/lib/cucumber/ast/visitor.rb +109 -0
  101. data/lib/cucumber/broadcaster.rb +1 -6
  102. data/lib/cucumber/cli/configuration.rb +339 -0
  103. data/lib/cucumber/cli/language_help_formatter.rb +59 -0
  104. data/lib/cucumber/cli/main.rb +100 -0
  105. data/lib/cucumber/core_ext/exception.rb +41 -8
  106. data/lib/cucumber/core_ext/instance_exec.rb +54 -0
  107. data/lib/cucumber/core_ext/proc.rb +29 -65
  108. data/lib/cucumber/core_ext/string.rb +19 -0
  109. data/lib/cucumber/formatter.rb +1 -0
  110. data/lib/cucumber/{formatters → formatter}/ansicolor.rb +14 -16
  111. data/lib/cucumber/formatter/color_io.rb +17 -0
  112. data/lib/cucumber/formatter/console.rb +119 -0
  113. data/lib/cucumber/formatter/cucumber.css +55 -0
  114. data/lib/cucumber/formatter/cucumber.sass +49 -0
  115. data/lib/cucumber/formatter/html.rb +121 -0
  116. data/lib/cucumber/formatter/pretty.rb +167 -0
  117. data/lib/cucumber/formatter/profile.rb +77 -0
  118. data/lib/cucumber/formatter/progress.rb +68 -0
  119. data/lib/cucumber/formatter/rerun.rb +35 -0
  120. data/lib/cucumber/formatter/unicode.rb +35 -0
  121. data/lib/cucumber/formatters/unicode.rb +2 -35
  122. data/lib/cucumber/jbehave.rb +102 -0
  123. data/lib/cucumber/languages.yml +128 -75
  124. data/lib/cucumber/parser.rb +43 -0
  125. data/lib/cucumber/parser/basic.rb +0 -0
  126. data/lib/cucumber/parser/feature.rb +1490 -0
  127. data/lib/cucumber/parser/feature.tt +188 -0
  128. data/lib/cucumber/parser/i18n.tt +31 -0
  129. data/lib/cucumber/parser/table.rb +402 -0
  130. data/lib/cucumber/parser/table.tt +59 -0
  131. data/lib/cucumber/parser/treetop_ext.rb +75 -0
  132. data/lib/cucumber/platform.rb +3 -17
  133. data/lib/cucumber/rails/rspec.rb +5 -2
  134. data/lib/cucumber/step_definition.rb +87 -0
  135. data/lib/cucumber/step_mother.rb +151 -66
  136. data/lib/cucumber/version.rb +2 -2
  137. data/rails_generators/cucumber/USAGE +3 -2
  138. data/rails_generators/cucumber/cucumber_generator.rb +33 -23
  139. data/rails_generators/cucumber/templates/cucumber +2 -1
  140. data/rails_generators/cucumber/templates/cucumber.rake +6 -1
  141. data/rails_generators/cucumber/templates/env.rb +1 -1
  142. data/rails_generators/feature/USAGE +3 -0
  143. data/rails_generators/feature/feature_generator.rb +30 -6
  144. data/spec/cucumber/ast/background_spec.rb +58 -0
  145. data/spec/cucumber/ast/feature_factory.rb +54 -0
  146. data/spec/cucumber/ast/feature_spec.rb +60 -0
  147. data/spec/cucumber/ast/py_string_spec.rb +40 -0
  148. data/spec/cucumber/ast/scenario_outline_spec.rb +64 -0
  149. data/spec/cucumber/ast/scenario_spec.rb +82 -0
  150. data/spec/cucumber/ast/step_spec.rb +45 -0
  151. data/spec/cucumber/ast/table_spec.rb +81 -0
  152. data/spec/cucumber/ast/tags_spec.rb +23 -0
  153. data/spec/cucumber/broadcaster_spec.rb +4 -17
  154. data/spec/cucumber/cli/configuration_spec.rb +239 -0
  155. data/spec/cucumber/cli/main_spec.rb +164 -0
  156. data/spec/cucumber/core_ext/proc_spec.rb +27 -35
  157. data/spec/cucumber/core_ext/string_spec.rb +8 -0
  158. data/spec/cucumber/{formatters → formatter}/ansicolor_spec.rb +2 -2
  159. data/spec/cucumber/formatter/html/cucumber.css +37 -0
  160. data/spec/cucumber/formatter/html/cucumber.js +13 -0
  161. data/spec/cucumber/formatter/html/index.html +45 -0
  162. data/spec/cucumber/formatter/html/jquery-1.3.min.js +19 -0
  163. data/spec/cucumber/formatter/html/jquery.uitableedit.js +100 -0
  164. data/spec/cucumber/formatters/profile_formatter_spec.rb +17 -16
  165. data/spec/cucumber/parser/feature_parser_spec.rb +281 -0
  166. data/spec/cucumber/parser/table_parser_spec.rb +48 -0
  167. data/spec/cucumber/step_definition_spec.rb +62 -0
  168. data/spec/cucumber/step_mother_spec.rb +50 -51
  169. data/spec/cucumber/treetop_parser/empty_feature.feature +1 -1
  170. data/spec/cucumber/treetop_parser/scenario_outline.feature +1 -1
  171. data/spec/cucumber/treetop_parser/spaces.feature +3 -1
  172. data/spec/cucumber/treetop_parser/with_comments.feature +1 -1
  173. data/spec/cucumber/treetop_parser/with_tags.feature +18 -0
  174. data/spec/cucumber/world/pending_spec.rb +13 -12
  175. data/spec/spec_helper.rb +1 -1
  176. metadata +107 -79
  177. data/examples/calculator_ruby_features/features/addition.rb +0 -39
  178. data/examples/calculator_ruby_features/features/step_definitons/calculator_steps.rb +0 -43
  179. data/gem_tasks/treetop.rake +0 -41
  180. data/lib/cucumber/cli.rb +0 -355
  181. data/lib/cucumber/executor.rb +0 -205
  182. data/lib/cucumber/formatters.rb +0 -1
  183. data/lib/cucumber/formatters/autotest_formatter.rb +0 -23
  184. data/lib/cucumber/formatters/cucumber.css +0 -132
  185. data/lib/cucumber/formatters/cucumber.js +0 -11
  186. data/lib/cucumber/formatters/html_formatter.rb +0 -152
  187. data/lib/cucumber/formatters/jquery.js +0 -32
  188. data/lib/cucumber/formatters/pretty_formatter.rb +0 -285
  189. data/lib/cucumber/formatters/profile_formatter.rb +0 -92
  190. data/lib/cucumber/formatters/progress_formatter.rb +0 -61
  191. data/lib/cucumber/model.rb +0 -1
  192. data/lib/cucumber/model/table.rb +0 -32
  193. data/lib/cucumber/step_methods.rb +0 -49
  194. data/lib/cucumber/tree.rb +0 -16
  195. data/lib/cucumber/tree/feature.rb +0 -105
  196. data/lib/cucumber/tree/features.rb +0 -21
  197. data/lib/cucumber/tree/given_scenario.rb +0 -13
  198. data/lib/cucumber/tree/scenario.rb +0 -240
  199. data/lib/cucumber/tree/step.rb +0 -173
  200. data/lib/cucumber/tree/table.rb +0 -26
  201. data/lib/cucumber/tree/top_down_visitor.rb +0 -23
  202. data/lib/cucumber/treetop_parser/feature.treetop.erb +0 -254
  203. data/lib/cucumber/treetop_parser/feature_ar.rb +0 -1951
  204. data/lib/cucumber/treetop_parser/feature_cy.rb +0 -1951
  205. data/lib/cucumber/treetop_parser/feature_da.rb +0 -1951
  206. data/lib/cucumber/treetop_parser/feature_de.rb +0 -1951
  207. data/lib/cucumber/treetop_parser/feature_en-lol.rb +0 -1951
  208. data/lib/cucumber/treetop_parser/feature_en-tx.rb +0 -1951
  209. data/lib/cucumber/treetop_parser/feature_en.rb +0 -1951
  210. data/lib/cucumber/treetop_parser/feature_es.rb +0 -1951
  211. data/lib/cucumber/treetop_parser/feature_et.rb +0 -1951
  212. data/lib/cucumber/treetop_parser/feature_fi.rb +0 -1951
  213. data/lib/cucumber/treetop_parser/feature_fr.rb +0 -1951
  214. data/lib/cucumber/treetop_parser/feature_id.rb +0 -1951
  215. data/lib/cucumber/treetop_parser/feature_it.rb +0 -1951
  216. data/lib/cucumber/treetop_parser/feature_ja.rb +0 -1951
  217. data/lib/cucumber/treetop_parser/feature_ko.rb +0 -1951
  218. data/lib/cucumber/treetop_parser/feature_lt.rb +0 -1951
  219. data/lib/cucumber/treetop_parser/feature_nl.rb +0 -1951
  220. data/lib/cucumber/treetop_parser/feature_no.rb +0 -1951
  221. data/lib/cucumber/treetop_parser/feature_parser.rb +0 -36
  222. data/lib/cucumber/treetop_parser/feature_pl.rb +0 -1951
  223. data/lib/cucumber/treetop_parser/feature_pt.rb +0 -1951
  224. data/lib/cucumber/treetop_parser/feature_ro.rb +0 -1951
  225. data/lib/cucumber/treetop_parser/feature_ro2.rb +0 -1951
  226. data/lib/cucumber/treetop_parser/feature_ru.rb +0 -1951
  227. data/lib/cucumber/treetop_parser/feature_se.rb +0 -1951
  228. data/lib/cucumber/treetop_parser/feature_zh-CN.rb +0 -1951
  229. data/lib/cucumber/world.rb +0 -1
  230. data/lib/cucumber/world/pending.rb +0 -22
  231. data/setup.rb +0 -1585
  232. data/spec/cucumber/cli_spec.rb +0 -521
  233. data/spec/cucumber/executor_spec.rb +0 -382
  234. data/spec/cucumber/formatters/autotest_formatter_spec.rb +0 -26
  235. data/spec/cucumber/formatters/features.html +0 -269
  236. data/spec/cucumber/formatters/html_formatter_spec.rb +0 -110
  237. data/spec/cucumber/formatters/pretty_formatter_spec.rb +0 -410
  238. data/spec/cucumber/formatters/progress_formatter_spec.rb +0 -81
  239. data/spec/cucumber/model/table_spec.rb +0 -32
  240. data/spec/cucumber/tree/feature_spec.rb +0 -122
  241. data/spec/cucumber/tree/row_scenario_outline_spec.rb +0 -73
  242. data/spec/cucumber/tree/row_scenario_spec.rb +0 -55
  243. data/spec/cucumber/tree/row_step_outline_spec.rb +0 -38
  244. data/spec/cucumber/tree/scenario_outline_spec.rb +0 -50
  245. data/spec/cucumber/tree/scenario_spec.rb +0 -134
  246. data/spec/cucumber/tree/step_outline_spec.rb +0 -17
  247. data/spec/cucumber/tree/step_spec.rb +0 -59
  248. data/spec/cucumber/treetop_parser/feature_parser_spec.rb +0 -120
@@ -1 +0,0 @@
1
- %w{table}.each{|f| require "cucumber/model/#{f}"}
@@ -1,32 +0,0 @@
1
- module Cucumber
2
- module Model
3
- class Table
4
- attr_accessor :raw
5
-
6
- # Creates a new table. The +raw+ argument should be an array
7
- # of arrays
8
- def initialize(raw)
9
- @raw = raw
10
- end
11
-
12
- # Turn the table into an array of Hash where each Hash
13
- # has keys corresponding to the table header (first line)
14
- # and the values are the individual row cells.
15
- def hashes
16
- header = @raw[0]
17
- rows.map do |row|
18
- h = {}
19
- row.each_with_index do |v,n|
20
- key = header[n]
21
- h[key] = v
22
- end
23
- h
24
- end
25
- end
26
-
27
- def rows
28
- @raw[1..-1]
29
- end
30
- end
31
- end
32
- end
@@ -1,49 +0,0 @@
1
- require 'cucumber/step_mother'
2
-
3
- module Cucumber
4
- # Defines "global" methods that may be used in *_steps.rb files.
5
- module StepMethods
6
- # Each scenario will execute in the context of what the supplied block returns.
7
- def World(&proc)
8
- executor.register_world_proc(&proc)
9
- end
10
-
11
- def Before(&proc)
12
- executor.register_before_scenario_proc(&proc)
13
- end
14
-
15
- def After(&proc)
16
- executor.register_after_scenario_proc(&proc)
17
- end
18
-
19
- def AfterStep(&proc)
20
- executor.register_after_step_proc(&proc)
21
- end
22
-
23
- def Given(key, &proc)
24
- step_mother.register_step_proc(key, &proc)
25
- end
26
-
27
- def When(key, &proc)
28
- step_mother.register_step_proc(key, &proc)
29
- end
30
-
31
- def Then(key, &proc)
32
- step_mother.register_step_proc(key, &proc)
33
- end
34
-
35
- # Simple workaround for old skool steps
36
- def steps_for(*_)
37
- STDERR.puts "WARNING: In Cucumber the steps_for method is obsolete"
38
- yield
39
- end
40
-
41
- def step_mother #:nodoc:
42
- @step_mother ||= StepMother.new
43
- end
44
-
45
- def executor
46
- @executor ||= Executor.new(step_mother)
47
- end
48
- end
49
- end
data/lib/cucumber/tree.rb DELETED
@@ -1,16 +0,0 @@
1
- %w{features feature scenario step given_scenario table top_down_visitor}.each{|f| require "cucumber/tree/#{f}"}
2
-
3
- module Cucumber
4
- module Tree
5
- def Feature(header, &proc)
6
- feature = Feature.new("Feature: " + header, &proc)
7
- feature.file, _, _ = *caller[0].split(':')
8
- features << feature
9
- feature
10
- end
11
-
12
- def features #:nodoc:
13
- @features ||= Tree::Features.new
14
- end
15
- end
16
- end
@@ -1,105 +0,0 @@
1
- module Cucumber
2
- module Tree
3
- class Feature
4
- attr_reader :header
5
- attr_reader :scenarios
6
- MIN_PADDING = 2
7
-
8
- attr_accessor :file
9
-
10
- def initialize(header, &proc)
11
- @header = header
12
- @scenarios = []
13
- instance_eval(&proc) if block_given?
14
- end
15
-
16
- def add_scenario(name, line, &proc)
17
- scenario = Scenario.new(self, name, line, &proc)
18
- @scenarios << scenario
19
- scenario
20
- end
21
-
22
- def add_scenario_outline(name, line, &proc)
23
- scenario = ScenarioOutline.new(self, name, line, &proc)
24
- @scenarios << scenario
25
- scenario
26
- end
27
-
28
- def add_row_scenario(template_scenario, values, line)
29
- scenario = RowScenario.new(self, template_scenario, values, line)
30
- @scenarios << scenario
31
- scenario
32
- end
33
-
34
- def add_row_scenario_outline(template_scenario, values, line)
35
- scenario = RowScenarioOutline.new(self, template_scenario, values, line)
36
- @scenarios << scenario
37
- scenario
38
- end
39
-
40
- def scenario_named(name)
41
- @scenarios.find {|s| s.name == name}
42
- end
43
-
44
- def padding_length
45
- MIN_PADDING
46
- end
47
-
48
- def Scenario(name, &proc)
49
- line = caller[0] =~ /:(\d+)$/ ? $1 : nil
50
- add_scenario(name, line, &proc)
51
- end
52
-
53
- def ScenarioOutline(name, &proc)
54
- line = caller[0] =~ /:(\d+)$/ ? $1 : nil
55
- add_scenario_outline(name, line, &proc)
56
- end
57
-
58
- def Table(matrix = [], &proc)
59
- table = Table.new(matrix)
60
- proc.call(table)
61
-
62
- template_scenario = @scenarios.last
63
- template_scenario.table_header = matrix[0]
64
-
65
- matrix[1..-1].each do |row|
66
- if template_scenario.outline?
67
- add_row_scenario_outline(template_scenario, row, row.line)
68
- else
69
- add_row_scenario(template_scenario, row, row.line)
70
- end
71
- end
72
- end
73
-
74
- def accept(visitor)
75
- visitor.visit_header(@header)
76
- @scenarios.each do |scenario|
77
- if scenario.outline? && !scenario.row?
78
- visitor.visit_scenario_outline(scenario)
79
- elsif scenario.row?
80
- visitor.visit_row_scenario(scenario)
81
- else
82
- visitor.visit_regular_scenario(scenario)
83
- end
84
- end
85
- end
86
-
87
- def last_line(scenario)
88
- next_scenario = next_scenario(scenario)
89
- next_scenario ? next_scenario.line - 1 : lines
90
- end
91
-
92
- protected
93
-
94
- def next_scenario(scenario)
95
- index = @scenarios.index(scenario)
96
- @scenarios[index + 1]
97
- end
98
-
99
- def lines
100
- @lines ||= File.readlines(file).size
101
- end
102
-
103
- end
104
- end
105
- end
@@ -1,21 +0,0 @@
1
- module Cucumber
2
- module Tree
3
- class Features
4
- def initialize
5
- @features = []
6
- end
7
-
8
- def length
9
- @features.length
10
- end
11
-
12
- def <<(feature)
13
- @features << feature
14
- end
15
-
16
- def accept(visitor)
17
- @features.each{|feature| visitor.visit_feature(feature)}
18
- end
19
- end
20
- end
21
- end
@@ -1,13 +0,0 @@
1
- module Cucumber
2
- module Tree
3
- class GivenScenario
4
- def initialize(scenario, name, line)
5
- @scenario, @name, @line = scenario, name, line
6
- end
7
-
8
- def steps
9
- @scenario.given_scenario_steps(@name)
10
- end
11
- end
12
- end
13
- end
@@ -1,240 +0,0 @@
1
- module Cucumber
2
- module Tree
3
- class BaseScenario
4
- attr_reader :feature
5
-
6
- def file
7
- @feature.file
8
- end
9
-
10
- def accept(visitor)
11
- steps.each do |step|
12
- if step.outline? && !step.row?
13
- visitor.visit_step_outline(step)
14
- elsif step.row?
15
- visitor.visit_row_step(step)
16
- else
17
- visitor.visit_regular_step(step)
18
- end
19
- end
20
- end
21
-
22
- def at_line?(l)
23
- (line..last_line).include?(l)
24
- end
25
-
26
- def last_line
27
- @last_line ||= @feature.last_line(self)
28
- end
29
-
30
- def previous_step(step)
31
- i = steps.index(step)
32
- raise "Couldn't find #{step} among #{steps}" if i.nil?
33
- steps[i-1]
34
- end
35
-
36
- def pending?
37
- steps.empty?
38
- end
39
-
40
- def outline?
41
- false
42
- end
43
-
44
- end
45
-
46
- class Scenario < BaseScenario
47
- MIN_PADDING = 2
48
- INDENT = 2
49
-
50
- # If a table follows, the header will be stored here. Weird, but convenient.
51
- attr_reader :table_header
52
- attr_accessor :table_column_widths
53
- attr_reader :name, :line
54
-
55
- def initialize(feature, name, line, &proc)
56
- require 'cucumber/core_ext/string'
57
- @feature, @name, @line = feature, name, line
58
- @steps_and_given_scenarios = []
59
- instance_eval(&proc) if block_given?
60
- end
61
-
62
- def table_header= header
63
- @table_header = header
64
- update_table_column_widths header
65
- end
66
-
67
- def steps
68
- @steps ||= @steps_and_given_scenarios.map{|step| step.steps}.flatten
69
- end
70
-
71
- def given_scenario_steps(name)
72
- sibling_named(name).steps
73
- end
74
-
75
- def sibling_named(name)
76
- @feature.scenario_named(name)
77
- end
78
-
79
- def length
80
- @length ||= Cucumber.language['scenario'].jlength + 2 + (@name.nil? ? 0 : @name.jlength)
81
- end
82
-
83
- def max_line_length
84
- [length, max_step_length].max
85
- end
86
-
87
- def padding_length
88
- padding = (max_line_length - length) + MIN_PADDING
89
- padding += INDENT if length != max_line_length
90
- padding
91
- end
92
-
93
- def step_padding_length(step)
94
- padding = (max_line_length - step.length) + MIN_PADDING
95
- padding -= INDENT if length == max_line_length
96
- padding
97
- end
98
-
99
- def max_step_length
100
- @max_step_length ||= (steps.map{|step| step.length}.max || 0)
101
- end
102
-
103
- def update_table_column_widths values
104
- @table_column_widths ||= [0] * values.size
105
- @table_column_widths = @table_column_widths.zip(values).map {|max, value| [max, value.size].max}
106
- end
107
-
108
- def row?
109
- false
110
- end
111
-
112
- def create_step(keyword, name, line)
113
- step = Step.new(self, keyword, name, line)
114
- @steps_and_given_scenarios << step
115
- step
116
- end
117
-
118
- def create_given_scenario(name, line)
119
- given_scenario = GivenScenario.new(self, name, line)
120
- @steps_and_given_scenarios << given_scenario
121
- given_scenario
122
- end
123
-
124
- def Given(name)
125
- create_step('Given', name, *caller[0].split(':')[1].to_i)
126
- end
127
-
128
- def When(name)
129
- create_step('When', name, *caller[0].split(':')[1].to_i)
130
- end
131
-
132
- def Then(name)
133
- create_step('Then', name, *caller[0].split(':')[1].to_i)
134
- end
135
-
136
- def And(name)
137
- create_step('And', name, *caller[0].split(':')[1].to_i)
138
- end
139
-
140
- end
141
-
142
- class ScenarioOutline < Scenario
143
- def outline?
144
- true
145
- end
146
-
147
- def length
148
- @length ||= Cucumber.language['scenario_outline'].jlength + 2 + (@name.nil? ? 0 : @name.jlength)
149
- end
150
-
151
- def create_step(keyword, name, line)
152
- step = StepOutline.new(self, keyword, name, line)
153
- @steps_and_given_scenarios << step
154
- step
155
- end
156
- end
157
-
158
- class RowScenario < BaseScenario
159
- attr_reader :line
160
-
161
- def initialize(feature, template_scenario, values, line)
162
- @feature, @template_scenario, @values, @line = feature, template_scenario, values, line
163
- template_scenario.update_table_column_widths values
164
- end
165
-
166
- def row?
167
- true
168
- end
169
-
170
- def name
171
- @template_scenario.name
172
- end
173
-
174
- #We can only cache steps once the template scenarios steps have been bound in order to know what arity the steps have
175
- def steps
176
- if template_steps_bound?
177
- @unbound_steps = nil
178
- @bound_steps ||= build_steps
179
- else
180
- @unbound_steps ||= build_steps
181
- end
182
- end
183
-
184
- private
185
- def build_steps
186
- @template_scenario.steps.map do |template_step|
187
- args = []
188
- template_step.arity.times do
189
- args << @values.shift
190
- end
191
- RowStep.new(self, template_step, args)
192
- end
193
- end
194
-
195
- def template_steps_bound?
196
- @template_steps_bound ||= @template_scenario.steps.inject(0) { |arity_sum, step| arity_sum + step.arity } != 0
197
- end
198
-
199
- end
200
-
201
- class RowScenarioOutline < RowScenario
202
- def outline?
203
- true
204
- end
205
-
206
- def steps
207
- @processed_placeholders = []
208
- @steps ||= @template_scenario.steps.map do |template_step|
209
- build_row_step_outline(template_step)
210
- end
211
- end
212
-
213
- private
214
-
215
- def build_row_step_outline(template_step)
216
- step_name = template_step.name
217
- placeholder_values = []
218
-
219
- @template_scenario.table_header.each_with_index do |column_name, column_number|
220
-
221
- if step_name =~ placeholder_regexp(column_name)
222
- step_name = step_name.gsub(placeholder_regexp(column_name), @values[column_number])
223
-
224
- unless @processed_placeholders.include?(column_name)
225
- placeholder_values << @values[column_number]
226
- @processed_placeholders << column_name
227
- end
228
- end
229
-
230
- end
231
- RowStepOutline.new(self, template_step, step_name, placeholder_values, @line)
232
- end
233
-
234
- def placeholder_regexp(string)
235
- /#{Regexp.escape("<#{string}>")}/
236
- end
237
- end
238
-
239
- end
240
- end