cuke_modeler 1.4.0 → 3.0.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 (128) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +329 -0
  3. data/LICENSE.txt +1 -1
  4. data/README.md +25 -18
  5. data/cuke_modeler.gemspec +15 -9
  6. data/lib/cuke_modeler/adapters/gherkin_10_adapter.rb +12 -0
  7. data/lib/cuke_modeler/adapters/gherkin_11_adapter.rb +12 -0
  8. data/lib/cuke_modeler/adapters/gherkin_12_adapter.rb +12 -0
  9. data/lib/cuke_modeler/adapters/gherkin_13_adapter.rb +12 -0
  10. data/lib/cuke_modeler/adapters/{gherkin_6_adapter.rb → gherkin_9_adapter.rb} +75 -64
  11. data/lib/cuke_modeler/containing.rb +16 -0
  12. data/lib/cuke_modeler/described.rb +1 -0
  13. data/lib/cuke_modeler/models/background.rb +1 -1
  14. data/lib/cuke_modeler/models/cell.rb +1 -1
  15. data/lib/cuke_modeler/models/comment.rb +1 -1
  16. data/lib/cuke_modeler/models/directory.rb +2 -2
  17. data/lib/cuke_modeler/models/doc_string.rb +1 -1
  18. data/lib/cuke_modeler/models/example.rb +1 -1
  19. data/lib/cuke_modeler/models/feature.rb +1 -1
  20. data/lib/cuke_modeler/models/feature_file.rb +2 -2
  21. data/lib/cuke_modeler/models/outline.rb +1 -1
  22. data/lib/cuke_modeler/models/row.rb +1 -1
  23. data/lib/cuke_modeler/models/scenario.rb +1 -1
  24. data/lib/cuke_modeler/models/step.rb +32 -3
  25. data/lib/cuke_modeler/models/table.rb +1 -1
  26. data/lib/cuke_modeler/models/tag.rb +1 -1
  27. data/lib/cuke_modeler/named.rb +1 -0
  28. data/lib/cuke_modeler/nested.rb +1 -0
  29. data/lib/cuke_modeler/parsed.rb +1 -0
  30. data/lib/cuke_modeler/parsing.rb +88 -92
  31. data/lib/cuke_modeler/sourceable.rb +1 -0
  32. data/lib/cuke_modeler/stepped.rb +1 -0
  33. data/lib/cuke_modeler/taggable.rb +1 -0
  34. data/lib/cuke_modeler/version.rb +1 -1
  35. data/testing/cucumber/features/analysis/step_comparison.feature +25 -0
  36. data/testing/cucumber/features/analysis/test_comparison.feature +1 -1
  37. metadata +55 -142
  38. data/.gitignore +0 -18
  39. data/.simplecov +0 -7
  40. data/.travis.yml +0 -54
  41. data/Gemfile +0 -36
  42. data/History.md +0 -191
  43. data/Rakefile +0 -63
  44. data/appveyor.yml +0 -43
  45. data/lib/cuke_modeler/adapters/gherkin_2_adapter.rb +0 -273
  46. data/lib/cuke_modeler/adapters/gherkin_3_adapter.rb +0 -296
  47. data/lib/cuke_modeler/adapters/gherkin_4_adapter.rb +0 -308
  48. data/testing/cucumber/step_definitions/action_steps.rb +0 -13
  49. data/testing/cucumber/step_definitions/background_steps.rb +0 -1
  50. data/testing/cucumber/step_definitions/directory_steps.rb +0 -6
  51. data/testing/cucumber/step_definitions/doc_string_steps.rb +0 -1
  52. data/testing/cucumber/step_definitions/feature_file_steps.rb +0 -16
  53. data/testing/cucumber/step_definitions/feature_steps.rb +0 -7
  54. data/testing/cucumber/step_definitions/modeling_steps.rb +0 -44
  55. data/testing/cucumber/step_definitions/setup_steps.rb +0 -32
  56. data/testing/cucumber/step_definitions/step_steps.rb +0 -3
  57. data/testing/cucumber/step_definitions/table_steps.rb +0 -1
  58. data/testing/cucumber/step_definitions/tag_steps.rb +0 -3
  59. data/testing/cucumber/step_definitions/verification_steps.rb +0 -173
  60. data/testing/cucumber/support/env.rb +0 -30
  61. data/testing/dialect_helper.rb +0 -48
  62. data/testing/file_helper.rb +0 -47
  63. data/testing/gemfiles/gherkin2.gemfile +0 -32
  64. data/testing/gemfiles/gherkin3.gemfile +0 -26
  65. data/testing/gemfiles/gherkin4.gemfile +0 -27
  66. data/testing/gemfiles/gherkin5.gemfile +0 -26
  67. data/testing/gemfiles/gherkin6.gemfile +0 -10
  68. data/testing/rspec/spec/integration/background_integration_spec.rb +0 -442
  69. data/testing/rspec/spec/integration/cell_integration_spec.rb +0 -335
  70. data/testing/rspec/spec/integration/comment_integration_spec.rb +0 -177
  71. data/testing/rspec/spec/integration/directory_integration_spec.rb +0 -218
  72. data/testing/rspec/spec/integration/doc_string_integration_spec.rb +0 -402
  73. data/testing/rspec/spec/integration/example_integration_spec.rb +0 -741
  74. data/testing/rspec/spec/integration/feature_file_integration_spec.rb +0 -272
  75. data/testing/rspec/spec/integration/feature_integration_spec.rb +0 -650
  76. data/testing/rspec/spec/integration/gherkin_2_adapter_spec.rb +0 -166
  77. data/testing/rspec/spec/integration/gherkin_3_adapter_spec.rb +0 -166
  78. data/testing/rspec/spec/integration/gherkin_4_adapter_spec.rb +0 -165
  79. data/testing/rspec/spec/integration/gherkin_6_adapter_spec.rb +0 -166
  80. data/testing/rspec/spec/integration/model_integration_spec.rb +0 -15
  81. data/testing/rspec/spec/integration/nested_integration_spec.rb +0 -91
  82. data/testing/rspec/spec/integration/outline_integration_spec.rb +0 -624
  83. data/testing/rspec/spec/integration/parsing_integration_spec.rb +0 -117
  84. data/testing/rspec/spec/integration/row_integration_spec.rb +0 -291
  85. data/testing/rspec/spec/integration/scenario_integration_spec.rb +0 -479
  86. data/testing/rspec/spec/integration/shared/models_integration_specs.rb +0 -18
  87. data/testing/rspec/spec/integration/step_integration_spec.rb +0 -475
  88. data/testing/rspec/spec/integration/table_integration_spec.rb +0 -337
  89. data/testing/rspec/spec/integration/tag_integration_spec.rb +0 -259
  90. data/testing/rspec/spec/spec_helper.rb +0 -122
  91. data/testing/rspec/spec/unit/background_unit_spec.rb +0 -83
  92. data/testing/rspec/spec/unit/cell_unit_spec.rb +0 -68
  93. data/testing/rspec/spec/unit/comment_unit_spec.rb +0 -68
  94. data/testing/rspec/spec/unit/described_unit_spec.rb +0 -23
  95. data/testing/rspec/spec/unit/directory_unit_spec.rb +0 -127
  96. data/testing/rspec/spec/unit/doc_string_unit_spec.rb +0 -100
  97. data/testing/rspec/spec/unit/example_unit_spec.rb +0 -133
  98. data/testing/rspec/spec/unit/feature_file_unit_spec.rb +0 -125
  99. data/testing/rspec/spec/unit/feature_unit_spec.rb +0 -157
  100. data/testing/rspec/spec/unit/model_unit_spec.rb +0 -15
  101. data/testing/rspec/spec/unit/named_unit_spec.rb +0 -23
  102. data/testing/rspec/spec/unit/nested_unit_spec.rb +0 -43
  103. data/testing/rspec/spec/unit/outline_unit_spec.rb +0 -117
  104. data/testing/rspec/spec/unit/parsed_unit_spec.rb +0 -27
  105. data/testing/rspec/spec/unit/parsing_unit_spec.rb +0 -54
  106. data/testing/rspec/spec/unit/row_unit_spec.rb +0 -68
  107. data/testing/rspec/spec/unit/scenario_unit_spec.rb +0 -86
  108. data/testing/rspec/spec/unit/shared/bare_bones_models_unit_specs.rb +0 -14
  109. data/testing/rspec/spec/unit/shared/containing_models_unit_specs.rb +0 -25
  110. data/testing/rspec/spec/unit/shared/described_models_unit_specs.rb +0 -38
  111. data/testing/rspec/spec/unit/shared/keyworded_models_unit_specs.rb +0 -58
  112. data/testing/rspec/spec/unit/shared/models_unit_specs.rb +0 -15
  113. data/testing/rspec/spec/unit/shared/named_models_unit_specs.rb +0 -39
  114. data/testing/rspec/spec/unit/shared/nested_models_unit_specs.rb +0 -51
  115. data/testing/rspec/spec/unit/shared/parsed_models_unit_specs.rb +0 -39
  116. data/testing/rspec/spec/unit/shared/prepopulated_models_unit_specs.rb +0 -18
  117. data/testing/rspec/spec/unit/shared/sourced_models_unit_specs.rb +0 -39
  118. data/testing/rspec/spec/unit/shared/stepped_models_unit_specs.rb +0 -46
  119. data/testing/rspec/spec/unit/shared/stringifiable_models_unit_specs.rb +0 -18
  120. data/testing/rspec/spec/unit/shared/tagged_models_unit_specs.rb +0 -72
  121. data/testing/rspec/spec/unit/sourceable_unit_spec.rb +0 -27
  122. data/testing/rspec/spec/unit/step_unit_spec.rb +0 -109
  123. data/testing/rspec/spec/unit/stepped_unit_spec.rb +0 -23
  124. data/testing/rspec/spec/unit/table_unit_spec.rb +0 -77
  125. data/testing/rspec/spec/unit/tag_unit_spec.rb +0 -68
  126. data/testing/rspec/spec/unit/taggable_unit_spec.rb +0 -69
  127. data/testing/test_languages.json +0 -45
  128. data/todo.txt +0 -24
