macros4cuke 0.4.08 → 0.4.09
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/.rubocop.yml +3 -0
- data/.travis.yml +6 -0
- data/CHANGELOG.md +4 -0
- data/README.md +5 -3
- data/features/{1_Basics → 1_the_basics}/README.md +0 -0
- data/features/{1_Basics → 1_the_basics}/demo01.feature +5 -5
- data/features/{2_Macros_with_arguments → 2_macros_with_arguments}/README.md +0 -0
- data/features/{2_Macros_with_arguments → 2_macros_with_arguments}/demo02.feature +10 -10
- data/features/{2_Macros_with_arguments → 2_macros_with_arguments}/demo03.feature +5 -5
- data/features/{3_Macros_with_table_arguments → 3_macros_with_table_arguments}/README.md +0 -0
- data/features/{3_Macros_with_table_arguments → 3_macros_with_table_arguments}/demo04.feature +5 -5
- data/features/{3_Macros_with_table_arguments → 3_macros_with_table_arguments}/demo05.feature +4 -4
- data/features/{4_Conditional_steps → 4_conditional_steps}/demo06.feature +18 -16
- data/features/{5_Goodies → 5_goodies}/demo07.feature +6 -5
- data/features/{5_Goodies → 5_goodies}/demo08.feature +0 -0
- data/features/step_definitions/demo_steps.rb +5 -4
- data/lib/macro_steps.rb +6 -6
- data/lib/macros4cuke/coll-walker-factory.rb +12 -12
- data/lib/macros4cuke/constants.rb +4 -4
- data/lib/macros4cuke/formatter/all-notifications.rb +8 -8
- data/lib/macros4cuke/formatter/to-gherkin.rb +2 -2
- data/lib/macros4cuke/formatter/to-null.rb +10 -10
- data/lib/macros4cuke/formatting-service.rb +74 -74
- data/lib/macros4cuke/macro-collection.rb +13 -13
- data/lib/macros4cuke/macro-step-support.rb +19 -12
- data/lib/macros4cuke/macro-step.rb +48 -48
- data/lib/macros4cuke/templating/engine.rb +79 -79
- data/lib/macros4cuke/templating/placeholder.rb +52 -52
- data/lib/macros4cuke/templating/section.rb +116 -116
- data/lib/macros4cuke/templating/template-element.rb +88 -88
- data/lib/macros4cuke/templating/unary-element.rb +37 -37
- data/lib/macros4cuke.rb +1 -1
- data/spec/macros4cuke/coll-walker-factory_spec.rb +269 -269
- data/spec/macros4cuke/formatter/to-gherkin_spec.rb +5 -5
- data/spec/macros4cuke/formatter/to-null_spec.rb +62 -62
- data/spec/macros4cuke/formatter/to-trace_spec.rb +8 -8
- data/spec/macros4cuke/formatting-service_spec.rb +7 -7
- data/spec/macros4cuke/macro-collection_spec.rb +3 -3
- data/spec/macros4cuke/macro-step-support_spec.rb +4 -4
- data/spec/macros4cuke/macro-step_spec.rb +8 -8
- data/spec/macros4cuke/templating/comment_spec.rb +45 -0
- data/spec/macros4cuke/templating/engine_spec.rb +23 -23
- data/spec/macros4cuke/templating/eo-line_spec.rb +39 -0
- data/spec/macros4cuke/templating/section_spec.rb +1 -1
- data/spec/macros4cuke/templating/static_text_spec.rb +45 -0
- data/spec/macros4cuke/use-sample-collection.rb +7 -7
- data/spec/spec_helper.rb +3 -3
- metadata +31 -14
@@ -1,62 +1,62 @@
|
|
1
|
-
# File: to-null_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
|
-
|
9
|
-
require_relative '../../../lib/macros4cuke/formatting-service'
|
10
|
-
# Load the class under test
|
11
|
-
require_relative '../../../lib/macros4cuke/formatter/to-null'
|
12
|
-
|
13
|
-
module Macros4Cuke
|
14
|
-
|
15
|
-
module Formatter # Open this namespace to get rid of module qualifier prefixes
|
16
|
-
|
17
|
-
describe ToNull do
|
18
|
-
include UseSampleCollection # Add convenience methods for sample collection
|
19
|
-
|
20
|
-
before(:all) do
|
21
|
-
# Fill the collection of macro-steps with sample steps
|
22
|
-
fill_collection
|
23
|
-
end
|
24
|
-
|
25
|
-
after(:all) do
|
26
|
-
# Clear the collection to prevent interference between spec files
|
27
|
-
macro_coll.clear
|
28
|
-
end
|
29
|
-
|
30
|
-
|
31
|
-
context 'Initialization:' do
|
32
|
-
it 'should be created without parameter' do
|
33
|
-
expect { ToNull.new }.not_to raise_error
|
34
|
-
end
|
35
|
-
|
36
|
-
it 'should react to all the notifications' do
|
37
|
-
instance = ToNull.new
|
38
|
-
expect(instance.implements).to eq(Formatter::AllNotifications)
|
39
|
-
end
|
40
|
-
|
41
|
-
end # context
|
42
|
-
|
43
|
-
|
44
|
-
context 'Provided services:' do
|
45
|
-
# Default instantiation rule
|
46
|
-
subject { ToNull.new }
|
47
|
-
|
48
|
-
it 'should render a given macro-step collection' do
|
49
|
-
service = FormattingService.new
|
50
|
-
service.register(subject)
|
51
|
-
expect { service.start!(macro_coll) }.not_to raise_error
|
52
|
-
end
|
53
|
-
end # context
|
54
|
-
|
55
|
-
end # describe
|
56
|
-
|
57
|
-
end # module
|
58
|
-
|
59
|
-
end # module
|
60
|
-
|
61
|
-
|
62
|
-
# End of file
|
1
|
+
# File: to-null_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
|
+
|
9
|
+
require_relative '../../../lib/macros4cuke/formatting-service'
|
10
|
+
# Load the class under test
|
11
|
+
require_relative '../../../lib/macros4cuke/formatter/to-null'
|
12
|
+
|
13
|
+
module Macros4Cuke
|
14
|
+
|
15
|
+
module Formatter # Open this namespace to get rid of module qualifier prefixes
|
16
|
+
|
17
|
+
describe ToNull do
|
18
|
+
include UseSampleCollection # Add convenience methods for sample collection
|
19
|
+
|
20
|
+
before(:all) do
|
21
|
+
# Fill the collection of macro-steps with sample steps
|
22
|
+
fill_collection
|
23
|
+
end
|
24
|
+
|
25
|
+
after(:all) do
|
26
|
+
# Clear the collection to prevent interference between spec files
|
27
|
+
macro_coll.clear
|
28
|
+
end
|
29
|
+
|
30
|
+
|
31
|
+
context 'Initialization:' do
|
32
|
+
it 'should be created without parameter' do
|
33
|
+
expect { ToNull.new }.not_to raise_error
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'should react to all the notifications' do
|
37
|
+
instance = ToNull.new
|
38
|
+
expect(instance.implements).to eq(Formatter::AllNotifications)
|
39
|
+
end
|
40
|
+
|
41
|
+
end # context
|
42
|
+
|
43
|
+
|
44
|
+
context 'Provided services:' do
|
45
|
+
# Default instantiation rule
|
46
|
+
subject { ToNull.new }
|
47
|
+
|
48
|
+
it 'should render a given macro-step collection' do
|
49
|
+
service = FormattingService.new
|
50
|
+
service.register(subject)
|
51
|
+
expect { service.start!(macro_coll) }.not_to raise_error
|
52
|
+
end
|
53
|
+
end # context
|
54
|
+
|
55
|
+
end # describe
|
56
|
+
|
57
|
+
end # module
|
58
|
+
|
59
|
+
end # module
|
60
|
+
|
61
|
+
|
62
|
+
# End of file
|
@@ -17,7 +17,7 @@ module Formatter # Open this namespace to get rid of module qualifier prefixes
|
|
17
17
|
|
18
18
|
describe ToTrace do
|
19
19
|
include UseSampleCollection # Add convenience methods for sample collection
|
20
|
-
|
20
|
+
|
21
21
|
let(:destination) { StringIO.new }
|
22
22
|
|
23
23
|
before(:all) do
|
@@ -26,7 +26,7 @@ describe ToTrace do
|
|
26
26
|
end
|
27
27
|
|
28
28
|
after(:all) do
|
29
|
-
# Clear the collection to prevent interference between spec files
|
29
|
+
# Clear the collection to prevent interference between spec files
|
30
30
|
macro_coll.clear
|
31
31
|
end
|
32
32
|
|
@@ -35,19 +35,19 @@ describe ToTrace do
|
|
35
35
|
it 'should be created with an IO parameter' do
|
36
36
|
expect { ToTrace.new(destination) }.not_to raise_error
|
37
37
|
end
|
38
|
-
|
38
|
+
|
39
39
|
it 'should react to all the notifications' do
|
40
40
|
instance = ToTrace.new(destination)
|
41
41
|
expect(instance.implements).to eq(Formatter::AllNotifications)
|
42
42
|
end
|
43
43
|
|
44
44
|
end # context
|
45
|
-
|
46
|
-
|
45
|
+
|
46
|
+
|
47
47
|
context 'Provided services:' do
|
48
48
|
# Default instantiation rule
|
49
49
|
subject { ToTrace.new(destination) }
|
50
|
-
|
50
|
+
|
51
51
|
# The expected event trace for the sample collection
|
52
52
|
let(:expected_trace) do
|
53
53
|
trace_details = <<-SNIPPET
|
@@ -135,8 +135,8 @@ SNIPPET
|
|
135
135
|
|
136
136
|
trace_details
|
137
137
|
end
|
138
|
-
|
139
|
-
|
138
|
+
|
139
|
+
|
140
140
|
it 'should render the trace event for a given macro-step collection' do
|
141
141
|
service = FormattingService.new
|
142
142
|
service.register(subject)
|
@@ -66,10 +66,10 @@ describe FormattingService do
|
|
66
66
|
|
67
67
|
it 'should complain when a formatter uses an unknown formatting event' do
|
68
68
|
notifications = [
|
69
|
-
:on_collection,
|
70
|
-
:on_collection_end,
|
71
|
-
:non_standard,
|
72
|
-
:on_step,
|
69
|
+
:on_collection,
|
70
|
+
:on_collection_end,
|
71
|
+
:non_standard,
|
72
|
+
:on_step,
|
73
73
|
:on_step_end
|
74
74
|
]
|
75
75
|
formatter = double('formatter')
|
@@ -84,9 +84,9 @@ describe FormattingService do
|
|
84
84
|
# Case: formatter that supports a few notifications only
|
85
85
|
formatter1 = double('formatter')
|
86
86
|
supported_notifications = [
|
87
|
-
:on_collection,
|
88
|
-
:on_collection_end,
|
89
|
-
:on_step,
|
87
|
+
:on_collection,
|
88
|
+
:on_collection_end,
|
89
|
+
:on_step,
|
90
90
|
:on_step_end
|
91
91
|
]
|
92
92
|
formatter1.should_receive(:implements)
|
@@ -10,7 +10,7 @@ module Macros4Cuke # Open this namespace to avoid module qualifier prefixes
|
|
10
10
|
describe MacroCollection do
|
11
11
|
|
12
12
|
let(:singleton) { MacroCollection.instance }
|
13
|
-
|
13
|
+
|
14
14
|
before(:all) do
|
15
15
|
MacroCollection.instance.clear
|
16
16
|
end
|
@@ -49,7 +49,7 @@ SNIPPET
|
|
49
49
|
|
50
50
|
it 'should return the rendition of a given macro-step' do
|
51
51
|
phrase = '[enter my credentials]'
|
52
|
-
input_values = [ %w
|
52
|
+
input_values = [ %w(userid nobody), %w(password no-secret) ]
|
53
53
|
rendered = singleton.render_steps(phrase, input_values)
|
54
54
|
expected = <<-SNIPPET
|
55
55
|
Given I landed in the homepage
|
@@ -60,7 +60,7 @@ SNIPPET
|
|
60
60
|
SNIPPET
|
61
61
|
expect(rendered).to eq(expected)
|
62
62
|
end
|
63
|
-
|
63
|
+
|
64
64
|
end # context
|
65
65
|
|
66
66
|
end # describe
|
@@ -6,7 +6,7 @@ require_relative '../spec_helper'
|
|
6
6
|
require_relative '../../lib/macros4cuke/macro-step-support'
|
7
7
|
|
8
8
|
|
9
|
-
module Macros4Cuke
|
9
|
+
module Macros4Cuke # Open the module to avoid lengthy qualified names
|
10
10
|
|
11
11
|
# Class created just for testing purposes.
|
12
12
|
class MyWorld
|
@@ -40,7 +40,7 @@ describe MacroStepSupport do
|
|
40
40
|
SNIPPET
|
41
41
|
ssteps
|
42
42
|
end
|
43
|
-
|
43
|
+
|
44
44
|
# Start from a clean situation
|
45
45
|
before(:all) do
|
46
46
|
MacroCollection.instance.clear
|
@@ -81,8 +81,8 @@ SNIPPET
|
|
81
81
|
|
82
82
|
it "should call the 'steps' method with substeps and variables" do
|
83
83
|
# Notice that the call syntax can be used inside step definitions
|
84
|
-
world.invoke_macro(phrase1, [%w
|
85
|
-
|
84
|
+
world.invoke_macro(phrase1, [%w(userid nobody), %w(password none)])
|
85
|
+
|
86
86
|
# Check that the 'steps' method was indeed called with correct argument
|
87
87
|
param_assignments = { '<userid>' => 'nobody', '<password>' => 'none' }
|
88
88
|
expected_text = m1_substeps.gsub(/<\S+>/, param_assignments)
|
@@ -2,11 +2,11 @@
|
|
2
2
|
|
3
3
|
|
4
4
|
require_relative '../spec_helper'
|
5
|
-
require_relative '../../lib/macros4cuke/macro-step'
|
5
|
+
require_relative '../../lib/macros4cuke/macro-step' # The class under test
|
6
6
|
|
7
7
|
|
8
8
|
|
9
|
-
module Macros4Cuke
|
9
|
+
module Macros4Cuke # Open the module to avoid lengthy qualified names
|
10
10
|
|
11
11
|
describe MacroStep do
|
12
12
|
let(:sample_phrase) { 'enter my credentials as <userid>' }
|
@@ -54,17 +54,17 @@ SNIPPET
|
|
54
54
|
it 'should know its phrase' do
|
55
55
|
expect(subject.phrase).to eq(sample_phrase)
|
56
56
|
end
|
57
|
-
|
57
|
+
|
58
58
|
it 'should know its key' do
|
59
59
|
expect(subject.key).to eq('enter_my_credentials_as_X_T')
|
60
60
|
end
|
61
61
|
|
62
62
|
it 'should know the tags(placeholders) from its phrase' do
|
63
|
-
expect(subject.phrase_args).to eq(%w
|
63
|
+
expect(subject.phrase_args).to eq(%w(userid))
|
64
64
|
end
|
65
65
|
|
66
66
|
it 'should know the tags(placeholders) from its phrase and template' do
|
67
|
-
expect(subject.args).to eq(%w
|
67
|
+
expect(subject.args).to eq(%w(userid password))
|
68
68
|
end
|
69
69
|
|
70
70
|
end # context
|
@@ -72,7 +72,7 @@ SNIPPET
|
|
72
72
|
|
73
73
|
context 'Provided services:' do
|
74
74
|
|
75
|
-
let(:phrase_instance) { %Q
|
75
|
+
let(:phrase_instance) { %Q(enter my credentials as "nobody") }
|
76
76
|
it 'should render the substeps' do
|
77
77
|
text = subject.expand(phrase_instance, [ %w(password no-secret) ])
|
78
78
|
expectation = <<-SNIPPET
|
@@ -101,7 +101,7 @@ SNIPPET
|
|
101
101
|
end
|
102
102
|
|
103
103
|
it 'should un-escape the double-quotes for phrase arguments' do
|
104
|
-
specific_phrase = %q
|
104
|
+
specific_phrase = %q(enter my credentials as "quotable\"")
|
105
105
|
text = subject.expand(specific_phrase, [ %w(password no-secret) ])
|
106
106
|
expectation = <<-SNIPPET
|
107
107
|
Given I landed in the homepage
|
@@ -126,7 +126,7 @@ SNIPPET
|
|
126
126
|
|
127
127
|
it 'should complain when argument gets a value from phrase and table' do
|
128
128
|
# Error case: there is no macro argument called <unknown>
|
129
|
-
phrase = %Q
|
129
|
+
phrase = %Q(enter my credentials as "nobody")
|
130
130
|
msg = "The macro argument 'userid' has value 'nobody' and 'someone'."
|
131
131
|
args = [ %w(userid someone), %w(password no-secret) ]
|
132
132
|
expect { subject.expand(phrase, args) }.to raise_error(
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# File: comment_spec.rb
|
2
|
+
|
3
|
+
require_relative '../../spec_helper'
|
4
|
+
|
5
|
+
# Load the classes under test
|
6
|
+
require_relative '../../../lib/macros4cuke/templating/template-element'
|
7
|
+
|
8
|
+
module Macros4Cuke
|
9
|
+
|
10
|
+
module Templating # Open this namespace to get rid of module qualifier prefixes
|
11
|
+
|
12
|
+
|
13
|
+
describe Comment do
|
14
|
+
let(:sample_text) { 'Some text' }
|
15
|
+
|
16
|
+
subject { Comment.new(sample_text) }
|
17
|
+
|
18
|
+
context 'Creation and initialization:' do
|
19
|
+
it 'should be created with a text' do
|
20
|
+
expect { Comment.new(sample_text) }.not_to raise_error
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'should know its source text' do
|
24
|
+
expect(subject.source).to eq(sample_text)
|
25
|
+
end
|
26
|
+
|
27
|
+
end # context
|
28
|
+
|
29
|
+
context 'Provided services:' do
|
30
|
+
it 'should render tan empty text' do
|
31
|
+
context = double('fake_context')
|
32
|
+
locals = double('fake_locals')
|
33
|
+
|
34
|
+
expect(subject.render(context, locals)).to be_empty
|
35
|
+
end
|
36
|
+
|
37
|
+
end # context
|
38
|
+
|
39
|
+
end # describe
|
40
|
+
|
41
|
+
end # module
|
42
|
+
|
43
|
+
end # module
|
44
|
+
|
45
|
+
# End of file
|
@@ -23,7 +23,7 @@ SNIPPET
|
|
23
23
|
|
24
24
|
source
|
25
25
|
end
|
26
|
-
|
26
|
+
|
27
27
|
# Template containing two conditional sections
|
28
28
|
let(:sophisticated_template) do
|
29
29
|
source = <<-SNIPPET
|
@@ -39,9 +39,9 @@ SNIPPET
|
|
39
39
|
SNIPPET
|
40
40
|
|
41
41
|
source
|
42
|
-
end
|
43
|
-
|
44
|
-
|
42
|
+
end
|
43
|
+
|
44
|
+
|
45
45
|
|
46
46
|
# Rule for default instantiation
|
47
47
|
subject { Engine.new sample_template }
|
@@ -63,7 +63,7 @@ SNIPPET
|
|
63
63
|
sample_text = 'Mary has a little lamb'
|
64
64
|
result = Engine.parse(sample_text)
|
65
65
|
|
66
|
-
# Expectation: an array with one couple:
|
66
|
+
# Expectation: an array with one couple:
|
67
67
|
# [:static, the source text]
|
68
68
|
expect(result).to have(1).items
|
69
69
|
expect(result[0]).to eq([:static, sample_text])
|
@@ -73,7 +73,7 @@ SNIPPET
|
|
73
73
|
sample_text = '<some_tag>'
|
74
74
|
result = Engine.parse(sample_text)
|
75
75
|
|
76
|
-
# Expectation: an array with one couple:
|
76
|
+
# Expectation: an array with one couple:
|
77
77
|
# [:static, the source text]
|
78
78
|
expect(result).to have(1).items
|
79
79
|
expect(result[0]).to eq([:dynamic, strip_chevrons(sample_text)])
|
@@ -83,7 +83,7 @@ SNIPPET
|
|
83
83
|
sample_text = '<some_tag>some text'
|
84
84
|
result = Engine.parse(sample_text)
|
85
85
|
|
86
|
-
# Expectation: an array with two couples:
|
86
|
+
# Expectation: an array with two couples:
|
87
87
|
# [dynamic, 'some_tag'][:static, some text]
|
88
88
|
expect(result).to have(2).items
|
89
89
|
expect(result[0]).to eq([:dynamic, 'some_tag'])
|
@@ -94,7 +94,7 @@ SNIPPET
|
|
94
94
|
sample_text = 'some text<some_tag>'
|
95
95
|
result = Engine.parse(sample_text)
|
96
96
|
|
97
|
-
# Expectation: an array with two couples:
|
97
|
+
# Expectation: an array with two couples:
|
98
98
|
# [:static, some text] [dynamic, 'some_tag']
|
99
99
|
expect(result).to have(2).items
|
100
100
|
expect(result[0]).to eq([:static, 'some text'])
|
@@ -196,7 +196,7 @@ SNIPPET
|
|
196
196
|
instance = Engine.new ''
|
197
197
|
expect(instance.source).to be_empty
|
198
198
|
end
|
199
|
-
|
199
|
+
|
200
200
|
it 'should accept conditional section' do
|
201
201
|
expect { Engine.new sophisticated_template }.not_to raise_error
|
202
202
|
instance = Engine.new sophisticated_template
|
@@ -220,7 +220,7 @@ SNIPPET
|
|
220
220
|
expect { Engine.new text_w_empty_arg }.to raise_error(
|
221
221
|
Macros4Cuke::InvalidCharError, msg)
|
222
222
|
end
|
223
|
-
|
223
|
+
|
224
224
|
it 'should complain when a section has no closing tag' do
|
225
225
|
# Removing an end of section tag...
|
226
226
|
text_w_open_section = sophisticated_template.sub(/<\/address>/, '')
|
@@ -229,7 +229,7 @@ SNIPPET
|
|
229
229
|
expect { Engine.new text_w_open_section }.to raise_error(
|
230
230
|
StandardError, error_message)
|
231
231
|
end
|
232
|
-
|
232
|
+
|
233
233
|
it 'should complain when a closing tag has no corresponding opening tag' do
|
234
234
|
# Replacing an end of section tag by another...
|
235
235
|
text_w_wrong_end = sophisticated_template.sub(/<\/address>/, '</foobar>')
|
@@ -238,22 +238,22 @@ SNIPPET
|
|
238
238
|
expect { Engine.new text_w_wrong_end }.to raise_error(
|
239
239
|
StandardError, msg)
|
240
240
|
end
|
241
|
-
|
241
|
+
|
242
242
|
it 'should complain when a closing tag is found without opening tag' do
|
243
243
|
# Replacing an end of section tag by another...
|
244
244
|
wrong_end = sophisticated_template.sub(/<\?birthdate>/, '</foobar>')
|
245
245
|
msg = 'End of section</foobar> found'\
|
246
246
|
' while no corresponding section is open.'
|
247
247
|
expect { Engine.new wrong_end }.to raise_error(StandardError, msg)
|
248
|
-
end
|
249
|
-
|
248
|
+
end
|
249
|
+
|
250
250
|
end # context
|
251
251
|
|
252
252
|
context 'Provided services:' do
|
253
253
|
|
254
254
|
it 'should know the variable(s) it contains' do
|
255
255
|
# Case using the sample template
|
256
|
-
expect(subject.variables).to be == %w
|
256
|
+
expect(subject.variables).to be == %w(userid password)
|
257
257
|
|
258
258
|
# Case of an empty source template text
|
259
259
|
instance = Engine.new ''
|
@@ -302,13 +302,13 @@ SNIPPET
|
|
302
302
|
instance = Engine.new ''
|
303
303
|
expect(instance.render(nil, {})).to be_empty
|
304
304
|
end
|
305
|
-
|
306
|
-
|
305
|
+
|
306
|
+
|
307
307
|
it 'should render conditional sections' do
|
308
308
|
instance = Engine.new(sophisticated_template)
|
309
|
-
|
310
|
-
locals = {
|
311
|
-
'firstname' => 'Anon',
|
309
|
+
|
310
|
+
locals = {
|
311
|
+
'firstname' => 'Anon',
|
312
312
|
'lastname' => 'Eemoos' ,
|
313
313
|
'birthdate' => '1976-04-21'
|
314
314
|
}
|
@@ -321,11 +321,11 @@ SNIPPET
|
|
321
321
|
SNIPPET
|
322
322
|
|
323
323
|
expect(rendered_text).to eq(expected)
|
324
|
-
|
324
|
+
|
325
325
|
# Redo with another context
|
326
326
|
locals['birthdate'] = nil
|
327
327
|
locals['address'] = '122, Mercer Street'
|
328
|
-
|
328
|
+
|
329
329
|
rendered_text = instance.render(Object.new, locals)
|
330
330
|
expected = <<-SNIPPET
|
331
331
|
When I fill in "firstname" with "Anon"
|
@@ -336,7 +336,7 @@ SNIPPET
|
|
336
336
|
|
337
337
|
expect(rendered_text).to eq(expected)
|
338
338
|
end
|
339
|
-
|
339
|
+
|
340
340
|
|
341
341
|
it 'should render multivalued actuals' do
|
342
342
|
locals = { 'userid' => %w(johndoe yeti) } # Silly case
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# File: eo-line_spec.rb
|
2
|
+
|
3
|
+
require_relative '../../spec_helper'
|
4
|
+
|
5
|
+
# Load the classes under test
|
6
|
+
require_relative '../../../lib/macros4cuke/templating/template-element'
|
7
|
+
|
8
|
+
module Macros4Cuke
|
9
|
+
|
10
|
+
module Templating # Open this namespace to get rid of module qualifier prefixes
|
11
|
+
|
12
|
+
|
13
|
+
describe EOLine do
|
14
|
+
subject { EOLine.new }
|
15
|
+
|
16
|
+
context 'Creation and initialization:' do
|
17
|
+
it 'should be created withoutargument' do
|
18
|
+
expect { EOLine.new }.not_to raise_error
|
19
|
+
end
|
20
|
+
|
21
|
+
end # context
|
22
|
+
|
23
|
+
context 'Provided services:' do
|
24
|
+
it 'should render a new line' do
|
25
|
+
context = double('fake_context')
|
26
|
+
locals = double('fake_locals')
|
27
|
+
|
28
|
+
expect(subject.render(context, locals)).to eq("\n")
|
29
|
+
end
|
30
|
+
|
31
|
+
end # context
|
32
|
+
|
33
|
+
end # describe
|
34
|
+
|
35
|
+
end # module
|
36
|
+
|
37
|
+
end # module
|
38
|
+
|
39
|
+
# End of file
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# File: placeholder_spec.rb
|
2
|
+
|
3
|
+
require_relative '../../spec_helper'
|
4
|
+
|
5
|
+
# Load the classes under test
|
6
|
+
require_relative '../../../lib/macros4cuke/templating/template-element'
|
7
|
+
|
8
|
+
module Macros4Cuke
|
9
|
+
|
10
|
+
module Templating # Open this namespace to get rid of module qualifier prefixes
|
11
|
+
|
12
|
+
|
13
|
+
describe StaticText do
|
14
|
+
let(:sample_text) { 'Some text' }
|
15
|
+
|
16
|
+
subject { StaticText.new(sample_text) }
|
17
|
+
|
18
|
+
context 'Creation and initialization:' do
|
19
|
+
it 'should be created with a text' do
|
20
|
+
expect { StaticText.new(sample_text) }.not_to raise_error
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'should know its source text' do
|
24
|
+
expect(subject.source).to eq(sample_text)
|
25
|
+
end
|
26
|
+
|
27
|
+
end # context
|
28
|
+
|
29
|
+
context 'Provided services:' do
|
30
|
+
it 'should render the source text as is' do
|
31
|
+
context = double('fake_context')
|
32
|
+
locals = double('fake_locals')
|
33
|
+
|
34
|
+
expect(subject.render(context, locals)).to eq(sample_text)
|
35
|
+
end
|
36
|
+
|
37
|
+
end # context
|
38
|
+
|
39
|
+
end # describe
|
40
|
+
|
41
|
+
end # module
|
42
|
+
|
43
|
+
end # module
|
44
|
+
|
45
|
+
# End of file
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# File: sample-collection.rb
|
1
|
+
# File: use-sample-collection.rb
|
2
2
|
# Purpose: mix-in module with helper methods to build a sample
|
3
3
|
# collection of macro-steps.
|
4
4
|
|
@@ -7,7 +7,7 @@ require_relative '../../lib/macros4cuke/macro-collection'
|
|
7
7
|
module Macros4Cuke # Open this namespace to avoid module qualifier prefixes
|
8
8
|
|
9
9
|
# Mix-in module.
|
10
|
-
# Defines a set of methods that builds for testing purposes
|
10
|
+
# Defines a set of methods that builds for testing purposes
|
11
11
|
# a sample collection of macro-steps.
|
12
12
|
module UseSampleCollection
|
13
13
|
# Phrase of first macro-step in the collection.
|
@@ -28,7 +28,7 @@ SNIPPET
|
|
28
28
|
|
29
29
|
# Phrase of second macro-step in the collection.
|
30
30
|
SamplePhrase2 = 'fill in the form with'
|
31
|
-
|
31
|
+
|
32
32
|
# Sub-steps of the second macro-step in the collection.
|
33
33
|
SampleSubsteps2 = begin
|
34
34
|
snippet = <<-SNIPPET
|
@@ -55,17 +55,17 @@ SNIPPET
|
|
55
55
|
snippet
|
56
56
|
end
|
57
57
|
|
58
|
-
# Helper. Stuff the macro collection with sample steps.
|
58
|
+
# Helper. Stuff the macro collection with sample steps.
|
59
59
|
def fill_collection()
|
60
60
|
coll = MacroCollection.instance
|
61
|
-
|
61
|
+
|
62
62
|
coll.clear # Start from scratch: zap the existing macro-steps
|
63
|
-
|
63
|
+
|
64
64
|
coll.add_macro(SamplePhrase1, SampleSubsteps1, true)
|
65
65
|
coll.add_macro(SamplePhrase2, SampleSubsteps2, true)
|
66
66
|
end
|
67
67
|
|
68
|
-
|
68
|
+
|
69
69
|
# Helper. For convenience, provide a shorter name
|
70
70
|
# for the macro-step collection.
|
71
71
|
def macro_coll()
|
data/spec/spec_helper.rb
CHANGED
@@ -4,15 +4,15 @@
|
|
4
4
|
require 'simplecov'
|
5
5
|
|
6
6
|
|
7
|
-
require 'rspec'
|
8
|
-
require 'pp'
|
7
|
+
require 'rspec' # Use the RSpec framework
|
8
|
+
require 'pp' # Use pretty-print for debugging purposes
|
9
9
|
|
10
10
|
RSpec.configure do |config|
|
11
11
|
config.expect_with :rspec do |c|
|
12
12
|
# Disable the `should` syntax...
|
13
13
|
c.syntax = :expect
|
14
14
|
end
|
15
|
-
|
15
|
+
|
16
16
|
# Display stack trace in case of failure
|
17
17
|
config.full_backtrace = true
|
18
18
|
end
|