cuke_modeler 1.3.0 → 2.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.
Files changed (90) hide show
  1. checksums.yaml +5 -5
  2. data/.travis.yml +60 -17
  3. data/CHANGELOG.md +312 -0
  4. data/Gemfile +19 -3
  5. data/LICENSE.txt +1 -1
  6. data/README.md +17 -7
  7. data/Rakefile +45 -28
  8. data/appveyor.yml +57 -17
  9. data/cuke_modeler.gemspec +6 -3
  10. data/lib/cuke_modeler/adapters/gherkin_2_adapter.rb +1 -0
  11. data/lib/cuke_modeler/adapters/gherkin_3_adapter.rb +1 -0
  12. data/lib/cuke_modeler/adapters/gherkin_4_adapter.rb +2 -1
  13. data/lib/cuke_modeler/adapters/gherkin_5_adapter.rb +12 -0
  14. data/lib/cuke_modeler/adapters/gherkin_6_adapter.rb +310 -0
  15. data/lib/cuke_modeler/adapters/gherkin_7_adapter.rb +307 -0
  16. data/lib/cuke_modeler/adapters/gherkin_8_adapter.rb +12 -0
  17. data/lib/cuke_modeler/adapters/gherkin_9_adapter.rb +12 -0
  18. data/lib/cuke_modeler/containing.rb +16 -0
  19. data/lib/cuke_modeler/described.rb +1 -0
  20. data/lib/cuke_modeler/models/step.rb +31 -2
  21. data/lib/cuke_modeler/named.rb +1 -0
  22. data/lib/cuke_modeler/nested.rb +1 -0
  23. data/lib/cuke_modeler/parsed.rb +1 -0
  24. data/lib/cuke_modeler/parsing.rb +116 -68
  25. data/lib/cuke_modeler/sourceable.rb +1 -0
  26. data/lib/cuke_modeler/stepped.rb +1 -0
  27. data/lib/cuke_modeler/taggable.rb +1 -0
  28. data/lib/cuke_modeler/version.rb +1 -1
  29. data/testing/cucumber/features/analysis/step_comparison.feature +25 -0
  30. data/testing/cucumber/features/analysis/test_comparison.feature +1 -1
  31. data/testing/cucumber/step_definitions/feature_file_steps.rb +1 -1
  32. data/testing/cucumber/step_definitions/modeling_steps.rb +7 -2
  33. data/testing/cucumber/step_definitions/verification_steps.rb +11 -2
  34. data/testing/file_helper.rb +3 -0
  35. data/testing/gemfiles/gherkin2.gemfile +8 -0
  36. data/testing/gemfiles/gherkin3.gemfile +6 -0
  37. data/testing/gemfiles/gherkin4.gemfile +7 -0
  38. data/testing/gemfiles/gherkin5.gemfile +7 -0
  39. data/testing/gemfiles/gherkin6.gemfile +10 -0
  40. data/testing/gemfiles/gherkin7.gemfile +9 -0
  41. data/testing/gemfiles/gherkin8.gemfile +9 -0
  42. data/testing/gemfiles/gherkin9.gemfile +9 -0
  43. data/testing/helper_methods.rb +23 -0
  44. data/testing/rspec/spec/integration/{gherkin_2_adapter_spec.rb → adapters/gherkin_2_adapter_spec.rb} +13 -13
  45. data/testing/rspec/spec/integration/{gherkin_3_adapter_spec.rb → adapters/gherkin_3_adapter_spec.rb} +13 -13
  46. data/testing/rspec/spec/integration/{gherkin_4_adapter_spec.rb → adapters/gherkin_4_adapter_spec.rb} +13 -13
  47. data/testing/rspec/spec/integration/adapters/gherkin_5_adapter_spec.rb +165 -0
  48. data/testing/rspec/spec/integration/adapters/gherkin_6_adapter_spec.rb +159 -0
  49. data/testing/rspec/spec/integration/adapters/gherkin_7_adapter_spec.rb +162 -0
  50. data/testing/rspec/spec/integration/adapters/gherkin_8_adapter_spec.rb +162 -0
  51. data/testing/rspec/spec/integration/adapters/gherkin_9_adapter_spec.rb +162 -0
  52. data/testing/rspec/spec/integration/{background_integration_spec.rb → models/background_integration_spec.rb} +90 -86
  53. data/testing/rspec/spec/integration/{cell_integration_spec.rb → models/cell_integration_spec.rb} +49 -38
  54. data/testing/rspec/spec/integration/{comment_integration_spec.rb → models/comment_integration_spec.rb} +31 -20
  55. data/testing/rspec/spec/integration/{directory_integration_spec.rb → models/directory_integration_spec.rb} +3 -3
  56. data/testing/rspec/spec/integration/{doc_string_integration_spec.rb → models/doc_string_integration_spec.rb} +39 -35
  57. data/testing/rspec/spec/integration/{example_integration_spec.rb → models/example_integration_spec.rb} +109 -83
  58. data/testing/rspec/spec/integration/{feature_file_integration_spec.rb → models/feature_file_integration_spec.rb} +52 -38
  59. data/testing/rspec/spec/integration/{feature_integration_spec.rb → models/feature_integration_spec.rb} +125 -112
  60. data/testing/rspec/spec/integration/{model_integration_spec.rb → models/model_integration_spec.rb} +1 -1
  61. data/testing/rspec/spec/integration/{outline_integration_spec.rb → models/outline_integration_spec.rb} +138 -129
  62. data/testing/rspec/spec/integration/{row_integration_spec.rb → models/row_integration_spec.rb} +55 -35
  63. data/testing/rspec/spec/integration/{scenario_integration_spec.rb → models/scenario_integration_spec.rb} +92 -88
  64. data/testing/rspec/spec/integration/models/step_integration_spec.rb +573 -0
  65. data/testing/rspec/spec/integration/{table_integration_spec.rb → models/table_integration_spec.rb} +38 -34
  66. data/testing/rspec/spec/integration/{tag_integration_spec.rb → models/tag_integration_spec.rb} +56 -36
  67. data/testing/rspec/spec/integration/parsing_integration_spec.rb +45 -7
  68. data/testing/rspec/spec/spec_helper.rb +79 -43
  69. data/testing/rspec/spec/unit/cuke_modeler_unit_spec.rb +25 -0
  70. data/testing/rspec/spec/unit/{background_unit_spec.rb → models/background_unit_spec.rb} +1 -1
  71. data/testing/rspec/spec/unit/{cell_unit_spec.rb → models/cell_unit_spec.rb} +1 -1
  72. data/testing/rspec/spec/unit/{comment_unit_spec.rb → models/comment_unit_spec.rb} +1 -1
  73. data/testing/rspec/spec/unit/{directory_unit_spec.rb → models/directory_unit_spec.rb} +1 -1
  74. data/testing/rspec/spec/unit/{doc_string_unit_spec.rb → models/doc_string_unit_spec.rb} +1 -1
  75. data/testing/rspec/spec/unit/{example_unit_spec.rb → models/example_unit_spec.rb} +1 -1
  76. data/testing/rspec/spec/unit/{feature_file_unit_spec.rb → models/feature_file_unit_spec.rb} +1 -1
  77. data/testing/rspec/spec/unit/{feature_unit_spec.rb → models/feature_unit_spec.rb} +1 -1
  78. data/testing/rspec/spec/unit/{model_unit_spec.rb → models/model_unit_spec.rb} +1 -1
  79. data/testing/rspec/spec/unit/{outline_unit_spec.rb → models/outline_unit_spec.rb} +1 -1
  80. data/testing/rspec/spec/unit/{row_unit_spec.rb → models/row_unit_spec.rb} +1 -1
  81. data/testing/rspec/spec/unit/{scenario_unit_spec.rb → models/scenario_unit_spec.rb} +1 -1
  82. data/testing/rspec/spec/unit/{step_unit_spec.rb → models/step_unit_spec.rb} +2 -2
  83. data/testing/rspec/spec/unit/{table_unit_spec.rb → models/table_unit_spec.rb} +1 -1
  84. data/testing/rspec/spec/unit/{tag_unit_spec.rb → models/tag_unit_spec.rb} +1 -1
  85. data/testing/rspec/spec/unit/shared/containing_models_unit_specs.rb +102 -0
  86. data/todo.txt +5 -2
  87. metadata +80 -47
  88. data/History.md +0 -186
  89. data/testing/cucumber/support/transforms.rb +0 -3
  90. data/testing/rspec/spec/integration/step_integration_spec.rb +0 -459
