gherkin 2.0.2-universal-dotnet → 2.1.0-universal-dotnet
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.
- data/History.txt +12 -0
- data/LICENSE +1 -1
- data/README.rdoc +2 -2
- data/Rakefile +2 -2
- data/VERSION.yml +2 -2
- data/features/json_formatter.feature +3 -41
- data/features/step_definitions/gherkin_steps.rb +5 -6
- data/features/step_definitions/json_formatter_steps.rb +3 -2
- data/features/step_definitions/json_lexer_steps.rb +5 -5
- data/features/step_definitions/pretty_formatter_steps.rb +9 -13
- data/features/support/env.rb +1 -1
- data/lib/gherkin/formatter/argument.rb +1 -0
- data/lib/gherkin/formatter/filter_formatter.rb +149 -0
- data/lib/gherkin/formatter/json_formatter.rb +35 -45
- data/lib/gherkin/formatter/line_filter.rb +26 -0
- data/lib/gherkin/formatter/model.rb +85 -0
- data/lib/gherkin/formatter/pretty_formatter.rb +36 -39
- data/lib/gherkin/formatter/regexp_filter.rb +17 -0
- data/lib/gherkin/formatter/tag_count_formatter.rb +44 -0
- data/lib/gherkin/i18n.rb +5 -5
- data/lib/gherkin/i18n.yml +13 -0
- data/lib/gherkin/i18n_lexer.rb +2 -2
- data/lib/gherkin/{json_lexer.rb → json_parser.rb} +17 -5
- data/lib/gherkin/{parser → listener}/event.rb +1 -1
- data/lib/gherkin/{parser → listener}/formatter_listener.rb +30 -23
- data/lib/gherkin/native/java.rb +9 -1
- data/lib/gherkin/parser/parser.rb +27 -14
- data/lib/gherkin/rubify.rb +5 -1
- data/lib/gherkin/tag_expression.rb +62 -0
- data/lib/gherkin/tools/files.rb +3 -4
- data/lib/gherkin/tools/reformat.rb +2 -2
- data/lib/gherkin/tools/stats.rb +3 -4
- data/lib/gherkin/tools/stats_listener.rb +1 -1
- data/ragel/lexer.c.rl.erb +2 -3
- data/ragel/lexer.java.rl.erb +1 -2
- data/ragel/lexer.rb.rl.erb +1 -2
- data/spec/gherkin/fixtures/complex_for_filtering.feature +60 -0
- data/spec/gherkin/fixtures/complex_with_tags.feature +61 -0
- data/spec/gherkin/fixtures/hantu_pisang.feature +35 -0
- data/spec/gherkin/formatter/filter_formatter_spec.rb +156 -0
- data/spec/gherkin/formatter/model_spec.rb +15 -0
- data/spec/gherkin/formatter/pretty_formatter_spec.rb +17 -16
- data/spec/gherkin/formatter/tag_count_formatter_spec.rb +31 -0
- data/spec/gherkin/i18n_lexer_spec.rb +3 -3
- data/spec/gherkin/i18n_spec.rb +2 -4
- data/spec/gherkin/{json_lexer_spec.rb → json_parser_spec.rb} +13 -8
- data/spec/gherkin/sexp_recorder.rb +10 -4
- data/spec/gherkin/shared/lexer_group.rb +0 -40
- data/spec/gherkin/shared/py_string_group.rb +0 -1
- data/spec/gherkin/shared/row_group.rb +1 -2
- data/spec/gherkin/tag_expression_spec.rb +137 -0
- data/spec/spec_helper.rb +5 -1
- data/tasks/bench.rake +5 -9
- metadata +31 -25
- data/lib/gherkin/parser/filter_listener.rb +0 -203
- data/lib/gherkin/parser/row.rb +0 -15
- data/lib/gherkin/parser/tag_expression.rb +0 -50
- data/spec/gherkin/parser/filter_listener_spec.rb +0 -397
- data/spec/gherkin/parser/formatter_listener_spec.rb +0 -134
- data/spec/gherkin/parser/parser_spec.rb +0 -50
- data/spec/gherkin/parser/tag_expression_spec.rb +0 -116
@@ -5,7 +5,7 @@ module Gherkin
|
|
5
5
|
module Lexer
|
6
6
|
shared_examples_for "a Gherkin lexer lexing rows" do
|
7
7
|
def scan(gherkin)
|
8
|
-
@lexer.scan(gherkin
|
8
|
+
@lexer.scan(gherkin)
|
9
9
|
end
|
10
10
|
|
11
11
|
rows = {
|
@@ -43,7 +43,6 @@ module Gherkin
|
|
43
43
|
it "should allow utf-8" do
|
44
44
|
scan(" | ůﻚ | 2 | \n")
|
45
45
|
@listener.to_sexp.should == [
|
46
|
-
[:location, 'test.feature', 0],
|
47
46
|
[:row, ["ůﻚ", "2"], 1],
|
48
47
|
[:eof]
|
49
48
|
]
|
@@ -0,0 +1,137 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'gherkin/tag_expression'
|
3
|
+
|
4
|
+
module Gherkin
|
5
|
+
describe TagExpression do
|
6
|
+
context "no tags" do
|
7
|
+
before(:each) do
|
8
|
+
@e = Gherkin::TagExpression.new([])
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should match @foo" do
|
12
|
+
@e.eval(['@foo']).should == true
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should match empty tags" do
|
16
|
+
@e.eval([]).should == true
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
context "@foo" do
|
21
|
+
before(:each) do
|
22
|
+
@e = Gherkin::TagExpression.new(['@foo'])
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should match @foo" do
|
26
|
+
@e.eval(['@foo']).should == true
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should not match @bar" do
|
30
|
+
@e.eval(['@bar']).should == false
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should not match no tags" do
|
34
|
+
@e.eval([]).should == false
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
context "!@foo" do
|
39
|
+
before(:each) do
|
40
|
+
@e = Gherkin::TagExpression.new(['~@foo'])
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should match @bar" do
|
44
|
+
@e.eval(['@bar']).should == true
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should not match @foo" do
|
48
|
+
@e.eval(['@foo']).should == false
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
context "@foo || @bar" do
|
53
|
+
before(:each) do
|
54
|
+
@e = Gherkin::TagExpression.new(['@foo,@bar'])
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should match @foo" do
|
58
|
+
@e.eval(['@foo']).should == true
|
59
|
+
end
|
60
|
+
|
61
|
+
it "should match @bar" do
|
62
|
+
@e.eval(['@bar']).should == true
|
63
|
+
end
|
64
|
+
|
65
|
+
it "should not match @zap" do
|
66
|
+
@e.eval(['@zap']).should == false
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
context "(@foo || @bar) && !@zap" do
|
71
|
+
before(:each) do
|
72
|
+
@e = Gherkin::TagExpression.new(['@foo,@bar', '~@zap'])
|
73
|
+
end
|
74
|
+
|
75
|
+
it "should match @foo" do
|
76
|
+
@e.eval(['@foo']).should == true
|
77
|
+
end
|
78
|
+
|
79
|
+
it "should not match @foo @zap" do
|
80
|
+
@e.eval(['@foo', '@zap']).should == false
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
context "(@foo:3 || !@bar:4) && @zap:5" do
|
85
|
+
before(:each) do
|
86
|
+
@e = Gherkin::TagExpression.new(['@foo:3,~@bar','@zap:5'])
|
87
|
+
end
|
88
|
+
|
89
|
+
it "should count tags for positive tags" do
|
90
|
+
rubify_hash(@e.limits).should == {'@foo' => 3, '@zap' => 5}
|
91
|
+
end
|
92
|
+
|
93
|
+
it "should match @foo @zap" do
|
94
|
+
@e.eval(['@foo', '@zap']).should == true
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
context "Parsing '@foo:3,~@bar', '@zap:5'" do
|
99
|
+
before(:each) do
|
100
|
+
@e = Gherkin::TagExpression.new([' @foo:3 , ~@bar ', ' @zap:5 '])
|
101
|
+
end
|
102
|
+
|
103
|
+
unless defined?(JRUBY_VERSION)
|
104
|
+
it "should split and trim (ruby implementation detail)" do
|
105
|
+
@e.__send__(:ruby_expression).should == "(!vars['@bar']||vars['@foo'])&&(vars['@zap'])"
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
it "should have limits" do
|
110
|
+
rubify_hash(@e.limits).should == {"@zap"=>5, "@foo"=>3}
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
context "Tag limits" do
|
115
|
+
it "should be counted for negative tags" do
|
116
|
+
@e = Gherkin::TagExpression.new(['~@todo:3'])
|
117
|
+
rubify_hash(@e.limits).should == {"@todo"=>3}
|
118
|
+
end
|
119
|
+
|
120
|
+
it "should be counted for positive tags" do
|
121
|
+
@e = Gherkin::TagExpression.new(['@todo:3'])
|
122
|
+
rubify_hash(@e.limits).should == {"@todo"=>3}
|
123
|
+
end
|
124
|
+
|
125
|
+
it "should raise an error for inconsistent limits" do
|
126
|
+
lambda do
|
127
|
+
@e = Gherkin::TagExpression.new(['@todo:3', '~@todo:4'])
|
128
|
+
end.should raise_error(/Inconsistent tag limits for @todo: 3 and 4/)
|
129
|
+
end
|
130
|
+
|
131
|
+
it "should allow duplicate consistent limits" do
|
132
|
+
@e = Gherkin::TagExpression.new(['@todo:3', '~@todo:3'])
|
133
|
+
rubify_hash(@e.limits).should == {"@todo"=>3}
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -11,7 +11,11 @@ require 'gherkin/shared/row_group'
|
|
11
11
|
|
12
12
|
module GherkinSpecHelper
|
13
13
|
def scan_file(file)
|
14
|
-
@lexer.scan(
|
14
|
+
@lexer.scan(fixture(file))
|
15
|
+
end
|
16
|
+
|
17
|
+
def fixture(file)
|
18
|
+
File.new(File.dirname(__FILE__) + "/gherkin/fixtures/" + file).read
|
15
19
|
end
|
16
20
|
|
17
21
|
def rubify_hash(hash)
|
data/tasks/bench.rake
CHANGED
@@ -106,23 +106,19 @@ class Benchmarker
|
|
106
106
|
|
107
107
|
def run_rb_gherkin
|
108
108
|
require 'gherkin'
|
109
|
-
require '
|
110
|
-
|
111
|
-
parser = Gherkin::Parser::Parser.new(NullListener.new, true, "root")
|
112
|
-
lexer = Gherkin::I18nLexer.new(parser, true)
|
109
|
+
require 'null_formatter'
|
110
|
+
parser = Gherkin::Parser::Parser.new(NullFormatter.new, true, "root", true)
|
113
111
|
@features.each do |feature|
|
114
|
-
|
112
|
+
parser.parse(File.read(feature), feature, 0)
|
115
113
|
end
|
116
114
|
end
|
117
115
|
|
118
116
|
def run_native_gherkin
|
119
117
|
require 'gherkin'
|
120
|
-
require 'gherkin/i18n_lexer'
|
121
118
|
require 'null_listener'
|
122
|
-
parser = Gherkin::Parser::Parser.new(
|
123
|
-
lexer = Gherkin::I18nLexer.new(parser, false)
|
119
|
+
parser = Gherkin::Parser::Parser.new(NullFormatter.new, true, "root", false)
|
124
120
|
@features.each do |feature|
|
125
|
-
|
121
|
+
parser.parse(File.read(feature), feature, 0)
|
126
122
|
end
|
127
123
|
end
|
128
124
|
|
metadata
CHANGED
@@ -5,9 +5,9 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 2
|
8
|
+
- 1
|
8
9
|
- 0
|
9
|
-
|
10
|
-
version: 2.0.2
|
10
|
+
version: 2.1.0
|
11
11
|
platform: universal-dotnet
|
12
12
|
authors:
|
13
13
|
- Mike Sassak
|
@@ -17,7 +17,7 @@ autorequire:
|
|
17
17
|
bindir: bin
|
18
18
|
cert_chain: []
|
19
19
|
|
20
|
-
date: 2010-
|
20
|
+
date: 2010-07-12 00:00:00 +02:00
|
21
21
|
default_executable: gherkin
|
22
22
|
dependencies:
|
23
23
|
- !ruby/object:Gem::Dependency
|
@@ -44,14 +44,14 @@ dependencies:
|
|
44
44
|
requirements:
|
45
45
|
- - ~>
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
hash:
|
47
|
+
hash: 62196477
|
48
48
|
segments:
|
49
49
|
- 2
|
50
50
|
- 0
|
51
51
|
- 0
|
52
52
|
- beta
|
53
|
-
-
|
54
|
-
version: 2.0.0.beta.
|
53
|
+
- 15
|
54
|
+
version: 2.0.0.beta.15
|
55
55
|
type: :development
|
56
56
|
version_requirements: *id002
|
57
57
|
- !ruby/object:Gem::Dependency
|
@@ -62,12 +62,12 @@ dependencies:
|
|
62
62
|
requirements:
|
63
63
|
- - ~>
|
64
64
|
- !ruby/object:Gem::Version
|
65
|
-
hash:
|
65
|
+
hash: 55
|
66
66
|
segments:
|
67
67
|
- 0
|
68
68
|
- 8
|
69
|
-
-
|
70
|
-
version: 0.8.
|
69
|
+
- 4
|
70
|
+
version: 0.8.4
|
71
71
|
type: :development
|
72
72
|
version_requirements: *id003
|
73
73
|
- !ruby/object:Gem::Dependency
|
@@ -137,30 +137,33 @@ files:
|
|
137
137
|
- lib/gherkin/formatter/argument.rb
|
138
138
|
- lib/gherkin/formatter/colors.rb
|
139
139
|
- lib/gherkin/formatter/escaping.rb
|
140
|
+
- lib/gherkin/formatter/filter_formatter.rb
|
140
141
|
- lib/gherkin/formatter/json_formatter.rb
|
142
|
+
- lib/gherkin/formatter/line_filter.rb
|
143
|
+
- lib/gherkin/formatter/model.rb
|
141
144
|
- lib/gherkin/formatter/monochrome_format.rb
|
142
145
|
- lib/gherkin/formatter/pretty_formatter.rb
|
146
|
+
- lib/gherkin/formatter/regexp_filter.rb
|
147
|
+
- lib/gherkin/formatter/tag_count_formatter.rb
|
143
148
|
- lib/gherkin/i18n.rb
|
144
149
|
- lib/gherkin/i18n.yml
|
145
150
|
- lib/gherkin/i18n_lexer.rb
|
146
|
-
- lib/gherkin/
|
151
|
+
- lib/gherkin/json_parser.rb
|
152
|
+
- lib/gherkin/listener/event.rb
|
153
|
+
- lib/gherkin/listener/formatter_listener.rb
|
147
154
|
- lib/gherkin/native.rb
|
148
155
|
- lib/gherkin/native/ikvm.rb
|
149
156
|
- lib/gherkin/native/java.rb
|
150
157
|
- lib/gherkin/native/null.rb
|
151
|
-
- lib/gherkin/parser/event.rb
|
152
|
-
- lib/gherkin/parser/filter_listener.rb
|
153
|
-
- lib/gherkin/parser/formatter_listener.rb
|
154
158
|
- lib/gherkin/parser/meta.txt
|
155
159
|
- lib/gherkin/parser/parser.rb
|
156
160
|
- lib/gherkin/parser/root.txt
|
157
|
-
- lib/gherkin/parser/row.rb
|
158
161
|
- lib/gherkin/parser/steps.txt
|
159
|
-
- lib/gherkin/parser/tag_expression.rb
|
160
162
|
- lib/gherkin/rb_lexer.rb
|
161
163
|
- lib/gherkin/rb_lexer/.gitignore
|
162
164
|
- lib/gherkin/rb_lexer/README.rdoc
|
163
165
|
- lib/gherkin/rubify.rb
|
166
|
+
- lib/gherkin/tag_expression.rb
|
164
167
|
- lib/gherkin/tools.rb
|
165
168
|
- lib/gherkin/tools/files.rb
|
166
169
|
- lib/gherkin/tools/reformat.rb
|
@@ -176,7 +179,10 @@ files:
|
|
176
179
|
- spec/gherkin/fixtures/comments_in_table.feature
|
177
180
|
- spec/gherkin/fixtures/complex.feature
|
178
181
|
- spec/gherkin/fixtures/complex.json
|
182
|
+
- spec/gherkin/fixtures/complex_for_filtering.feature
|
183
|
+
- spec/gherkin/fixtures/complex_with_tags.feature
|
179
184
|
- spec/gherkin/fixtures/dos_line_endings.feature
|
185
|
+
- spec/gherkin/fixtures/hantu_pisang.feature
|
180
186
|
- spec/gherkin/fixtures/i18n_fr.feature
|
181
187
|
- spec/gherkin/fixtures/i18n_no.feature
|
182
188
|
- spec/gherkin/fixtures/i18n_zh-CN.feature
|
@@ -185,24 +191,24 @@ files:
|
|
185
191
|
- spec/gherkin/fixtures/with_bom.feature
|
186
192
|
- spec/gherkin/formatter/argument_spec.rb
|
187
193
|
- spec/gherkin/formatter/colors_spec.rb
|
194
|
+
- spec/gherkin/formatter/filter_formatter_spec.rb
|
195
|
+
- spec/gherkin/formatter/model_spec.rb
|
188
196
|
- spec/gherkin/formatter/pretty_formatter_spec.rb
|
189
197
|
- spec/gherkin/formatter/spaces.feature
|
190
198
|
- spec/gherkin/formatter/tabs.feature
|
199
|
+
- spec/gherkin/formatter/tag_count_formatter_spec.rb
|
191
200
|
- spec/gherkin/i18n_lexer_spec.rb
|
192
201
|
- spec/gherkin/i18n_spec.rb
|
193
202
|
- spec/gherkin/java_lexer_spec.rb
|
194
|
-
- spec/gherkin/
|
203
|
+
- spec/gherkin/json_parser_spec.rb
|
195
204
|
- spec/gherkin/output_stream_string_io.rb
|
196
|
-
- spec/gherkin/parser/filter_listener_spec.rb
|
197
|
-
- spec/gherkin/parser/formatter_listener_spec.rb
|
198
|
-
- spec/gherkin/parser/parser_spec.rb
|
199
|
-
- spec/gherkin/parser/tag_expression_spec.rb
|
200
205
|
- spec/gherkin/rb_lexer_spec.rb
|
201
206
|
- spec/gherkin/sexp_recorder.rb
|
202
207
|
- spec/gherkin/shared/lexer_group.rb
|
203
208
|
- spec/gherkin/shared/py_string_group.rb
|
204
209
|
- spec/gherkin/shared/row_group.rb
|
205
210
|
- spec/gherkin/shared/tags_group.rb
|
211
|
+
- spec/gherkin/tag_expression_spec.rb
|
206
212
|
- spec/spec_helper.rb
|
207
213
|
- tasks/bench.rake
|
208
214
|
- tasks/bench/feature_builder.rb
|
@@ -254,20 +260,20 @@ test_files:
|
|
254
260
|
- spec/gherkin/c_lexer_spec.rb
|
255
261
|
- spec/gherkin/formatter/argument_spec.rb
|
256
262
|
- spec/gherkin/formatter/colors_spec.rb
|
263
|
+
- spec/gherkin/formatter/filter_formatter_spec.rb
|
264
|
+
- spec/gherkin/formatter/model_spec.rb
|
257
265
|
- spec/gherkin/formatter/pretty_formatter_spec.rb
|
266
|
+
- spec/gherkin/formatter/tag_count_formatter_spec.rb
|
258
267
|
- spec/gherkin/i18n_lexer_spec.rb
|
259
268
|
- spec/gherkin/i18n_spec.rb
|
260
269
|
- spec/gherkin/java_lexer_spec.rb
|
261
|
-
- spec/gherkin/
|
270
|
+
- spec/gherkin/json_parser_spec.rb
|
262
271
|
- spec/gherkin/output_stream_string_io.rb
|
263
|
-
- spec/gherkin/parser/filter_listener_spec.rb
|
264
|
-
- spec/gherkin/parser/formatter_listener_spec.rb
|
265
|
-
- spec/gherkin/parser/parser_spec.rb
|
266
|
-
- spec/gherkin/parser/tag_expression_spec.rb
|
267
272
|
- spec/gherkin/rb_lexer_spec.rb
|
268
273
|
- spec/gherkin/sexp_recorder.rb
|
269
274
|
- spec/gherkin/shared/lexer_group.rb
|
270
275
|
- spec/gherkin/shared/py_string_group.rb
|
271
276
|
- spec/gherkin/shared/row_group.rb
|
272
277
|
- spec/gherkin/shared/tags_group.rb
|
278
|
+
- spec/gherkin/tag_expression_spec.rb
|
273
279
|
- spec/spec_helper.rb
|
@@ -1,203 +0,0 @@
|
|
1
|
-
require 'gherkin/parser/event'
|
2
|
-
require 'gherkin/parser/tag_expression'
|
3
|
-
require 'gherkin/native'
|
4
|
-
|
5
|
-
module Gherkin
|
6
|
-
module Parser
|
7
|
-
# This class filters events based on filter criteria.
|
8
|
-
class FilterListener
|
9
|
-
native_impl('gherkin')
|
10
|
-
|
11
|
-
# Creates a new instance that replays events to +listener+, filtered by +filters+,
|
12
|
-
# an Array that can contain one of the following:
|
13
|
-
#
|
14
|
-
# * Line numbers (Fixnum) to filter on.
|
15
|
-
# * Name regexen (Regexp) to filter on. Matches against :feature, :background, :scenario, :scenario_outline and :examples
|
16
|
-
# * Tag expressions (String) to filter on.
|
17
|
-
#
|
18
|
-
def initialize(listener, filters)
|
19
|
-
@listener = listener
|
20
|
-
@filter_method = detect_filter(filters)
|
21
|
-
|
22
|
-
@meta_buffer = []
|
23
|
-
@feature_buffer = []
|
24
|
-
@scenario_buffer = []
|
25
|
-
@examples_buffer = []
|
26
|
-
@examples_rows_buffer = []
|
27
|
-
|
28
|
-
@feature_tags = []
|
29
|
-
@scenario_tags = []
|
30
|
-
@example_tags = []
|
31
|
-
|
32
|
-
@table_state = :step
|
33
|
-
end
|
34
|
-
|
35
|
-
def location(uri, offset)
|
36
|
-
@listener.location(uri, offset)
|
37
|
-
end
|
38
|
-
|
39
|
-
private
|
40
|
-
|
41
|
-
def method_missing(*event_args)
|
42
|
-
event = Event.new(event_args)
|
43
|
-
|
44
|
-
return event.replay(@listener) if no_filters?
|
45
|
-
|
46
|
-
case(event.event)
|
47
|
-
when :tag
|
48
|
-
@meta_buffer << event
|
49
|
-
when :comment
|
50
|
-
@meta_buffer << event
|
51
|
-
when :feature
|
52
|
-
@feature_buffer = @meta_buffer
|
53
|
-
@feature_buffer << event
|
54
|
-
@feature_tags = extract_tags
|
55
|
-
@meta_buffer = []
|
56
|
-
@feature_ok = true if filter_match?(event)
|
57
|
-
when :background
|
58
|
-
@feature_buffer += @meta_buffer
|
59
|
-
@feature_buffer << event
|
60
|
-
@meta_buffer = []
|
61
|
-
@table_state = :background
|
62
|
-
@background_ok = true if filter_match?(event)
|
63
|
-
when :scenario
|
64
|
-
replay_examples_rows_buffer
|
65
|
-
@scenario_buffer = @meta_buffer
|
66
|
-
@scenario_buffer << event
|
67
|
-
@scenario_tags = extract_tags
|
68
|
-
@example_tags = []
|
69
|
-
@meta_buffer = []
|
70
|
-
@scenario_ok = filter_match?(*@scenario_buffer) || tag_match?
|
71
|
-
@examples_ok = false
|
72
|
-
@background_ok = false
|
73
|
-
@table_state = :step
|
74
|
-
when :scenario_outline
|
75
|
-
replay_examples_rows_buffer
|
76
|
-
@scenario_buffer = @meta_buffer
|
77
|
-
@scenario_buffer << event
|
78
|
-
@scenario_tags = extract_tags
|
79
|
-
@example_tags = []
|
80
|
-
@meta_buffer = []
|
81
|
-
@scenario_ok = filter_match?(*@scenario_buffer)
|
82
|
-
@examples_ok = false
|
83
|
-
@background_ok = false
|
84
|
-
@table_state = :step
|
85
|
-
when :examples
|
86
|
-
replay_examples_rows_buffer
|
87
|
-
@examples_buffer = @meta_buffer
|
88
|
-
@examples_buffer << event
|
89
|
-
@example_tags = extract_tags
|
90
|
-
@meta_buffer = []
|
91
|
-
@examples_rows_buffer = []
|
92
|
-
@examples_ok = filter_match?(*@examples_buffer) || tag_match?
|
93
|
-
@table_state = :examples
|
94
|
-
when :step
|
95
|
-
case(@table_state)
|
96
|
-
when :background
|
97
|
-
@feature_buffer += @meta_buffer
|
98
|
-
@feature_buffer << event
|
99
|
-
@meta_buffer = []
|
100
|
-
@background_ok = true if filter_match?(event)
|
101
|
-
else
|
102
|
-
@scenario_buffer << event
|
103
|
-
@scenario_ok ||= filter_match?(*@scenario_buffer)
|
104
|
-
@table_state = :step
|
105
|
-
end
|
106
|
-
when :row
|
107
|
-
case(@table_state)
|
108
|
-
when :examples
|
109
|
-
unless header_row_already_buffered?
|
110
|
-
@examples_buffer << event
|
111
|
-
@examples_ok = true if filter_match?(*@examples_buffer)
|
112
|
-
else
|
113
|
-
@examples_rows_buffer << event if @scenario_ok || @examples_ok || @feature_ok || filter_match?(event)
|
114
|
-
end
|
115
|
-
when :step
|
116
|
-
@scenario_buffer << event
|
117
|
-
@scenario_ok ||= filter_match?(*@scenario_buffer)
|
118
|
-
when :background
|
119
|
-
@feature_buffer += @meta_buffer
|
120
|
-
@feature_buffer << event
|
121
|
-
@meta_buffer = []
|
122
|
-
else
|
123
|
-
raise "Bad table_state:#{@table_state.inspect}"
|
124
|
-
end
|
125
|
-
when :py_string
|
126
|
-
if @table_state == :background
|
127
|
-
@feature_buffer << event
|
128
|
-
@feature_ok ||= filter_match?(*@feature_buffer)
|
129
|
-
else
|
130
|
-
@scenario_buffer << event
|
131
|
-
@scenario_ok ||= filter_match?(*@scenario_buffer)
|
132
|
-
end
|
133
|
-
when :eof
|
134
|
-
replay_examples_rows_buffer
|
135
|
-
event.replay(@listener)
|
136
|
-
return
|
137
|
-
else
|
138
|
-
super
|
139
|
-
end
|
140
|
-
|
141
|
-
if @scenario_ok || @examples_ok || @feature_ok || @background_ok
|
142
|
-
replay_buffers
|
143
|
-
end
|
144
|
-
end
|
145
|
-
|
146
|
-
def detect_filter(filters)
|
147
|
-
@filters = filters
|
148
|
-
raise "Bad filter: #{filters.inspect}" if filters.map{|filter| filter.class}.uniq.length > 1
|
149
|
-
@filter_method = case(filters[0])
|
150
|
-
when Fixnum
|
151
|
-
:line_match?
|
152
|
-
when Regexp
|
153
|
-
:name_match?
|
154
|
-
when String
|
155
|
-
TagExpression.new(filters)
|
156
|
-
end
|
157
|
-
end
|
158
|
-
|
159
|
-
def no_filters?
|
160
|
-
@filters.empty?
|
161
|
-
end
|
162
|
-
|
163
|
-
def header_row_already_buffered?
|
164
|
-
return @examples_buffer.any? && @examples_buffer[-1].event == :row
|
165
|
-
end
|
166
|
-
|
167
|
-
def filter_match?(*events)
|
168
|
-
return false unless[:name_match?, :line_match?].include?(@filter_method)
|
169
|
-
events.detect{|event| event.__send__(@filter_method, @filters)}
|
170
|
-
end
|
171
|
-
|
172
|
-
def tag_match?
|
173
|
-
return TagExpression === @filter_method && @filter_method.eval(current_tags)
|
174
|
-
end
|
175
|
-
|
176
|
-
def replay_buffers
|
177
|
-
(@feature_buffer + @scenario_buffer).each do |event|
|
178
|
-
event.replay(@listener)
|
179
|
-
end
|
180
|
-
@feature_buffer = []
|
181
|
-
@scenario_buffer = []
|
182
|
-
end
|
183
|
-
|
184
|
-
def replay_examples_rows_buffer
|
185
|
-
if @examples_rows_buffer.any?
|
186
|
-
replay_buffers
|
187
|
-
(@examples_buffer + @examples_rows_buffer).each do |event|
|
188
|
-
event.replay(@listener)
|
189
|
-
end
|
190
|
-
@examples_rows_buffer = []
|
191
|
-
end
|
192
|
-
end
|
193
|
-
|
194
|
-
def current_tags
|
195
|
-
@feature_tags + @scenario_tags + @example_tags
|
196
|
-
end
|
197
|
-
|
198
|
-
def extract_tags
|
199
|
-
@meta_buffer.select { |event| event.event == :tag }.map { |event| event.keyword }
|
200
|
-
end
|
201
|
-
end
|
202
|
-
end
|
203
|
-
end
|