cucumber-gherkin 27.0.0 → 30.0.4

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.
@@ -1,13 +0,0 @@
1
- # coding: utf-8
2
- require 'rspec'
3
- require 'gherkin/dialect'
4
-
5
- module Gherkin
6
- describe Dialect do
7
- it 'provides an interface to the keywords of a dialect' do
8
- dialect_en = Dialect.for('en')
9
-
10
- expect(dialect_en.feature_keywords).to eq(['Feature', 'Business Need', 'Ability'])
11
- end
12
- end
13
- end
@@ -1,36 +0,0 @@
1
- require 'rspec'
2
- require 'gherkin/gherkin_line'
3
-
4
- describe Gherkin::GherkinLine do
5
- context '#tags' do
6
- def tags(line)
7
- Gherkin::GherkinLine.new(line, 12).tags.map(&:text)
8
- end
9
-
10
- it 'allows any non-space characters in a tag' do
11
- expect(tags(" @foo:bar @zap🥒yo")).to eq(['@foo:bar', '@zap🥒yo'])
12
- end
13
- end
14
-
15
- context '#table_cells' do
16
- def cells_text(line)
17
- Gherkin::GherkinLine.new(line, 12).table_cells.map(&:text)
18
- end
19
-
20
- it 'trims white spaces before cell content' do
21
- expect(cells_text("| \t spaces before|")).to eq(['spaces before'])
22
- end
23
-
24
- it 'trims white spaces after cell content' do
25
- expect(cells_text("|spaces after |")).to eq(['spaces after'])
26
- end
27
-
28
- it 'trims white spaces around cell content' do
29
- expect(cells_text("| \t spaces everywhere \t|")).to eq(['spaces everywhere'])
30
- end
31
-
32
- it 'does not drop white spaces inside a cell' do
33
- expect(cells_text("| foo()\n bar\nbaz |")).to eq(["foo()\n bar\nbaz"])
34
- end
35
- end
36
- end
@@ -1,45 +0,0 @@
1
- require 'rspec'
2
- require 'gherkin'
3
-
4
- describe Gherkin do
5
- it "can process feature file paths" do
6
- messages = Gherkin.from_paths(
7
- ["../testdata/good/minimal.feature"],
8
- {include_source: true,
9
- include_gherkin_document: true,
10
- include_pickles: true}
11
- ).to_a
12
-
13
- expect(messages.length).to eq(3)
14
- end
15
-
16
- it "can process feature file content" do
17
- data = File.open("../testdata/good/minimal.feature", 'r:UTF-8', &:read)
18
-
19
- messages = Gherkin.from_source(
20
- "uri",
21
- data,
22
- {include_source: true,
23
- include_gherkin_document: true,
24
- include_pickles: true}
25
- ).to_a
26
-
27
- expect(messages.length).to eq(3)
28
- end
29
-
30
- it "can set the default dialect for the feature file content" do
31
- data = File.open("../testdata/good/i18n_no.feature", 'r:UTF-8', &:read)
32
- data_without_language_header = data.split("\n")[1..-1].join("\n")
33
-
34
- messages = Gherkin.from_source(
35
- "uri",
36
- data,
37
- {include_source: true,
38
- include_gherkin_document: true,
39
- include_pickles: true,
40
- default_dialect: "no"}
41
- ).to_a
42
-
43
- expect(messages.length).to eq(3)
44
- end
45
- end
@@ -1,10 +0,0 @@
1
- require 'rspec'
2
- require 'gherkin'
3
-
4
- describe Gherkin::Parser do
5
- context '.new' do
6
- it 'can be invoked with no args' do
7
- Gherkin::Parser.new
8
- end
9
- end
10
- end
@@ -1,208 +0,0 @@
1
- require 'rspec'
2
- require 'gherkin'
3
- require 'gherkin/query'
4
-
5
- describe Gherkin::Query do
6
- let(:subject) { Gherkin::Query.new }
7
-
8
- def filter_messages_by_attribute(messages, attribute)
9
- messages.map do |message|
10
- return unless message.respond_to?(attribute)
11
- message.send(attribute)
12
- end.compact
13
- end
14
-
15
- def find_message_by_attribute(messages, attribute)
16
- filter_messages_by_attribute(messages, attribute).first
17
- end
18
-
19
- let(:gherkin_document) { find_message_by_attribute(messages, :gherkin_document) }
20
-
21
- let(:messages) do
22
- Gherkin.from_source(
23
- "some/path",
24
- feature_content,
25
- {
26
- include_gherkin_document: true
27
- }
28
- ).to_a
29
- end
30
-
31
- let(:feature_content) do
32
- """
33
- @feature-tag
34
- Feature: my feature
35
-
36
- Background:
37
- Given a passed background step
38
-
39
- @scenario-tag
40
- Scenario: my scenario
41
- Given a passed step
42
-
43
- Scenario Outline: with examples
44
- Given a <Status> step
45
-
46
- @examples-tag
47
- Examples:
48
- | Status |
49
- | passed |
50
- | failed |
51
-
52
- @rule-tag
53
- Rule: this is a rule
54
- Background:
55
- Given the passed step in the rule background
56
-
57
- @ruled-scenario-tag
58
- Scenario: a ruled scenario
59
- Given a step in the ruled scenario
60
- """
61
- end
62
-
63
- describe '#update' do
64
- context 'when the feature file is empty' do
65
- let(:feature_content) { '' }
66
-
67
- it 'does not fail' do
68
- expect do
69
- messages.each { |message| subject.update(message) }
70
- end.not_to raise_exception
71
- end
72
- end
73
- end
74
-
75
- describe '#scenario_parent_locations' do
76
- before do
77
- messages.each { |message| subject.update(message) }
78
- end
79
-
80
- let(:background) { find_message_by_attribute(gherkin_document.feature.children, :background) }
81
- let(:scenarios) { filter_messages_by_attribute(gherkin_document.feature.children, :scenario) }
82
-
83
- context 'without rule' do
84
- let(:scenario) { scenarios.first }
85
-
86
- it 'provides the feature and background locations of a given scenario node id' do
87
- expect(subject.scenario_parent_locations(scenario.id)).to eq([
88
- gherkin_document.feature.location,
89
- background.location,
90
- ])
91
- end
92
- end
93
-
94
- context 'with rule' do
95
- let(:rule) { find_message_by_attribute(gherkin_document.feature.children, :rule) }
96
- let(:rule_background) { find_message_by_attribute(rule.children, :background) }
97
- let(:scenario) { find_message_by_attribute(rule.children, :scenario) }
98
-
99
- it 'provides the feature, background, rule, and rule background locations of a given scenario node id' do
100
- expect(subject.scenario_parent_locations(scenario.id)).to eq([
101
- gherkin_document.feature.location,
102
- background.location,
103
- rule.location,
104
- rule_background.location,
105
- ])
106
- end
107
- end
108
-
109
- context 'in a scenario outline' do
110
- let(:scenario) { scenarios.last }
111
-
112
- it 'provides the feature and background locations of a given scenario outline node id' do
113
- expect(subject.scenario_parent_locations(scenario.id)).to eq([
114
- gherkin_document.feature.location,
115
- background.location,
116
- ])
117
- end
118
- end
119
-
120
- it 'raises an exception if called with an invalid id' do
121
- expect { subject.scenario_parent_locations("BAD") }.to raise_error(Gherkin::AstNodeNotLocatedException)
122
- end
123
- end
124
-
125
- describe '#location' do
126
- before do
127
- messages.each { |message| subject.update(message) }
128
- end
129
-
130
- let(:background) { find_message_by_attribute(gherkin_document.feature.children, :background) }
131
- let(:rule) { find_message_by_attribute(gherkin_document.feature.children, :rule) }
132
- let(:scenarios) { filter_messages_by_attribute(gherkin_document.feature.children, :scenario) }
133
- let(:scenario) { scenarios.first }
134
-
135
- it 'raises an exception when the AST node ID is unknown' do
136
- expect { subject.location("this-id-may-not-exist-for-real") }.to raise_exception(Gherkin::AstNodeNotLocatedException)
137
- end
138
-
139
- it 'provides the location of a scenario' do
140
- expect(subject.location(scenario.id)).to eq(scenario.location)
141
- end
142
-
143
- it 'provides the location of an examples table row' do
144
- node = scenarios.last.examples.first.table_body.first
145
- expect(subject.location(node.id)).to eq(node.location)
146
- end
147
-
148
- context 'when querying steps' do
149
- let(:background_step) { background.steps.first }
150
- let(:scenario_step) { scenario.steps.first }
151
-
152
- it 'provides the location of a background step' do
153
- expect(subject.location(background_step.id)).to eq(background_step.location)
154
- end
155
-
156
- it 'provides the location of a scenario step' do
157
- expect(subject.location(scenario_step.id)).to eq(scenario_step.location)
158
- end
159
- end
160
-
161
- context 'when querying tags' do
162
- let(:feature_tag) { gherkin_document.feature.tags.first }
163
- let(:rule_tag) { rule.tags.first }
164
- let(:scenario_tag) { scenario.tags.first }
165
- let(:examples_tag) { scenarios.last.examples.first.tags.first }
166
-
167
- it 'provides the location of a feature tags' do
168
- expect(subject.location(feature_tag.id)).to eq(feature_tag.location)
169
- end
170
-
171
- it 'provides the location of a scenario tags' do
172
- expect(subject.location(scenario_tag.id)).to eq(scenario_tag.location)
173
- end
174
-
175
- it 'provides the location of scenario examples tags' do
176
- expect(subject.location(examples_tag.id)).to eq(examples_tag.location)
177
- end
178
-
179
- it 'provides the location of a rule tag' do
180
- expect(subject.location(rule_tag.id)).to eq(rule_tag.location)
181
- end
182
- end
183
-
184
- context 'when children are scoped in a Rule' do
185
- let(:rule_background) { find_message_by_attribute(rule.children, :background) }
186
- let(:rule_background_step) { rule_background.steps.first }
187
- let(:rule_scenario) { find_message_by_attribute(rule.children, :scenario) }
188
- let(:rule_scenario_step) { rule_scenario.steps.first }
189
- let(:rule_scenario_tag) { rule_scenario.tags.first }
190
-
191
- it 'provides the location of a background step' do
192
- expect(subject.location(rule_background_step.id)).to eq(rule_background_step.location)
193
- end
194
-
195
- it 'provides the location of a scenario' do
196
- expect(subject.location(rule_scenario.id)).to eq(rule_scenario.location)
197
- end
198
-
199
- it 'provides the location of a scenario tag' do
200
- expect(subject.location(rule_scenario_tag.id)).to eq(rule_scenario_tag.location)
201
- end
202
-
203
- it 'provides the location of a scenario step' do
204
- expect(subject.location(rule_scenario_step.id)).to eq(rule_scenario_step.location)
205
- end
206
- end
207
- end
208
- end
@@ -1,67 +0,0 @@
1
- require 'rspec'
2
- require 'gherkin/stream/parser_message_stream'
3
-
4
- module Gherkin
5
- module Stream
6
- describe ParserMessageStream do
7
- let(:feature_content) {
8
- "Feature: my feature\n" \
9
- " Scenario: a scenario\n" \
10
- " Given some context"
11
- }
12
-
13
- let(:source_feature) {
14
- Cucumber::Messages::Source.new(
15
- uri: '//whatever/uri',
16
- data: feature_content,
17
- media_type: 'text/x.cucumber.gherkin+plain'
18
- )
19
- }
20
-
21
- let(:options) {
22
- {
23
- include_gherkin_document: true,
24
- }
25
- }
26
-
27
- let(:gherkin_document) {
28
- ParserMessageStream.new([], [source_feature], options).messages.first.gherkin_document
29
- }
30
-
31
- let(:scenario_id) { gherkin_document.feature.children.first.scenario.id }
32
-
33
- context '#messages' do
34
- it "raises an exception on second iteration" do
35
- messages = ParserMessageStream.new([], [source_feature], options).messages
36
-
37
- expect { messages.map(&:to_s) }.not_to raise_exception
38
- expect { messages.map(&:to_s) }.to raise_exception(Gherkin::DoubleIterationException)
39
- end
40
- end
41
-
42
- context 'options.id_generator' do
43
- context 'when not set' do
44
- it 'generates random UUIDs' do
45
- expect(scenario_id).to match(/[0-9a-fA-F]{8}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{12}/)
46
- end
47
- end
48
-
49
-
50
- context 'when set' do
51
- let(:id_generator) { double }
52
- let(:options) {
53
- {
54
- include_gherkin_document: true,
55
- id_generator: id_generator
56
- }
57
- }
58
-
59
- it 'uses the generator instance to produce the IDs' do
60
- allow(id_generator).to receive(:new_id).and_return('some-random-id')
61
- expect(scenario_id).to eq('some-random-id')
62
- end
63
- end
64
- end
65
- end
66
- end
67
- end