@@ -1,32 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gemspec :path => "../../"
4
- gem "gherkin", "~> 2.0"
5
-
6
- # cuke_modeler can play with pretty much any version of these but they all play differently with Ruby
7
-
8
- if RUBY_VERSION =~ /^1\./
9
-
10
- if RbConfig::CONFIG['host_os'].downcase =~ /mswin|msys|mingw32/
11
- gem 'ffi', '< 1.9.15' # The 'ffi' gem, for Windows, requires Ruby 2.x on/after this version
12
- end
13
-
14
- gem 'unf_ext', '< 0.0.7.3' # Requires Ruby 2.x on/after this version
15
- gem 'tins', '< 1.7' # The 'tins' gem requires Ruby 2.x on/after this version
16
- gem 'json', '< 2.0' # The 'json' gem drops pre-Ruby 2.x support on/after this version
17
- gem 'term-ansicolor', '< 1.4' # The 'term-ansicolor' gem requires Ruby 2.x on/after this version
18
-
19
- if RUBY_VERSION =~ /^1\.8/
20
- gem 'cucumber', '~> 1.0' # Ruby 1.8.x support dropped after this version
21
- gem 'rake', '< 11.0' # Ruby 1.8.x support dropped after this version
22
- else
23
- gem 'rake', '< 12.3.0' # Ruby 1.9.x support dropped after this version
24
- end
25
-
26
- elsif RUBY_VERSION =~ /^2\./
27
-
28
- if RUBY_VERSION =~ /^2\.[23456789]/
29
- gem 'test-unit'
30
- end
31
-
32
- end
@@ -1,26 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gemspec :path => "../../"
4
- gem "gherkin", "~> 3.0"
5
-
6
- # cuke_modeler can play with pretty much any version of these but they all play differently with Ruby
7
-
8
- if RUBY_VERSION =~ /^1\./
9
-
10
- if RbConfig::CONFIG['host_os'].downcase =~ /mswin|msys|mingw32/
11
- gem 'ffi', '< 1.9.15' # The 'ffi' gem, for Windows, requires Ruby 2.x on/after this version
12
- end
13
-
14
- gem 'unf_ext', '< 0.0.7.3' # Requires Ruby 2.x on/after this version
15
- gem 'tins', '< 1.7' # The 'tins' gem requires Ruby 2.x on/after this version
16
- gem 'json', '< 2.0' # The 'json' gem drops pre-Ruby 2.x support on/after this version
17
- gem 'term-ansicolor', '< 1.4' # The 'term-ansicolor' gem requires Ruby 2.x on/after this version
18
- gem 'rake', '< 12.3.0' # Ruby 1.9.x support dropped after this version
19
-
20
- elsif RUBY_VERSION =~ /^2\./
21
-
22
- if RUBY_VERSION =~ /^2\.[23456789]/
23
- gem 'test-unit'
24
- end
25
-
26
- end
@@ -1,27 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gemspec :path => "../../"
4
- gem "gherkin", "~> 4.0"
5
-
6
- # cuke_modeler can play with pretty much any version of these but they all play differently with Ruby
7
-
8
- if RUBY_VERSION =~ /^1\./
9
-
10
- if RbConfig::CONFIG['host_os'].downcase =~ /mswin|msys|mingw32/
11
- gem 'ffi', '< 1.9.15' # The 'ffi' gem, for Windows, requires Ruby 2.x on/after this version
12
- end
13
-
14
- gem 'unf_ext', '< 0.0.7.3' # Requires Ruby 2.x on/after this version
15
- gem 'tins', '< 1.7' # The 'tins' gem requires Ruby 2.x on/after this version
16
- gem 'json', '< 2.0' # The 'json' gem drops pre-Ruby 2.x support on/after this version
17
- gem 'term-ansicolor', '< 1.4' # The 'term-ansicolor' gem requires Ruby 2.x on/after this version
18
- gem 'rake', '< 12.3.0' # Ruby 1.9.x support dropped after this version
19
- gem 'cucumber', '< 3.0.0' # Ruby 1.9.x support dropped after this version
20
-
21
- elsif RUBY_VERSION =~ /^2\./
22
-
23
- if RUBY_VERSION =~ /^2\.[23456789]/
24
- gem 'test-unit'
25
- end
26
-
27
- end
@@ -1,26 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gemspec :path => "../../"
4
- gem "gherkin", "~> 5.0"
5
-
6
- # cuke_modeler can play with pretty much any version of these but they all play differently with Ruby
7
-
8
- if RUBY_VERSION =~ /^1\./
9
-
10
- if RbConfig::CONFIG['host_os'].downcase =~ /mswin|msys|mingw32/
11
- gem 'ffi', '< 1.9.15' # The 'ffi' gem, for Windows, requires Ruby 2.x on/after this version
12
- end
13
-
14
- gem 'unf_ext', '< 0.0.7.3' # Requires Ruby 2.x on/after this version
15
- gem 'tins', '< 1.7' # The 'tins' gem requires Ruby 2.x on/after this version
16
- gem 'json', '< 2.0' # The 'json' gem drops pre-Ruby 2.x support on/after this version
17
- gem 'term-ansicolor', '< 1.4' # The 'term-ansicolor' gem requires Ruby 2.x on/after this version
18
- gem 'rake', '< 12.3.0' # Ruby 1.9.x support dropped after this version
19
-
20
- elsif RUBY_VERSION =~ /^2\./
21
-
22
- if RUBY_VERSION =~ /^2\.[23456789]/
23
- gem 'test-unit'
24
- end
25
-
26
- end
@@ -1,10 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gemspec :path => "../../"
4
-
5
- gem "gherkin", "~> 6.0"
6
- gem 'cucumber', '~>4.0.rc' # TODO: Upgrade to Cucumber 4.0 when it is finally released
7
-
8
- if RUBY_VERSION =~ /^2\.[23456789]/
9
- gem 'test-unit'
10
- end
@@ -1,442 +0,0 @@
1
- require "#{File.dirname(__FILE__)}/../spec_helper"
2
-
3
-
4
- describe 'Background, Integration' do
5
-
6
- let(:clazz) { CukeModeler::Background }
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' do
18
- source = "#{BACKGROUND_KEYWORD}:"
19
-
20
- expect { clazz.new(source) }.to_not raise_error
21
- end
22
-
23
- it 'can parse text that uses a non-default dialect' do
24
- original_dialect = CukeModeler::Parsing.dialect
25
- CukeModeler::Parsing.dialect = 'en-au'
26
-
27
- begin
28
- source_text = 'First off: Background name'
29
-
30
- expect { @model = clazz.new(source_text) }.to_not raise_error
31
-
32
- # Sanity check in case modeling failed in a non-explosive manner
33
- expect(@model.name).to eq('Background name')
34
- ensure
35
- # Making sure that our changes don't escape a test and ruin the rest of the suite
36
- CukeModeler::Parsing.dialect = original_dialect
37
- end
38
- end
39
-
40
- it 'stores the original data generated by the parsing adapter', :gherkin6 => true do
41
- background = clazz.new("#{BACKGROUND_KEYWORD}: test background\ndescription\n#{STEP_KEYWORD} a step")
42
- data = background.parsing_data
43
-
44
- expect(data.keys).to match_array([:background, :rule, :scenario])
45
- expect(data[:background][:name]).to eq('test background')
46
- end
47
-
48
- it 'stores the original data generated by the parsing adapter', :gherkin4_5 => true do
49
- background = clazz.new("#{BACKGROUND_KEYWORD}: test background\ndescription\n#{STEP_KEYWORD} a step")
50
- data = background.parsing_data
51
-
52
- expect(data.keys).to match_array([:type, :location, :keyword, :name, :steps, :description])
53
- expect(data[:type]).to eq(:Background)
54
- end
55
-
56
- it 'stores the original data generated by the parsing adapter', :gherkin3 => true do
57
- background = clazz.new("#{BACKGROUND_KEYWORD}: test background\ndescription\n#{STEP_KEYWORD} a step")
58
- data = background.parsing_data
59
-
60
- expect(data.keys).to match_array([:type, :location, :keyword, :name, :steps, :description])
61
- expect(data[:type]).to eq(:Background)
62
- end
63
-
64
- it 'stores the original data generated by the parsing adapter', :gherkin2 => true do
65
- background = clazz.new("#{BACKGROUND_KEYWORD}: test background\ndescription\n#{STEP_KEYWORD} a step")
66
- data = background.parsing_data
67
-
68
- expect(data.keys).to match_array(['keyword', 'name', 'line', 'description', 'steps', 'type'])
69
- expect(data['keyword']).to eq('Background')
70
- end
71
-
72
- it 'provides a descriptive filename when being parsed from stand alone text' do
73
- source = "bad background text \n #{BACKGROUND_KEYWORD}:\n #{STEP_KEYWORD} a step\n @foo "
74
-
75
- expect { clazz.new(source) }.to raise_error(/'cuke_modeler_stand_alone_background\.feature'/)
76
- end
77
-
78
- it 'properly sets its child models' do
79
- source = "#{BACKGROUND_KEYWORD}: Test background
80
- #{STEP_KEYWORD} a step"
81
-
82
- background = clazz.new(source)
83
- step = background.steps.first
84
-
85
- expect(step.parent_model).to equal(background)
86
- end
87
-
88
- it 'trims whitespace from its source description' do
89
- source = ["#{BACKGROUND_KEYWORD}:",
90
- ' ',
91
- ' description line 1',
92
- '',
93
- ' description line 2',
94
- ' description line 3 ',
95
- '',
96
- '',
97
- '',
98
- " #{STEP_KEYWORD} a step"]
99
- source = source.join("\n")
100
-
101
- background = clazz.new(source)
102
- description = background.description.split("\n", -1)
103
-
104
- expect(description).to eq([' description line 1',
105
- '',
106
- 'description line 2',
107
- ' description line 3'])
108
- end
109
-
110
-
111
- describe 'getting ancestors' do
112
-
113
- before(:each) do
114
- CukeModeler::FileHelper.create_feature_file(:text => source_gherkin, :name => 'background_test_file', :directory => test_directory)
115
- end
116
-
117
-
118
- let(:test_directory) { CukeModeler::FileHelper.create_directory }
119
- let(:source_gherkin) { "#{FEATURE_KEYWORD}: Test feature
120
-
121
- #{BACKGROUND_KEYWORD}: Test background
122
- #{STEP_KEYWORD} a step"
123
- }
124
-
125
- let(:directory_model) { CukeModeler::Directory.new(test_directory) }
126
- let(:background_model) { directory_model.feature_files.first.feature.background }
127
-
128
-
129
- it 'can get its directory' do
130
- ancestor = background_model.get_ancestor(:directory)
131
-
132
- expect(ancestor).to equal(directory_model)
133
- end
134
-
135
- it 'can get its feature file' do
136
- ancestor = background_model.get_ancestor(:feature_file)
137
-
138
- expect(ancestor).to equal(directory_model.feature_files.first)
139
- end
140
-
141
- it 'can get its feature' do
142
- ancestor = background_model.get_ancestor(:feature)
143
-
144
- expect(ancestor).to equal(directory_model.feature_files.first.feature)
145
- end
146
-
147
- it 'returns nil if it does not have the requested type of ancestor' do
148
- ancestor = background_model.get_ancestor(:example)
149
-
150
- expect(ancestor).to be_nil
151
- end
152
-
153
- end
154
-
155
-
156
- describe 'model population' do
157
-
158
- context 'from source text' do
159
-
160
- let(:source_text) { "#{BACKGROUND_KEYWORD}:" }
161
- let(:background) { clazz.new(source_text) }
162
-
163
-
164
- it "models the background's keyword" do
165
- expect(background.keyword).to eq("#{BACKGROUND_KEYWORD}")
166
- end
167
-
168
- it "models the background's source line" do
169
- source_text = "#{FEATURE_KEYWORD}:
170
-
171
- #{BACKGROUND_KEYWORD}: foo
172
- #{STEP_KEYWORD} step"
173
- background = CukeModeler::Feature.new(source_text).background
174
-
175
- expect(background.source_line).to eq(3)
176
- end
177
-
178
- context 'a filled background' do
179
-
180
- let(:source_text) { "#{BACKGROUND_KEYWORD}: Background name
181
-
182
- Background description.
183
-
184
- Some more.
185
- Even more.
186
-
187
- #{STEP_KEYWORD} a step
188
- #{STEP_KEYWORD} another step" }
189
- let(:background) { clazz.new(source_text) }
190
-
191
-
192
- it "models the background's name" do
193
- expect(background.name).to eq('Background name')
194
- end
195
-
196
- it "models the background's description" do
197
- description = background.description.split("\n", -1)
198
-
199
- expect(description).to eq([' Background description.',
200
- '',
201
- 'Some more.',
202
- ' Even more.'])
203
- end
204
-
205
- it "models the background's steps" do
206
- step_names = background.steps.collect { |step| step.text }
207
-
208
- expect(step_names).to eq(['a step', 'another step'])
209
- end
210
-
211
- end
212
-
213
- context 'an empty background' do
214
-
215
- let(:source_text) { "#{BACKGROUND_KEYWORD}:" }
216
- let(:background) { clazz.new(source_text) }
217
-
218
-
219
- it "models the background's name" do
220
- expect(background.name).to eq('')
221
- end
222
-
223
- it "models the background's description" do
224
- expect(background.description).to eq('')
225
- end
226
-
227
- it "models the background's steps" do
228
- expect(background.steps).to eq([])
229
- end
230
-
231
- end
232
-
233
- end
234
-
235
- end
236
-
237
-
238
- describe 'comparison' do
239
-
240
- it 'is equal to a background with the same steps' do
241
- source = "#{BACKGROUND_KEYWORD}:
242
- #{STEP_KEYWORD} step 1
243
- #{STEP_KEYWORD} step 2"
244
- background_1 = clazz.new(source)
245
-
246
- source = "#{BACKGROUND_KEYWORD}:
247
- #{STEP_KEYWORD} step 1
248
- #{STEP_KEYWORD} step 2"
249
- background_2 = clazz.new(source)
250
-
251
- source = "#{BACKGROUND_KEYWORD}:
252
- #{STEP_KEYWORD} step 2
253
- #{STEP_KEYWORD} step 1"
254
- background_3 = clazz.new(source)
255
-
256
-
257
- expect(background_1).to eq(background_2)
258
- expect(background_1).to_not eq(background_3)
259
- end
260
-
261
- it 'is equal to a scenario with the same steps' do
262
- source = "#{BACKGROUND_KEYWORD}:
263
- #{STEP_KEYWORD} step 1
264
- #{STEP_KEYWORD} step 2"
265
- background = clazz.new(source)
266
-
267
- source = "#{SCENARIO_KEYWORD}:
268
- #{STEP_KEYWORD} step 1
269
- #{STEP_KEYWORD} step 2"
270
- scenario_1 = CukeModeler::Scenario.new(source)
271
-
272
- source = "#{SCENARIO_KEYWORD}:
273
- #{STEP_KEYWORD} step 2
274
- #{STEP_KEYWORD} step 1"
275
- scenario_2 = CukeModeler::Scenario.new(source)
276
-
277
-
278
- expect(background).to eq(scenario_1)
279
- expect(background).to_not eq(scenario_2)
280
- end
281
-
282
- it 'is equal to an outline with the same steps' do
283
- source = "#{BACKGROUND_KEYWORD}:
284
- #{STEP_KEYWORD} step 1
285
- #{STEP_KEYWORD} step 2"
286
- background = clazz.new(source)
287
-
288
- source = "#{OUTLINE_KEYWORD}:
289
- #{STEP_KEYWORD} step 1
290
- #{STEP_KEYWORD} step 2
291
- #{EXAMPLE_KEYWORD}:
292
- | param |
293
- | value |"
294
- outline_1 = CukeModeler::Outline.new(source)
295
-
296
- source = "#{OUTLINE_KEYWORD}:
297
- #{STEP_KEYWORD} step 2
298
- #{STEP_KEYWORD} step 1
299
- #{EXAMPLE_KEYWORD}:
300
- | param |
301
- | value |"
302
- outline_2 = CukeModeler::Outline.new(source)
303
-
304
-
305
- expect(background).to eq(outline_1)
306
- expect(background).to_not eq(outline_2)
307
- end
308
-
309
- end
310
-
311
-
312
- describe 'background output' do
313
-
314
- it 'can be remade from its own output' do
315
- source = "#{BACKGROUND_KEYWORD}: A background with everything it could have
316
-
317
- Including a description
318
- and then some.
319
-
320
- #{STEP_KEYWORD} a step
321
- | value |
322
- #{STEP_KEYWORD} another step
323
- \"\"\"
324
- some string
325
- \"\"\""
326
- background = clazz.new(source)
327
-
328
- background_output = background.to_s
329
- remade_background_output = clazz.new(background_output).to_s
330
-
331
- expect(remade_background_output).to eq(background_output)
332
- end
333
-
334
-
335
- context 'from source text' do
336
-
337
- it 'can output an empty background' do
338
- source = ["#{BACKGROUND_KEYWORD}:"]
339
- source = source.join("\n")
340
- background = clazz.new(source)
341
-
342
- background_output = background.to_s.split("\n", -1)
343
-
344
- expect(background_output).to eq(["#{BACKGROUND_KEYWORD}:"])
345
- end
346
-
347
- it 'can output a background that has a name' do
348
- source = ["#{BACKGROUND_KEYWORD}: test background"]
349
- source = source.join("\n")
350
- background = clazz.new(source)
351
-
352
- background_output = background.to_s.split("\n", -1)
353
-
354
- expect(background_output).to eq(["#{BACKGROUND_KEYWORD}: test background"])
355
- end
356
-
357
- it 'can output a background that has a description' do
358
- source = ["#{BACKGROUND_KEYWORD}:",
359
- 'Some description.',
360
- 'Some more description.']
361
- source = source.join("\n")
362
- background = clazz.new(source)
363
-
364
- background_output = background.to_s.split("\n", -1)
365
-
366
- expect(background_output).to eq(["#{BACKGROUND_KEYWORD}:",
367
- '',
368
- 'Some description.',
369
- 'Some more description.'])
370
- end
371
-
372
- it 'can output a background that has steps' do
373
- source = ["#{BACKGROUND_KEYWORD}:",
374
- "#{STEP_KEYWORD} a step",
375
- '|value|',
376
- "#{STEP_KEYWORD} another step",
377
- '"""',
378
- 'some string',
379
- '"""']
380
- source = source.join("\n")
381
- background = clazz.new(source)
382
-
383
- background_output = background.to_s.split("\n", -1)
384
-
385
- expect(background_output).to eq(["#{BACKGROUND_KEYWORD}:",
386
- " #{STEP_KEYWORD} a step",
387
- ' | value |',
388
- " #{STEP_KEYWORD} another step",
389
- ' """',
390
- ' some string',
391
- ' """'])
392
- end
393
-
394
- it 'can output a background that has everything' do
395
- source = ["#{BACKGROUND_KEYWORD}: A background with everything it could have",
396
- 'Including a description',
397
- 'and then some.',
398
- "#{STEP_KEYWORD} a step",
399
- '|value|',
400
- "#{STEP_KEYWORD} another step",
401
- '"""',
402
- 'some string',
403
- '"""']
404
- source = source.join("\n")
405
- background = clazz.new(source)
406
-
407
- background_output = background.to_s.split("\n", -1)
408
-
409
- expect(background_output).to eq(["#{BACKGROUND_KEYWORD}: A background with everything it could have",
410
- '',
411
- 'Including a description',
412
- 'and then some.',
413
- '',
414
- " #{STEP_KEYWORD} a step",
415
- ' | value |',
416
- " #{STEP_KEYWORD} another step",
417
- ' """',
418
- ' some string',
419
- ' """'])
420
- end
421
-
422
- end
423
-
424
-
425
- context 'from abstract instantiation' do
426
-
427
- let(:background) { clazz.new }
428
-
429
-
430
- it 'can output a background that has only steps' do
431
- background.steps = [CukeModeler::Step.new]
432
-
433
- expect { background.to_s }.to_not raise_error
434
- end
435
-
436
- end
437
-
438
- end
439
-
440
- end
441
-
442
- end