@@ -1,4 +1,4 @@
1
- require "#{File.dirname(__FILE__)}/../spec_helper"
1
+ require "#{File.dirname(__FILE__)}/../../spec_helper"
2
2
 
3
3
 
4
4
  describe 'FeatureFile, Integration' do
@@ -14,34 +14,48 @@ describe 'FeatureFile, Integration' do
14
14
 
15
15
  describe 'unique behavior' do
16
16
 
17
- it 'stores the original data generated by the parsing adapter', :gherkin4 => true do
18
- test_file_path = CukeModeler::FileHelper.create_feature_file(:text => "#{@feature_keyword}: test feature", :name => 'test_file')
17
+ describe 'parsing data' do
19
18
 
20
- feature_file = clazz.new(test_file_path)
21
- data = feature_file.parsing_data
19
+ it 'stores the original data generated by the parsing adapter', :if => gherkin?(6, 7, 8, 9) do
20
+ test_file_path = CukeModeler::FileHelper.create_feature_file(:text => "#{FEATURE_KEYWORD}: test feature", :name => 'test_file')
22
21
 
23
- expect(data.keys).to match_array([:type, :feature, :comments])
24
- expect(data[:type]).to eq(:GherkinDocument)
25
- end
22
+ feature_file = clazz.new(test_file_path)
23
+ data = feature_file.parsing_data
26
24
 
27
- it 'stores the original data generated by the parsing adapter', :gherkin3 => true do
28
- test_file_path = CukeModeler::FileHelper.create_feature_file(:text => "#{@feature_keyword}: test feature", :name => 'test_file')
25
+ expect(data.keys).to match_array([:uri, :feature, :comments])
26
+ expect(File.basename(data[:uri])).to eq('test_file.feature')
27
+ end
29
28
 
