aslakhellesoy-cucumber 0.1.16.4 → 0.1.16.5
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +75 -1
- data/Manifest.txt +58 -65
- data/examples/cs/features/step_definitons/calculator_steps.rb +1 -1
- data/examples/i18n/Rakefile +3 -3
- data/examples/i18n/ar/features/step_definitons/calculator_steps.rb +1 -6
- data/examples/i18n/da/features/step_definitons/kalkulator_steps.rb +1 -1
- data/examples/i18n/de/features/addition.feature +6 -6
- data/examples/i18n/de/features/step_definitons/calculator_steps.rb +2 -2
- data/examples/i18n/en/features/addition.feature +6 -6
- data/examples/i18n/en/features/step_definitons/calculator_steps.rb +2 -2
- data/examples/i18n/es/features/step_definitons/calculador_steps.rb +1 -1
- data/examples/i18n/et/features/liitmine.feature +7 -6
- data/examples/i18n/et/features/step_definitions/kalkulaator_steps.rb +1 -1
- data/examples/i18n/fi/features/step_definitons/laskin_steps.rb +1 -1
- data/examples/i18n/fi/features/yhteenlasku.feature +2 -2
- data/examples/i18n/fr/features/addition.feature +2 -2
- data/examples/i18n/fr/features/step_definitions/calculatrice_steps.rb +1 -1
- data/examples/i18n/id/features/addition.feature +6 -6
- data/examples/i18n/id/features/step_definitons/calculator_steps.rb +2 -2
- data/examples/i18n/it/features/step_definitons/calcolatrice_steps.rb +1 -1
- data/examples/i18n/ja/features/step_definitons/calculator_steps.rb +2 -3
- data/examples/i18n/ko/features/step_definitons/calculator_steps.rb +1 -1
- data/examples/i18n/lt/features/addition.feature +7 -6
- data/examples/i18n/lt/features/step_definitons/calculator_steps.rb +2 -2
- data/examples/i18n/no/features/step_definitons/kalkulator_steps.rb +7 -7
- data/examples/i18n/no/features/summering.feature +1 -0
- data/examples/i18n/pt/features/step_definitions/calculadora_steps.rb +1 -1
- data/examples/i18n/ro/features/step_definitons/calculator_steps.rb +1 -1
- data/examples/i18n/se/features/step_definitons/kalkulator_steps.rb +1 -1
- data/examples/i18n/zh-CN/features/step_definitons/calculator_steps.rb +2 -2
- data/examples/jbehave/README.textile +17 -0
- data/examples/jbehave/features/support/env.rb +7 -0
- data/examples/jbehave/features/trading.feature +24 -0
- data/examples/jbehave/pom.xml +48 -0
- data/examples/self_test/README.textile +4 -1
- data/examples/self_test/features/call_undefined_step_from_step_def.feature +7 -0
- data/examples/self_test/features/lots_of_undefined.feature +8 -0
- data/examples/self_test/features/outline_sample.feature +8 -5
- data/examples/self_test/features/sample.feature +5 -3
- data/examples/self_test/features/step_definitions/sample_steps.rb +15 -3
- data/features/cucumber_cli.feature +199 -97
- data/features/cucumber_cli_outlines.feature +46 -38
- data/features/report_called_undefined_steps.feature +31 -0
- data/features/step_definitions/cucumber_steps.rb +7 -3
- data/features/step_definitions/extra_steps.rb +1 -1
- data/features/support/env.rb +1 -1
- data/gem_tasks/features.rake +1 -1
- data/gem_tasks/flog.rake +1 -1
- data/lib/autotest/cucumber_mixin.rb +16 -23
- data/lib/cucumber/ast/comment.rb +26 -0
- data/lib/cucumber/ast/examples.rb +22 -0
- data/lib/cucumber/ast/feature.rb +60 -0
- data/lib/cucumber/ast/features.rb +39 -0
- data/lib/cucumber/ast/filter.rb +22 -0
- data/lib/cucumber/ast/outline_table.rb +49 -0
- data/lib/cucumber/ast/py_string.rb +52 -0
- data/lib/cucumber/ast/scenario.rb +91 -0
- data/lib/cucumber/ast/scenario_outline.rb +83 -0
- data/lib/cucumber/ast/step.rb +130 -0
- data/lib/cucumber/ast/table.rb +214 -0
- data/lib/cucumber/ast/tags.rb +33 -0
- data/lib/cucumber/ast/visitor.rb +93 -0
- data/lib/cucumber/ast.rb +27 -0
- data/lib/cucumber/broadcaster.rb +1 -6
- data/lib/cucumber/cli.rb +178 -128
- data/lib/cucumber/core_ext/exception.rb +41 -8
- data/lib/cucumber/core_ext/instance_exec.rb +54 -0
- data/lib/cucumber/core_ext/proc.rb +29 -65
- data/lib/cucumber/core_ext/string.rb +19 -0
- data/lib/cucumber/{formatters → formatter}/ansicolor.rb +11 -10
- data/lib/cucumber/formatter/console.rb +116 -0
- data/lib/cucumber/formatter/pretty.rb +158 -0
- data/lib/cucumber/formatter/profile.rb +77 -0
- data/lib/cucumber/formatter/progress.rb +68 -0
- data/lib/cucumber/formatter.rb +1 -0
- data/lib/cucumber/formatters/autotest_formatter.rb +0 -2
- data/lib/cucumber/formatters/html_formatter.rb +4 -3
- data/lib/cucumber/formatters/pretty_formatter.rb +1 -1
- data/lib/cucumber/formatters/unicode.rb +3 -3
- data/lib/cucumber/jbehave.rb +104 -0
- data/lib/cucumber/languages.yml +100 -73
- data/lib/cucumber/parser/basic.rb +0 -0
- data/lib/cucumber/parser/feature.rb +1694 -0
- data/lib/cucumber/parser/feature.tt +206 -0
- data/lib/cucumber/parser/file_parser.rb +50 -0
- data/lib/cucumber/parser/i18n.tt +26 -0
- data/lib/cucumber/parser/treetop_ext.rb +9 -0
- data/lib/cucumber/parser.rb +27 -0
- data/lib/cucumber/platform.rb +3 -17
- data/lib/cucumber/step_definition.rb +83 -0
- data/lib/cucumber/step_mother.rb +128 -72
- data/lib/cucumber/version.rb +1 -1
- data/lib/cucumber.rb +56 -9
- data/spec/cucumber/ast/feature_factory.rb +54 -0
- data/spec/cucumber/ast/feature_spec.rb +60 -0
- data/spec/cucumber/ast/py_string_spec.rb +40 -0
- data/spec/cucumber/ast/scenario_outline_spec.rb +64 -0
- data/spec/cucumber/ast/scenario_spec.rb +82 -0
- data/spec/cucumber/ast/step_spec.rb +45 -0
- data/spec/cucumber/ast/table_spec.rb +81 -0
- data/spec/cucumber/broadcaster_spec.rb +4 -17
- data/spec/cucumber/cli_spec.rb +43 -148
- data/spec/cucumber/core_ext/proc_spec.rb +27 -35
- data/spec/cucumber/core_ext/string_spec.rb +8 -0
- data/spec/cucumber/{formatters → formatter}/ansicolor_spec.rb +2 -2
- data/spec/cucumber/formatter/html/cucumber.css +37 -0
- data/spec/cucumber/formatter/html/cucumber.js +11 -0
- data/spec/cucumber/formatter/html/index.html +45 -0
- data/spec/cucumber/formatter/html/jquery-1.3.min.js +19 -0
- data/spec/cucumber/formatter/html/jquery.uitableedit.js +100 -0
- data/spec/cucumber/formatters/autotest_formatter_spec.rb +1 -0
- data/spec/cucumber/formatters/profile_formatter_spec.rb +17 -16
- data/spec/cucumber/parser/feature_parser_spec.rb +247 -0
- data/spec/cucumber/parser/table_parser_spec.rb +48 -0
- data/spec/cucumber/step_definition_spec.rb +62 -0
- data/spec/cucumber/step_mom_spec.rb +49 -0
- data/spec/cucumber/treetop_parser/empty_feature.feature +1 -1
- data/spec/cucumber/treetop_parser/spaces.feature +3 -1
- data/spec/cucumber/treetop_parser/with_comments.feature +1 -1
- data/spec/cucumber/treetop_parser/with_tags.feature +18 -0
- data/spec/cucumber/world/pending_spec.rb +13 -12
- data/spec/spec_helper.rb +1 -1
- metadata +59 -67
- data/examples/calculator_ruby_features/Rakefile +0 -6
- data/examples/calculator_ruby_features/features/addition.rb +0 -39
- data/examples/calculator_ruby_features/features/step_definitons/calculator_steps.rb +0 -43
- data/gem_tasks/treetop.rake +0 -41
- data/lib/cucumber/executor.rb +0 -205
- data/lib/cucumber/formatters/profile_formatter.rb +0 -92
- data/lib/cucumber/formatters/progress_formatter.rb +0 -61
- data/lib/cucumber/formatters.rb +0 -1
- data/lib/cucumber/model/table.rb +0 -32
- data/lib/cucumber/model.rb +0 -1
- data/lib/cucumber/step_methods.rb +0 -49
- data/lib/cucumber/tree/feature.rb +0 -105
- data/lib/cucumber/tree/features.rb +0 -21
- data/lib/cucumber/tree/given_scenario.rb +0 -13
- data/lib/cucumber/tree/scenario.rb +0 -240
- data/lib/cucumber/tree/step.rb +0 -173
- data/lib/cucumber/tree/table.rb +0 -26
- data/lib/cucumber/tree/top_down_visitor.rb +0 -23
- data/lib/cucumber/tree.rb +0 -16
- data/lib/cucumber/treetop_parser/feature.treetop.erb +0 -254
- data/lib/cucumber/treetop_parser/feature_ar.rb +0 -1951
- data/lib/cucumber/treetop_parser/feature_cy.rb +0 -1951
- data/lib/cucumber/treetop_parser/feature_da.rb +0 -1951
- data/lib/cucumber/treetop_parser/feature_de.rb +0 -1951
- data/lib/cucumber/treetop_parser/feature_en-lol.rb +0 -1951
- data/lib/cucumber/treetop_parser/feature_en-tx.rb +0 -1951
- data/lib/cucumber/treetop_parser/feature_en.rb +0 -1951
- data/lib/cucumber/treetop_parser/feature_es.rb +0 -1951
- data/lib/cucumber/treetop_parser/feature_et.rb +0 -1951
- data/lib/cucumber/treetop_parser/feature_fr.rb +0 -1951
- data/lib/cucumber/treetop_parser/feature_id.rb +0 -1951
- data/lib/cucumber/treetop_parser/feature_it.rb +0 -1951
- data/lib/cucumber/treetop_parser/feature_ja.rb +0 -1951
- data/lib/cucumber/treetop_parser/feature_ko.rb +0 -1951
- data/lib/cucumber/treetop_parser/feature_lt.rb +0 -1951
- data/lib/cucumber/treetop_parser/feature_nl.rb +0 -1951
- data/lib/cucumber/treetop_parser/feature_no.rb +0 -1951
- data/lib/cucumber/treetop_parser/feature_parser.rb +0 -36
- data/lib/cucumber/treetop_parser/feature_pl.rb +0 -1951
- data/lib/cucumber/treetop_parser/feature_pt.rb +0 -1951
- data/lib/cucumber/treetop_parser/feature_ro.rb +0 -1951
- data/lib/cucumber/treetop_parser/feature_ro2.rb +0 -1951
- data/lib/cucumber/treetop_parser/feature_ru.rb +0 -1951
- data/lib/cucumber/treetop_parser/feature_se.rb +0 -1951
- data/lib/cucumber/treetop_parser/feature_zh-CN.rb +0 -1951
- data/lib/cucumber/world/pending.rb +0 -22
- data/lib/cucumber/world.rb +0 -1
- data/setup.rb +0 -1585
- data/spec/cucumber/executor_spec.rb +0 -382
- data/spec/cucumber/formatters/html_formatter_spec.rb +0 -104
- data/spec/cucumber/formatters/pretty_formatter_spec.rb +0 -410
- data/spec/cucumber/formatters/progress_formatter_spec.rb +0 -81
- data/spec/cucumber/model/table_spec.rb +0 -32
- data/spec/cucumber/step_mother_spec.rb +0 -74
- data/spec/cucumber/tree/feature_spec.rb +0 -122
- data/spec/cucumber/tree/row_scenario_outline_spec.rb +0 -73
- data/spec/cucumber/tree/row_scenario_spec.rb +0 -55
- data/spec/cucumber/tree/row_step_outline_spec.rb +0 -38
- data/spec/cucumber/tree/scenario_outline_spec.rb +0 -50
- data/spec/cucumber/tree/scenario_spec.rb +0 -134
- data/spec/cucumber/tree/step_outline_spec.rb +0 -17
- data/spec/cucumber/tree/step_spec.rb +0 -59
- data/spec/cucumber/treetop_parser/feature_parser_spec.rb +0 -120
@@ -0,0 +1,214 @@
|
|
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
|
@@ -0,0 +1,33 @@
|
|
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
|
@@ -0,0 +1,93 @@
|
|
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
ADDED
@@ -0,0 +1,27 @@
|
|
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
|
data/lib/cucumber/broadcaster.rb
CHANGED
@@ -5,14 +5,9 @@ module Cucumber
|
|
5
5
|
@receivers = receivers
|
6
6
|
end
|
7
7
|
|
8
|
-
def register(receiver)
|
9
|
-
@receivers << receiver
|
10
|
-
end
|
11
|
-
|
12
8
|
def method_missing(method_name, *args)
|
13
9
|
@receivers.each do |receiver|
|
14
|
-
|
15
|
-
r.__send__(method_name, *args) if receiver.respond_to?(method_name)
|
10
|
+
receiver.__send__(method_name, *args)
|
16
11
|
end
|
17
12
|
end
|
18
13
|
|