macros4cuke 0.4.08 → 0.4.09

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 (49) hide show
  1. checksums.yaml +8 -8
  2. data/.rubocop.yml +3 -0
  3. data/.travis.yml +6 -0
  4. data/CHANGELOG.md +4 -0
  5. data/README.md +5 -3
  6. data/features/{1_Basics → 1_the_basics}/README.md +0 -0
  7. data/features/{1_Basics → 1_the_basics}/demo01.feature +5 -5
  8. data/features/{2_Macros_with_arguments → 2_macros_with_arguments}/README.md +0 -0
  9. data/features/{2_Macros_with_arguments → 2_macros_with_arguments}/demo02.feature +10 -10
  10. data/features/{2_Macros_with_arguments → 2_macros_with_arguments}/demo03.feature +5 -5
  11. data/features/{3_Macros_with_table_arguments → 3_macros_with_table_arguments}/README.md +0 -0
  12. data/features/{3_Macros_with_table_arguments → 3_macros_with_table_arguments}/demo04.feature +5 -5
  13. data/features/{3_Macros_with_table_arguments → 3_macros_with_table_arguments}/demo05.feature +4 -4
  14. data/features/{4_Conditional_steps → 4_conditional_steps}/demo06.feature +18 -16
  15. data/features/{5_Goodies → 5_goodies}/demo07.feature +6 -5
  16. data/features/{5_Goodies → 5_goodies}/demo08.feature +0 -0
  17. data/features/step_definitions/demo_steps.rb +5 -4
  18. data/lib/macro_steps.rb +6 -6
  19. data/lib/macros4cuke/coll-walker-factory.rb +12 -12
  20. data/lib/macros4cuke/constants.rb +4 -4
  21. data/lib/macros4cuke/formatter/all-notifications.rb +8 -8
  22. data/lib/macros4cuke/formatter/to-gherkin.rb +2 -2
  23. data/lib/macros4cuke/formatter/to-null.rb +10 -10
  24. data/lib/macros4cuke/formatting-service.rb +74 -74
  25. data/lib/macros4cuke/macro-collection.rb +13 -13
  26. data/lib/macros4cuke/macro-step-support.rb +19 -12
  27. data/lib/macros4cuke/macro-step.rb +48 -48
  28. data/lib/macros4cuke/templating/engine.rb +79 -79
  29. data/lib/macros4cuke/templating/placeholder.rb +52 -52
  30. data/lib/macros4cuke/templating/section.rb +116 -116
  31. data/lib/macros4cuke/templating/template-element.rb +88 -88
  32. data/lib/macros4cuke/templating/unary-element.rb +37 -37
  33. data/lib/macros4cuke.rb +1 -1
  34. data/spec/macros4cuke/coll-walker-factory_spec.rb +269 -269
  35. data/spec/macros4cuke/formatter/to-gherkin_spec.rb +5 -5
  36. data/spec/macros4cuke/formatter/to-null_spec.rb +62 -62
  37. data/spec/macros4cuke/formatter/to-trace_spec.rb +8 -8
  38. data/spec/macros4cuke/formatting-service_spec.rb +7 -7
  39. data/spec/macros4cuke/macro-collection_spec.rb +3 -3
  40. data/spec/macros4cuke/macro-step-support_spec.rb +4 -4
  41. data/spec/macros4cuke/macro-step_spec.rb +8 -8
  42. data/spec/macros4cuke/templating/comment_spec.rb +45 -0
  43. data/spec/macros4cuke/templating/engine_spec.rb +23 -23
  44. data/spec/macros4cuke/templating/eo-line_spec.rb +39 -0
  45. data/spec/macros4cuke/templating/section_spec.rb +1 -1
  46. data/spec/macros4cuke/templating/static_text_spec.rb +45 -0
  47. data/spec/macros4cuke/use-sample-collection.rb +7 -7
  48. data/spec/spec_helper.rb +3 -3
  49. metadata +31 -14
