cuke_modeler 2.1.0 → 3.4.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 (146) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +53 -1
  3. data/README.md +14 -16
  4. data/cuke_modeler.gemspec +33 -21
  5. data/lib/cuke_modeler.rb +2 -1
  6. data/lib/cuke_modeler/adapters/gherkin_10_adapter.rb +13 -0
  7. data/lib/cuke_modeler/adapters/gherkin_11_adapter.rb +13 -0
  8. data/lib/cuke_modeler/adapters/gherkin_12_adapter.rb +13 -0
  9. data/lib/cuke_modeler/adapters/gherkin_13_adapter.rb +13 -0
  10. data/lib/cuke_modeler/adapters/gherkin_14_adapter.rb +13 -0
  11. data/lib/cuke_modeler/adapters/gherkin_15_adapter.rb +13 -0
  12. data/lib/cuke_modeler/adapters/gherkin_9_adapter.rb +356 -4
  13. data/lib/cuke_modeler/containing.rb +41 -89
  14. data/lib/cuke_modeler/described.rb +40 -1
  15. data/lib/cuke_modeler/models/background.rb +12 -12
  16. data/lib/cuke_modeler/models/cell.rb +14 -8
  17. data/lib/cuke_modeler/models/comment.rb +6 -6
  18. data/lib/cuke_modeler/models/directory.rb +14 -18
  19. data/lib/cuke_modeler/models/doc_string.rb +11 -8
  20. data/lib/cuke_modeler/models/example.rb +64 -46
  21. data/lib/cuke_modeler/models/feature.rb +38 -20
  22. data/lib/cuke_modeler/models/feature_file.rb +6 -8
  23. data/lib/cuke_modeler/models/model.rb +2 -1
  24. data/lib/cuke_modeler/models/outline.rb +20 -15
  25. data/lib/cuke_modeler/models/row.rb +11 -8
  26. data/lib/cuke_modeler/models/rule.rb +101 -0
  27. data/lib/cuke_modeler/models/scenario.rb +18 -13
  28. data/lib/cuke_modeler/models/step.rb +41 -19
  29. data/lib/cuke_modeler/models/table.rb +10 -7
  30. data/lib/cuke_modeler/models/tag.rb +10 -6
  31. data/lib/cuke_modeler/named.rb +5 -1
  32. data/lib/cuke_modeler/nested.rb +22 -18
  33. data/lib/cuke_modeler/parsed.rb +8 -0
  34. data/lib/cuke_modeler/parsing.rb +55 -74
  35. data/lib/cuke_modeler/sourceable.rb +8 -0
  36. data/lib/cuke_modeler/stepped.rb +8 -0
  37. data/lib/cuke_modeler/taggable.rb +9 -1
  38. data/lib/cuke_modeler/version.rb +1 -1
  39. data/testing/cucumber/features/modeling/feature_modeling.feature +28 -7
  40. data/testing/cucumber/features/modeling/feature_output.feature +45 -23
  41. data/testing/cucumber/features/modeling/rule_modeling.feature +108 -0
  42. data/testing/cucumber/features/modeling/rule_output.feature +111 -0
  43. metadata +68 -161
  44. data/.gitignore +0 -18
  45. data/.simplecov +0 -7
  46. data/.travis.yml +0 -81
  47. data/Gemfile +0 -44
  48. data/Rakefile +0 -73
  49. data/appveyor.yml +0 -88
  50. data/lib/cuke_modeler/adapters/gherkin_2_adapter.rb +0 -274
  51. data/lib/cuke_modeler/adapters/gherkin_3_adapter.rb +0 -297
  52. data/lib/cuke_modeler/adapters/gherkin_4_adapter.rb +0 -309
  53. data/lib/cuke_modeler/adapters/gherkin_5_adapter.rb +0 -12
  54. data/lib/cuke_modeler/adapters/gherkin_6_adapter.rb +0 -310
  55. data/lib/cuke_modeler/adapters/gherkin_7_adapter.rb +0 -307
  56. data/lib/cuke_modeler/adapters/gherkin_8_adapter.rb +0 -12
  57. data/testing/cucumber/step_definitions/action_steps.rb +0 -13
  58. data/testing/cucumber/step_definitions/background_steps.rb +0 -1
  59. data/testing/cucumber/step_definitions/directory_steps.rb +0 -6
  60. data/testing/cucumber/step_definitions/doc_string_steps.rb +0 -1
  61. data/testing/cucumber/step_definitions/feature_file_steps.rb +0 -16
  62. data/testing/cucumber/step_definitions/feature_steps.rb +0 -7
  63. data/testing/cucumber/step_definitions/modeling_steps.rb +0 -49
  64. data/testing/cucumber/step_definitions/setup_steps.rb +0 -32
  65. data/testing/cucumber/step_definitions/step_steps.rb +0 -3
  66. data/testing/cucumber/step_definitions/table_steps.rb +0 -1
  67. data/testing/cucumber/step_definitions/tag_steps.rb +0 -3
  68. data/testing/cucumber/step_definitions/verification_steps.rb +0 -181
  69. data/testing/cucumber/support/env.rb +0 -30
  70. data/testing/dialect_helper.rb +0 -48
  71. data/testing/file_helper.rb +0 -47
  72. data/testing/gemfiles/gherkin2.gemfile +0 -33
  73. data/testing/gemfiles/gherkin3.gemfile +0 -26
  74. data/testing/gemfiles/gherkin4.gemfile +0 -27
  75. data/testing/gemfiles/gherkin5.gemfile +0 -27
  76. data/testing/gemfiles/gherkin6.gemfile +0 -10
  77. data/testing/gemfiles/gherkin7.gemfile +0 -9
  78. data/testing/gemfiles/gherkin8.gemfile +0 -9
  79. data/testing/gemfiles/gherkin9.gemfile +0 -9
  80. data/testing/helper_methods.rb +0 -23
  81. data/testing/rspec/spec/integration/adapters/gherkin_2_adapter_spec.rb +0 -166
  82. data/testing/rspec/spec/integration/adapters/gherkin_3_adapter_spec.rb +0 -166
  83. data/testing/rspec/spec/integration/adapters/gherkin_4_adapter_spec.rb +0 -165
  84. data/testing/rspec/spec/integration/adapters/gherkin_5_adapter_spec.rb +0 -165
  85. data/testing/rspec/spec/integration/adapters/gherkin_6_adapter_spec.rb +0 -159
  86. data/testing/rspec/spec/integration/adapters/gherkin_7_adapter_spec.rb +0 -162
  87. data/testing/rspec/spec/integration/adapters/gherkin_8_adapter_spec.rb +0 -162
  88. data/testing/rspec/spec/integration/adapters/gherkin_9_adapter_spec.rb +0 -162
  89. data/testing/rspec/spec/integration/models/background_integration_spec.rb +0 -438
  90. data/testing/rspec/spec/integration/models/cell_integration_spec.rb +0 -338
  91. data/testing/rspec/spec/integration/models/comment_integration_spec.rb +0 -180
  92. data/testing/rspec/spec/integration/models/directory_integration_spec.rb +0 -218
  93. data/testing/rspec/spec/integration/models/doc_string_integration_spec.rb +0 -398
  94. data/testing/rspec/spec/integration/models/example_integration_spec.rb +0 -753
  95. data/testing/rspec/spec/integration/models/feature_file_integration_spec.rb +0 -276
  96. data/testing/rspec/spec/integration/models/feature_integration_spec.rb +0 -655
  97. data/testing/rspec/spec/integration/models/model_integration_spec.rb +0 -15
  98. data/testing/rspec/spec/integration/models/outline_integration_spec.rb +0 -619
  99. data/testing/rspec/spec/integration/models/row_integration_spec.rb +0 -303
  100. data/testing/rspec/spec/integration/models/scenario_integration_spec.rb +0 -475
  101. data/testing/rspec/spec/integration/models/step_integration_spec.rb +0 -573
  102. data/testing/rspec/spec/integration/models/table_integration_spec.rb +0 -333
  103. data/testing/rspec/spec/integration/models/tag_integration_spec.rb +0 -271
  104. data/testing/rspec/spec/integration/nested_integration_spec.rb +0 -91
  105. data/testing/rspec/spec/integration/parsing_integration_spec.rb +0 -143
  106. data/testing/rspec/spec/integration/shared/models_integration_specs.rb +0 -18
  107. data/testing/rspec/spec/spec_helper.rb +0 -129
  108. data/testing/rspec/spec/unit/cuke_modeler_unit_spec.rb +0 -25
  109. data/testing/rspec/spec/unit/described_unit_spec.rb +0 -23
  110. data/testing/rspec/spec/unit/models/background_unit_spec.rb +0 -83
  111. data/testing/rspec/spec/unit/models/cell_unit_spec.rb +0 -68
  112. data/testing/rspec/spec/unit/models/comment_unit_spec.rb +0 -68
  113. data/testing/rspec/spec/unit/models/directory_unit_spec.rb +0 -127
  114. data/testing/rspec/spec/unit/models/doc_string_unit_spec.rb +0 -100
  115. data/testing/rspec/spec/unit/models/example_unit_spec.rb +0 -133
  116. data/testing/rspec/spec/unit/models/feature_file_unit_spec.rb +0 -125
  117. data/testing/rspec/spec/unit/models/feature_unit_spec.rb +0 -157
  118. data/testing/rspec/spec/unit/models/model_unit_spec.rb +0 -15
  119. data/testing/rspec/spec/unit/models/outline_unit_spec.rb +0 -117
  120. data/testing/rspec/spec/unit/models/row_unit_spec.rb +0 -68
  121. data/testing/rspec/spec/unit/models/scenario_unit_spec.rb +0 -86
  122. data/testing/rspec/spec/unit/models/step_unit_spec.rb +0 -109
  123. data/testing/rspec/spec/unit/models/table_unit_spec.rb +0 -77
  124. data/testing/rspec/spec/unit/models/tag_unit_spec.rb +0 -68
  125. data/testing/rspec/spec/unit/named_unit_spec.rb +0 -23
  126. data/testing/rspec/spec/unit/nested_unit_spec.rb +0 -43
  127. data/testing/rspec/spec/unit/parsed_unit_spec.rb +0 -27
  128. data/testing/rspec/spec/unit/parsing_unit_spec.rb +0 -54
  129. data/testing/rspec/spec/unit/shared/bare_bones_models_unit_specs.rb +0 -14
  130. data/testing/rspec/spec/unit/shared/containing_models_unit_specs.rb +0 -127
  131. data/testing/rspec/spec/unit/shared/described_models_unit_specs.rb +0 -38
  132. data/testing/rspec/spec/unit/shared/keyworded_models_unit_specs.rb +0 -58
  133. data/testing/rspec/spec/unit/shared/models_unit_specs.rb +0 -15
  134. data/testing/rspec/spec/unit/shared/named_models_unit_specs.rb +0 -39
  135. data/testing/rspec/spec/unit/shared/nested_models_unit_specs.rb +0 -51
  136. data/testing/rspec/spec/unit/shared/parsed_models_unit_specs.rb +0 -39
  137. data/testing/rspec/spec/unit/shared/prepopulated_models_unit_specs.rb +0 -18
  138. data/testing/rspec/spec/unit/shared/sourced_models_unit_specs.rb +0 -39
  139. data/testing/rspec/spec/unit/shared/stepped_models_unit_specs.rb +0 -46
  140. data/testing/rspec/spec/unit/shared/stringifiable_models_unit_specs.rb +0 -18
  141. data/testing/rspec/spec/unit/shared/tagged_models_unit_specs.rb +0 -72
  142. data/testing/rspec/spec/unit/sourceable_unit_spec.rb +0 -27
  143. data/testing/rspec/spec/unit/stepped_unit_spec.rb +0 -23
  144. data/testing/rspec/spec/unit/taggable_unit_spec.rb +0 -69
  145. data/testing/test_languages.json +0 -45
  146. data/todo.txt +0 -25
