aslakhellesoy-cucumber 0.1.99.3 → 0.1.99.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (257) hide show
  1. data/Manifest.txt +6 -0
  2. metadata +1 -1
  3. data/cucumber.yml +0 -1
  4. data/examples/cs/README.textile +0 -1
  5. data/examples/cs/Rakefile +0 -12
  6. data/examples/cs/compile.bat +0 -1
  7. data/examples/cs/features/addition.feature +0 -16
  8. data/examples/cs/features/step_definitons/calculator_steps.rb +0 -19
  9. data/examples/cs/src/demo/Calculator.cs +0 -20
  10. data/examples/dos_line_endings/Rakefile +0 -6
  11. data/examples/dos_line_endings/features/dos_line_endings.feature +0 -9
  12. data/examples/i18n/README.textile +0 -18
  13. data/examples/i18n/Rakefile +0 -32
  14. data/examples/i18n/ar/Rakefile +0 -6
  15. data/examples/i18n/ar/features/addition.feature +0 -17
  16. data/examples/i18n/ar/features/step_definitons/calculator_steps.rb +0 -28
  17. data/examples/i18n/ar/lib/calculator.rb +0 -10
  18. data/examples/i18n/da/Rakefile +0 -6
  19. data/examples/i18n/da/features/step_definitons/kalkulator_steps.rb +0 -24
  20. data/examples/i18n/da/features/summering.feature +0 -17
  21. data/examples/i18n/da/lib/kalkulator.rb +0 -11
  22. data/examples/i18n/de/Rakefile +0 -6
  23. data/examples/i18n/de/features/addition.feature +0 -16
  24. data/examples/i18n/de/features/division.feature +0 -9
  25. data/examples/i18n/de/features/step_definitons/calculator_steps.rb +0 -24
  26. data/examples/i18n/de/lib/calculator.rb +0 -14
  27. data/examples/i18n/en/Rakefile +0 -6
  28. data/examples/i18n/en/features/addition.feature +0 -16
  29. data/examples/i18n/en/features/division.feature +0 -9
  30. data/examples/i18n/en/features/step_definitons/calculator_steps.rb +0 -24
  31. data/examples/i18n/en/lib/calculator.rb +0 -14
  32. data/examples/i18n/es/Rakefile +0 -6
  33. data/examples/i18n/es/features/adicion.feature +0 -17
  34. data/examples/i18n/es/features/step_definitons/calculador_steps.rb +0 -24
  35. data/examples/i18n/es/lib/calculador.rb +0 -11
  36. data/examples/i18n/et/Rakefile +0 -6
  37. data/examples/i18n/et/features/liitmine.feature +0 -17
  38. data/examples/i18n/et/features/step_definitions/kalkulaator_steps.rb +0 -24
  39. data/examples/i18n/et/lib/kalkulaator.rb +0 -10
  40. data/examples/i18n/fi/Rakefile +0 -6
  41. data/examples/i18n/fi/features/jakolasku.feature +0 -9
  42. data/examples/i18n/fi/features/step_definitons/laskin_steps.rb +0 -24
  43. data/examples/i18n/fi/features/yhteenlasku.feature +0 -16
  44. data/examples/i18n/fi/lib/laskin.rb +0 -14
  45. data/examples/i18n/fr/Rakefile +0 -6
  46. data/examples/i18n/fr/features/addition.feature +0 -15
  47. data/examples/i18n/fr/features/step_definitions/calculatrice_steps.rb +0 -27
  48. data/examples/i18n/fr/lib/calculatrice.rb +0 -10
  49. data/examples/i18n/id/Rakefile +0 -6
  50. data/examples/i18n/id/features/addition.feature +0 -16
  51. data/examples/i18n/id/features/division.feature +0 -9
  52. data/examples/i18n/id/features/step_definitons/calculator_steps.rb +0 -24
  53. data/examples/i18n/id/lib/calculator.rb +0 -14
  54. data/examples/i18n/it/Rakefile +0 -6
  55. data/examples/i18n/it/features/somma.feature +0 -10
  56. data/examples/i18n/it/features/step_definitons/calcolatrice_steps.rb +0 -24
  57. data/examples/i18n/it/lib/calcolatrice.rb +0 -11
  58. data/examples/i18n/ja/README.txt +0 -5
  59. data/examples/i18n/ja/Rakefile +0 -6
  60. data/examples/i18n/ja/features/addition.feature +0 -16
  61. data/examples/i18n/ja/features/division.feature +0 -9
  62. data/examples/i18n/ja/features/step_definitons/calculator_steps.rb +0 -24
  63. data/examples/i18n/ja/lib/calculator.rb +0 -14
  64. data/examples/i18n/ko/Rakefile +0 -6
  65. data/examples/i18n/ko/features/addition.feature +0 -16
  66. data/examples/i18n/ko/features/division.feature +0 -10
  67. data/examples/i18n/ko/features/step_definitons/calculator_steps.rb +0 -24
  68. data/examples/i18n/ko/lib/calculator.rb +0 -14
  69. data/examples/i18n/lt/Rakefile +0 -6
  70. data/examples/i18n/lt/features/addition.feature +0 -17
  71. data/examples/i18n/lt/features/division.feature +0 -9
  72. data/examples/i18n/lt/features/step_definitons/calculator_steps.rb +0 -24
  73. data/examples/i18n/lt/lib/calculator.rb +0 -14
  74. data/examples/i18n/no/Rakefile +0 -6
  75. data/examples/i18n/no/features/step_definitons/kalkulator_steps.rb +0 -24
  76. data/examples/i18n/no/features/summering.feature +0 -18
  77. data/examples/i18n/no/lib/kalkulator.rb +0 -11
  78. data/examples/i18n/pt/Rakefile +0 -6
  79. data/examples/i18n/pt/features/adicao.feature +0 -10
  80. data/examples/i18n/pt/features/step_definitions/calculadora_steps.rb +0 -24
  81. data/examples/i18n/pt/lib/calculadora.rb +0 -10
  82. data/examples/i18n/ro/Rakefile +0 -6
  83. data/examples/i18n/ro/features/step_definitons/calculator_steps.rb +0 -24
  84. data/examples/i18n/ro/features/suma.feature +0 -10
  85. data/examples/i18n/ro/lib/calculator.rb +0 -11
  86. data/examples/i18n/se/Rakefile +0 -6
  87. data/examples/i18n/se/features/step_definitons/kalkulator_steps.rb +0 -24
  88. data/examples/i18n/se/features/summering.feature +0 -17
  89. data/examples/i18n/se/lib/kalkulator.rb +0 -11
  90. data/examples/i18n/zh-CN/Rakefile +0 -6
  91. data/examples/i18n/zh-CN/features/addition.feature +0 -17
  92. data/examples/i18n/zh-CN/features/step_definitons/calculator_steps.rb +0 -26
  93. data/examples/i18n/zh-CN/lib/calculator.rb +0 -10
  94. data/examples/java/README.textile +0 -22
  95. data/examples/java/Rakefile +0 -12
  96. data/examples/java/features/hello.feature +0 -11
  97. data/examples/java/features/step_definitons/hello_steps.rb +0 -25
  98. data/examples/java/features/step_definitons/tree_steps.rb +0 -14
  99. data/examples/java/features/tree.feature +0 -9
  100. data/examples/jbehave/README.textile +0 -17
  101. data/examples/jbehave/features/support/env.rb +0 -7
  102. data/examples/jbehave/features/trading.feature +0 -24
  103. data/examples/jbehave/pom.xml +0 -48
  104. data/examples/selenium/Rakefile +0 -6
  105. data/examples/selenium/features/search.feature +0 -9
  106. data/examples/selenium/features/step_definitons/stories_steps.rb +0 -40
  107. data/examples/self_test/README.textile +0 -6
  108. data/examples/self_test/features/call_undefined_step_from_step_def.feature +0 -7
  109. data/examples/self_test/features/lots_of_undefined.feature +0 -8
  110. data/examples/self_test/features/outline_sample.feature +0 -12
  111. data/examples/self_test/features/sample.feature +0 -16
  112. data/examples/self_test/features/step_definitions/sample_steps.rb +0 -25
  113. data/examples/test_unit/Rakefile +0 -6
  114. data/examples/test_unit/features/step_definitions/test_unit_steps.rb +0 -26
  115. data/examples/test_unit/features/test_unit.feature +0 -9
  116. data/examples/tickets/Rakefile +0 -11
  117. data/examples/tickets/cucumber.yml +0 -2
  118. data/examples/tickets/features/lib/eatting_machine.rb +0 -18
  119. data/examples/tickets/features/lib/pantry.rb +0 -20
  120. data/examples/tickets/features/scenario_outline.feature +0 -90
  121. data/examples/tickets/features/step_definitons/scenario_outline_steps.rb +0 -42
  122. data/examples/tickets/features/step_definitons/tickets_steps.rb +0 -61
  123. data/examples/tickets/features/tickets.feature +0 -28
  124. data/examples/watir/README.textile +0 -16
  125. data/examples/watir/Rakefile +0 -6
  126. data/examples/watir/features/search.feature +0 -9
  127. data/examples/watir/features/step_definitons/search_steps.rb +0 -24
  128. data/examples/watir/features/support/env.rb +0 -32
  129. data/features/cucumber_cli.feature +0 -327
  130. data/features/cucumber_cli_outlines.feature +0 -81
  131. data/features/report_called_undefined_steps.feature +0 -32
  132. data/features/step_definitions/cucumber_steps.rb +0 -31
  133. data/features/step_definitions/extra_steps.rb +0 -2
  134. data/features/support/env.rb +0 -7
  135. data/gem_tasks/deployment.rake +0 -11
  136. data/gem_tasks/environment.rake +0 -7
  137. data/gem_tasks/features.rake +0 -6
  138. data/gem_tasks/fix_cr_lf.rake +0 -10
  139. data/gem_tasks/flog.rake +0 -4
  140. data/gem_tasks/gemspec.rake +0 -10
  141. data/gem_tasks/rspec.rake +0 -35
  142. data/gem_tasks/yard.rake +0 -8
  143. data/lib/autotest/cucumber.rb +0 -6
  144. data/lib/autotest/cucumber_mixin.rb +0 -124
  145. data/lib/autotest/cucumber_rails.rb +0 -6
  146. data/lib/autotest/cucumber_rails_rspec.rb +0 -6
  147. data/lib/autotest/cucumber_rspec.rb +0 -6
  148. data/lib/autotest/discover.rb +0 -9
  149. data/lib/cucumber/ast/comment.rb +0 -26
  150. data/lib/cucumber/ast/examples.rb +0 -22
  151. data/lib/cucumber/ast/feature.rb +0 -60
  152. data/lib/cucumber/ast/features.rb +0 -39
  153. data/lib/cucumber/ast/filter.rb +0 -22
  154. data/lib/cucumber/ast/outline_table.rb +0 -49
  155. data/lib/cucumber/ast/py_string.rb +0 -52
  156. data/lib/cucumber/ast/scenario.rb +0 -95
  157. data/lib/cucumber/ast/scenario_outline.rb +0 -83
  158. data/lib/cucumber/ast/step.rb +0 -139
  159. data/lib/cucumber/ast/table.rb +0 -214
  160. data/lib/cucumber/ast/tags.rb +0 -33
  161. data/lib/cucumber/ast/visitor.rb +0 -93
  162. data/lib/cucumber/ast.rb +0 -27
  163. data/lib/cucumber/broadcaster.rb +0 -15
  164. data/lib/cucumber/cli.rb +0 -410
  165. data/lib/cucumber/core_ext/exception.rb +0 -53
  166. data/lib/cucumber/core_ext/instance_exec.rb +0 -54
  167. data/lib/cucumber/core_ext/proc.rb +0 -33
  168. data/lib/cucumber/core_ext/string.rb +0 -48
  169. data/lib/cucumber/formatter/ansicolor.rb +0 -106
  170. data/lib/cucumber/formatter/console.rb +0 -116
  171. data/lib/cucumber/formatter/pretty.rb +0 -158
  172. data/lib/cucumber/formatter/profile.rb +0 -77
  173. data/lib/cucumber/formatter/progress.rb +0 -68
  174. data/lib/cucumber/formatter/rerun.rb +0 -35
  175. data/lib/cucumber/formatter.rb +0 -1
  176. data/lib/cucumber/formatters/autotest_formatter.rb +0 -21
  177. data/lib/cucumber/formatters/cucumber.css +0 -132
  178. data/lib/cucumber/formatters/cucumber.js +0 -11
  179. data/lib/cucumber/formatters/html_formatter.rb +0 -152
  180. data/lib/cucumber/formatters/jquery.js +0 -32
  181. data/lib/cucumber/formatters/pretty_formatter.rb +0 -285
  182. data/lib/cucumber/formatters/unicode.rb +0 -35
  183. data/lib/cucumber/jbehave.rb +0 -104
  184. data/lib/cucumber/languages.yml +0 -314
  185. data/lib/cucumber/parser/basic.rb +0 -0
  186. data/lib/cucumber/parser/feature.rb +0 -1315
  187. data/lib/cucumber/parser/feature.tt +0 -160
  188. data/lib/cucumber/parser/i18n.tt +0 -27
  189. data/lib/cucumber/parser/table.rb +0 -396
  190. data/lib/cucumber/parser/table.tt +0 -53
  191. data/lib/cucumber/parser/treetop_ext.rb +0 -67
  192. data/lib/cucumber/parser.rb +0 -24
  193. data/lib/cucumber/platform.rb +0 -18
  194. data/lib/cucumber/rails/rspec.rb +0 -5
  195. data/lib/cucumber/rails/world.rb +0 -73
  196. data/lib/cucumber/rake/task.rb +0 -106
  197. data/lib/cucumber/step_definition.rb +0 -87
  198. data/lib/cucumber/step_mother.rb +0 -164
  199. data/lib/cucumber/treetop_parser/feature_fi.rb +0 -1951
  200. data/lib/cucumber/version.rb +0 -10
  201. data/lib/cucumber.rb +0 -72
  202. data/pretty.txt +0 -486
  203. data/rails_generators/cucumber/USAGE +0 -11
  204. data/rails_generators/cucumber/cucumber_generator.rb +0 -31
  205. data/rails_generators/cucumber/templates/cucumber +0 -8
  206. data/rails_generators/cucumber/templates/cucumber.rake +0 -7
  207. data/rails_generators/cucumber/templates/env.rb +0 -16
  208. data/rails_generators/cucumber/templates/paths.rb +0 -12
  209. data/rails_generators/cucumber/templates/webrat_steps.rb +0 -99
  210. data/rails_generators/feature/USAGE +0 -12
  211. data/rails_generators/feature/feature_generator.rb +0 -36
  212. data/rails_generators/feature/templates/feature.erb +0 -31
  213. data/rails_generators/feature/templates/steps.erb +0 -24
  214. data/spec/cucumber/ast/feature_factory.rb +0 -54
  215. data/spec/cucumber/ast/feature_spec.rb +0 -60
  216. data/spec/cucumber/ast/py_string_spec.rb +0 -40
  217. data/spec/cucumber/ast/scenario_outline_spec.rb +0 -64
  218. data/spec/cucumber/ast/scenario_spec.rb +0 -82
  219. data/spec/cucumber/ast/step_spec.rb +0 -45
  220. data/spec/cucumber/ast/table_spec.rb +0 -81
  221. data/spec/cucumber/broadcaster_spec.rb +0 -14
  222. data/spec/cucumber/cli_spec.rb +0 -416
  223. data/spec/cucumber/core_ext/proc_spec.rb +0 -37
  224. data/spec/cucumber/core_ext/string_spec.rb +0 -42
  225. data/spec/cucumber/formatter/ansicolor_spec.rb +0 -35
  226. data/spec/cucumber/formatter/html/cucumber.css +0 -37
  227. data/spec/cucumber/formatter/html/cucumber.js +0 -11
  228. data/spec/cucumber/formatter/html/index.html +0 -45
  229. data/spec/cucumber/formatter/html/jquery-1.3.min.js +0 -19
  230. data/spec/cucumber/formatter/html/jquery.uitableedit.js +0 -100
  231. data/spec/cucumber/formatters/autotest_formatter_spec.rb +0 -27
  232. data/spec/cucumber/formatters/features.html +0 -269
  233. data/spec/cucumber/formatters/profile_formatter_spec.rb +0 -198
  234. data/spec/cucumber/parser/feature_parser_spec.rb +0 -247
  235. data/spec/cucumber/parser/table_parser_spec.rb +0 -48
  236. data/spec/cucumber/rails/stubs/mini_rails.rb +0 -18
  237. data/spec/cucumber/rails/stubs/test_help.rb +0 -1
  238. data/spec/cucumber/rails/world_spec.rb +0 -11
  239. data/spec/cucumber/sell_cucumbers.feature +0 -19
  240. data/spec/cucumber/step_definition_spec.rb +0 -62
  241. data/spec/cucumber/step_mom_spec.rb +0 -49
  242. data/spec/cucumber/treetop_parser/empty_feature.feature +0 -4
  243. data/spec/cucumber/treetop_parser/empty_scenario.feature +0 -9
  244. data/spec/cucumber/treetop_parser/empty_scenario_outline.feature +0 -3
  245. data/spec/cucumber/treetop_parser/fit_scenario.feature +0 -8
  246. data/spec/cucumber/treetop_parser/given_scenario.feature +0 -9
  247. data/spec/cucumber/treetop_parser/invalid_scenario_outlines.feature +0 -7
  248. data/spec/cucumber/treetop_parser/multiline_steps.feature +0 -17
  249. data/spec/cucumber/treetop_parser/multiple_tables.feature +0 -27
  250. data/spec/cucumber/treetop_parser/scenario_outline.feature +0 -16
  251. data/spec/cucumber/treetop_parser/spaces.feature +0 -12
  252. data/spec/cucumber/treetop_parser/test_dos.feature +0 -25
  253. data/spec/cucumber/treetop_parser/with_comments.feature +0 -10
  254. data/spec/cucumber/treetop_parser/with_tags.feature +0 -18
  255. data/spec/cucumber/world/pending_spec.rb +0 -47
  256. data/spec/spec.opts +0 -2
  257. data/spec/spec_helper.rb +0 -21