@@ -1,269 +1,269 @@
1
- # File: collection-walker_spec.rb
2
-
3
- require_relative '../spec_helper'
4
-
5
- # Load mix-in module for creating a sample collection of macro-steps
6
- require_relative 'use-sample-collection'
7
-
8
- # Load the class under test
9
- require_relative '../../lib/macros4cuke/coll-walker-factory'
10
-
11
- module Macros4Cuke # Open this namespace to avoid module qualifier prefixes
12
-
13
- describe CollWalkerFactory do
14
- include UseSampleCollection # Add convenience methods for sample collection
15
-
16
-
17
- before(:all) do
18
- # Fill the collection of macro-steps with sample steps
19
- fill_collection
20
- end
21
-
22
- after(:all) do
23
- # Clear the collection to prevent interference between spec files
24
- macro_coll.clear
25
- end
26
-
27
- context 'Initialization:' do
28
- it 'should be created without parameter' do
29
- expect { CollWalkerFactory.new }.not_to raise_error
30
- end
31
-
32
- end # context
33
-
34
- context 'Provided factory services:' do
35
- # Default factory instantiation
36
- subject { CollWalkerFactory.new }
37
-
38
- it 'should build a walker for the given macro collection' do
39
- walker = subject.build_walker(macro_coll)
40
- expect(walker).to be_kind_of(Enumerator)
41
- end
42
- end # context
43
-
44
- context 'Provided walker services:' do
45
- # Default walker instantiation
46
- subject do
47
- factory = CollWalkerFactory.new
48
- factory.build_walker(macro_coll)
49
- end
50
-
51
-
52
- it 'should notify the start of the visit of the collection' do
53
- initial_event = subject.next
54
- expect(initial_event).to eq([:on_collection, 0, macro_coll])
55
- end
56
-
57
- it 'should notify the visit of a first macro step' do
58
- 1.times { subject.next }
59
- first_step = subject.next
60
- step1 = macro_coll.macro_steps.values[0]
61
- expect(first_step).to eq([:on_step, 1, step1])
62
- end
63
-
64
- it 'should notify the visit of the phrase of the first macro step' do
65
- 2.times { subject.next }
66
- first_phrase = subject.next
67
- sample_phrase1 = UseSampleCollection::SamplePhrase1
68
- expect(first_phrase).to eq([:on_phrase, 2, sample_phrase1, true])
69
- end
70
-
71
- it 'should notify the visit of the substeps renderer of the first step' do
72
- 3.times { subject.next }
73
- first_step = macro_coll.macro_steps.values[0]
74
- first_renderer = subject.next
75
- expectation = [:on_renderer, 2, first_step.renderer]
76
- expect(first_renderer).to eq(expectation)
77
- end
78
-
79
- it 'should notify the visit of the internal representation of substeps' do
80
- first_step = macro_coll.macro_steps.values[0]
81
- substep_chunks = first_step.renderer.representation
82
- 4.times { subject.next }
83
- text_representation = subject.next
84
- expectation = [:on_source, 3, first_step.renderer.source]
85
- expect(text_representation).to eq(expectation)
86
-
87
- first_substep_piece = subject.next
88
- expectation = [:on_static_text, 3, substep_chunks[0].source]
89
- expect(first_substep_piece).to eq(expectation)
90
-
91
- second_substep_piece = subject.next
92
- expect(second_substep_piece).to eq([:on_eol, 3, nil])
93
-
94
- third_substep_piece = subject.next
95
- expectation = [:on_static_text, 3, substep_chunks[2].source]
96
- expect(third_substep_piece).to eq(expectation)
97
-
98
- fourth_substep_piece = subject.next
99
- expect(fourth_substep_piece).to eq([:on_eol, 3, nil])
100
-
101
- fifth_substep_piece = subject.next
102
- expectation = [:on_static_text, 3, substep_chunks[4].source]
103
- expect(fifth_substep_piece).to eq(expectation)
104
-
105
- sixth_substep_piece = subject.next
106
- expectation = [:on_placeholder, 3, substep_chunks[5].name]
107
- expect(sixth_substep_piece).to eq(expectation)
108
-
109
- seventh_substep_piece = subject.next
110
- expectation = [:on_static_text, 3, substep_chunks[6].source]
111
- expect(seventh_substep_piece).to eq(expectation)
112
-
113
- eighth_substep_piece = subject.next
114
- expect(eighth_substep_piece).to eq([:on_eol, 3, nil])
115
-
116
- ninth_substep_piece = subject.next
117
- expectation = [:on_static_text, 3, substep_chunks[8].source]
118
- expect(ninth_substep_piece).to eq(expectation)
119
-
120
- tenth_substep_piece = subject.next
121
- expectation = [:on_placeholder, 3, substep_chunks[9].name]
122
- expect(tenth_substep_piece).to eq(expectation)
123
-
124
- eleventh_substep_piece = subject.next
125
- expectation = [:on_static_text, 3, substep_chunks[10].source]
126
- expect(eleventh_substep_piece).to eq(expectation)
127
-
128
- twelfth_substep_piece = subject.next
129
- expect(twelfth_substep_piece).to eq([:on_eol, 3, nil])
130
-
131
- thirtieth_substep_piece = subject.next
132
- expectation = [:on_static_text, 3, substep_chunks[12].source]
133
- expect(thirtieth_substep_piece).to eq(expectation)
134
-
135
- fourteenth_substep_piece = subject.next
136
- expect(fourteenth_substep_piece).to eq([:on_eol, 3, nil])
137
-
138
- fifteenth_substep_piece = subject.next
139
- expect(fifteenth_substep_piece).to eq([:on_renderer_end, 2, nil])
140
- end
141
-
142
- it 'should notify the visit of a following macro step' do
143
- (4 + 15 + 1).times { subject.next }
144
- end_step = subject.next
145
- expect(end_step).to eq([:on_step_end, 1, nil])
146
- a_step = subject.next
147
- expect(a_step).to eq([:on_step, 1, macro_coll.macro_steps.values[1]])
148
- end
149
-
150
- it 'should notify the visit of the phrase of a following macro step' do
151
- (4 + 16 + 2).times { subject.next }
152
- phrase = subject.next
153
- sample_phrase = UseSampleCollection::SamplePhrase2
154
- expect(phrase).to eq([:on_phrase, 2, sample_phrase, true])
155
- end
156
-
157
- it 'should notify the visit of the substeps of a following step' do
158
- (4 + 16 + 3).times { subject.next }
159
- a_renderer = subject.next
160
- second_step = macro_coll.macro_steps.values[1]
161
- expect(a_renderer).to eq([:on_renderer, 2, second_step.renderer])
162
- end
163
-
164
- it 'should notify the visit in substeps of following step' do
165
- second_step = macro_coll.macro_steps.values[1]
166
- substep_chunks = second_step.renderer.representation.dup
167
- substep_chunks.map! do |ck|
168
- if ck.kind_of?(Templating::Section)
169
- [ck, ck.children, ck].flatten
170
- else
171
- ck
172
- end
173
- end
174
- substep_chunks.flatten!
175
-
176
- (4 + 16 + 4).times { subject.next }
177
- substeps_text = subject.next
178
- expectation = [:on_source, 3, second_step.renderer.source]
179
- expect(substeps_text).to eq(expectation)
180
-
181
- first_substep_piece = subject.next
182
- expectation = [:on_static_text, 3, substep_chunks[0].source]
183
- expect(first_substep_piece).to eq(expectation)
184
-
185
- [
186
- [:on_placeholder, 3, :name], # 0
187
- [:on_static_text, 3, :source], # 1
188
- [:on_eol, 3, nil], # 2
189
- [:on_static_text, 3, :source], # 3
190
- [:on_placeholder, 3, :name], # 4
191
- [:on_static_text, 3, :source], # 5
192
- [:on_eol, 3, nil], # 6
193
- [:on_static_text, 3, :source], # 7
194
- [:on_placeholder, 3, :name], # 8
195
- [:on_static_text, 3, :source], # 9
196
- [:on_eol, 3, nil], # 10
197
- [:on_static_text, 3, :source], # 11
198
- [:on_placeholder, 3, :name], # 12
199
- [:on_static_text, 3, :source], # 13
200
- [:on_eol, 3, nil], # 14
201
- [:on_static_text, 3, :source], # 15
202
- [:on_placeholder, 3, :name], # 16
203
- [:on_static_text, 3, :source], # 17
204
- [:on_eol, 3, nil], # 18
205
- [:on_static_text, 3, :source], # 19
206
- [:on_placeholder, 3, :name], # 20
207
- [:on_static_text, 3, :source], # 21
208
- [:on_eol, 3, nil], # 22
209
- [:on_eol, 3, nil], # 23
210
- [:on_comment, 3, :source], # 24
211
- [:on_eol, 3, nil], # 25
212
- [:on_comment, 3, :source], # 26
213
- [:on_eol, 3, nil], # 27
214
- [:on_comment, 3, :source], # 28
215
- [:on_eol, 3, nil], # 29
216
- [:on_section, 3, :name], # 30
217
- [:on_static_text, 4, :source], # 31
218
- [:on_placeholder, 4, :name], # 32
219
- [:on_static_text, 4, :source], # 33
220
- [:on_eol, 4, nil], # 34
221
- [:on_section_end, 3, nil], # 35
222
- [:on_eol, 3, nil], # 36
223
- [:on_comment, 3, :source], # 37
224
- [:on_eol, 3, nil], # 38
225
- [:on_comment, 3, :source], # 39
226
- [:on_eol, 3, nil], # 40
227
- [:on_comment, 3, :source], # 41
228
- [:on_eol, 3, nil], # 42
229
- [:on_section, 3, :name], # 43
230
- [:on_static_text, 4, :source], # 44
231
- [:on_placeholder, 4, :name], # 45
232
- [:on_static_text, 4, :source], # 46
233
- [:on_eol, 4, nil], # 47
234
- [:on_section_end, 3, nil], # 48
235
- [:on_static_text, 3, :source], # 49
236
- [:on_eol, 3, nil], # 50
237
- [:on_renderer_end, 2, nil], # 51
238
- [:on_step_end, 1, nil], # 52
239
- [:on_collection_end, 0, nil] # 53
240
- ].each_with_index do |event, i|
241
- actual = subject.next
242
- expect(actual[0]).to eq(event[0])
243
- expect(actual[1]).to eq(event[1])
244
- unless event[2].nil?
245
- expected_obj = substep_chunks[i + 1]
246
- expect(actual[2]).to eq(expected_obj.send(event[2]))
247
- end
248
- end
249
- expect { subject.next }.to raise_error(StopIteration)
250
-
251
- end
252
-
253
- # Must be last test script since it pollutes the macro-collection
254
- it 'should complain when visiting an unsupported node' do
255
- first_step = macro_coll.macro_steps.values[0]
256
- first_step.renderer.representation.insert(2, :not_a_valid_element)
257
- err_type = Macros4Cuke::InternalError
258
- err_msg = "Don't know how to format a Symbol."
259
- expect { subject.each { |x| } }.to raise_error(err_type, err_msg)
260
- end
261
-
262
- end # context
263
-
264
- end # describe
265
-
266
- end # module
267
-
268
-
269
- # End of file
1
+ # File: collection-walker_spec.rb
2
+
3
+ require_relative '../spec_helper'
4
+
5
+ # Load mix-in module for creating a sample collection of macro-steps
6
+ require_relative 'use-sample-collection'
7
+
8
+ # Load the class under test
9
+ require_relative '../../lib/macros4cuke/coll-walker-factory'
10
+
11
+ module Macros4Cuke # Open this namespace to avoid module qualifier prefixes
12
+
13
+ describe CollWalkerFactory do
14
+ include UseSampleCollection # Add convenience methods for sample collection
15
+
16
+
17
+ before(:all) do
18
+ # Fill the collection of macro-steps with sample steps
19
+ fill_collection
20
+ end
21
+
22
+ after(:all) do
23
+ # Clear the collection to prevent interference between spec files
24
+ macro_coll.clear
25
+ end
26
+
27
+ context 'Initialization:' do
28
+ it 'should be created without parameter' do
29
+ expect { CollWalkerFactory.new }.not_to raise_error
30
+ end
31
+
32
+ end # context
33
+
34
+ context 'Provided factory services:' do
35
+ # Default factory instantiation
36
+ subject { CollWalkerFactory.new }
37
+
38
+ it 'should build a walker for the given macro collection' do
39
+ walker = subject.build_walker(macro_coll)
40
+ expect(walker).to be_kind_of(Enumerator)
41
+ end
42
+ end # context
43
+
44
+ context 'Provided walker services:' do
45
+ # Default walker instantiation
46
+ subject do
47
+ factory = CollWalkerFactory.new
48
+ factory.build_walker(macro_coll)
49
+ end
50
+
51
+
52
+ it 'should notify the start of the visit of the collection' do
53
+ initial_event = subject.next
54
+ expect(initial_event).to eq([:on_collection, 0, macro_coll])
55
+ end
56
+
57
+ it 'should notify the visit of a first macro step' do
58
+ 1.times { subject.next }
59
+ first_step = subject.next
60
+ step1 = macro_coll.macro_steps.values[0]
61
+ expect(first_step).to eq([:on_step, 1, step1])
62
+ end
63
+
64
+ it 'should notify the visit of the phrase of the first macro step' do
65
+ 2.times { subject.next }
66
+ first_phrase = subject.next
67
+ sample_phrase1 = UseSampleCollection::SamplePhrase1
68
+ expect(first_phrase).to eq([:on_phrase, 2, sample_phrase1, true])
69
+ end
70
+
71
+ it 'should notify the visit of the substeps renderer of the first step' do
72
+ 3.times { subject.next }
73
+ first_step = macro_coll.macro_steps.values[0]
74
+ first_renderer = subject.next
75
+ expectation = [:on_renderer, 2, first_step.renderer]
76
+ expect(first_renderer).to eq(expectation)
77
+ end
78
+
79
+ it 'should notify the visit of the internal representation of substeps' do
80
+ first_step = macro_coll.macro_steps.values[0]
81
+ substep_chunks = first_step.renderer.representation
82
+ 4.times { subject.next }
83
+ text_representation = subject.next
84
+ expectation = [:on_source, 3, first_step.renderer.source]
85
+ expect(text_representation).to eq(expectation)
86
+
87
+ first_substep_piece = subject.next
88
+ expectation = [:on_static_text, 3, substep_chunks[0].source]
89
+ expect(first_substep_piece).to eq(expectation)
90
+
91
+ second_substep_piece = subject.next
92
+ expect(second_substep_piece).to eq([:on_eol, 3, nil])
93
+
94
+ third_substep_piece = subject.next
95
+ expectation = [:on_static_text, 3, substep_chunks[2].source]
96
+ expect(third_substep_piece).to eq(expectation)
97
+
98
+ fourth_substep_piece = subject.next
99
+ expect(fourth_substep_piece).to eq([:on_eol, 3, nil])
100
+
101
+ fifth_substep_piece = subject.next
102
+ expectation = [:on_static_text, 3, substep_chunks[4].source]
103
+ expect(fifth_substep_piece).to eq(expectation)
104
+
105
+ sixth_substep_piece = subject.next
106
+ expectation = [:on_placeholder, 3, substep_chunks[5].name]
107
+ expect(sixth_substep_piece).to eq(expectation)
108
+
109
+ seventh_substep_piece = subject.next
110
+ expectation = [:on_static_text, 3, substep_chunks[6].source]
111
+ expect(seventh_substep_piece).to eq(expectation)
112
+
113
+ eighth_substep_piece = subject.next
114
+ expect(eighth_substep_piece).to eq([:on_eol, 3, nil])
115
+
116
+ ninth_substep_piece = subject.next
117
+ expectation = [:on_static_text, 3, substep_chunks[8].source]
118
+ expect(ninth_substep_piece).to eq(expectation)
119
+
120
+ tenth_substep_piece = subject.next
121
+ expectation = [:on_placeholder, 3, substep_chunks[9].name]
122
+ expect(tenth_substep_piece).to eq(expectation)
123
+
124
+ eleventh_substep_piece = subject.next
125
+ expectation = [:on_static_text, 3, substep_chunks[10].source]
126
+ expect(eleventh_substep_piece).to eq(expectation)
127
+
128
+ twelfth_substep_piece = subject.next
129
+ expect(twelfth_substep_piece).to eq([:on_eol, 3, nil])
130
+
131
+ thirtieth_substep_piece = subject.next
132
+ expectation = [:on_static_text, 3, substep_chunks[12].source]
133
+ expect(thirtieth_substep_piece).to eq(expectation)
134
+
135
+ fourteenth_substep_piece = subject.next
136
+ expect(fourteenth_substep_piece).to eq([:on_eol, 3, nil])
137
+
138
+ fifteenth_substep_piece = subject.next
139
+ expect(fifteenth_substep_piece).to eq([:on_renderer_end, 2, nil])
140
+ end
141
+
142
+ it 'should notify the visit of a following macro step' do
143
+ (4 + 15 + 1).times { subject.next }
144
+ end_step = subject.next
145
+ expect(end_step).to eq([:on_step_end, 1, nil])
146
+ a_step = subject.next
147
+ expect(a_step).to eq([:on_step, 1, macro_coll.macro_steps.values[1]])
148
+ end
149
+
150
+ it 'should notify the visit of the phrase of a following macro step' do
151
+ (4 + 16 + 2).times { subject.next }
152
+ phrase = subject.next
153
+ sample_phrase = UseSampleCollection::SamplePhrase2
154
+ expect(phrase).to eq([:on_phrase, 2, sample_phrase, true])
155
+ end
156
+
157
+ it 'should notify the visit of the substeps of a following step' do
158
+ (4 + 16 + 3).times { subject.next }
159
+ a_renderer = subject.next
160
+ second_step = macro_coll.macro_steps.values[1]
161
+ expect(a_renderer).to eq([:on_renderer, 2, second_step.renderer])
162
+ end
163
+
164
+ it 'should notify the visit in substeps of following step' do
165
+ second_step = macro_coll.macro_steps.values[1]
166
+ substep_chunks = second_step.renderer.representation.dup
167
+ substep_chunks.map! do |ck|
168
+ if ck.kind_of?(Templating::Section)
169
+ [ck, ck.children, ck].flatten
170
+ else
171
+ ck
172
+ end
173
+ end
174
+ substep_chunks.flatten!
175
+
176
+ (4 + 16 + 4).times { subject.next }
177
+ substeps_text = subject.next
178
+ expectation = [:on_source, 3, second_step.renderer.source]
179
+ expect(substeps_text).to eq(expectation)
180
+
181
+ first_substep_piece = subject.next
182
+ expectation = [:on_static_text, 3, substep_chunks[0].source]
183
+ expect(first_substep_piece).to eq(expectation)
184
+
185
+ [
186
+ [:on_placeholder, 3, :name], # 0
187
+ [:on_static_text, 3, :source], # 1
188
+ [:on_eol, 3, nil], # 2
189
+ [:on_static_text, 3, :source], # 3
190
+ [:on_placeholder, 3, :name], # 4
191
+ [:on_static_text, 3, :source], # 5
192
+ [:on_eol, 3, nil], # 6
193
+ [:on_static_text, 3, :source], # 7
194
+ [:on_placeholder, 3, :name], # 8
195
+ [:on_static_text, 3, :source], # 9
196
+ [:on_eol, 3, nil], # 10
197
+ [:on_static_text, 3, :source], # 11
198
+ [:on_placeholder, 3, :name], # 12
199
+ [:on_static_text, 3, :source], # 13
200
+ [:on_eol, 3, nil], # 14
201
+ [:on_static_text, 3, :source], # 15
202
+ [:on_placeholder, 3, :name], # 16
203
+ [:on_static_text, 3, :source], # 17
204
+ [:on_eol, 3, nil], # 18
205
+ [:on_static_text, 3, :source], # 19
206
+ [:on_placeholder, 3, :name], # 20
207
+ [:on_static_text, 3, :source], # 21
208
+ [:on_eol, 3, nil], # 22
209
+ [:on_eol, 3, nil], # 23
210
+ [:on_comment, 3, :source], # 24
211
+ [:on_eol, 3, nil], # 25
212
+ [:on_comment, 3, :source], # 26
213
+ [:on_eol, 3, nil], # 27
214
+ [:on_comment, 3, :source], # 28
215
+ [:on_eol, 3, nil], # 29
216
+ [:on_section, 3, :name], # 30
217
+ [:on_static_text, 4, :source], # 31
218
+ [:on_placeholder, 4, :name], # 32
219
+ [:on_static_text, 4, :source], # 33
220
+ [:on_eol, 4, nil], # 34
221
+ [:on_section_end, 3, nil], # 35
222
+ [:on_eol, 3, nil], # 36
223
+ [:on_comment, 3, :source], # 37
224
+ [:on_eol, 3, nil], # 38
225
+ [:on_comment, 3, :source], # 39
226
+ [:on_eol, 3, nil], # 40
227
+ [:on_comment, 3, :source], # 41
228
+ [:on_eol, 3, nil], # 42
229
+ [:on_section, 3, :name], # 43
230
+ [:on_static_text, 4, :source], # 44
231
+ [:on_placeholder, 4, :name], # 45
232
+ [:on_static_text, 4, :source], # 46
233
+ [:on_eol, 4, nil], # 47
234
+ [:on_section_end, 3, nil], # 48
235
+ [:on_static_text, 3, :source], # 49
236
+ [:on_eol, 3, nil], # 50
237
+ [:on_renderer_end, 2, nil], # 51
238
+ [:on_step_end, 1, nil], # 52
239
+ [:on_collection_end, 0, nil] # 53
240
+ ].each_with_index do |event, i|
241
+ actual = subject.next
242
+ expect(actual[0]).to eq(event[0])
243
+ expect(actual[1]).to eq(event[1])
244
+ unless event[2].nil?
245
+ expected_obj = substep_chunks[i + 1]
246
+ expect(actual[2]).to eq(expected_obj.send(event[2]))
247
+ end
248
+ end
249
+ expect { subject.next }.to raise_error(StopIteration)
250
+
251
+ end
252
+
253
+ # Must be last test script since it pollutes the macro-collection
254
+ it 'should complain when visiting an unsupported node' do
255
+ first_step = macro_coll.macro_steps.values[0]
256
+ first_step.renderer.representation.insert(2, :not_a_valid_element)
257
+ err_type = Macros4Cuke::InternalError
258
+ err_msg = "Don't know how to format a Symbol."
259
+ expect { subject.each { |x| } }.to raise_error(err_type, err_msg)
260
+ end
261
+
262
+ end # context
263
+
264
+ end # describe
265
+
266
+ end # module
267
+
268
+
269
+ # End of file
@@ -102,19 +102,19 @@ SNIPPET
102
102
  service = FormattingService.new
103
103
  service.register(subject)
104
104
  expect { service.start!(macro_coll) }.not_to raise_error
105
-
105
+
106
106
  # Line-by-line comparison
107
107
  actual_lines = subject.io.string.split(/\r\n?|\n/)
108
108
  expected_lines = expected_output.split(/\r\n?|\n/)
109
-
109
+
110
110
  # Exclude line 1 (because it is time-dependent) from the comparison
111
111
  actual_lines.shift
112
112
  expected_lines.shift
113
-
113
+
114
114
  # Remove starting/ending spaces
115
115
  actual_lines.map!(&:strip)
116
- expected_lines.map!(&:strip)
117
-
116
+ expected_lines.map!(&:strip)
117
+
118
118
  expect(actual_lines).to eq(expected_lines)
119
119
  end
120
120