@@ -1,15 +0,0 @@
1
- require "#{File.dirname(__FILE__)}/../../spec_helper"
2
-
3
-
4
- describe 'Model, Integration' do
5
-
6
- let(:clazz) { CukeModeler::Model }
7
-
8
-
9
- describe 'common behavior' do
10
-
11
- it_should_behave_like 'a model, integration'
12
-
13
- end
14
-
15
- end
@@ -1,619 +0,0 @@
1
- require "#{File.dirname(__FILE__)}/../../spec_helper"
2
-
3
-
4
- describe 'Outline, Integration' do
5
-
6
- let(:clazz) { CukeModeler::Outline }
7
-
8
-
9
- describe 'common behavior' do
10
-
11
- it_should_behave_like 'a model, integration'
12
-
13
- end
14
-
15
- describe 'unique behavior' do
16
-
17
- it 'can be instantiated with the minimum viable Gherkin', :unless => gherkin?(3) do
18
- source = "#{OUTLINE_KEYWORD}:"
19
-
20
- expect { clazz.new(source) }.to_not raise_error
21
- end
22
-
23
- # gherkin 3.x does not accept incomplete outlines
24
- it 'can be instantiated with the minimum viable Gherkin', :if => gherkin?(3) do
25
- source = "#{OUTLINE_KEYWORD}:
26
- #{EXAMPLE_KEYWORD}:
27
- | param |
28
- | value |"
29
-
30
- expect { clazz.new(source) }.to_not raise_error
31
- end
32
-
33
- it 'can parse text that uses a non-default dialect' do
34
- original_dialect = CukeModeler::Parsing.dialect
35
- CukeModeler::Parsing.dialect = 'en-au'
36
-
37
- begin
38
- source_text = "Reckon it's like: Outline name
39
- Yeah nah zen
40
- You'll wanna:
41
- | param |
42
- | value |"
43
-
44
- expect { @model = clazz.new(source_text) }.to_not raise_error
45
-
46
- # Sanity check in case modeling failed in a non-explosive manner
47
- expect(@model.name).to eq('Outline name')
48
- ensure
49
- # Making sure that our changes don't escape a test and ruin the rest of the suite
50
- CukeModeler::Parsing.dialect = original_dialect
51
- end
52
- end
53
-
54
- describe 'parsing data' do
55
-
56
- it 'stores the original data generated by the parsing adapter', :if => gherkin?(6, 7, 8, 9) do
57
- outline = clazz.new("@tag\n#{OUTLINE_KEYWORD}: test outline\ndescription\n#{STEP_KEYWORD} a step\n#{EXAMPLE_KEYWORD}:\n|param|\n|value|")
58
- data = outline.parsing_data
59
-
60
- expect(data.keys).to match_array([:background, :rule, :scenario])
61
- expect(data[:scenario][:name]).to eq('test outline')
62
- end
63
-
64
- it 'stores the original data generated by the parsing adapter', :if => gherkin?(3, 4, 5) do
65
- outline = clazz.new("@tag\n#{OUTLINE_KEYWORD}: test outline\ndescription\n#{STEP_KEYWORD} a step\n#{EXAMPLE_KEYWORD}:\n|param|\n|value|")
66
- data = outline.parsing_data
67
-
68
- expect(data.keys).to match_array([:type, :tags, :location, :keyword, :name, :steps, :examples, :description])
69
- expect(data[:type]).to eq(:ScenarioOutline)
70
- end
71
-
72
- it 'stores the original data generated by the parsing adapter', :if => gherkin?(2) do
73
- outline = clazz.new("@tag\n#{OUTLINE_KEYWORD}: test outline\ndescription\n#{STEP_KEYWORD} a step\n#{EXAMPLE_KEYWORD}:\n|param|\n|value|")
74
- data = outline.parsing_data
75
-
76
- expect(data.keys).to match_array(['keyword', 'name', 'line', 'description', 'id', 'type', 'examples', 'steps', 'tags'])
77
- expect(data['keyword']).to eq('Scenario Outline')
78
- end
79
-
80
- end
81
-
82
- it 'provides a descriptive filename when being parsed from stand alone text' do
83
- source = "bad outline text \n #{OUTLINE_KEYWORD}:\n #{STEP_KEYWORD} a step\n @foo "
84
-
85
- expect { clazz.new(source) }.to raise_error(/'cuke_modeler_stand_alone_outline\.feature'/)
86
- end
87
-
88
- it 'properly sets its child models' do
89
- source = "@a_tag
90
- #{OUTLINE_KEYWORD}:
91
- #{STEP_KEYWORD} a step
92
- #{EXAMPLE_KEYWORD}:
93
- | param |
94
- | value |"
95
-
96
- outline = clazz.new(source)
97
- example = outline.examples.first
98
- step = outline.steps.first
99
- tag = outline.tags.first
100
-
101
- expect(example.parent_model).to equal(outline)
102
- expect(step.parent_model).to equal(outline)
103
- expect(tag.parent_model).to equal(outline)
104
- end
105
-
106
- describe 'getting ancestors' do
107
-
108
- before(:each) do
109
- CukeModeler::FileHelper.create_feature_file(:text => source_gherkin, :name => 'outline_test_file', :directory => test_directory)
110
- end
111
-
112
-
113
- let(:test_directory) { CukeModeler::FileHelper.create_directory }
114
- let(:source_gherkin) { "#{FEATURE_KEYWORD}: Test feature
115
-
116
- #{OUTLINE_KEYWORD}: Test test
117
- #{STEP_KEYWORD} a step
118
- #{EXAMPLE_KEYWORD}: Test example
119
- | a param |
120
- | a value |"
121
- }
122
-
123
- let(:directory_model) { CukeModeler::Directory.new(test_directory) }
124
- let(:outline_model) { directory_model.feature_files.first.feature.tests.first }
125
-
126
-
127
- it 'can get its directory' do
128
- ancestor = outline_model.get_ancestor(:directory)
129
-
130
- expect(ancestor).to equal(directory_model)
131
- end
132
-
133
- it 'can get its feature file' do
134
- ancestor = outline_model.get_ancestor(:feature_file)
135
-
136
- expect(ancestor).to equal(directory_model.feature_files.first)
137
- end
138
-
139
- it 'can get its feature' do
140
- ancestor = outline_model.get_ancestor(:feature)
141
-
142
- expect(ancestor).to equal(directory_model.feature_files.first.feature)
143
- end
144
-
145
- it 'returns nil if it does not have the requested type of ancestor' do
146
- ancestor = outline_model.get_ancestor(:test)
147
-
148
- expect(ancestor).to be_nil
149
- end
150
-
151
- end
152
-
153
-
154
- describe 'model population' do
155
-
156
- context 'from source text' do
157
-
158
- let(:source_text) { "#{OUTLINE_KEYWORD}:" }
159
- let(:outline) { clazz.new(source_text) }
160
-
161
-
162
- # gherkin 3.x does not accept incomplete outlines
163
- it "models the outline's keyword", :unless => gherkin?(3) do
164
- expect(outline.keyword).to eq("#{OUTLINE_KEYWORD}")
165
- end
166
-
167
- context 'using gherkin 3.x', :if => gherkin?(3) do
168
-
169
- let(:source_text) { "#{OUTLINE_KEYWORD}:\n#{STEP_KEYWORD} step\n#{EXAMPLE_KEYWORD}:\n|param|\n|value|" }
170
- let(:outline) { clazz.new(source_text) }
171
-
172
- it "models the outline's keyword" do
173
- expect(outline.keyword).to eq(OUTLINE_KEYWORD)
174
- end
175
-
176
- end
177
-
178
- it "models the outline's source line" do
179
- source_text = "#{FEATURE_KEYWORD}:
180
-
181
- #{OUTLINE_KEYWORD}: foo
182
- #{STEP_KEYWORD} step
183
- #{EXAMPLE_KEYWORD}:
184
- | param |
185
- | value |"
186
- outline = CukeModeler::Feature.new(source_text).tests.first
187
-
188
- expect(outline.source_line).to eq(3)
189
- end
190
-
191
-
192
- context 'a filled outline' do
193
-
194
- let(:source_text) { "@tag1 @tag2 @tag3
195
- #{OUTLINE_KEYWORD}: Foo
196
- Scenario description.
197
-
198
- Some more.
199
- Even more.
200
-
201
- #{STEP_KEYWORD} a <setup> step
202
- #{STEP_KEYWORD} an action step
203
- #{STEP_KEYWORD} a <verification> step
204
-
205
- #{EXAMPLE_KEYWORD}: example 1
206
- | setup | verification |
207
- | x | y |
208
- #{EXAMPLE_KEYWORD}: example 2
209
- | setup | verification |
210
- | a | b |" }
211
- let(:outline) { clazz.new(source_text) }
212
-
213
-
214
- it "models the outline's name" do
215
- expect(outline.name).to eq('Foo')
216
- end
217
-
218
- it "models the outline's description" do
219
- description = outline.description.split("\n", -1)
220
-
221
- expect(description).to eq([' Scenario description.',
222
- '',
223
- 'Some more.',
224
- ' Even more.'])
225
- end
226
-
227
- it "models the outline's steps" do
228
- step_names = outline.steps.collect { |step| step.text }
229
-
230
- expect(step_names).to eq(['a <setup> step', 'an action step', 'a <verification> step'])
231
- end
232
-
233
- it "models the outline's tags" do
234
- tag_names = outline.tags.collect { |tag| tag.name }
235
-
236
- expect(tag_names).to eq(['@tag1', '@tag2', '@tag3'])
237
- end
238
-
239
- it "models the outline's examples" do
240
- example_names = outline.examples.collect { |example| example.name }
241
-
242
- expect(example_names).to eq(['example 1', 'example 2'])
243
- end
244
-
245
- end
246
-
247
-
248
- # gherkin 3.x does not accept incomplete outlines
249
- context 'an empty outline', :unless => gherkin?(3) do
250
-
251
- let(:source_text) { "#{OUTLINE_KEYWORD}:" }
252
- let(:outline) { clazz.new(source_text) }
253
-
254
-
255
- it "models the outline's name" do
256
- expect(outline.name).to eq('')
257
- end
258
-
259
- it "models the outline's description" do
260
- expect(outline.description).to eq('')
261
- end
262
-
263
- it "models the outline's steps" do
264
- expect(outline.steps).to eq([])
265
- end
266
-
267
- it "models the outline's tags" do
268
- expect(outline.tags).to eq([])
269
- end
270
-
271
- it "models the outline's examples" do
272
- expect(outline.examples).to eq([])
273
- end
274
-
275
- end
276
-
277
- end
278
-
279
- end
280
-
281
- it 'trims whitespace from its source description' do
282
- source = ["#{OUTLINE_KEYWORD}:",
283
- ' ',
284
- ' description line 1',
285
- '',
286
- ' description line 2',
287
- ' description line 3 ',
288
- '',
289
- '',
290
- '',
291
- " #{STEP_KEYWORD} a step",
292
- '',
293
- "#{EXAMPLE_KEYWORD}:",
294
- '|param|',
295
- '|value|']
296
- source = source.join("\n")
297
-
298
- outline = clazz.new(source)
299
- description = outline.description.split("\n", -1)
300
-
301
- expect(description).to eq([' description line 1',
302
- '',
303
- 'description line 2',
304
- ' description line 3'])
305
- end
306
-
307
-
308
- describe 'comparison' do
309
-
310
- it 'is equal to a background with the same steps' do
311
- source = "#{OUTLINE_KEYWORD}:
312
- #{STEP_KEYWORD} step 1
313
- #{STEP_KEYWORD} step 2
314
- #{EXAMPLE_KEYWORD}:
315
- | param |
316
- | value |"
317
- outline = clazz.new(source)
318
-
319
- source = "#{BACKGROUND_KEYWORD}:
320
- #{STEP_KEYWORD} step 1
321
- #{STEP_KEYWORD} step 2"
322
- background_1 = CukeModeler::Background.new(source)
323
-
324
- source = "#{BACKGROUND_KEYWORD}:
325
- #{STEP_KEYWORD} step 2
326
- #{STEP_KEYWORD} step 1"
327
- background_2 = CukeModeler::Background.new(source)
328
-
329
-
330
- expect(outline).to eq(background_1)
331
- expect(outline).to_not eq(background_2)
332
- end
333
-
334
- it 'is equal to a scenario with the same steps' do
335
- source = "#{OUTLINE_KEYWORD}:
336
- #{STEP_KEYWORD} step 1
337
- #{STEP_KEYWORD} step 2
338
- #{EXAMPLE_KEYWORD}:
339
- | param |
340
- | value |"
341
- outline = clazz.new(source)
342
-
343
- source = "#{SCENARIO_KEYWORD}:
344
- #{STEP_KEYWORD} step 1
345
- #{STEP_KEYWORD} step 2"
346
- scenario_1 = CukeModeler::Scenario.new(source)
347
-
348
- source = "#{SCENARIO_KEYWORD}:
349
- #{STEP_KEYWORD} step 2
350
- #{STEP_KEYWORD} step 1"
351
- scenario_2 = CukeModeler::Scenario.new(source)
352
-
353
-
354
- expect(outline).to eq(scenario_1)
355
- expect(outline).to_not eq(scenario_2)
356
- end
357
-
358
- it 'is equal to an outline with the same steps' do
359
- source = "#{OUTLINE_KEYWORD}:
360
- #{STEP_KEYWORD} step 1
361
- #{STEP_KEYWORD} step 2
362
- #{EXAMPLE_KEYWORD}:
363
- | param |
364
- | value |"
365
- outline_1 = clazz.new(source)
366
-
367
- source = "#{OUTLINE_KEYWORD}:
368
- #{STEP_KEYWORD} step 1
369
- #{STEP_KEYWORD} step 2
370
- #{EXAMPLE_KEYWORD}:
371
- | param |
372
- | value |"
373
- outline_2 = clazz.new(source)
374
-
375
- source = "#{OUTLINE_KEYWORD}:
376
- #{STEP_KEYWORD} step 2
377
- #{STEP_KEYWORD} step 1
378
- #{EXAMPLE_KEYWORD}:
379
- | param |
380
- | value |"
381
- outline_3 = clazz.new(source)
382
-
383
-
384
- expect(outline_1).to eq(outline_2)
385
- expect(outline_1).to_not eq(outline_3)
386
- end
387
-
388
- end
389
-
390
-
391
- describe 'outline output' do
392
-
393
- it 'can be remade from its own output' do
394
- source = "@tag1 @tag2 @tag3
395
- #{OUTLINE_KEYWORD}: An outline with everything it could have
396
-
397
- Some description.
398
- Some more description.
399
-
400
- #{STEP_KEYWORD} a step
401
- | value |
402
- #{STEP_KEYWORD} a <value> step
403
- \"\"\"
404
- some string
405
- \"\"\"
406
-
407
- #{EXAMPLE_KEYWORD}:
408
-
409
- Some description.
410
- Some more description.
411
-
412
- | value |
413
- | x |
414
-
415
- @example_tag
416
- #{EXAMPLE_KEYWORD}:
417
- | value |
418
- | y |"
419
- outline = clazz.new(source)
420
-
421
- outline_output = outline.to_s
422
- remade_outline_output = clazz.new(outline_output).to_s
423
-
424
- expect(remade_outline_output).to eq(outline_output)
425
- end
426
-
427
-
428
- context 'from source text' do
429
-
430
- # gherkin 3.x does not accept incomplete outlines
431
- it 'can output an empty outline', :unless => gherkin?(3) do
432
- source = ["#{OUTLINE_KEYWORD}:"]
433
- source = source.join("\n")
434
- outline = clazz.new(source)
435
-
436
- outline_output = outline.to_s.split("\n", -1)
437
-
438
- expect(outline_output).to eq(["#{OUTLINE_KEYWORD}:"])
439
- end
440
-
441
- # gherkin 3.x does not accept incomplete outlines
442
- it 'can output a outline that has a name', :unless => gherkin?(3) do
443
- source = ["#{OUTLINE_KEYWORD}: test outline"]
444
- source = source.join("\n")
445
- outline = clazz.new(source)
446
-
447
- outline_output = outline.to_s.split("\n", -1)
448
-
449
- expect(outline_output).to eq(["#{OUTLINE_KEYWORD}: test outline"])
450
- end
451
-
452
- # gherkin 3.x does not accept incomplete outlines
453
- it 'can output a outline that has a description', :unless => gherkin?(3) do
454
- source = ["#{OUTLINE_KEYWORD}:",
455
- 'Some description.',
456
- 'Some more description.']
457
- source = source.join("\n")
458
- outline = clazz.new(source)
459
-
460
- outline_output = outline.to_s.split("\n", -1)
461
-
462
- expect(outline_output).to eq(["#{OUTLINE_KEYWORD}:",
463
- '',
464
- 'Some description.',
465
- 'Some more description.'])
466
- end
467
-
468
- # gherkin 3.x does not accept incomplete outlines
469
- it 'can output a outline that has steps', :unless => gherkin?(3) do
470
- source = ["#{OUTLINE_KEYWORD}:",
471
- " #{STEP_KEYWORD} a step",
472
- ' | value |',
473
- " #{STEP_KEYWORD} another step",
474
- ' """',
475
- ' some string',
476
- ' """']
477
- source = source.join("\n")
478
- outline = clazz.new(source)
479
-
480
- outline_output = outline.to_s.split("\n", -1)
481
-
482
- expect(outline_output).to eq(["#{OUTLINE_KEYWORD}:",
483
- " #{STEP_KEYWORD} a step",
484
- ' | value |',
485
- " #{STEP_KEYWORD} another step",
486
- ' """',
487
- ' some string',
488
- ' """'])
489
- end
490
-
491
- # gherkin 3.x does not accept incomplete outlines
492
- it 'can output a outline that has tags', :unless => gherkin?(3) do
493
- source = ['@tag1 @tag2',
494
- '@tag3',
495
- "#{OUTLINE_KEYWORD}:"]
496
- source = source.join("\n")
497
- outline = clazz.new(source)
498
-
499
- outline_output = outline.to_s.split("\n", -1)
500
-
501
- expect(outline_output).to eq(['@tag1 @tag2 @tag3',
502
- "#{OUTLINE_KEYWORD}:"])
503
- end
504
-
505
- it 'can output a outline that has examples' do
506
- source = ["#{OUTLINE_KEYWORD}:",
507
- "#{STEP_KEYWORD} a step",
508
- "#{EXAMPLE_KEYWORD}:",
509
- '| value |',
510
- '| x |',
511
- "#{EXAMPLE_KEYWORD}:",
512
- '| value |',
513
- '| y |']
514
- source = source.join("\n")
515
- outline = clazz.new(source)
516
-
517
- outline_output = outline.to_s.split("\n", -1)
518
-
519
- expect(outline_output).to eq(["#{OUTLINE_KEYWORD}:",
520
- " #{STEP_KEYWORD} a step",
521
- '',
522
- "#{EXAMPLE_KEYWORD}:",
523
- ' | value |',
524
- ' | x |',
525
- '',
526
- "#{EXAMPLE_KEYWORD}:",
527
- ' | value |',
528
- ' | y |'])
529
- end
530
-
531
- it 'can output a outline that has everything' do
532
- source = ['@tag1 @tag2 @tag3',
533
- "#{OUTLINE_KEYWORD}: A outline with everything it could have",
534
- 'Including a description',
535
- 'and then some.',
536
- "#{STEP_KEYWORD} a step",
537
- '|value|',
538
- "#{STEP_KEYWORD} another step",
539
- '"""',
540
- 'some string',
541
- '"""',
542
- '',
543
- "#{EXAMPLE_KEYWORD}:",
544
- '',
545
- 'Some description.',
546
- 'Some more description.',
547
- '',
548
- '| value |',
549
- '| x |',
550
- '',
551
- '@example_tag',
552
- "#{EXAMPLE_KEYWORD}:",
553
- '| value |',
554
- '| y |']
555
- source = source.join("\n")
556
- outline = clazz.new(source)
557
-
558
- outline_output = outline.to_s.split("\n", -1)
559
-
560
- expect(outline_output).to eq(['@tag1 @tag2 @tag3',
561
- "#{OUTLINE_KEYWORD}: A outline with everything it could have",
562
- '',
563
- 'Including a description',
564
- 'and then some.',
565
- '',
566
- " #{STEP_KEYWORD} a step",
567
- ' | value |',
568
- " #{STEP_KEYWORD} another step",
569
- ' """',
570
- ' some string',
571
- ' """',
572
- '',
573
- "#{EXAMPLE_KEYWORD}:",
574
- '',
575
- 'Some description.',
576
- 'Some more description.',
577
- '',
578
- ' | value |',
579
- ' | x |',
580
- '',
581
- '@example_tag',
582
- "#{EXAMPLE_KEYWORD}:",
583
- ' | value |',
584
- ' | y |'])
585
- end
586
-
587
- end
588
-
589
-
590
- context 'from abstract instantiation' do
591
-
592
- let(:outline) { clazz.new }
593
-
594
-
595
- it 'can output an outline that has only tags' do
596
- outline.tags = [CukeModeler::Tag.new]
597
-
598
- expect { outline.to_s }.to_not raise_error
599
- end
600
-
601
- it 'can output an outline that has only steps' do
602
- outline.steps = [CukeModeler::Step.new]
603
-
604
- expect { outline.to_s }.to_not raise_error
605
- end
606
-
607
- it 'can output an outline that has only examples' do
608
- outline.examples = [CukeModeler::Example.new]
609
-
610
- expect { outline.to_s }.to_not raise_error
611
- end
612
-
613
- end
614
-
615
- end
616
-
617
- end
618
-
619
- end