@@ -1,83 +0,0 @@
1
- module Cucumber
2
- module Ast
3
- class ScenarioOutline < Scenario
4
- # The +example_sections+ argument must be an Array where each element is another array representing
5
- # an Examples section. This array has 3 elements:
6
- #
7
- # * Examples keyword
8
- # * Examples section name
9
- # * Raw matrix
10
- def initialize(comment, tags, line, keyword, name, steps, example_sections)
11
- super(comment, tags, line, keyword, name, steps)
12
- steps.each {|step| step.status = :outline}
13
-
14
- @examples_array = example_sections.map do |example_section|
15
- examples_line = example_section[0]
16
- examples_keyword = example_section[1]
17
- examples_name = example_section[2]
18
- examples_matrix = example_section[3]
19
-
20
- examples_table = OutlineTable.new(examples_matrix, self)
21
- Examples.new(examples_line, examples_keyword, examples_name, examples_table)
22
- end
23
- end
24
-
25
- def at_lines?(lines)
26
- super || @examples_array.detect { |examples| examples.at_lines?(lines) }
27
- end
28
-
29
- def accept(visitor)
30
- visitor.visit_comment(@comment)
31
- visitor.visit_tags(@tags)
32
- visitor.visit_scenario_name(@keyword, @name, file_line(@line), source_indent(text_length))
33
- @steps.each do |step|
34
- visitor.visit_step(step)
35
- end
36
- @examples_array.each do |examples|
37
- visitor.visit_examples(examples)
38
- end
39
- end
40
-
41
- def execute_row(cells, visitor, &proc)
42
- exception = nil
43
- visitor.world(self) do |world|
44
- previous_status = :passed
45
- argument_hash = cells.to_hash
46
- cell_index = 0
47
- @steps.each do |step|
48
- executed_step, previous_status, matched_args =
49
- step.execute_with_arguments(argument_hash, world, previous_status, visitor, cells[0].line)
50
- # There might be steps that don't have any arguments
51
- # If there are no matched args, we'll still iterate once
52
- matched_args = [nil] if matched_args.empty?
53
-
54
- matched_args.each do
55
- cell = cells[cell_index]
56
- if cell
57
- proc.call(cell, previous_status)
58
- cell_index += 1
59
- end
60
- end
61
- exception ||= executed_step.exception
62
- end
63
- end
64
- @feature.scenario_executed(self) if @feature
65
- exception
66
- end
67
-
68
- def pending? ; false ; end
69
-
70
- def to_sexp
71
- sexp = [:scenario_outline, @keyword, @name]
72
- comment = @comment.to_sexp
73
- sexp += [comment] if comment
74
- tags = @tags.to_sexp
75
- sexp += tags if tags.any?
76
- steps = @steps.map{|step| step.to_sexp}
77
- sexp += steps if steps.any?
78
- sexp += @examples_array.map{|e| e.to_sexp}
79
- sexp
80
- end
81
- end
82
- end
83
- end
@@ -1,139 +0,0 @@
1
- require 'cucumber/step_definition'
2
- require 'cucumber/core_ext/string'
3
-
4
- module Cucumber
5
- module Ast
6
- class Step
7
- attr_reader :keyword, :name
8
- attr_writer :world, :previous, :options
9
- attr_accessor :status, :scenario, :exception
10
-
11
- def initialize(line, keyword, name, *multiline_args)
12
- @line, @keyword, @name, @multiline_args = line, keyword, name, multiline_args
13
- end
14
-
15
- def execute_with_arguments(argument_hash, world, previous, visitor, row_line)
16
- delimited_arguments = delimit_argument_names(argument_hash)
17
- name = replace_name_arguments(delimited_arguments)
18
- multiline_args = replace_multiline_args_arguments(delimited_arguments)
19
-
20
- execute_twin(world, previous, visitor, row_line, name, *multiline_args)
21
- end
22
-
23
- def accept(visitor)
24
- execute(visitor)
25
- visitor.visit_step_name(@keyword, @name, @status, @step_definition, source_indent)
26
- @multiline_args.each do |multiline_arg|
27
- visitor.visit_multiline_arg(multiline_arg, @status)
28
- end
29
- @exception
30
- end
31
-
32
- def to_sexp
33
- [:step, @line, @keyword, @name, *@multiline_args.map{|arg| arg.to_sexp}]
34
- end
35
-
36
- def at_lines?(lines)
37
- lines.empty? || lines.index(@line) || @multiline_args.detect{|a| a.at_lines?(lines)}
38
- end
39
-
40
- def source_indent
41
- @scenario.source_indent(text_length)
42
- end
43
-
44
- def text_length
45
- @keyword.jlength + @name.jlength + 2 # Add 2 because steps get indented 2 more than scenarios
46
- end
47
-
48
- def backtrace_line
49
- @backtrace_line ||= @scenario.backtrace_line("#{@keyword} #{@name}", @line) unless @scenario.nil?
50
- end
51
-
52
- def file_line
53
- @file_line ||= @scenario.file_line(@line) unless @scenario.nil?
54
- end
55
-
56
- def actual_keyword
57
- if [Cucumber.keyword_hash['and'], Cucumber.keyword_hash['but']].index(@keyword) && previous_step
58
- previous_step.actual_keyword
59
- else
60
- @keyword
61
- end
62
- end
63
-
64
- protected
65
-
66
- def previous_step
67
- @scenario.previous_step(self)
68
- end
69
-
70
- private
71
-
72
- def execute(visitor)
73
- matched_args = []
74
- if @status.nil?
75
- begin
76
- @step_definition = visitor.step_definition(@name)
77
- matched_args = @step_definition.matched_args(@name)
78
- if @previous == :passed && !visitor.options[:dry_run]
79
- @world.__cucumber_current_step = self
80
- @step_definition.execute(@name, @world, *(matched_args + @multiline_args))
81
- @status = :passed
82
- else
83
- @status = :skipped
84
- end
85
- rescue StepMother::Undefined => exception
86
- if visitor.options[:strict]
87
- exception.set_backtrace([])
88
- failed(exception)
89
- else
90
- @status = :undefined
91
- end
92
- rescue StepMother::Pending => exception
93
- visitor.options[:strict] ? failed(exception) : @status = :pending
94
- rescue Exception => exception
95
- failed(exception)
96
- end
97
- @scenario.step_executed(self) if @scenario
98
- end
99
- [self, @status, matched_args]
100
- end
101
-
102
- def execute_twin(world, previous, visitor, line, name, *multiline_args)
103
- # We'll create a new step and execute that
104
- step = Step.new(line, @keyword, name, *multiline_args)
105
- step.scenario = @scenario
106
- step.world = world
107
- step.previous = previous
108
- step.__send__(:execute, visitor)
109
- end
110
-
111
- ARGUMENT_START = '<'
112
- ARGUMENT_END = '>'
113
-
114
- def delimit_argument_names(argument_hash)
115
- argument_hash.inject({}) { |h,(k,v)| h["#{ARGUMENT_START}#{k}#{ARGUMENT_END}"] = v; h }
116
- end
117
-
118
- def replace_name_arguments(argument_hash)
119
- name_with_arguments_replaced = @name
120
- argument_hash.each do |name, value|
121
- name_with_arguments_replaced = name_with_arguments_replaced.gsub(name, value)
122
- end
123
- name_with_arguments_replaced
124
- end
125
-
126
- def replace_multiline_args_arguments(arguments)
127
- @multiline_args.map do |arg|
128
- arg.arguments_replaced(arguments)
129
- end
130
- end
131
-
132
- def failed(exception)
133
- @status = :failed
134
- @exception = exception
135
- @exception.backtrace << backtrace_line unless backtrace_line.nil?
136
- end
137
- end
138
- end
139
- end
@@ -1,214 +0,0 @@
1
- module Cucumber
2
- module Ast
3
- # Holds the data of a table parsed from a feature file:
4
- #
5
- # | a | b |
6
- # | c | d |
7
- #
8
- # This gets parsed into a Table holding the values <tt>[['a', 'b'], ['c', 'd']]</tt>
9
- #
10
- class Table
11
- attr_accessor :file
12
-
13
- def initialize(raw)
14
- # Verify that it's square
15
- raw.transpose
16
- @raw = raw
17
- @cells_class = Cells
18
- @cell_class = Cell
19
- end
20
-
21
- def at_lines?(lines)
22
- rows.detect { |row| row.at_lines?(lines) }
23
- end
24
-
25
- def accept(visitor, status)
26
- rows.each do |row|
27
- visitor.visit_table_row(row, status)
28
- end
29
- nil
30
- end
31
-
32
- # Converts this table into an Array of Hash where the keys of each
33
- # Hash are the headers in the table. For example, a Table built from
34
- # the following plain text:
35
- #
36
- # | a | b | sum |
37
- # | 2 | 3 | 5 |
38
- # | 7 | 9 | 16 |
39
- #
40
- # Gets converted into the following:
41
- #
42
- # [{'a' => '2', 'b' => '3', 'sum' => '5'}, {'a' => '7', 'b' => '9', 'sum' => '16'}]
43
- #
44
- def hashes
45
- @hashes ||= rows[1..-1].map do |row|
46
- row.to_hash
47
- end
48
- end
49
-
50
- # Gets the raw data of this table. For example, a Table built from
51
- # the following plain text:
52
- #
53
- # | a | b |
54
- # | c | d |
55
- #
56
- # Get converted into the following:
57
- #
58
- # [['a', 'b], ['c', 'd']]
59
- #
60
- def raw
61
- @raw
62
- end
63
-
64
- # Same as #raw, but skips the first (header) row
65
- def rows
66
- @raw[1..-1]
67
- end
68
-
69
- # For testing only
70
- def to_sexp #:nodoc:
71
- [:table, *rows.map{|row| row.to_sexp}]
72
- end
73
-
74
- def to_hash(cells) #:nodoc:
75
- hash = {}
76
- @raw[0].each_with_index do |key, n|
77
- hash[key] = cells.value(n)
78
- end
79
- hash
80
- end
81
-
82
- def index(cells) #:nodoc:
83
- rows.index(cells)
84
- end
85
-
86
- def arguments_replaced(arguments) #:nodoc:
87
- raw_with_replaced_args = raw.map do |row|
88
- row.map do |cell|
89
- cell_with_replaced_args = cell
90
- arguments.each do |name, value|
91
- cell_with_replaced_args = cell_with_replaced_args.gsub(name, value)
92
- end
93
- cell_with_replaced_args
94
- end
95
- end
96
-
97
- Table.new(raw_with_replaced_args)
98
- end
99
-
100
- def at_lines?(lines)
101
- rows.detect{|row| row.at_lines?(lines)}
102
- end
103
-
104
- private
105
-
106
- def col_width(col)
107
- columns[col].__send__(:width)
108
- end
109
-
110
- def rows
111
- @rows ||= cell_matrix.map do |cell_row|
112
- @cells_class.new(self, cell_row)
113
- end
114
- end
115
-
116
- def columns
117
- @columns ||= cell_matrix.transpose.map do |cell_row|
118
- @cells_class.new(self, cell_row)
119
- end
120
- end
121
-
122
- def cell_matrix
123
- row = -1
124
- @cell_matrix ||= @raw.map do |raw_row|
125
- line = raw_row.line rescue -1
126
- row += 1
127
- col = -1
128
- raw_row.map do |raw_cell|
129
- col += 1
130
- @cell_class.new(raw_cell, self, row, col, line)
131
- end
132
- end
133
- end
134
-
135
- # Represents a row of cells or columns of cells
136
- class Cells
137
- include Enumerable
138
-
139
- def initialize(table, cells)
140
- @table, @cells = table, cells
141
- end
142
-
143
- def accept(visitor, status)
144
- each do |cell|
145
- visitor.visit_table_cell(cell, status)
146
- end
147
- nil
148
- end
149
-
150
- # For testing only
151
- def to_sexp #:nodoc:
152
- [:row, *@cells.map{|cell| cell.to_sexp}]
153
- end
154
-
155
- def to_hash #:nodoc:
156
- @to_hash ||= @table.to_hash(self)
157
- end
158
-
159
- def value(n) #:nodoc:
160
- self[n].value
161
- end
162
-
163
- def [](n)
164
- @cells[n]
165
- end
166
-
167
- def line
168
- @cells[0].line
169
- end
170
-
171
- def at_lines?(lines)
172
- lines.empty? || lines.index(line)
173
- end
174
-
175
- private
176
-
177
- def index
178
- @table.index(self)
179
- end
180
-
181
- def width
182
- map{|cell| cell.value ? cell.value.jlength : 0}.max
183
- end
184
-
185
- def each(&proc)
186
- @cells.each(&proc)
187
- end
188
- end
189
-
190
- class Cell
191
- attr_reader :value, :line
192
-
193
- def initialize(value, table, row, col, line)
194
- @value, @table, @row, @col, @line = value, table, row, col, line
195
- end
196
-
197
- def accept(visitor, status)
198
- visitor.visit_table_cell_value(@value, col_width, status)
199
- end
200
-
201
- # For testing only
202
- def to_sexp #:nodoc:
203
- [:cell, @value]
204
- end
205
-
206
- private
207
-
208
- def col_width
209
- @col_width ||= @table.__send__(:col_width, @col)
210
- end
211
- end
212
- end
213
- end
214
- end
@@ -1,33 +0,0 @@
1
- module Cucumber
2
- module Ast
3
- # Holds the names of tags parsed from a feature file:
4
- #
5
- # @invoice @release_2
6
- #
7
- # This gets stored internally as <tt>["invoice", "release_2"]</tt>
8
- #
9
- class Tags
10
- def initialize(line, tag_names)
11
- @line, @tag_names = line, tag_names
12
- end
13
-
14
- def among?(tag_names)
15
- (@tag_names & tag_names).any?
16
- end
17
-
18
- def at_lines?(lines)
19
- lines.empty? || lines.index(@line)
20
- end
21
-
22
- def accept(visitor)
23
- @tag_names.each do |tag_name|
24
- visitor.visit_tag_name(tag_name)
25
- end
26
- end
27
-
28
- def to_sexp
29
- @tag_names.map{|tag_name| [:tag, tag_name]}
30
- end
31
- end
32
- end
33
- end
@@ -1,93 +0,0 @@
1
- module Cucumber
2
- module Ast
3
- # A dumb visitor that implements the whole Visitor API and just walks the tree.
4
- class Visitor
5
- attr_accessor :options
6
-
7
- def initialize(step_mother)
8
- @step_mother = step_mother
9
- end
10
-
11
- def world(scenario, &proc)
12
- @step_mother.world(scenario, &proc)
13
- end
14
-
15
- def step_definition(step_name)
16
- @step_mother.step_definition(step_name)
17
- end
18
-
19
- def current_feature_lines=(lines)
20
- @current_feature_lines = lines
21
- end
22
-
23
- def current_feature_lines
24
- @current_feature_lines || []
25
- end
26
-
27
- def visit_features(features)
28
- features.accept(self)
29
- end
30
-
31
- def visit_feature(feature)
32
- feature.accept(self)
33
- end
34
-
35
- def visit_comment(comment)
36
- comment.accept(self)
37
- end
38
-
39
- def visit_comment_line(comment_line)
40
- end
41
-
42
- def visit_tags(tags)
43
- tags.accept(self)
44
- end
45
-
46
- def visit_tag_name(tag_name)
47
- end
48
-
49
- def visit_feature_name(name)
50
- end
51
-
52
- # +feature_element+ is either Scenario or ScenarioOutline
53
- def visit_feature_element(feature_element)
54
- feature_element.accept(self)
55
- end
56
-
57
- def visit_examples(examples)
58
- examples.accept(self)
59
- end
60
-
61
- def visit_examples_name(keyword, name)
62
- end
63
-
64
- def visit_scenario_name(keyword, name, file_line, source_indent)
65
- end
66
-
67
- def visit_step(step)
68
- step.accept(self)
69
- end
70
-
71
- def visit_step_name(keyword, step_name, status, step_definition, source_indent)
72
- end
73
-
74
- def visit_multiline_arg(multiline_arg, status)
75
- multiline_arg.accept(self, status)
76
- end
77
-
78
- def visit_py_string(string, status)
79
- end
80
-
81
- def visit_table_row(table_row, status)
82
- table_row.accept(self, status)
83
- end
84
-
85
- def visit_table_cell(table_cell, status)
86
- table_cell.accept(self, status)
87
- end
88
-
89
- def visit_table_cell_value(value, width, status)
90
- end
91
- end
92
- end
93
- end
data/lib/cucumber/ast.rb DELETED
@@ -1,27 +0,0 @@
1
- require 'cucumber/ast/comment'
2
- require 'cucumber/ast/tags'
3
- require 'cucumber/ast/features'
4
- require 'cucumber/ast/feature'
5
- require 'cucumber/ast/scenario'
6
- require 'cucumber/ast/scenario_outline'
7
- require 'cucumber/ast/step'
8
- require 'cucumber/ast/table'
9
- require 'cucumber/ast/py_string'
10
- require 'cucumber/ast/outline_table'
11
- require 'cucumber/ast/examples'
12
- require 'cucumber/ast/visitor'
13
- require 'cucumber/ast/filter'
14
-
15
- module Cucumber
16
- # Classes in this module represent the Abstract Syntax Tree (AST)
17
- # that gets built when feature files are parsed.
18
- #
19
- # AST classes don't expose any internal data directly. This is
20
- # in order to encourage a less coupled design in the classes
21
- # that operate on the AST. The only public method is #accept.
22
- #
23
- # The AST can be traversed with a visitor. See Cucumber::Format::Pretty
24
- # for an example.
25
- module Ast
26
- end
27
- end
@@ -1,15 +0,0 @@
1
- module Cucumber
2
- class Broadcaster
3
-
4
- def initialize(receivers = [])
5
- @receivers = receivers
6
- end
7
-
8
- def method_missing(method_name, *args)
9
- @receivers.each do |receiver|
10
- receiver.__send__(method_name, *args)
11
- end
12
- end
13
-
14
- end
15
- end