cucumber-gherkin 23.0.1 → 24.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/gherkin/ast_builder.rb +1 -0
- data/lib/gherkin/dialect.rb +1 -0
- data/lib/gherkin/gherkin-languages.json +8 -5
- data/lib/gherkin/pickles/compiler.rb +30 -19
- data/lib/gherkin/token.rb +1 -1
- data/lib/gherkin/token_formatter_builder.rb +1 -1
- data/lib/gherkin/token_matcher.rb +29 -4
- data/spec/gherkin/gherkin_spec.rb +3 -3
- metadata +7 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7f066daa131750379a87000be3403923d23d19bce878eb1691b0da2186097a89
|
4
|
+
data.tar.gz: aae3d31b3e3228638813562d1f6574f2d886fe82b8bded9758703979f0f33b6c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fb1517adbea8387bf7a9cd079943bac765c97ee258bf121b0fe0bdaeeba5851434c37ec0c1131923b7bd969e6abf49ee9aa18880d623383b04de882fccc750fd
|
7
|
+
data.tar.gz: d0e28f48adc93600dc502485c1ea935198bab88246545b792f36b7080b3deeab84ec5e683dcfd42623eb2e394328bd8fe37912958923bc2df2bcb21d481a41b5
|
data/lib/gherkin/ast_builder.rb
CHANGED
@@ -116,6 +116,7 @@ module Gherkin
|
|
116
116
|
step = Cucumber::Messages::Step.new(
|
117
117
|
location: get_location(step_line, 0),
|
118
118
|
keyword: step_line.matched_keyword,
|
119
|
+
keyword_type: step_line.matched_keyword_type,
|
119
120
|
text: step_line.matched_text,
|
120
121
|
data_table: data_table,
|
121
122
|
doc_string: doc_string,
|
data/lib/gherkin/dialect.rb
CHANGED
@@ -967,9 +967,12 @@
|
|
967
967
|
],
|
968
968
|
"when": [
|
969
969
|
"* ",
|
970
|
-
"
|
971
|
-
"
|
972
|
-
"
|
970
|
+
"Bæþsealf ",
|
971
|
+
"Bæþsealfa ",
|
972
|
+
"Bæþsealfe ",
|
973
|
+
"Ciricæw ",
|
974
|
+
"Ciricæwe ",
|
975
|
+
"Ciricæwa "
|
973
976
|
]
|
974
977
|
},
|
975
978
|
"en-pirate": {
|
@@ -2395,7 +2398,7 @@
|
|
2395
2398
|
"and": [
|
2396
2399
|
"* ",
|
2397
2400
|
"र ",
|
2398
|
-
"
|
2401
|
+
"अनि "
|
2399
2402
|
],
|
2400
2403
|
"background": [
|
2401
2404
|
"पृष्ठभूमी"
|
@@ -3459,7 +3462,7 @@
|
|
3459
3462
|
],
|
3460
3463
|
"given": [
|
3461
3464
|
"* ",
|
3462
|
-
"
|
3465
|
+
"Belgilangan "
|
3463
3466
|
],
|
3464
3467
|
"name": "Uzbek",
|
3465
3468
|
"native": "Узбекча",
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'cucumber/messages'
|
2
|
+
|
1
3
|
module Gherkin
|
2
4
|
module Pickles
|
3
5
|
class Compiler
|
@@ -56,12 +58,17 @@ module Gherkin
|
|
56
58
|
end
|
57
59
|
|
58
60
|
def compile_scenario(inherited_tags, background_steps, scenario, language, pickles, source)
|
59
|
-
steps = scenario.steps.empty? ? [] : [].concat(pickle_steps(background_steps))
|
60
|
-
|
61
61
|
tags = [].concat(inherited_tags).concat(scenario.tags)
|
62
62
|
|
63
|
-
|
64
|
-
|
63
|
+
last_keyword_type = Cucumber::Messages::PickleStepType::UNKNOWN
|
64
|
+
steps = []
|
65
|
+
unless scenario.steps.empty?
|
66
|
+
[].concat(background_steps).concat(scenario.steps).each do |step|
|
67
|
+
last_keyword_type =
|
68
|
+
step.keyword_type == Cucumber::Messages::StepKeywordType::CONJUNCTION ?
|
69
|
+
last_keyword_type : step.keyword_type
|
70
|
+
steps.push(Cucumber::Messages::PickleStep.new(**pickle_step_props(step, [], nil, last_keyword_type)))
|
71
|
+
end
|
65
72
|
end
|
66
73
|
|
67
74
|
pickle = Cucumber::Messages::Pickle.new(
|
@@ -81,12 +88,25 @@ module Gherkin
|
|
81
88
|
variable_cells = examples.table_header.cells
|
82
89
|
examples.table_body.each do |values_row|
|
83
90
|
value_cells = values_row.cells
|
84
|
-
steps = scenario.steps.empty? ? [] : [].concat(pickle_steps(background_steps))
|
85
91
|
tags = [].concat(inherited_tags).concat(scenario.tags).concat(examples.tags)
|
86
92
|
|
87
|
-
|
88
|
-
|
89
|
-
|
93
|
+
last_keyword_type = nil
|
94
|
+
steps = []
|
95
|
+
unless scenario.steps.empty?
|
96
|
+
background_steps.each do |step|
|
97
|
+
last_keyword_type =
|
98
|
+
step.keyword_type == Cucumber::Messages::StepKeywordType::CONJUNCTION ?
|
99
|
+
last_keyword_type : step.keyword_type
|
100
|
+
step_props = pickle_step_props(step, [], nil, last_keyword_type)
|
101
|
+
steps.push(Cucumber::Messages::PickleStep.new(**step_props))
|
102
|
+
end
|
103
|
+
scenario.steps.each do |step|
|
104
|
+
last_keyword_type =
|
105
|
+
step.keyword_type == Cucumber::Messages::StepKeywordType::CONJUNCTION ?
|
106
|
+
last_keyword_type : step.keyword_type
|
107
|
+
step_props = pickle_step_props(step, variable_cells, values_row, last_keyword_type)
|
108
|
+
steps.push(Cucumber::Messages::PickleStep.new(**step_props))
|
109
|
+
end
|
90
110
|
end
|
91
111
|
|
92
112
|
pickle = Cucumber::Messages::Pickle.new(
|
@@ -115,21 +135,12 @@ module Gherkin
|
|
115
135
|
name
|
116
136
|
end
|
117
137
|
|
118
|
-
def
|
119
|
-
steps.map do |step|
|
120
|
-
pickle_step(step)
|
121
|
-
end
|
122
|
-
end
|
123
|
-
|
124
|
-
def pickle_step(step)
|
125
|
-
Cucumber::Messages::PickleStep.new(**pickle_step_props(step, [], nil))
|
126
|
-
end
|
127
|
-
|
128
|
-
def pickle_step_props(step, variable_cells, values_row)
|
138
|
+
def pickle_step_props(step, variable_cells, values_row, keyword_type)
|
129
139
|
value_cells = values_row ? values_row.cells : []
|
130
140
|
props = {
|
131
141
|
id: @id_generator.new_id,
|
132
142
|
ast_node_ids: [step.id],
|
143
|
+
type: keyword_type,
|
133
144
|
text: interpolate(step.text, variable_cells, value_cells),
|
134
145
|
}
|
135
146
|
if values_row
|
data/lib/gherkin/token.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
module Gherkin
|
2
2
|
class Token < Struct.new(:line, :location)
|
3
3
|
attr_accessor :matched_type, :matched_text, :matched_keyword, :matched_indent,
|
4
|
-
:matched_items, :matched_gherkin_dialect
|
4
|
+
:matched_items, :matched_gherkin_dialect, :matched_keyword_type
|
5
5
|
|
6
6
|
def eof?
|
7
7
|
line.nil?
|
@@ -30,7 +30,7 @@ module Gherkin
|
|
30
30
|
token.location[:line],
|
31
31
|
token.location[:column],
|
32
32
|
token.matched_type,
|
33
|
-
token.matched_keyword,
|
33
|
+
token.matched_keyword ? sprintf("(%s)%s", token.matched_keyword_type, token.matched_keyword) : "",
|
34
34
|
token.matched_text,
|
35
35
|
Array(token.matched_items).map { |i| "#{i.column}:#{i.text}"}.join(',')
|
36
36
|
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'cucumber/messages'
|
1
2
|
require_relative 'dialect'
|
2
3
|
require_relative 'errors'
|
3
4
|
|
@@ -20,7 +21,7 @@ module Gherkin
|
|
20
21
|
def match_TagLine(token)
|
21
22
|
return false unless token.line.start_with?('@')
|
22
23
|
|
23
|
-
set_token_matched(token, :TagLine, nil, nil, nil, token.line.tags)
|
24
|
+
set_token_matched(token, :TagLine, nil, nil, nil, nil, token.line.tags)
|
24
25
|
true
|
25
26
|
end
|
26
27
|
|
@@ -48,7 +49,8 @@ module Gherkin
|
|
48
49
|
def match_TableRow(token)
|
49
50
|
return false unless token.line.start_with?('|')
|
50
51
|
# TODO: indent
|
51
|
-
set_token_matched(token, :TableRow, nil, nil, nil,
|
52
|
+
set_token_matched(token, :TableRow, nil, nil, nil, nil,
|
53
|
+
token.line.table_cells)
|
52
54
|
true
|
53
55
|
end
|
54
56
|
|
@@ -128,18 +130,40 @@ module Gherkin
|
|
128
130
|
return false unless keyword
|
129
131
|
|
130
132
|
title = token.line.get_rest_trimmed(keyword.length)
|
131
|
-
|
133
|
+
keyword_types = @keyword_types[keyword]
|
134
|
+
keyword_type = keyword_types[0]
|
135
|
+
if keyword_types.length() > 1
|
136
|
+
keyword_type = Cucumber::Messages::StepKeywordType::UNKNOWN
|
137
|
+
end
|
138
|
+
|
139
|
+
set_token_matched(token,
|
140
|
+
:StepLine, title, keyword, nil, keyword_type)
|
132
141
|
return true
|
133
142
|
end
|
134
143
|
|
135
144
|
private
|
136
145
|
|
146
|
+
def add_keyword_type_mappings(keywords, type)
|
147
|
+
keywords.each do |keyword|
|
148
|
+
if not @keyword_types.has_key?(keyword)
|
149
|
+
@keyword_types[keyword] = []
|
150
|
+
end
|
151
|
+
@keyword_types[keyword] += [type]
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
137
155
|
def change_dialect(dialect_name, location)
|
138
156
|
dialect = Dialect.for(dialect_name)
|
139
157
|
raise NoSuchLanguageException.new(dialect_name, location) if dialect.nil?
|
140
158
|
|
141
159
|
@dialect_name = dialect_name
|
142
160
|
@dialect = dialect
|
161
|
+
@keyword_types = {}
|
162
|
+
add_keyword_type_mappings(@dialect.given_keywords, Cucumber::Messages::StepKeywordType::CONTEXT)
|
163
|
+
add_keyword_type_mappings(@dialect.when_keywords, Cucumber::Messages::StepKeywordType::ACTION)
|
164
|
+
add_keyword_type_mappings(@dialect.then_keywords, Cucumber::Messages::StepKeywordType::OUTCOME)
|
165
|
+
add_keyword_type_mappings(@dialect.and_keywords + @dialect.but_keywords,
|
166
|
+
Cucumber::Messages::StepKeywordType::CONJUNCTION)
|
143
167
|
end
|
144
168
|
|
145
169
|
def match_title_line(token, token_type, keywords)
|
@@ -152,12 +176,13 @@ module Gherkin
|
|
152
176
|
true
|
153
177
|
end
|
154
178
|
|
155
|
-
def set_token_matched(token, matched_type, text = nil, keyword = nil, indent = nil, items = [])
|
179
|
+
def set_token_matched(token, matched_type, text = nil, keyword = nil, indent = nil, keyword_type = nil, items = [])
|
156
180
|
token.matched_type = matched_type
|
157
181
|
token.matched_text = text && text.chomp
|
158
182
|
token.matched_keyword = keyword
|
159
183
|
token.matched_indent = indent || (token.line && token.line.indent) || 0
|
160
184
|
token.matched_items = items
|
185
|
+
token.matched_keyword_type = keyword_type
|
161
186
|
token.location[:column] = token.matched_indent + 1
|
162
187
|
token.matched_gherkin_dialect = @dialect_name
|
163
188
|
end
|
@@ -4,7 +4,7 @@ require 'gherkin'
|
|
4
4
|
describe Gherkin do
|
5
5
|
it "can process feature file paths" do
|
6
6
|
messages = Gherkin.from_paths(
|
7
|
-
["testdata/good/minimal.feature"],
|
7
|
+
["../testdata/good/minimal.feature"],
|
8
8
|
{include_source: true,
|
9
9
|
include_gherkin_document: true,
|
10
10
|
include_pickles: true}
|
@@ -14,7 +14,7 @@ describe Gherkin do
|
|
14
14
|
end
|
15
15
|
|
16
16
|
it "can process feature file content" do
|
17
|
-
data = File.open("testdata/good/minimal.feature", 'r:UTF-8', &:read)
|
17
|
+
data = File.open("../testdata/good/minimal.feature", 'r:UTF-8', &:read)
|
18
18
|
|
19
19
|
messages = Gherkin.from_source(
|
20
20
|
"uri",
|
@@ -28,7 +28,7 @@ describe Gherkin do
|
|
28
28
|
end
|
29
29
|
|
30
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)
|
31
|
+
data = File.open("../testdata/good/i18n_no.feature", 'r:UTF-8', &:read)
|
32
32
|
data_without_language_header = data.split("\n")[1..-1].join("\n")
|
33
33
|
|
34
34
|
messages = Gherkin.from_source(
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cucumber-gherkin
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 24.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gáspár Nagy
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2022-
|
13
|
+
date: 2022-05-31 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: cucumber-messages
|
@@ -18,20 +18,20 @@ dependencies:
|
|
18
18
|
requirements:
|
19
19
|
- - "~>"
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version: '
|
21
|
+
version: '19.0'
|
22
22
|
- - ">="
|
23
23
|
- !ruby/object:Gem::Version
|
24
|
-
version:
|
24
|
+
version: 19.0.0
|
25
25
|
type: :runtime
|
26
26
|
prerelease: false
|
27
27
|
version_requirements: !ruby/object:Gem::Requirement
|
28
28
|
requirements:
|
29
29
|
- - "~>"
|
30
30
|
- !ruby/object:Gem::Version
|
31
|
-
version: '
|
31
|
+
version: '19.0'
|
32
32
|
- - ">="
|
33
33
|
- !ruby/object:Gem::Version
|
34
|
-
version:
|
34
|
+
version: 19.0.0
|
35
35
|
- !ruby/object:Gem::Dependency
|
36
36
|
name: rake
|
37
37
|
requirement: !ruby/object:Gem::Requirement
|
@@ -134,7 +134,7 @@ requirements: []
|
|
134
134
|
rubygems_version: 3.1.2
|
135
135
|
signing_key:
|
136
136
|
specification_version: 4
|
137
|
-
summary: cucumber-gherkin-
|
137
|
+
summary: cucumber-gherkin-24.0.0
|
138
138
|
test_files:
|
139
139
|
- spec/capture_warnings.rb
|
140
140
|
- spec/gherkin/gherkin_line_spec.rb
|