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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 92e8633ce3259f5f5667b48c7c6a90db7e26c3dd2c7b22ee4ce739557d8184d8
4
- data.tar.gz: cd3632fd9b741e133c307a0c9d346111374e23270ebdaddd61ba04274703e0f6
3
+ metadata.gz: 7f066daa131750379a87000be3403923d23d19bce878eb1691b0da2186097a89
4
+ data.tar.gz: aae3d31b3e3228638813562d1f6574f2d886fe82b8bded9758703979f0f33b6c
5
5
  SHA512:
6
- metadata.gz: e30b4e2d3810caded572fae28310668537ff81b33659fbd7a8b634ded7247d8f324eab81a67216c4093147dec31be93d986e1a30ee72d781ece050c1c27192c7
7
- data.tar.gz: 9837170de884a9f01c939f9fa005132db1ef44d91517f54726397cb6c3caac6316f0ca2dc537d1314fd8a7da04857a192f3c949a15210ac7c51433c7650879b8
6
+ metadata.gz: fb1517adbea8387bf7a9cd079943bac765c97ee258bf121b0fe0bdaeeba5851434c37ec0c1131923b7bd969e6abf49ee9aa18880d623383b04de882fccc750fd
7
+ data.tar.gz: d0e28f48adc93600dc502485c1ea935198bab88246545b792f36b7080b3deeab84ec5e683dcfd42623eb2e394328bd8fe37912958923bc2df2bcb21d481a41b5
@@ -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,
@@ -1,3 +1,4 @@
1
+ require 'cucumber/messages'
1
2
  require 'json'
2
3
 
3
4
  module Gherkin
@@ -967,9 +967,12 @@
967
967
  ],
968
968
  "when": [
969
969
  "* ",
970
- "Tha ",
971
- "Þa ",
972
- "Ða "
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
- scenario.steps.each do |step|
64
- steps.push(pickle_step(step))
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
- scenario.steps.each do |scenario_step|
88
- step_props = pickle_step_props(scenario_step, variable_cells, values_row)
89
- steps.push(Cucumber::Messages::PickleStep.new(**step_props))
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 pickle_steps(steps)
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, token.line.table_cells)
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
- set_token_matched(token, :StepLine, title, keyword)
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: 23.0.1
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-03-31 00:00:00.000000000 Z
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: '18.0'
21
+ version: '19.0'
22
22
  - - ">="
23
23
  - !ruby/object:Gem::Version
24
- version: 18.0.0
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: '18.0'
31
+ version: '19.0'
32
32
  - - ">="
33
33
  - !ruby/object:Gem::Version
34
- version: 18.0.0
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-23.0.1
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