cuke_modeler 1.3.0 → 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. checksums.yaml +5 -5
  2. data/.travis.yml +16 -0
  3. data/Gemfile +11 -3
  4. data/History.md +5 -0
  5. data/LICENSE.txt +1 -1
  6. data/Rakefile +8 -1
  7. data/appveyor.yml +7 -12
  8. data/cuke_modeler.gemspec +2 -2
  9. data/lib/cuke_modeler/adapters/gherkin_6_adapter.rb +309 -0
  10. data/lib/cuke_modeler/parsing.rb +28 -5
  11. data/lib/cuke_modeler/version.rb +1 -1
  12. data/testing/cucumber/step_definitions/feature_file_steps.rb +1 -1
  13. data/testing/cucumber/step_definitions/modeling_steps.rb +2 -2
  14. data/testing/cucumber/step_definitions/verification_steps.rb +3 -2
  15. data/testing/file_helper.rb +3 -0
  16. data/testing/gemfiles/gherkin2.gemfile +7 -0
  17. data/testing/gemfiles/gherkin3.gemfile +6 -0
  18. data/testing/gemfiles/gherkin4.gemfile +7 -0
  19. data/testing/gemfiles/gherkin5.gemfile +6 -0
  20. data/testing/gemfiles/gherkin6.gemfile +10 -0
  21. data/testing/rspec/spec/integration/background_integration_spec.rb +80 -72
  22. data/testing/rspec/spec/integration/cell_integration_spec.rb +28 -20
  23. data/testing/rspec/spec/integration/comment_integration_spec.rb +11 -3
  24. data/testing/rspec/spec/integration/directory_integration_spec.rb +2 -2
  25. data/testing/rspec/spec/integration/doc_string_integration_spec.rb +26 -18
  26. data/testing/rspec/spec/integration/example_integration_spec.rb +75 -61
  27. data/testing/rspec/spec/integration/feature_file_integration_spec.rb +30 -20
  28. data/testing/rspec/spec/integration/feature_integration_spec.rb +106 -98
  29. data/testing/rspec/spec/integration/gherkin_2_adapter_spec.rb +11 -11
  30. data/testing/rspec/spec/integration/gherkin_3_adapter_spec.rb +11 -11
  31. data/testing/rspec/spec/integration/gherkin_4_adapter_spec.rb +12 -12
  32. data/testing/rspec/spec/integration/gherkin_6_adapter_spec.rb +166 -0
  33. data/testing/rspec/spec/integration/outline_integration_spec.rb +116 -102
  34. data/testing/rspec/spec/integration/parsing_integration_spec.rb +16 -4
  35. data/testing/rspec/spec/integration/row_integration_spec.rb +26 -18
  36. data/testing/rspec/spec/integration/scenario_integration_spec.rb +82 -74
  37. data/testing/rspec/spec/integration/step_integration_spec.rb +65 -49
  38. data/testing/rspec/spec/integration/table_integration_spec.rb +25 -17
  39. data/testing/rspec/spec/integration/tag_integration_spec.rb +27 -19
  40. data/testing/rspec/spec/spec_helper.rb +64 -35
  41. data/todo.txt +3 -1
  42. metadata +10 -8
  43. data/testing/cucumber/support/transforms.rb +0 -3
@@ -44,7 +44,15 @@ describe 'Cell, Integration' do
44
44
  expect { clazz.new(source) }.to raise_error(/'cuke_modeler_stand_alone_cell\.feature'/)
45
45
  end
46
46
 
47
- it 'stores the original data generated by the parsing adapter', :gherkin4 => true do
47
+ it 'stores the original data generated by the parsing adapter', :gherkin6 => true do
48
+ cell = clazz.new('a cell')
49
+ data = cell.parsing_data
50
+
51
+ expect(data.keys).to match_array([:location, :value])
52
+ expect(data[:value]).to eq('a cell')
53
+ end
54
+
55
+ it 'stores the original data generated by the parsing adapter', :gherkin4_5 => true do
48
56
  cell = clazz.new('a cell')
49
57
  data = cell.parsing_data
50
58
 
@@ -77,10 +85,10 @@ describe 'Cell, Integration' do
77
85
 
78
86
 
79
87
  let(:test_directory) { CukeModeler::FileHelper.create_directory }