30
- feature_file = clazz.new(test_file_path)
31
- data = feature_file.parsing_data
29
+ it 'stores the original data generated by the parsing adapter', :if => gherkin?(4, 5) do
30
+ test_file_path = CukeModeler::FileHelper.create_feature_file(:text => "#{FEATURE_KEYWORD}: test feature", :name => 'test_file')
32
31
 
33
- # There is no parsing data stored above the feature level for gherkin 3.x
34
- expect(data).to be_nil
35
- end
32
+ feature_file = clazz.new(test_file_path)
33
+ data = feature_file.parsing_data
34
+
35
+ expect(data.keys).to match_array([:type, :feature, :comments])
36
+ expect(data[:type]).to eq(:GherkinDocument)
37
+ end
38
+
39
+ it 'stores the original data generated by the parsing adapter', :if => gherkin?(3) do
40
+ test_file_path = CukeModeler::FileHelper.create_feature_file(:text => "#{FEATURE_KEYWORD}: test feature", :name => 'test_file')
36
41
 
37
- it 'stores the original data generated by the parsing adapter', :gherkin2 => true do
38
- test_file_path = CukeModeler::FileHelper.create_feature_file(:text => "#{@feature_keyword}: test feature", :name => 'test_file')
42
+ feature_file = clazz.new(test_file_path)
43
+ data = feature_file.parsing_data
39
44
 
40
- feature_file = clazz.new(test_file_path)
41
- data = feature_file.parsing_data
45
+ # There is no parsing data stored above the feature level for gherkin 3.x
46
+ expect(data).to be_nil
47
+ end
48
+
49
+ it 'stores the original data generated by the parsing adapter', :if => gherkin?(2) do
50
+ test_file_path = CukeModeler::FileHelper.create_feature_file(:text => "#{FEATURE_KEYWORD}: test feature", :name => 'test_file')
51
+
52
+ feature_file = clazz.new(test_file_path)
53
+ data = feature_file.parsing_data
54
+
55
+ # There is no parsing data stored above the feature level for gherkin 2.x
56
+ expect(data).to eq([])
57
+ end
42
58
 
43
- # There is no parsing data stored above the feature level for gherkin 2.x
44
- expect(data).to eq([])
45
59
  end
46
60
 
47
61
  it 'provides its own filename when being parsed' do
@@ -59,7 +73,7 @@ describe 'FeatureFile, Integration' do
59
73
 
60
74
  describe 'model population' do
61
75
 
62
- let(:source_text) { "#{@feature_keyword}: Test feature" }
76
+ let(:source_text) { "#{FEATURE_KEYWORD}: Test feature" }
63
77
  let(:feature_file_path) { CukeModeler::FileHelper.create_feature_file }
64
78
  let(:feature_file) { clazz.new(feature_file_path) }
65
79
 
@@ -84,50 +98,50 @@ describe 'FeatureFile, Integration' do
84
98
  it "models the feature file's comments" do
85
99
  source_text = "# feature comment
86
100
  @tag1 @tag2 @tag3
87
- #{@feature_keyword}: A feature with everything it could have
101
+ #{FEATURE_KEYWORD}: A feature with everything it could have
88
102
 
89
103
  Including a description
90
104
  and then some.
91
105
 
92
106
  # background comment
93
- #{@background_keyword}:
107
+ #{BACKGROUND_KEYWORD}:
94
108
 
95
109
  Background
96
110
  description
97
111
 
98
- #{@step_keyword} a step
112
+ #{STEP_KEYWORD} a step
99
113
  # table comment
100
114
  | value1 |
101
115
  # table row comment
102
116
  | value2 |
103
- #{@step_keyword} another step
117
+ #{STEP_KEYWORD} another step
104
118
 
105
119
  # scenario comment
106
120
  @scenario_tag
107
- #{@scenario_keyword}:
121
+ #{SCENARIO_KEYWORD}:
108
122
 
109
123
  Scenario
110
124
  description
111
125
 
112
- #{@step_keyword} a step
113
- #{@step_keyword} another step
126
+ #{STEP_KEYWORD} a step
127
+ #{STEP_KEYWORD} another step
114
128
  \"\"\"
115
129
  some text
116
130
  \"\"\"
117
131
 
118
132
  # outline comment
119
133
  @outline_tag
120
- #{@outline_keyword}:
134
+ #{OUTLINE_KEYWORD}:
121
135
 
122
136
  Outline
123
137
  description
124
138
 
125
139
  # step comment
126
- #{@step_keyword} a step
140
+ #{STEP_KEYWORD} a step
127
141
  # table comment
128
142
  | value2 |
129
143
  # step comment
130
- #{@step_keyword} another step
144
+ #{STEP_KEYWORD} another step
131
145
  # doc string comment
132
146
  \"\"\"
133
147
  some text
@@ -135,7 +149,7 @@ describe 'FeatureFile, Integration' do
135
149
 
136
150
  # example comment
137
151
  @example_tag
138
- #{@example_keyword}:
152
+ #{EXAMPLE_KEYWORD}:
139
153
 
140
154
  Example
141
155
  description
@@ -173,7 +187,7 @@ describe 'FeatureFile, Integration' do
173
187
 
