cucumber-core 3.0.0 → 3.1.0
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.
- checksums.yaml +4 -4
- data/lib/cucumber/core/version.rb +1 -1
- metadata +19 -85
- data/.coveralls.yml +0 -1
- data/.github/ISSUE_TEMPLATE.md +0 -48
- data/.github/PULL_REQUEST_TEMPLATE.md +0 -39
- data/.rspec +0 -1
- data/.ruby-gemset +0 -1
- data/.travis.yml +0 -30
- data/.yardopts +0 -6
- data/Gemfile +0 -2
- data/Rakefile +0 -28
- data/cucumber-core.gemspec +0 -36
- data/spec/capture_warnings.rb +0 -74
- data/spec/coverage.rb +0 -11
- data/spec/cucumber/core/ast/background_spec.rb +0 -11
- data/spec/cucumber/core/ast/data_table_spec.rb +0 -81
- data/spec/cucumber/core/ast/doc_string_spec.rb +0 -114
- data/spec/cucumber/core/ast/empty_multiline_argument_spec.rb +0 -28
- data/spec/cucumber/core/ast/examples_table_spec.rb +0 -113
- data/spec/cucumber/core/ast/location_spec.rb +0 -199
- data/spec/cucumber/core/ast/outline_step_spec.rb +0 -93
- data/spec/cucumber/core/ast/step_spec.rb +0 -174
- data/spec/cucumber/core/compiler_spec.rb +0 -267
- data/spec/cucumber/core/event_bus_spec.rb +0 -163
- data/spec/cucumber/core/event_spec.rb +0 -40
- data/spec/cucumber/core/filter_spec.rb +0 -101
- data/spec/cucumber/core/gherkin/parser_spec.rb +0 -261
- data/spec/cucumber/core/gherkin/writer_spec.rb +0 -333
- data/spec/cucumber/core/report/summary_spec.rb +0 -175
- data/spec/cucumber/core/test/action_spec.rb +0 -154
- data/spec/cucumber/core/test/case_spec.rb +0 -316
- data/spec/cucumber/core/test/duration_matcher.rb +0 -20
- data/spec/cucumber/core/test/filters/locations_filter_spec.rb +0 -405
- data/spec/cucumber/core/test/result_spec.rb +0 -474
- data/spec/cucumber/core/test/runner_spec.rb +0 -310
- data/spec/cucumber/core/test/step_spec.rb +0 -98
- data/spec/cucumber/core/test/timer_spec.rb +0 -25
- data/spec/cucumber/core_spec.rb +0 -262
- data/spec/readme_spec.rb +0 -37
- data/spec/report_api_spy.rb +0 -25
@@ -1,93 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
require 'cucumber/core/ast/outline_step'
|
3
|
-
require 'cucumber/core/ast/examples_table'
|
4
|
-
require 'cucumber/core/ast/data_table'
|
5
|
-
require 'cucumber/core/ast/doc_string'
|
6
|
-
require 'cucumber/core/ast/empty_multiline_argument'
|
7
|
-
|
8
|
-
module Cucumber
|
9
|
-
module Core
|
10
|
-
module Ast
|
11
|
-
describe OutlineStep do
|
12
|
-
let(:outline_step) { OutlineStep.new(language, location, comments, keyword, text, multiline_arg) }
|
13
|
-
let(:language) { double }
|
14
|
-
let(:location) { double }
|
15
|
-
let(:comments) { double }
|
16
|
-
let(:keyword) { double }
|
17
|
-
let(:text) { 'anything' }
|
18
|
-
let(:multiline_arg) { EmptyMultilineArgument.new }
|
19
|
-
|
20
|
-
describe 'location' do
|
21
|
-
it "has a location" do
|
22
|
-
expect( outline_step ).to respond_to(:location)
|
23
|
-
end
|
24
|
-
|
25
|
-
it 'knows the file and line' do
|
26
|
-
allow( location ).to receive(:to_s) { 'file_name:8' }
|
27
|
-
expect( outline_step.file_colon_line ).to eq 'file_name:8'
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
describe "to_s" do
|
32
|
-
it "returns the text of the step" do
|
33
|
-
expect(outline_step.to_s).to eq 'anything'
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
describe 'comments' do
|
38
|
-
it "has comments" do
|
39
|
-
expect( outline_step ).to respond_to(:comments)
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
describe "converting to a Step" do
|
44
|
-
context "a single argument in the name" do
|
45
|
-
let(:text) { 'a <color> cucumber' }
|
46
|
-
|
47
|
-
it "replaces the argument" do
|
48
|
-
row = ExamplesTable::Row.new({'color' => 'green'}, 1, location, language, comments)
|
49
|
-
expect( outline_step.to_step(row).text ).to eq 'a green cucumber'
|
50
|
-
end
|
51
|
-
|
52
|
-
end
|
53
|
-
|
54
|
-
context "when the step has a DataTable" do
|
55
|
-
let(:outline_step) { OutlineStep.new(language, location, comments, keyword, text, table) }
|
56
|
-
let(:text) { "anything" }
|
57
|
-
let(:table) { DataTable.new([['x', 'y'],['a', 'a <arg>']], Location.new('foo.feature', 23)) }
|
58
|
-
|
59
|
-
it "replaces the arguments in the DataTable" do
|
60
|
-
visitor = double
|
61
|
-
allow( visitor ).to receive(:step).and_yield(visitor)
|
62
|
-
expect( visitor ).to receive(:data_table) do |data_table|
|
63
|
-
expect( data_table.raw ).to eq [['x', 'y'], ['a', 'a replacement']]
|
64
|
-
end
|
65
|
-
row = ExamplesTable::Row.new({'arg' => 'replacement'}, 1, location, language, comments)
|
66
|
-
step = outline_step.to_step(row)
|
67
|
-
step.describe_to(visitor)
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
context "when the step has a DocString" do
|
72
|
-
let(:location) { double }
|
73
|
-
let(:outline_step) { OutlineStep.new(language, location, comments, keyword, text, doc_string) }
|
74
|
-
let(:doc_string) { DocString.new('a <arg> that needs replacing', '', location) }
|
75
|
-
let(:text) { 'anything' }
|
76
|
-
|
77
|
-
it "replaces the arguments in the DocString" do
|
78
|
-
visitor = double
|
79
|
-
allow( visitor ).to receive(:step).and_yield(visitor)
|
80
|
-
expect( visitor ).to receive(:doc_string) do |doc_string|
|
81
|
-
expect( doc_string.content ).to eq "a replacement that needs replacing"
|
82
|
-
end
|
83
|
-
row = ExamplesTable::Row.new({'arg' => 'replacement'}, 1, location, language, comments)
|
84
|
-
step = outline_step.to_step(row)
|
85
|
-
step.describe_to(visitor)
|
86
|
-
end
|
87
|
-
end
|
88
|
-
end
|
89
|
-
end
|
90
|
-
end
|
91
|
-
end
|
92
|
-
end
|
93
|
-
|
@@ -1,174 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
require 'cucumber/core/ast/step'
|
3
|
-
require 'cucumber/core/ast/outline_step'
|
4
|
-
require 'cucumber/core/ast/empty_multiline_argument'
|
5
|
-
require 'gherkin/dialect'
|
6
|
-
|
7
|
-
module Cucumber
|
8
|
-
module Core
|
9
|
-
module Ast
|
10
|
-
describe Step do
|
11
|
-
let(:step) do
|
12
|
-
text = "a passing step"
|
13
|
-
keyword = "Given"
|
14
|
-
language, location, comments = *double
|
15
|
-
multiline_arg = EmptyMultilineArgument.new
|
16
|
-
Step.new(language, location, comments, keyword, text, multiline_arg)
|
17
|
-
end
|
18
|
-
|
19
|
-
describe "to_s" do
|
20
|
-
it("returns the text of the step") do
|
21
|
-
expect(step.to_s).to eq("a passing step")
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
describe "describing itself" do
|
26
|
-
let(:visitor) { double }
|
27
|
-
|
28
|
-
it "describes itself as a step" do
|
29
|
-
expect( visitor ).to receive(:step).with(step)
|
30
|
-
step.describe_to(visitor)
|
31
|
-
end
|
32
|
-
|
33
|
-
context "with no multiline argument" do
|
34
|
-
it "does not try to describe any children" do
|
35
|
-
allow( visitor ).to receive(:step).with(step).and_yield(visitor)
|
36
|
-
step.describe_to(visitor)
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
context "with a multiline argument" do
|
41
|
-
let(:step) { Step.new(double, double, double, double, double, multiline_arg) }
|
42
|
-
let(:multiline_arg) { double }
|
43
|
-
|
44
|
-
it "tells its multiline argument to describe itself" do
|
45
|
-
allow( visitor ).to receive(:step).with(step).and_yield(visitor)
|
46
|
-
expect( multiline_arg ).to receive(:describe_to).with(visitor)
|
47
|
-
step.describe_to(visitor)
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
end
|
52
|
-
|
53
|
-
describe 'comments' do
|
54
|
-
it "has comments" do
|
55
|
-
expect( step ).to respond_to(:comments)
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
describe "backtrace line" do
|
60
|
-
let(:step) { Step.new(double, "path/file.feature:10", double, "Given ", "this step passes", double) }
|
61
|
-
|
62
|
-
it "knows how to form the backtrace line" do
|
63
|
-
expect( step.backtrace_line ).to eq("path/file.feature:10:in `Given this step passes'")
|
64
|
-
end
|
65
|
-
|
66
|
-
end
|
67
|
-
|
68
|
-
describe "actual keyword" do
|
69
|
-
let(:language) { ::Gherkin::Dialect.for('en') }
|
70
|
-
|
71
|
-
context "for keywords 'given', 'when' and 'then'" do
|
72
|
-
let(:given_step) { Step.new(language, double, double, "Given ", double, double) }
|
73
|
-
let(:when_step) { Step.new(language, double, double, "When ", double, double) }
|
74
|
-
let(:then_step) { Step.new(language, double, double, "Then ", double, double) }
|
75
|
-
|
76
|
-
it "returns the keyword itself" do
|
77
|
-
expect( given_step.actual_keyword(nil) ).to eq("Given ")
|
78
|
-
expect( when_step.actual_keyword(nil) ).to eq("When ")
|
79
|
-
expect( then_step.actual_keyword(nil) ).to eq("Then ")
|
80
|
-
end
|
81
|
-
end
|
82
|
-
|
83
|
-
context "for keyword 'and', 'but', and '*'" do
|
84
|
-
let(:and_step) { Step.new(language, double, double, "And ", double, double) }
|
85
|
-
let(:but_step) { Step.new(language, double, double, "But ", double, double) }
|
86
|
-
let(:asterisk_step) { Step.new(language, double, double, "* ", double, double) }
|
87
|
-
|
88
|
-
context "when the previous step keyword exist" do
|
89
|
-
it "returns the previous step keyword" do
|
90
|
-
expect( and_step.actual_keyword("Then ") ).to eq("Then ")
|
91
|
-
expect( but_step.actual_keyword("Then ") ).to eq("Then ")
|
92
|
-
expect( asterisk_step.actual_keyword("Then ") ).to eq("Then ")
|
93
|
-
end
|
94
|
-
end
|
95
|
-
|
96
|
-
context "when the previous step keyword does not exist" do
|
97
|
-
it "returns the 'given' keyword" do
|
98
|
-
expect( and_step.actual_keyword(nil) ).to eq("Given ")
|
99
|
-
expect( but_step.actual_keyword(nil) ).to eq("Given ")
|
100
|
-
expect( asterisk_step.actual_keyword(nil) ).to eq("Given ")
|
101
|
-
end
|
102
|
-
end
|
103
|
-
|
104
|
-
end
|
105
|
-
|
106
|
-
context "for i18n languages" do
|
107
|
-
let(:language) { ::Gherkin::Dialect.for('en-lol') }
|
108
|
-
let(:and_step) { Step.new(language, double, double, "AN ", double, double) }
|
109
|
-
|
110
|
-
it "returns the keyword in the correct language" do
|
111
|
-
expect( and_step.actual_keyword(nil) ).to eq("I CAN HAZ ")
|
112
|
-
end
|
113
|
-
end
|
114
|
-
end
|
115
|
-
end
|
116
|
-
|
117
|
-
describe ExpandedOutlineStep do
|
118
|
-
let(:outline_step) { double }
|
119
|
-
let(:step) do
|
120
|
-
language, location, keyword, text = *double
|
121
|
-
multiline_arg = EmptyMultilineArgument.new
|
122
|
-
comments = []
|
123
|
-
ExpandedOutlineStep.new(outline_step, language, location, comments, keyword, text, multiline_arg)
|
124
|
-
end
|
125
|
-
|
126
|
-
describe "describing itself" do
|
127
|
-
let(:visitor) { double }
|
128
|
-
|
129
|
-
it "describes itself as a step" do
|
130
|
-
expect( visitor ).to receive(:step).with(step)
|
131
|
-
step.describe_to(visitor)
|
132
|
-
end
|
133
|
-
|
134
|
-
context "with no multiline argument" do
|
135
|
-
it "does not try to describe any children" do
|
136
|
-
allow( visitor ).to receive(:step).with(step).and_yield(visitor)
|
137
|
-
step.describe_to(visitor)
|
138
|
-
end
|
139
|
-
end
|
140
|
-
|
141
|
-
context "with a multiline argument" do
|
142
|
-
let(:step) { Step.new(double, double, double, double, double, multiline_arg) }
|
143
|
-
let(:multiline_arg) { double }
|
144
|
-
|
145
|
-
it "tells its multiline argument to describe itself" do
|
146
|
-
allow( visitor ).to receive(:step).with(step).and_yield(visitor)
|
147
|
-
expect( multiline_arg ).to receive(:describe_to).with(visitor)
|
148
|
-
step.describe_to(visitor)
|
149
|
-
end
|
150
|
-
end
|
151
|
-
|
152
|
-
end
|
153
|
-
|
154
|
-
describe 'comments' do
|
155
|
-
it "has comments" do
|
156
|
-
expect( step ).to respond_to(:comments)
|
157
|
-
end
|
158
|
-
end
|
159
|
-
|
160
|
-
describe "backtrace line" do
|
161
|
-
let(:outline_step) { OutlineStep.new(double, "path/file.feature:5", double, "Given ", "this step <state>", double) }
|
162
|
-
let(:step) { ExpandedOutlineStep.new(outline_step, double, "path/file.feature:10", double, "Given ", "this step passes", double) }
|
163
|
-
|
164
|
-
it "includes the outline step in the backtrace line" do
|
165
|
-
expect( step.backtrace_line ).to eq("path/file.feature:10:in `Given this step passes'\n" +
|
166
|
-
"path/file.feature:5:in `Given this step <state>'")
|
167
|
-
end
|
168
|
-
|
169
|
-
end
|
170
|
-
end
|
171
|
-
end
|
172
|
-
end
|
173
|
-
end
|
174
|
-
|
@@ -1,267 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
require 'cucumber/core'
|
3
|
-
require 'cucumber/core/compiler'
|
4
|
-
require 'cucumber/core/gherkin/writer'
|
5
|
-
|
6
|
-
module Cucumber::Core
|
7
|
-
describe Compiler do
|
8
|
-
include Gherkin::Writer
|
9
|
-
include Cucumber::Core
|
10
|
-
|
11
|
-
def self.stubs(*names)
|
12
|
-
names.each do |name|
|
13
|
-
let(name) { double(name.to_s) }
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
it "compiles a feature with a single scenario" do
|
18
|
-
gherkin_documents = [
|
19
|
-
gherkin do
|
20
|
-
feature do
|
21
|
-
scenario do
|
22
|
-
step 'passing'
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
]
|
27
|
-
compile(gherkin_documents) do |visitor|
|
28
|
-
expect( visitor ).to receive(:test_case).once.ordered.and_yield(visitor)
|
29
|
-
expect( visitor ).to receive(:test_step).once.ordered
|
30
|
-
expect( visitor ).to receive(:done).once.ordered
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
it "compiles a feature with a background" do
|
35
|
-
gherkin_documents = [
|
36
|
-
gherkin do
|
37
|
-
feature do
|
38
|
-
background do
|
39
|
-
step 'passing'
|
40
|
-
end
|
41
|
-
|
42
|
-
scenario do
|
43
|
-
step 'passing'
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
47
|
-
]
|
48
|
-
compile(gherkin_documents) do |visitor|
|
49
|
-
expect( visitor ).to receive(:test_case).once.ordered.and_yield(visitor)
|
50
|
-
expect( visitor ).to receive(:test_step).exactly(2).times.ordered
|
51
|
-
expect( visitor ).to receive(:done).once.ordered
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
it "compiles multiple features" do
|
56
|
-
gherkin_documents = [
|
57
|
-
gherkin do
|
58
|
-
feature do
|
59
|
-
background do
|
60
|
-
step 'passing'
|
61
|
-
end
|
62
|
-
scenario do
|
63
|
-
step 'passing'
|
64
|
-
end
|
65
|
-
end
|
66
|
-
end,
|
67
|
-
gherkin do
|
68
|
-
feature do
|
69
|
-
background do
|
70
|
-
step 'passing'
|
71
|
-
end
|
72
|
-
scenario do
|
73
|
-
step 'passing'
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end
|
77
|
-
]
|
78
|
-
compile(gherkin_documents) do |visitor|
|
79
|
-
expect( visitor ).to receive(:test_case).once.ordered
|
80
|
-
expect( visitor ).to receive(:test_step).twice.ordered
|
81
|
-
expect( visitor ).to receive(:test_case).once.ordered
|
82
|
-
expect( visitor ).to receive(:test_step).twice.ordered
|
83
|
-
expect( visitor ).to receive(:done).once
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
context "compiling scenario outlines" do
|
88
|
-
it "compiles a scenario outline to test cases" do
|
89
|
-
gherkin_documents = [
|
90
|
-
gherkin do
|
91
|
-
feature do
|
92
|
-
background do
|
93
|
-
step 'passing'
|
94
|
-
end
|
95
|
-
|
96
|
-
scenario_outline do
|
97
|
-
step 'passing <arg>'
|
98
|
-
step 'passing'
|
99
|
-
|
100
|
-
examples 'examples 1' do
|
101
|
-
row 'arg'
|
102
|
-
row '1'
|
103
|
-
row '2'
|
104
|
-
end
|
105
|
-
|
106
|
-
examples 'examples 2' do
|
107
|
-
row 'arg'
|
108
|
-
row 'a'
|
109
|
-
end
|
110
|
-
end
|
111
|
-
end
|
112
|
-
end
|
113
|
-
]
|
114
|
-
compile(gherkin_documents) do |visitor|
|
115
|
-
expect( visitor ).to receive(:test_case).exactly(3).times.and_yield(visitor)
|
116
|
-
expect( visitor ).to receive(:test_step).exactly(9).times
|
117
|
-
expect( visitor ).to receive(:done).once
|
118
|
-
end
|
119
|
-
end
|
120
|
-
|
121
|
-
it 'replaces arguments correctly when generating test steps' do
|
122
|
-
gherkin_documents = [
|
123
|
-
gherkin do
|
124
|
-
feature do
|
125
|
-
scenario_outline do
|
126
|
-
step 'passing <arg1> with <arg2>'
|
127
|
-
step 'as well as <arg3>'
|
128
|
-
|
129
|
-
examples do
|
130
|
-
row 'arg1', 'arg2', 'arg3'
|
131
|
-
row '1', '2', '3'
|
132
|
-
end
|
133
|
-
end
|
134
|
-
end
|
135
|
-
end
|
136
|
-
]
|
137
|
-
|
138
|
-
compile(gherkin_documents) do |visitor|
|
139
|
-
expect( visitor ).to receive(:test_step) do |test_step|
|
140
|
-
visit_source(test_step) do |source_visitor|
|
141
|
-
expect( source_visitor ).to receive(:step) do |step|
|
142
|
-
expect(step.text).to eq 'passing 1 with 2'
|
143
|
-
end
|
144
|
-
end
|
145
|
-
end.once.ordered
|
146
|
-
|
147
|
-
expect( visitor ).to receive(:test_step) do |test_step|
|
148
|
-
visit_source(test_step) do |source_visitor|
|
149
|
-
expect( source_visitor ).to receive(:step) do |step|
|
150
|
-
expect(step.text).to eq 'as well as 3'
|
151
|
-
end
|
152
|
-
end
|
153
|
-
end.once.ordered
|
154
|
-
|
155
|
-
expect( visitor ).to receive(:done).once.ordered
|
156
|
-
end
|
157
|
-
end
|
158
|
-
end
|
159
|
-
|
160
|
-
context 'empty scenarios' do
|
161
|
-
it 'does not create test cases for them' do
|
162
|
-
gherkin_documents = [
|
163
|
-
gherkin do
|
164
|
-
feature do
|
165
|
-
scenario do
|
166
|
-
end
|
167
|
-
end
|
168
|
-
end
|
169
|
-
]
|
170
|
-
compile(gherkin_documents) do |visitor|
|
171
|
-
expect( visitor ).to receive(:test_case).never
|
172
|
-
expect( visitor ).to receive(:done).once.ordered
|
173
|
-
end
|
174
|
-
end
|
175
|
-
end
|
176
|
-
|
177
|
-
describe Compiler::FeatureCompiler do
|
178
|
-
let(:receiver) { double('receiver') }
|
179
|
-
let(:compiler) { Compiler::FeatureCompiler.new(receiver) }
|
180
|
-
|
181
|
-
context "a scenario with a background" do
|
182
|
-
stubs(:feature,
|
183
|
-
:background,
|
184
|
-
:background_step,
|
185
|
-
:scenario,
|
186
|
-
:scenario_step)
|
187
|
-
|
188
|
-
it "sets the source correctly on the test steps" do
|
189
|
-
expect( receiver ).to receive(:on_background_step).with(
|
190
|
-
[feature, background, background_step]
|
191
|
-
)
|
192
|
-
expect( receiver ).to receive(:on_step).with(
|
193
|
-
[feature, scenario, scenario_step]
|
194
|
-
)
|
195
|
-
expect( receiver ).to receive(:on_test_case).with(
|
196
|
-
[feature, scenario]
|
197
|
-
)
|
198
|
-
compiler.feature(feature) do |f|
|
199
|
-
f.background(background) do |b|
|
200
|
-
b.step background_step
|
201
|
-
end
|
202
|
-
f.scenario(scenario) do |s|
|
203
|
-
s.step scenario_step
|
204
|
-
end
|
205
|
-
end
|
206
|
-
end
|
207
|
-
end
|
208
|
-
|
209
|
-
context "a scenario outline" do
|
210
|
-
stubs(:feature,
|
211
|
-
:background,
|
212
|
-
:background_step,
|
213
|
-
:scenario_outline,
|
214
|
-
:outline_step,
|
215
|
-
:examples_table_1,
|
216
|
-
:examples_table_1_row_1,
|
217
|
-
:outline_ast_step,
|
218
|
-
:examples_table_2,
|
219
|
-
:examples_table_2_row_1,
|
220
|
-
)
|
221
|
-
|
222
|
-
it "sets the source correctly on the test steps" do
|
223
|
-
allow( outline_step ).to receive(:to_step) { outline_ast_step }
|
224
|
-
expect( receiver ).to receive(:on_step).with(
|
225
|
-
[feature, scenario_outline, examples_table_1, examples_table_1_row_1, outline_ast_step]
|
226
|
-
).ordered
|
227
|
-
expect( receiver ).to receive(:on_test_case).with(
|
228
|
-
[feature, scenario_outline, examples_table_1, examples_table_1_row_1]
|
229
|
-
).ordered
|
230
|
-
expect( receiver ).to receive(:on_step).with(
|
231
|
-
[feature, scenario_outline, examples_table_2, examples_table_2_row_1, outline_ast_step]
|
232
|
-
).ordered
|
233
|
-
expect( receiver ).to receive(:on_test_case).with(
|
234
|
-
[feature, scenario_outline, examples_table_2, examples_table_2_row_1]
|
235
|
-
).ordered
|
236
|
-
compiler.feature(feature) do |f|
|
237
|
-
f.scenario_outline(scenario_outline) do |o|
|
238
|
-
o.outline_step outline_step
|
239
|
-
o.examples_table(examples_table_1) do |t|
|
240
|
-
t.examples_table_row(examples_table_1_row_1)
|
241
|
-
end
|
242
|
-
o.examples_table(examples_table_2) do |t|
|
243
|
-
t.examples_table_row(examples_table_2_row_1)
|
244
|
-
end
|
245
|
-
end
|
246
|
-
end
|
247
|
-
end
|
248
|
-
end
|
249
|
-
end
|
250
|
-
|
251
|
-
def visit_source(node)
|
252
|
-
visitor = double.as_null_object
|
253
|
-
yield visitor
|
254
|
-
node.describe_source_to(visitor)
|
255
|
-
end
|
256
|
-
|
257
|
-
def compile(gherkin_documents)
|
258
|
-
visitor = double
|
259
|
-
allow( visitor ).to receive(:test_suite).and_yield(visitor)
|
260
|
-
allow( visitor ).to receive(:test_case).and_yield(visitor)
|
261
|
-
yield visitor
|
262
|
-
super(gherkin_documents, visitor)
|
263
|
-
end
|
264
|
-
|
265
|
-
end
|
266
|
-
end
|
267
|
-
|