80
- let(:source_gherkin) { "#{@feature_keyword}: Test feature
88
+ let(:source_gherkin) { "#{FEATURE_KEYWORD}: Test feature
81
89
 
82
- #{@scenario_keyword}: Test test
83
- #{@step_keyword} a step
90
+ #{SCENARIO_KEYWORD}: Test test
91
+ #{STEP_KEYWORD} a step
84
92
  | a value |"
85
93
  }
86
94
 
@@ -109,11 +117,11 @@ describe 'Cell, Integration' do
109
117
  context 'a cell that is part of an outline' do
110
118
 
111
119
  let(:test_directory) { CukeModeler::FileHelper.create_directory }
112
- let(:source_gherkin) { "#{@feature_keyword}: Test feature
120
+ let(:source_gherkin) { "#{FEATURE_KEYWORD}: Test feature
113
121
 
114
- #{@outline_keyword}: Test outline
115
- #{@step_keyword} a step
116
- #{@example_keyword}:
122
+ #{OUTLINE_KEYWORD}: Test outline
123
+ #{STEP_KEYWORD} a step
124
+ #{EXAMPLE_KEYWORD}:
117
125
  | param |
118
126
  | value |"
119
127
  }
@@ -146,10 +154,10 @@ describe 'Cell, Integration' do
146
154
  context 'a cell that is part of a scenario' do
147
155
 
148
156
  let(:test_directory) { CukeModeler::FileHelper.create_directory }
149
- let(:source_gherkin) { "#{@feature_keyword}: Test feature
157
+ let(:source_gherkin) { "#{FEATURE_KEYWORD}: Test feature
150
158
 
151
- #{@scenario_keyword}: Test test
152
- #{@step_keyword} a step:
159
+ #{SCENARIO_KEYWORD}: Test test
160
+ #{STEP_KEYWORD} a step:
153
161
  | a | table |"
154
162
  }
155
163
 
@@ -168,10 +176,10 @@ describe 'Cell, Integration' do
168
176
  context 'a cell that is part of a background' do
169
177
 
170
178
  let(:test_directory) { CukeModeler::FileHelper.create_directory }
171
- let(:source_gherkin) { "#{@feature_keyword}: Test feature
179
+ let(:source_gherkin) { "#{FEATURE_KEYWORD}: Test feature
172
180
 
173
- #{@background_keyword}: Test background
174
- #{@step_keyword} a step:
181
+ #{BACKGROUND_KEYWORD}: Test background
182
+ #{STEP_KEYWORD} a step:
175
183
  | a | table |"
176
184
  }
177
185
 
@@ -190,10 +198,10 @@ describe 'Cell, Integration' do
190
198
  context 'a cell that is part of a step' do
191
199
 
192
200
  let(:test_directory) { CukeModeler::FileHelper.create_directory }
193
- let(:source_gherkin) { "#{@feature_keyword}: Test feature
201
+ let(:source_gherkin) { "#{FEATURE_KEYWORD}: Test feature
194
202
 
195
- #{@scenario_keyword}: Test test
196
- #{@step_keyword} a step:
203
+ #{SCENARIO_KEYWORD}: Test test
204
+ #{STEP_KEYWORD} a step:
197
205
  | a | table |"
198
206
  }
199
207
 
@@ -243,10 +251,10 @@ describe 'Cell, Integration' do
243
251
  end
244
252
 
245
253
  it "models the cell's source line" do
246
- source_text = "#{@feature_keyword}:
254
+ source_text = "#{FEATURE_KEYWORD}:
247
255
 
248
- #{@scenario_keyword}:
249
- #{@step_keyword} a step
256
+ #{SCENARIO_KEYWORD}:
257
+ #{STEP_KEYWORD} a step
250
258
  | value |"
251
259
  cell = CukeModeler::Feature.new(source_text).tests.first.steps.first.block.rows.first.cells.first
252
260
 
@@ -44,7 +44,15 @@ describe 'Comment, Integration' do
44
44
  expect { clazz.new(source) }.to raise_error(/'cuke_modeler_stand_alone_comment\.feature'/)
45
45
  end
46
46
 
47
- it 'stores the original data generated by the parsing adapter', :gherkin4 => true do
47
+ it 'stores the original data generated by the parsing adapter', :gherkin6 => true do
48
+ comment = clazz.new('# a comment')
49
+ data = comment.parsing_data
50
+
51
+ expect(data.keys).to match_array([:location, :text])
52
+ expect(data[:text]).to eq('# a comment')
53
+ end
54
+
55
+ it 'stores the original data generated by the parsing adapter', :gherkin4_5 => true do
48
56
  comment = clazz.new('# a comment')
49
57
  data = comment.parsing_data
50
58
 
@@ -77,7 +85,7 @@ describe 'Comment, Integration' do
77
85
 
78
86
  let(:test_directory) { CukeModeler::FileHelper.create_directory }
79
87
  let(:source_gherkin) { "# feature comment
80
- #{@feature_keyword}: Test feature"
88
+ #{FEATURE_KEYWORD}: Test feature"
81
89
  }
82
90
 
83
91
  let(:directory_model) { CukeModeler::Directory.new(test_directory) }
@@ -119,7 +127,7 @@ describe 'Comment, Integration' do
119
127
 
120
128
  it "models the comment's source line" do
121
129
  source_text = "# a comment
122
- #{@feature_keyword}:"
130
+ #{FEATURE_KEYWORD}:"
123
131
 
124
132
  test_file_path = CukeModeler::FileHelper.create_feature_file(:text => source_text, :name => 'comment_test_file')
125
133
  comment = CukeModeler::FeatureFile.new(test_file_path).comments.first
@@ -46,7 +46,7 @@ describe 'Directory, Integration' do
46
46
  before(:each) do
47
47
  feature_files.each do |file_name|
48
48
  # Some versions of Gherkin require feature content to be present in feature files
49
- CukeModeler::FileHelper.create_feature_file(:text => "#{@feature_keyword}: Test feature", :name => file_name, :directory => directory_path)
49
+ CukeModeler::FileHelper.create_feature_file(:text => "#{FEATURE_KEYWORD}: Test feature", :name => file_name, :directory => directory_path)
50
50
  end
51
51
 
52
52
  non_feature_files.each do |file_name|
@@ -146,7 +146,7 @@ describe 'Directory, Integration' do
146
146
  directory_path = CukeModeler::FileHelper.create_directory
147
147
  _nested_directory_path = CukeModeler::FileHelper.create_directory(:name => 'nested_directory', :directory => directory_path)
148
148
 
149
- CukeModeler::FileHelper.create_feature_file(:text => "#{@feature_keyword}: Test feature", :name => 'test_file', :directory => directory_path)
149
+ CukeModeler::FileHelper.create_feature_file(:text => "#{FEATURE_KEYWORD}: Test feature", :name => 'test_file', :directory => directory_path)
150
150
 
151
151
 
152
152
  directory_model = clazz.new(directory_path)
@@ -43,7 +43,15 @@ describe 'DocString, Integration' do
43
43
  expect { clazz.new(source) }.to raise_error(/'cuke_modeler_stand_alone_doc_string\.feature'/)
44
44
  end
45
45
 
46
- it 'stores the original data generated by the parsing adapter', :gherkin4 => true do
46
+ it 'stores the original data generated by the parsing adapter', :gherkin6 => true do
47
+ doc_string = clazz.new("\"\"\" content type\nsome doc string\n\"\"\"")
48
+ data = doc_string.parsing_data
49
+
50
+ expect(data.keys).to match_array([:location, :content, :content_type, :delimiter])
51
+ expect(data[:content]).to eq('some doc string')
52
+ end
53
+
54
+ it 'stores the original data generated by the parsing adapter', :gherkin4_5 => true do
47
55
  doc_string = clazz.new("\"\"\" content type\nsome doc string\n\"\"\"")
48
56
  data = doc_string.parsing_data
49
57
 
@@ -85,10 +93,10 @@ describe 'DocString, Integration' do
85
93
 
86
94
 
87
95
  let(:test_directory) { CukeModeler::FileHelper.create_directory }
88
- let(:source_gherkin) { "#{@feature_keyword}: Test feature
96
+ let(:source_gherkin) { "#{FEATURE_KEYWORD}: Test feature
89
97
 
90
- #{@scenario_keyword}: Test test
91
- #{@step_keyword} a big step:
98
+ #{SCENARIO_KEYWORD}: Test test
99
+ #{STEP_KEYWORD} a big step:
92
100
  \"\"\"
93
101
  a
94
102
  doc
@@ -121,10 +129,10 @@ describe 'DocString, Integration' do
121
129
  context 'a doc string that is part of a scenario' do
122
130
 
123
131
  let(:test_directory) { CukeModeler::FileHelper.create_directory }
124
- let(:source_gherkin) { "#{@feature_keyword}: Test feature
132
+ let(:source_gherkin) { "#{FEATURE_KEYWORD}: Test feature
125
133
 
126
- #{@scenario_keyword}: Test test
127
- #{@step_keyword} a big step:
134
+ #{SCENARIO_KEYWORD}: Test test
135
+ #{STEP_KEYWORD} a big step:
128
136
  \"\"\"
129
137
  a
130
138
  doc
@@ -147,16 +155,16 @@ describe 'DocString, Integration' do
147
155
  context 'a doc string that is part of an outline' do
148
156
 
149
157
  let(:test_directory) { CukeModeler::FileHelper.create_directory }
150
- let(:source_gherkin) { "#{@feature_keyword}: Test feature
158
+ let(:source_gherkin) { "#{FEATURE_KEYWORD}: Test feature
151
159
 
152
- #{@outline_keyword}: Test outline
153
- #{@step_keyword} a big step:
160
+ #{OUTLINE_KEYWORD}: Test outline
161
+ #{STEP_KEYWORD} a big step:
154
162
  \"\"\"
155
163
  a
156
164
  doc
157
165
  string
158
166
  \"\"\"
159
- #{@example_keyword}:
167
+ #{EXAMPLE_KEYWORD}:
160
168
  | param |
161
169
  | value |"
162
170
  }
@@ -176,10 +184,10 @@ describe 'DocString, Integration' do
176
184
  context 'a doc string that is part of a background' do
177
185
 
178
186
  let(:test_directory) { CukeModeler::FileHelper.create_directory }
179
- let(:source_gherkin) { "#{@feature_keyword}: Test feature
187
+ let(:source_gherkin) { "#{FEATURE_KEYWORD}: Test feature
180
188
 
181
- #{@background_keyword}: Test background
182
- #{@step_keyword} a big step:
189
+ #{BACKGROUND_KEYWORD}: Test background
190
+ #{STEP_KEYWORD} a big step:
183
191
  \"\"\"
184
192
  a
185
193
  doc
@@ -253,10 +261,10 @@ describe 'DocString, Integration' do
253
261
  end
254
262
 
255
263
  it "models the doc string's source line" do
256
- source_text = "#{@feature_keyword}:
264
+ source_text = "#{FEATURE_KEYWORD}:
257
265
 
258
- #{@scenario_keyword}:
259
- #{@step_keyword} step
266
+ #{SCENARIO_KEYWORD}:
267
+ #{STEP_KEYWORD} step
260
268
  \"\"\"
261
269
  foo
262
270
  \"\"\""
@@ -274,7 +282,7 @@ describe 'DocString, Integration' do
274
282
 
275
283
  it 'can be remade from its own output' do
276
284
  source = ['"""" the type',
277
- "#{@step_keyword} a step",
285
+ "#{STEP_KEYWORD} a step",
278
286
  ' \"\"\"',
279
287
  ' that also has a doc string',
280
288
  ' \"\"\"',
@@ -15,14 +15,20 @@ describe 'Example, Integration' do
15
15
 
16
16
  describe 'unique behavior' do
17
17
 
18
- it 'can be instantiated with the minimum viable Gherkin', :gherkin4 => true do
19
- source = "#{@example_keyword}:"
18
+ it 'can be instantiated with the minimum viable Gherkin', :gherkin6 => true do
19
+ source = "#{EXAMPLE_KEYWORD}:"
20
+
21
+ expect { @model = clazz.new(source) }.to_not raise_error
22
+ end
23
+
24
+ it 'can be instantiated with the minimum viable Gherkin', :gherkin4_5 => true do
25
+ source = "#{EXAMPLE_KEYWORD}:"
20
26
 
21
27
  expect { @model = clazz.new(source) }.to_not raise_error
22
28
  end
23
29
 
24
30
  it 'can be instantiated with the minimum viable Gherkin', :gherkin3 => true do
25
- source = "#{@example_keyword}:
31
+ source = "#{EXAMPLE_KEYWORD}:
26
32
  |param|
27
33
  |value|"
28
34
 
@@ -30,7 +36,7 @@ describe 'Example, Integration' do
30
36
  end
31
37
 
32
38
  it 'can be instantiated with the minimum viable Gherkin', :gherkin2 => true do
33
- source = "#{@example_keyword}:
39
+ source = "#{EXAMPLE_KEYWORD}:
34
40
  |param|"
35
41
 
36
42
  expect { @model = clazz.new(source) }.to_not raise_error
@@ -55,8 +61,16 @@ describe 'Example, Integration' do
55
61
  end
56
62
  end
57
63
 
58
- it 'stores the original data generated by the parsing adapter', :gherkin4 => true do
59
- example = clazz.new("@tag\n#{@example_keyword}: test example\ndescription\n|param|\n|value|")
64
+ it 'stores the original data generated by the parsing adapter', :gherkin6 => true do
65
+ example = clazz.new("@tag\n#{EXAMPLE_KEYWORD}: test example\ndescription\n|param|\n|value|")
66
+ data = example.parsing_data
67
+
68
+ expect(data.keys).to match_array([:tags, :location, :keyword, :name, :table_header, :table_body, :description])
69
+ expect(data[:name]).to eq('test example')
70
+ end
71
+
72
+ it 'stores the original data generated by the parsing adapter', :gherkin4_5 => true do
73
+ example = clazz.new("@tag\n#{EXAMPLE_KEYWORD}: test example\ndescription\n|param|\n|value|")
60
74
  data = example.parsing_data
61
75
 
62
76
  expect(data.keys).to match_array([:type, :tags, :location, :keyword, :name, :tableHeader, :tableBody, :description])
@@ -64,7 +78,7 @@ describe 'Example, Integration' do
64
78
  end
65
79
 
66
80
  it 'stores the original data generated by the parsing adapter', :gherkin3 => true do
67
- example = clazz.new("@tag\n#{@example_keyword}: test example\ndescription\n|param|\n|value|")
81
+ example = clazz.new("@tag\n#{EXAMPLE_KEYWORD}: test example\ndescription\n|param|\n|value|")
68
82
  data = example.parsing_data
69
83
 
70
84
  expect(data.keys).to match_array([:type, :tags, :location, :keyword, :name, :tableHeader, :tableBody, :description])
@@ -72,7 +86,7 @@ describe 'Example, Integration' do
72
86
  end
73
87
 
74
88
  it 'stores the original data generated by the parsing adapter', :gherkin2 => true do
75
- example = clazz.new("@tag\n#{@example_keyword}: test example\ndescription\n|param|\n|value|")
89
+ example = clazz.new("@tag\n#{EXAMPLE_KEYWORD}: test example\ndescription\n|param|\n|value|")
76
90
  data = example.parsing_data
77
91
 
78
92
  expect(data.keys).to match_array(['keyword', 'name', 'line', 'description', 'id', 'rows', 'tags'])
@@ -86,7 +100,7 @@ describe 'Example, Integration' do
86
100
  end
87
101
 
88
102
  it 'trims whitespace from its source description' do
89
- source = ["#{@example_keyword}:",
103
+ source = ["#{EXAMPLE_KEYWORD}:",
90
104
  ' ',
91
105
  ' description line 1',
92
106
  '',
@@ -113,21 +127,21 @@ describe 'Example, Integration' do
113
127
 
114
128
  context 'from source text' do
115
129
 
116
- let(:source_text) { "#{@example_keyword}:" }
130
+ let(:source_text) { "#{EXAMPLE_KEYWORD}:" }
117
131
  let(:example) { clazz.new(source_text) }
118
132
 
119
133
 
120
134
  # gherkin 2.x/3.x does not accept incomplete examples
121
135
  it "models the example's keyword", :gherkin2 => false, :gherkin3 => false do
122
- expect(example.keyword).to eq("#{@example_keyword}")
136
+ expect(example.keyword).to eq("#{EXAMPLE_KEYWORD}")
123
137
  end
124
138
 
125
139
  it "models the example's source line" do
126
- source_text = "#{@feature_keyword}:
140
+ source_text = "#{FEATURE_KEYWORD}:
127
141
 
128
- #{@outline_keyword}:
129
- #{@step_keyword} step
130
- #{@example_keyword}:
142
+ #{OUTLINE_KEYWORD}:
143
+ #{STEP_KEYWORD} step
144
+ #{EXAMPLE_KEYWORD}:
131
145
  | param |
132
146
  | value |"
133
147
  example = CukeModeler::Feature.new(source_text).tests.first.examples.first
@@ -139,7 +153,7 @@ describe 'Example, Integration' do
139
153
  context 'a filled example' do
140
154
 
141
155
  let(:source_text) { "@tag1 @tag2 @tag3
142
- #{@example_keyword}: test example
156
+ #{EXAMPLE_KEYWORD}: test example
143
157
 
144
158
  Some example description.
145
159
 
@@ -185,7 +199,7 @@ describe 'Example, Integration' do
185
199
  # gherkin 2.x/3.x does not accept incomplete examples
186
200
  context 'an empty example', :gherkin2 => false, :gherkin3 => false do
187
201
 
188
- let(:source_text) { "#{@example_keyword}:" }
202
+ let(:source_text) { "#{EXAMPLE_KEYWORD}:" }
189
203
  let(:example) { clazz.new(source_text) }
190
204
 
191
205
 
@@ -214,7 +228,7 @@ describe 'Example, Integration' do
214
228
 
215
229
  it 'properly sets its child models' do
216
230
  source = "@a_tag
217
- #{@example_keyword}:
231
+ #{EXAMPLE_KEYWORD}:
218
232
  | param |
219
233
  | value 1 |"
220
234
 
@@ -228,7 +242,7 @@ describe 'Example, Integration' do
228
242
  end
229
243
 
230
244
  it 'does not include the parameter row when accessing argument rows' do
231
- source = "#{@example_keyword}:\n|param1|param2|\n|value1|value2|\n|value3|value4|"
245
+ source = "#{EXAMPLE_KEYWORD}:\n|param1|param2|\n|value1|value2|\n|value3|value4|"
232
246
  example = clazz.new(source)
233
247
 
234
248
  rows = example.argument_rows
@@ -238,7 +252,7 @@ describe 'Example, Integration' do
238
252
  end
239
253
 
240
254
  it 'does not include argument rows when accessing the parameter row' do
241
- source = "#{@example_keyword}:\n|param1|param2|\n|value1|value2|\n|value3|value4|"
255
+ source = "#{EXAMPLE_KEYWORD}:\n|param1|param2|\n|value1|value2|\n|value3|value4|"
242
256
  example = clazz.new(source)
243
257
 
244
258
  row = example.parameter_row
@@ -251,7 +265,7 @@ describe 'Example, Integration' do
251
265
  describe 'adding rows' do
252
266
 
253
267
  it 'can add a new row as a hash, string values' do
254
- source = "#{@example_keyword}:\n|param1|param2|\n|value1|value2|"
268
+ source = "#{EXAMPLE_KEYWORD}:\n|param1|param2|\n|value1|value2|"
255
269
  example = clazz.new(source)
256
270
 
257
271
  new_row = {'param1' => 'value3', 'param2' => 'value4'}
@@ -262,7 +276,7 @@ describe 'Example, Integration' do
262
276
  end
263
277
 
264
278
  it 'can add a new row as a hash, non-string values' do
265
- source = "#{@example_keyword}:\n|param1|param2|\n|value1|value2|"
279
+ source = "#{EXAMPLE_KEYWORD}:\n|param1|param2|\n|value1|value2|"
266
280
  example = clazz.new(source)
267
281
 
268
282
  new_row = {:param1 => 'value3', 'param2' => 4}
@@ -273,7 +287,7 @@ describe 'Example, Integration' do
273
287
  end
274
288
 
275
289
  it 'can add a new row as a hash, random key order' do
276
- source = "#{@example_keyword}:\n|param1|param2|\n|value1|value2|"
290
+ source = "#{EXAMPLE_KEYWORD}:\n|param1|param2|\n|value1|value2|"
277
291
  example = clazz.new(source)
278
292
 
279
293
  new_row = {'param2' => 'value4', 'param1' => 'value3'}
@@ -284,7 +298,7 @@ describe 'Example, Integration' do
284
298
  end
285
299
 
286
300
  it 'can add a new row as an array, string values' do
287
- source = "#{@example_keyword}:\n|param1|param2|\n|value1|value2|"
301
+ source = "#{EXAMPLE_KEYWORD}:\n|param1|param2|\n|value1|value2|"
288
302
  example = clazz.new(source)
289
303
 
290
304
  new_row = ['value3', 'value4']
@@ -295,7 +309,7 @@ describe 'Example, Integration' do
295
309
  end
296
310
 
297
311
  it 'can add a new row as an array, non-string values' do
298
- source = "#{@example_keyword}:\n|param1|param2|param3|\n|value1|value2|value3|"
312
+ source = "#{EXAMPLE_KEYWORD}:\n|param1|param2|param3|\n|value1|value2|value3|"
299
313
  example = clazz.new(source)
300
314
 
301
315
  new_row = [:value4, 5, 'value6']
@@ -306,7 +320,7 @@ describe 'Example, Integration' do
306
320
  end
307
321
 
308
322
  it 'can only use a Hash or an Array to add a new row' do
309
- source = "#{@example_keyword}:\n|param|\n|value|"
323
+ source = "#{EXAMPLE_KEYWORD}:\n|param|\n|value|"
310
324
  example = clazz.new(source)
311
325
 
312
326
  expect { example.add_row({}) }.to_not raise_error
@@ -315,7 +329,7 @@ describe 'Example, Integration' do
315
329
  end
316
330
 
317
331
  it 'trims whitespace from added rows' do
318
- source = "#{@example_keyword}:\n|param1|param2|\n|value1|value2|"
332
+ source = "#{EXAMPLE_KEYWORD}:\n|param1|param2|\n|value1|value2|"
319
333
  example = clazz.new(source)
320
334
 
321
335
  hash_row = {'param1' => 'value3 ', 'param2' => ' value4'}
@@ -339,7 +353,7 @@ describe 'Example, Integration' do
339
353
  end
340
354
 
341
355
  it 'does not modify its row input' do
342
- source = "#{@example_keyword}:\n|param1|param2|\n|value1|value2|"
356
+ source = "#{EXAMPLE_KEYWORD}:\n|param1|param2|\n|value1|value2|"
343
357
  example = clazz.new(source)
344
358
 
345
359
  array_row = ['value1'.freeze, 'value2'.freeze].freeze
@@ -355,7 +369,7 @@ describe 'Example, Integration' do
355
369
  describe 'removing rows' do
356
370
 
357
371
  it 'can remove an existing row as a hash' do
358
- source = "#{@example_keyword}:\n|param1|param2|\n|value1|value2|\n|value3|value4|"
372
+ source = "#{EXAMPLE_KEYWORD}:\n|param1|param2|\n|value1|value2|\n|value3|value4|"
359
373
  example = clazz.new(source)
360
374
 
361
375
  old_row = {'param1' => 'value3', 'param2' => 'value4'}
@@ -366,7 +380,7 @@ describe 'Example, Integration' do
366
380
  end
367
381
 
368
382
  it 'can remove an existing row as a hash, random key order' do
369
- source = "#{@example_keyword}:\n|param1|param2|\n|value1|value2|\n|value3|value4|"
383
+ source = "#{EXAMPLE_KEYWORD}:\n|param1|param2|\n|value1|value2|\n|value3|value4|"
370
384
  example = clazz.new(source)
371
385
 
372
386
  old_row = {'param2' => 'value4', 'param1' => 'value3'}
@@ -377,7 +391,7 @@ describe 'Example, Integration' do
377
391
  end
378
392
 
379
393
  it 'can remove an existing row as an array' do
380
- source = "#{@example_keyword}:\n|param1|param2|\n|value1|value2|\n|value3|value4|"
394
+ source = "#{EXAMPLE_KEYWORD}:\n|param1|param2|\n|value1|value2|\n|value3|value4|"
381
395
  example = clazz.new(source)
382
396
 
383
397
  old_row = ['value3', 'value4']
@@ -394,7 +408,7 @@ describe 'Example, Integration' do
394
408
  end
395
409
 
396
410
  it 'trims whitespace from removed rows' do
397
- source = "#{@example_keyword}:\n|param1|param2|\n|value1|value2|\n|value3|value4|\n|value5|value6|"
411
+ source = "#{EXAMPLE_KEYWORD}:\n|param1|param2|\n|value1|value2|\n|value3|value4|\n|value5|value6|"
398
412
  example = clazz.new(source)
399
413
 
400
414
  # These will affect different rows
@@ -417,7 +431,7 @@ describe 'Example, Integration' do
417
431
  end
418
432
 
419
433
  it 'will not remove the parameter row' do
420
- source = "#{@example_keyword}:\n|param1|param2|\n|value1|value2|"
434
+ source = "#{EXAMPLE_KEYWORD}:\n|param1|param2|\n|value1|value2|"
421
435
  example = clazz.new(source)
422
436
 
423
437
  hash_row = {'param1' => 'param1', 'param2' => 'param2'}
@@ -435,7 +449,7 @@ describe 'Example, Integration' do
435
449
  end
436
450
 
437
451
  it 'will remove an argument row that is the same as the parameter row' do
438
- source = "#{@example_keyword}:\n|param1|param2|\n|value1|value2|\n|param1|param2|"
452
+ source = "#{EXAMPLE_KEYWORD}:\n|param1|param2|\n|value1|value2|\n|param1|param2|"
439
453
  example = clazz.new(source)
440
454
 
441
455
  hash_row = {'param1' => 'param1', 'param2' => 'param2'}
@@ -463,11 +477,11 @@ describe 'Example, Integration' do
463
477
 
464
478
 
465
479
  let(:test_directory) { CukeModeler::FileHelper.create_directory }
466
- let(:source_gherkin) { "#{@feature_keyword}: Test feature
480
+ let(:source_gherkin) { "#{FEATURE_KEYWORD}: Test feature
467
481
 
468
- #{@outline_keyword}: Test test
469
- #{@step_keyword} a step
470
- #{@example_keyword}: Test example
482
+ #{OUTLINE_KEYWORD}: Test test
483
+ #{STEP_KEYWORD} a step
484
+ #{EXAMPLE_KEYWORD}: Test example
471
485
  | a param |
472
486
  | a value |"
473
487
  }
@@ -497,11 +511,11 @@ describe 'Example, Integration' do
497
511
  context 'an example that is part of an outline' do
498
512
 
499
513
  let(:test_directory) { CukeModeler::FileHelper.create_directory }
500
- let(:source_gherkin) { "#{@feature_keyword}: Test feature
514
+ let(:source_gherkin) { "#{FEATURE_KEYWORD}: Test feature
501
515
 
502
- #{@outline_keyword}: Test outline
503
- #{@step_keyword} a step
504
- #{@example_keyword}:
516
+ #{OUTLINE_KEYWORD}: Test outline
517
+ #{STEP_KEYWORD} a step
518
+ #{EXAMPLE_KEYWORD}:
505
519
  | param |
506
520
  | value |"
507
521
  }
@@ -531,7 +545,7 @@ describe 'Example, Integration' do
531
545
 
532
546
  it 'can be remade from its own output' do
533
547
  source = "@tag1 @tag2 @tag3
534
- #{@example_keyword}: with everything it could have
548
+ #{EXAMPLE_KEYWORD}: with everything it could have
535
549
 
536
550
  Some description.
537
551
  Some more description.
@@ -553,7 +567,7 @@ describe 'Example, Integration' do
553
567
  # and it is possible that during that process it messes up the cell's output.
554
568
 
555
569
  it 'can correctly output a row that has special characters in it' do
556
- source = ["#{@example_keyword}:",
570
+ source = ["#{EXAMPLE_KEYWORD}:",
557
571
  ' | param with \| |',
558
572
  ' | a value with \| and \\\\ |',
559
573
  ' | a value with \\\\ |']
@@ -562,7 +576,7 @@ describe 'Example, Integration' do
562
576
 
563
577
  example_output = example.to_s.split("\n", -1)
564
578
 
565
- expect(example_output).to eq(["#{@example_keyword}:",
579
+ expect(example_output).to eq(["#{EXAMPLE_KEYWORD}:",
566
580
  ' | param with \| |',
567
581
  ' | a value with \| and \\\\ |',
568
582
  ' | a value with \\\\ |'])
@@ -573,29 +587,29 @@ describe 'Example, Integration' do
573
587
 
574
588
  # gherkin 2.x/3.x does not accept incomplete examples
575
589
  it 'can output an empty example', :gherkin2 => false, :gherkin3 => false do
576
- source = ["#{@example_keyword}:"]
590
+ source = ["#{EXAMPLE_KEYWORD}:"]
577
591
  source = source.join("\n")
578
592
  example = clazz.new(source)
579
593
 
580
594
  example_output = example.to_s.split("\n", -1)
581
595
 
582
- expect(example_output).to eq(["#{@example_keyword}:"])
596
+ expect(example_output).to eq(["#{EXAMPLE_KEYWORD}:"])
583
597
  end
584
598
 
585
599
  # gherkin 2.x/3.x does not accept incomplete examples
586
600
  it 'can output an example that has a name', :gherkin2 => false, :gherkin3 => false do
587
- source = ["#{@example_keyword}: test example"]
601
+ source = ["#{EXAMPLE_KEYWORD}: test example"]
588
602
  source = source.join("\n")
589
603
  example = clazz.new(source)
590
604
 
591
605
  example_output = example.to_s.split("\n", -1)
592
606
 
593
- expect(example_output).to eq(["#{@example_keyword}: test example"])
607
+ expect(example_output).to eq(["#{EXAMPLE_KEYWORD}: test example"])
594
608
  end
595
609
 
596
610
  # gherkin 2.x/3.x does not accept incomplete examples
597
611
  it 'can output an example that has a description', :gherkin2 => false, :gherkin3 => false do
598
- source = ["#{@example_keyword}:",
612
+ source = ["#{EXAMPLE_KEYWORD}:",
599
613
  'Some description.',
600
614
  'Some more description.']
601
615
  source = source.join("\n")
@@ -603,7 +617,7 @@ describe 'Example, Integration' do
603
617
 
604
618
  example_output = example.to_s.split("\n", -1)
605
619
 
606
- expect(example_output).to eq(["#{@example_keyword}:",
620
+ expect(example_output).to eq(["#{EXAMPLE_KEYWORD}:",
607
621
  '',
608
622
  'Some description.',
609
623
  'Some more description.'])
@@ -612,19 +626,19 @@ describe 'Example, Integration' do
612
626
 
613
627
  # gherkin 3.x does not accept incomplete examples
614
628
  it 'can output an example that has a single row', :gherkin3 => false do
615
- source = ["#{@example_keyword}:",
629
+ source = ["#{EXAMPLE_KEYWORD}:",
616
630
  '|param1|param2|']
617
631
  source = source.join("\n")
618
632
  example = clazz.new(source)
619
633
 
620
634
  example_output = example.to_s.split("\n", -1)
621
635
 
622
- expect(example_output).to eq(["#{@example_keyword}:",
636
+ expect(example_output).to eq(["#{EXAMPLE_KEYWORD}:",
623
637
  ' | param1 | param2 |'])
624
638
  end
625
639
 
626
640
  it 'can output an example that has multiple rows' do
627
- source = ["#{@example_keyword}:",
641
+ source = ["#{EXAMPLE_KEYWORD}:",
628
642
  '|param1|param2|',
629
643
  '|value1|value2|',
630
644
  '|value3|value4|']
@@ -633,7 +647,7 @@ describe 'Example, Integration' do
633
647
 
634
648
  example_output = example.to_s.split("\n", -1)
635
649
 
636
- expect(example_output).to eq(["#{@example_keyword}:",
650
+ expect(example_output).to eq(["#{EXAMPLE_KEYWORD}:",
637
651
  ' | param1 | param2 |',
638
652
  ' | value1 | value2 |',
639
653
  ' | value3 | value4 |'])
@@ -642,7 +656,7 @@ describe 'Example, Integration' do
642
656
  it 'can output an example that has tags' do
643
657
  source = ['@tag1',
644
658
  '@tag2 @tag3',
645
- "#{@example_keyword}:",
659
+ "#{EXAMPLE_KEYWORD}:",
646
660
  '|param1|param2|',
647
661
  '|value1|value2|',
648
662
  '|value3|value4|']
@@ -652,7 +666,7 @@ describe 'Example, Integration' do
652
666
  example_output = example.to_s.split("\n", -1)
653
667
 
654
668
  expect(example_output).to eq(['@tag1 @tag2 @tag3',
655
- "#{@example_keyword}:",
669
+ "#{EXAMPLE_KEYWORD}:",
656
670
  ' | param1 | param2 |',
657
671
  ' | value1 | value2 |',
658
672
  ' | value3 | value4 |'])
@@ -661,7 +675,7 @@ describe 'Example, Integration' do
661
675
  it 'can output an example that has everything' do
662
676
  source = ['@tag1',
663
677
  '@tag2 @tag3',
664
- "#{@example_keyword}: with everything it could have",
678
+ "#{EXAMPLE_KEYWORD}: with everything it could have",
665
679
  'Some description.',
666
680
  'Some more description.',
667
681
  '|param1|param2|',
@@ -673,7 +687,7 @@ describe 'Example, Integration' do
673
687
  example_output = example.to_s.split("\n", -1)
674
688
 
675
689
  expect(example_output).to eq(['@tag1 @tag2 @tag3',
676
- "#{@example_keyword}: with everything it could have",
690
+ "#{EXAMPLE_KEYWORD}: with everything it could have",
677
691
  '',
678
692
  'Some description.',
679
693
  'Some more description.',
@@ -684,7 +698,7 @@ describe 'Example, Integration' do
684
698
  end
685
699
 
686
700
  it 'buffers row cells based on the longest value in a column' do
687
- source = "#{@example_keyword}:
701
+ source = "#{EXAMPLE_KEYWORD}:
688
702
  |parameter 1| x|
689
703
  |y|value 1|
690
704
  |a|b|"
@@ -692,7 +706,7 @@ describe 'Example, Integration' do
692
706
 
693
707
  example_output = example.to_s.split("\n", -1)
694
708
 
695
- expect(example_output).to eq(["#{@example_keyword}:",
709
+ expect(example_output).to eq(["#{EXAMPLE_KEYWORD}:",
696
710
  ' | parameter 1 | x |',
697
711
  ' | y | value 1 |',
698
712
  ' | a | b |'])