174
188
 
175
189
  # gherkin 3.x does not accept empty feature files
176
- context 'an empty feature file', :gherkin3 => false do
190
+ context 'an empty feature file', :unless => gherkin?(3) do
177
191
 
178
192
  let(:source_text) { '' }
179
193
 
@@ -187,7 +201,7 @@ describe 'FeatureFile, Integration' do
187
201
  end
188
202
 
189
203
  it 'properly sets its child models' do
190
- file_path = CukeModeler::FileHelper.create_feature_file(:text => "#{@feature_keyword}: Test feature", :name => 'test_file')
204
+ file_path = CukeModeler::FileHelper.create_feature_file(:text => "#{FEATURE_KEYWORD}: Test feature", :name => 'test_file')
191
205
 
192
206
  file = clazz.new(file_path)
193
207
  feature = file.feature
@@ -202,7 +216,7 @@ describe 'FeatureFile, Integration' do
202
216
  let(:feature_file_path) { CukeModeler::FileHelper.create_feature_file(:text => '', :name => 'feature_file_test_file', :directory => directory_path) }
203
217
 
204
218
  before(:each) do
205
- File.open(feature_file_path, 'w') { |file| file.write("#{@feature_keyword}: Test feature") }
219
+ File.open(feature_file_path, 'w') { |file| file.write("#{FEATURE_KEYWORD}: Test feature") }
206
220
  end
207
221
 
208
222
  let(:directory_model) { CukeModeler::Directory.new(directory_path) }
@@ -228,7 +242,7 @@ describe 'FeatureFile, Integration' do
228
242
 
229
243
  context 'from source text' do
230
244
 
231
- let(:source_text) { "#{@feature_keyword}: Test feature" }
245
+ let(:source_text) { "#{FEATURE_KEYWORD}: Test feature" }
232
246
  let(:feature_file_path) { CukeModeler::FileHelper.create_feature_file(:text => '', :name => 'feature_file_test_file') }
233
247
  let(:feature_file) { clazz.new(feature_file_path) }
234
248
 
@@ -246,7 +260,7 @@ describe 'FeatureFile, Integration' do
246
260
  end
247
261
 
248
262
  it 'can be remade from its own output' do
249
- path = CukeModeler::FileHelper.create_feature_file(:text => "#{@feature_keyword}:", :name => 'feature_file_test_file')
263
+ path = CukeModeler::FileHelper.create_feature_file(:text => "#{FEATURE_KEYWORD}:", :name => 'feature_file_test_file')
250
264
  feature_file = clazz.new(path)
251
265
 
252
266
  feature_file_output = feature_file.to_s
@@ -1,4 +1,4 @@
1
- require "#{File.dirname(__FILE__)}/../spec_helper"
1
+ require "#{File.dirname(__FILE__)}/../../spec_helper"
2
2
 
3
3
 
4
4
  describe 'Feature, Integration' do
@@ -16,7 +16,7 @@ describe 'Feature, Integration' do
16
16
  describe 'unique behavior' do
17
17
 
18
18
  it 'can be instantiated with the minimum viable Gherkin' do
19
- source = "#{@feature_keyword}:"
19
+ source = "#{FEATURE_KEYWORD}:"
20
20
 
21
21
  expect { clazz.new(source) }.to_not raise_error
22
22
  end
@@ -47,11 +47,11 @@ describe 'Feature, Integration' do
47
47
 
48
48
  it 'properly sets its child models' do
49
49
  source = "@a_tag
50
- #{@feature_keyword}: Test feature
51
- #{@background_keyword}: Test background
52
- #{@scenario_keyword}: Test scenario
53
- #{@outline_keyword}: Test outline
54
- #{@example_keyword}: Test Examples
50
+ #{FEATURE_KEYWORD}: Test feature
51
+ #{BACKGROUND_KEYWORD}: Test background
52
+ #{SCENARIO_KEYWORD}: Test scenario
53
+ #{OUTLINE_KEYWORD}: Test outline
54
+ #{EXAMPLE_KEYWORD}: Test Examples
55
55
  | param |
56
56
  | value |"
57
57
 
@@ -69,32 +69,45 @@ describe 'Feature, Integration' do
69
69
  expect(tag.parent_model).to equal(feature)
70
70
  end
71
71
 
72
- it 'stores the original data generated by the parsing adapter', :gherkin4 => true do
73
- feature = clazz.new("@tag\n#{@feature_keyword}: test feature\ndescription\n#{@background_keyword}:\n#{@scenario_keyword}:")
74
- data = feature.parsing_data
72
+ describe 'parsing data' do
75
73
 
76
- expect(data.keys).to match_array([:type, :tags, :location, :language, :keyword, :name, :children, :description])
77
- expect(data[:type]).to eq(:Feature)
78
- end
74
+ it 'stores the original data generated by the parsing adapter', :if => gherkin?(6, 7, 8, 9) do
75
+ feature = clazz.new("@tag\n#{FEATURE_KEYWORD}: test feature\ndescription\n#{BACKGROUND_KEYWORD}:\n#{SCENARIO_KEYWORD}:")
76
+ data = feature.parsing_data
79
77
 
80
- it 'stores the original data generated by the parsing adapter', :gherkin3 => true do
81
- feature = clazz.new("@tag\n#{@feature_keyword}: test feature\ndescription\n#{@background_keyword}:\n#{@scenario_keyword}:")
82
- data = feature.parsing_data
78
+ expect(data.keys).to match_array([:tags, :location, :language, :keyword, :name, :children, :description])
79
+ expect(data[:name]).to eq('test feature')
80
+ end
83
81
 
84
- expect(data.keys).to match_array([:type, :tags, :location, :language, :keyword, :name, :scenarioDefinitions, :comments, :background, :description])
85
- expect(data[:type]).to eq(:Feature)
86
- end
82
+ it 'stores the original data generated by the parsing adapter', :if => gherkin?(4, 5) do
83
+ feature = clazz.new("@tag\n#{FEATURE_KEYWORD}: test feature\ndescription\n#{BACKGROUND_KEYWORD}:\n#{SCENARIO_KEYWORD}:")
84
+ data = feature.parsing_data
87
85
 
88
- it 'stores the original data generated by the parsing adapter', :gherkin2 => true do
89
- feature = clazz.new("@tag\n#{@feature_keyword}: test feature\ndescription\n#{@background_keyword}:\n#{@scenario_keyword}:")
90
- data = feature.parsing_data
86
+ expect(data.keys).to match_array([:type, :tags, :location, :language, :keyword, :name, :children, :description])
87
+ expect(data[:type]).to eq(:Feature)
88
+ end
89
+
90
+ it 'stores the original data generated by the parsing adapter', :if => gherkin?(3) do
91
+ feature = clazz.new("@tag\n#{FEATURE_KEYWORD}: test feature\ndescription\n#{BACKGROUND_KEYWORD}:\n#{SCENARIO_KEYWORD}:")
92
+ data = feature.parsing_data
93
+
94
+ expect(data.keys).to match_array([:type, :tags, :location, :language, :keyword, :name, :scenarioDefinitions, :comments, :background, :description])
95
+ expect(data[:type]).to eq(:Feature)
96
+ end
97
+
98
+ it 'stores the original data generated by the parsing adapter', :if => gherkin?(2) do
99
+ feature = clazz.new("@tag\n#{FEATURE_KEYWORD}: test feature\ndescription\n#{BACKGROUND_KEYWORD}:\n#{SCENARIO_KEYWORD}:")
100
+ data = feature.parsing_data
101
+
102
+ expect(data.keys).to match_array(['keyword', 'name', 'line', 'description', 'id', 'uri', 'elements', 'tags'])
103
+ expect(data['keyword']).to eq('Feature')
104
+ end
91
105
 
92
- expect(data.keys).to match_array(['keyword', 'name', 'line', 'description', 'id', 'uri', 'elements', 'tags'])
93
- expect(data['keyword']).to eq('Feature')
94
106
  end
95
107
 
108
+
96
109
  it 'trims whitespace from its source description' do
97
- source = ["#{@feature_keyword}:",
110
+ source = ["#{FEATURE_KEYWORD}:",
98
111
  ' ',
99
112
  ' description line 1',
100
113
  '',
@@ -103,7 +116,7 @@ describe 'Feature, Integration' do
103
116
  '',
104
117
  '',
105
118
  '',
106
- " #{@scenario_keyword}:"]
119
+ " #{SCENARIO_KEYWORD}:"]
107
120
  source = source.join("\n")
108
121
 
109
122
  feature = clazz.new(source)
@@ -131,14 +144,14 @@ describe 'Feature, Integration' do
131
144
  context 'from source text' do
132
145
 
133
146
  it "models the feature's keyword" do
134
- source_text = "#{@feature_keyword}:"
147
+ source_text = "#{FEATURE_KEYWORD}:"
135
148
  feature = CukeModeler::Feature.new(source_text)
136
149
 
137
- expect(feature.keyword).to eq(@feature_keyword)
150
+ expect(feature.keyword).to eq(FEATURE_KEYWORD)
138
151
  end
139
152
 
140
153
  it "models the feature's source line" do
141
- source_text = "#{@feature_keyword}:"
154
+ source_text = "#{FEATURE_KEYWORD}:"
142
155
  feature = CukeModeler::Feature.new(source_text)
143
156
 
144
157
  expect(feature.source_line).to eq(1)
@@ -148,31 +161,31 @@ describe 'Feature, Integration' do
148
161
  context 'a filled feature' do
149
162
 
150
163
  let(:source_text) { "@tag_1 @tag_2
151
- #{@feature_keyword}: Feature Foo
164
+ #{FEATURE_KEYWORD}: Feature Foo
152
165
 
153
166
  Some feature description.
154
167
 
155
168
  Some more.
156
169
  And some more.
157
170
 
158
- #{@background_keyword}: The background
159
- #{@step_keyword} some setup step
171
+ #{BACKGROUND_KEYWORD}: The background
172
+ #{STEP_KEYWORD} some setup step
160
173
 
161
- #{@scenario_keyword}: Scenario 1
162
- #{@step_keyword} a step
174
+ #{SCENARIO_KEYWORD}: Scenario 1
175
+ #{STEP_KEYWORD} a step
163
176
 
164
- #{@outline_keyword}: Outline 1
165
- #{@step_keyword} a step
166
- #{@example_keyword}:
177
+ #{OUTLINE_KEYWORD}: Outline 1
178
+ #{STEP_KEYWORD} a step
179
+ #{EXAMPLE_KEYWORD}:
167
180
  | param |
168
181
  | value |
169
182
 
170
- #{@scenario_keyword}: Scenario 2
171
- #{@step_keyword} a step
183
+ #{SCENARIO_KEYWORD}: Scenario 2
184
+ #{STEP_KEYWORD} a step
172
185
 
173
- #{@outline_keyword}: Outline 2
174
- #{@step_keyword} a step
175
- #{@example_keyword}:
186
+ #{OUTLINE_KEYWORD}: Outline 2
187
+ #{STEP_KEYWORD} a step
188
+ #{EXAMPLE_KEYWORD}:
176
189
  | param |
177
190
  | value |" }
178
191
  let(:feature) { clazz.new(source_text) }
@@ -218,7 +231,7 @@ describe 'Feature, Integration' do
218
231
 
219
232
  context 'an empty feature' do
220
233
 
221
- let(:source_text) { "#{@feature_keyword}:" }
234
+ let(:source_text) { "#{FEATURE_KEYWORD}:" }
222
235
  let(:feature) { clazz.new(source_text) }
223
236
 
224
237
 
@@ -254,13 +267,13 @@ describe 'Feature, Integration' do
254
267
 
255
268
 
256
269
  it 'knows how many test cases it has' do
257
- source_1 = "#{@feature_keyword}: Test feature"
270
+ source_1 = "#{FEATURE_KEYWORD}: Test feature"
258
271
 
259
- source_2 = "#{@feature_keyword}: Test feature
260
- #{@scenario_keyword}: Test scenario
261
- #{@outline_keyword}: Test outline
262
- #{@step_keyword} a step
263
- #{@example_keyword}: Test examples
272
+ source_2 = "#{FEATURE_KEYWORD}: Test feature
273
+ #{SCENARIO_KEYWORD}: Test scenario
274
+ #{OUTLINE_KEYWORD}: Test outline
275
+ #{STEP_KEYWORD} a step
276
+ #{EXAMPLE_KEYWORD}: Test examples
264
277
  |param|
265
278
  |value_1|
266
279
  |value_2|"
@@ -282,7 +295,7 @@ describe 'Feature, Integration' do
282
295
 
283
296
 
284
297
  let(:test_directory) { CukeModeler::FileHelper.create_directory }
285
- let(:source_gherkin) { "#{@feature_keyword}: Test feature" }
298
+ let(:source_gherkin) { "#{FEATURE_KEYWORD}: Test feature" }
286
299
 
287
300
  let(:directory_model) { CukeModeler::Directory.new(test_directory) }
288
301
  let(:feature_model) { directory_model.feature_files.first.feature }
@@ -313,47 +326,47 @@ describe 'Feature, Integration' do
313
326
 
314
327
  it 'can be remade from its own output' do
315
328
  source = "@tag1 @tag2 @tag3
316
- #{@feature_keyword}: A feature with everything it could have
329
+ #{FEATURE_KEYWORD}: A feature with everything it could have
317
330
 
318
331
  Including a description
319
332
  and then some.
320
333
 
321
- #{@background_keyword}:
334
+ #{BACKGROUND_KEYWORD}:
322
335
 
323
336
  Background
324
337
  description
325
338
 
326
- #{@step_keyword} a step
339
+ #{STEP_KEYWORD} a step
327
340
  | value1 |
328
- #{@step_keyword} another step
341
+ #{STEP_KEYWORD} another step
329
342
 
330
343
  @scenario_tag
331
- #{@scenario_keyword}:
344
+ #{SCENARIO_KEYWORD}:
332
345
 
333
346
  Scenario
334
347
  description
335
348
 
336
- #{@step_keyword} a step
337
- #{@step_keyword} another step
349
+ #{STEP_KEYWORD} a step
350
+ #{STEP_KEYWORD} another step
338
351
  \"\"\"
339
352
  some text
340
353
  \"\"\"
341
354
 
342
355
  @outline_tag
343
- #{@outline_keyword}:
356
+ #{OUTLINE_KEYWORD}:
344
357
 
345
358
  Outline
346
359
  description
347
360
 
348
- #{@step_keyword} a step
361
+ #{STEP_KEYWORD} a step
349
362
  | value2 |
350
- #{@step_keyword} another step
363
+ #{STEP_KEYWORD} another step
351
364
  \"\"\"
352
365
  some text
353
366
  \"\"\"
354
367
 
355
368
  @example_tag
356
- #{@example_keyword}:
369
+ #{EXAMPLE_KEYWORD}:
357
370
 
358
371
  Example
359
372
  description
@@ -372,27 +385,27 @@ describe 'Feature, Integration' do
372
385
  context 'from source text' do
373
386
 
374
387
  it 'can output an empty feature' do
375
- source = ["#{@feature_keyword}:"]
388
+ source = ["#{FEATURE_KEYWORD}:"]
376
389
  source = source.join("\n")
377
390
  feature = clazz.new(source)
378
391
 
379
392
  feature_output = feature.to_s.split("\n", -1)
380
393
 
381
- expect(feature_output).to eq(["#{@feature_keyword}:"])
394
+ expect(feature_output).to eq(["#{FEATURE_KEYWORD}:"])
382
395
  end
383
396
 
384
397
  it 'can output a feature that has a name' do
385
- source = ["#{@feature_keyword}: test feature"]
398
+ source = ["#{FEATURE_KEYWORD}: test feature"]
386
399
  source = source.join("\n")
387
400
  feature = clazz.new(source)
388
401
 
389
402
  feature_output = feature.to_s.split("\n", -1)
390
403
 
391
- expect(feature_output).to eq(["#{@feature_keyword}: test feature"])
404
+ expect(feature_output).to eq(["#{FEATURE_KEYWORD}: test feature"])
392
405
  end
393
406
 
394
407
  it 'can output a feature that has a description' do
395
- source = ["#{@feature_keyword}:",
408
+ source = ["#{FEATURE_KEYWORD}:",
396
409
  'Some description.',
397
410
  'Some more description.']
398
411
  source = source.join("\n")
@@ -400,7 +413,7 @@ describe 'Feature, Integration' do
400
413
 
401
414
  feature_output = feature.to_s.split("\n", -1)
402
415
 
403
- expect(feature_output).to eq(["#{@feature_keyword}:",
416
+ expect(feature_output).to eq(["#{FEATURE_KEYWORD}:",
404
417
  '',
405
418
  'Some description.',
406
419
  'Some more description.'])
@@ -409,51 +422,51 @@ describe 'Feature, Integration' do
409
422
  it 'can output a feature that has tags' do
410
423
  source = ['@tag1 @tag2',
411
424
  '@tag3',
412
- "#{@feature_keyword}:"]
425
+ "#{FEATURE_KEYWORD}:"]
413
426
  source = source.join("\n")
414
427
  feature = clazz.new(source)
415
428
 
416
429
  feature_output = feature.to_s.split("\n", -1)
417
430
 
418
431
  expect(feature_output).to eq(['@tag1 @tag2 @tag3',
419
- "#{@feature_keyword}:"])
432
+ "#{FEATURE_KEYWORD}:"])
420
433
  end
421
434
 
422
435
  it 'can output a feature that has a background' do
423
- source = ["#{@feature_keyword}:",
424
- "#{@background_keyword}:",
425
- "#{@step_keyword} a step"]
436
+ source = ["#{FEATURE_KEYWORD}:",
437
+ "#{BACKGROUND_KEYWORD}:",
438
+ "#{STEP_KEYWORD} a step"]
426
439
  source = source.join("\n")
427
440
  feature = clazz.new(source)
428
441
 
429
442
  feature_output = feature.to_s.split("\n", -1)
430
443
 
431
- expect(feature_output).to eq(["#{@feature_keyword}:",
444
+ expect(feature_output).to eq(["#{FEATURE_KEYWORD}:",
432
445
  '',
433
- " #{@background_keyword}:",
434
- " #{@step_keyword} a step"])
446
+ " #{BACKGROUND_KEYWORD}:",
447
+ " #{STEP_KEYWORD} a step"])
435
448
  end
436
449
 
437
450
  it 'can output a feature that has a scenario' do
438
- source = ["#{@feature_keyword}:",
439
- "#{@scenario_keyword}:",
440
- "#{@step_keyword} a step"]
451
+ source = ["#{FEATURE_KEYWORD}:",
452
+ "#{SCENARIO_KEYWORD}:",
453
+ "#{STEP_KEYWORD} a step"]
441
454
  source = source.join("\n")
442
455
  feature = clazz.new(source)
443
456
 
444
457
  feature_output = feature.to_s.split("\n", -1)
445
458
 
446
- expect(feature_output).to eq(["#{@feature_keyword}:",
459
+ expect(feature_output).to eq(["#{FEATURE_KEYWORD}:",
447
460
  '',
448
- " #{@scenario_keyword}:",
449
- " #{@step_keyword} a step"])
461
+ " #{SCENARIO_KEYWORD}:",
462
+ " #{STEP_KEYWORD} a step"])
450
463
  end
451
464
 
452
465
  it 'can output a feature that has an outline' do
453
- source = ["#{@feature_keyword}:",
454
- "#{@outline_keyword}:",
455
- "#{@step_keyword} a step",
456
- "#{@example_keyword}:",
466
+ source = ["#{FEATURE_KEYWORD}:",
467
+ "#{OUTLINE_KEYWORD}:",
468
+ "#{STEP_KEYWORD} a step",
469
+ "#{EXAMPLE_KEYWORD}:",
457
470
  '|param|',
458
471
  '|value|']
459
472
  source = source.join("\n")
@@ -461,48 +474,48 @@ describe 'Feature, Integration' do
461
474
 
462
475
  feature_output = feature.to_s.split("\n", -1)
463
476
 
464
- expect(feature_output).to eq(["#{@feature_keyword}:",
477
+ expect(feature_output).to eq(["#{FEATURE_KEYWORD}:",
465
478
  '',
466
- " #{@outline_keyword}:",
467
- " #{@step_keyword} a step",
479
+ " #{OUTLINE_KEYWORD}:",
480
+ " #{STEP_KEYWORD} a step",
468
481
  '',
469
- " #{@example_keyword}:",
482
+ " #{EXAMPLE_KEYWORD}:",
470
483
  ' | param |',
471
484
  ' | value |'])
472
485
  end
473
486
 
474
487
  it 'can output a feature that has everything' do
475
488
  source = ['@tag1 @tag2 @tag3',
476
- "#{@feature_keyword}: A feature with everything it could have",
489
+ "#{FEATURE_KEYWORD}: A feature with everything it could have",
477
490
  'Including a description',
478
491
  'and then some.',
479
- "#{@background_keyword}:",
492
+ "#{BACKGROUND_KEYWORD}:",
480
493
  'Background',
481
494
  'description',
482
- "#{@step_keyword} a step",
495
+ "#{STEP_KEYWORD} a step",
483
496
  '|value1|',
484
- "#{@step_keyword} another step",
497
+ "#{STEP_KEYWORD} another step",
485
498
  '@scenario_tag',
486
- "#{@scenario_keyword}:",
499
+ "#{SCENARIO_KEYWORD}:",
487
500
  'Scenario',
488
501
  'description',
489
- "#{@step_keyword} a step",
490
- "#{@step_keyword} another step",
502
+ "#{STEP_KEYWORD} a step",
503
+ "#{STEP_KEYWORD} another step",
491
504
  '"""',
492
505
  'some text',
493
506
  '"""',
494
507
  '@outline_tag',
495
- "#{@outline_keyword}:",
508
+ "#{OUTLINE_KEYWORD}:",
496
509
  'Outline ',
497
510
  'description',
498
- "#{@step_keyword} a step ",
511
+ "#{STEP_KEYWORD} a step ",
499
512
  '|value2|',
500
- "#{@step_keyword} another step",
513
+ "#{STEP_KEYWORD} another step",
501
514
  '"""',
502
515
  'some text',
503
516
  '"""',
504
517
  '@example_tag',
505
- "#{@example_keyword}:",
518
+ "#{EXAMPLE_KEYWORD}:",
506
519
  'Example',
507
520
  'description',
508
521
  '|param|',
@@ -513,47 +526,47 @@ describe 'Feature, Integration' do
513
526
  feature_output = feature.to_s.split("\n", -1)
514
527
 
515
528
  expect(feature_output).to eq(['@tag1 @tag2 @tag3',
516
- "#{@feature_keyword}: A feature with everything it could have",
529
+ "#{FEATURE_KEYWORD}: A feature with everything it could have",
517
530
  '',
518
531
  'Including a description',
519
532
  'and then some.',
520
533
  '',
521
- " #{@background_keyword}:",
534
+ " #{BACKGROUND_KEYWORD}:",
522
535
  '',
523
536
  ' Background',
524
537
  ' description',
525
538
  '',
526
- " #{@step_keyword} a step",
539
+ " #{STEP_KEYWORD} a step",
527
540
  ' | value1 |',
528
- " #{@step_keyword} another step",
541
+ " #{STEP_KEYWORD} another step",
529
542
  '',
530
543
  ' @scenario_tag',
531
- " #{@scenario_keyword}:",
544
+ " #{SCENARIO_KEYWORD}:",
532
545
  '',
533
546
  ' Scenario',
534
547
  ' description',
535
548
  '',
536
- " #{@step_keyword} a step",
537
- " #{@step_keyword} another step",
549
+ " #{STEP_KEYWORD} a step",
550
+ " #{STEP_KEYWORD} another step",
538
551
  ' """',
539
552
  ' some text',
540
553
  ' """',
541
554
  '',
542
555
  ' @outline_tag',
543
- " #{@outline_keyword}:",
556
+ " #{OUTLINE_KEYWORD}:",
544
557
  '',
545
558
  ' Outline',
546
559
  ' description',
547
560
  '',
548
- " #{@step_keyword} a step",
561
+ " #{STEP_KEYWORD} a step",
549
562
  ' | value2 |',
550
- " #{@step_keyword} another step",
563
+ " #{STEP_KEYWORD} another step",
551
564
  ' """',
552
565
  ' some text',
553
566
  ' """',
554
567
  '',
555
568
  ' @example_tag',
556
- " #{@example_keyword}:",
569
+ " #{EXAMPLE_KEYWORD}:",
557
570
  '',
558
571
  ' Example',
559
572
  ' description',
@@ -624,7 +637,7 @@ describe 'Feature, Integration' do
624
637
  end
625
638
 
626
639
 
627
- expect { clazz.new("#{@feature_keyword}:\n#{@scenario_keyword}:\n#{@step_keyword} foo") }.to raise_error(ArgumentError, /Unknown.*some_unknown_type/)
640
+ expect { clazz.new("#{FEATURE_KEYWORD}:\n#{SCENARIO_KEYWORD}:\n#{STEP_KEYWORD} foo") }.to raise_error(ArgumentError, /Unknown.*some_unknown_type/)
628
641
  ensure
629
642
  # Making sure that our changes don't escape a test and ruin the rest of the suite
630
643
  module CukeModeler