macros4cuke 0.3.14 → 0.3.15

Sign up to get free protection for your applications and to get access to all the features.
data/.rubocop.yml CHANGED
@@ -1,3 +1,4 @@
1
+ # This is disabled because some demos use UTF-8
1
2
  AsciiComments:
2
3
  Enabled: false
3
4
 
@@ -9,7 +10,13 @@ DefWithParentheses:
9
10
 
10
11
  EmptyLines:
11
12
  Enabled: false
13
+
14
+ # Avoid methods longer than 40 lines of code
15
+ MethodLength:
16
+ Max: 40
12
17
 
18
+ SpaceInsideBrackets:
19
+ Enabled: false
13
20
 
14
21
  StringLiterals:
15
22
  Enabled: false
data/CHANGELOG.md CHANGED
@@ -1,27 +1,31 @@
1
- ## 0.3.14 / 2013-05-14
2
- * [FIX] lib/ folder in secondary local repository was messed up. Gem was OK.
1
+ ## 0.3.15 / 2013-05-20
2
+ * [FIX] File `.CHANGELOG.md` Date entries weren't incremented.
3
+ * [CHANGE] File `.rubocop.yml`: Added more configuration entries.
4
+ * [CHANGE] Spec files updated to better please Rubocop.
3
5
 
6
+ ## 0.3.14 / 2013-05-18
7
+ * [FIX] lib/ folder in secondary local repository was messed up. Gem was OK.
4
8
 
5
- ## 0.3.13 / 2013-05-14
9
+ ## 0.3.13 / 2013-05-18
6
10
  * [NEW] File `.rubocop.yml` Added.
7
11
  * [CHANGE] Many source files changed to please Rubocop.
8
12
 
9
- ## 0.3.12 / 2013-05-14
13
+ ## 0.3.12 / 2013-05-17
10
14
  * [NEW] File `.ruby-gemset` Added (for RVM users).
11
15
  * [NEW] File `.ruby-version` Added (for RVM users).
12
16
 
13
- ## 0.3.11 / 2013-05-14
17
+ ## 0.3.11 / 2013-05-16
14
18
  * [CHANGE] File `README.md`: Minor reformating.
15
19
  * [CHANGE] File `basic.feature` (in examples/): Added one more macro-step example.
16
20
 
17
- ## 0.3.10 / 2013-05-14
21
+ ## 0.3.10 / 2013-05-15
18
22
  * [CHANGE] File `README.md`: Expanded section on conditional section.
19
23
  * [CHANGE] Method `Templating::Engine::parse` slightly refactored in order to decrease its complexity.
20
24
 
21
- ## 0.3.09 / 2013-05-13
25
+ ## 0.3.09 / 2013-05-14
22
26
  * [CHANGE] File `.travis.yml`: Added jruby as a target Ruby
23
27
 
24
- ## 0.3.08 / 2013-05-12
28
+ ## 0.3.08 / 2013-05-13
25
29
  * [CHANGE] File `README.md`: Added Gem Version badge
26
30
 
27
31
  ## 0.3.07 / 2013-05-12
@@ -4,7 +4,7 @@
4
4
 
5
5
  module Macros4Cuke # Module used as a namespace
6
6
  # The version number of the gem.
7
- Version = '0.3.14'
7
+ Version = '0.3.15'
8
8
 
9
9
  # Brief description of the gem.
10
10
  Description = "Macros for Cucumber"
@@ -155,7 +155,7 @@ public
155
155
  # @return [String] The text value assigned to the placeholder.
156
156
  # Returns an empty string when no value is assigned to the placeholder.
157
157
  def render(aContextObject, theLocals)
158
- raise NotImplementedError, "Method Section::#{__method__} must be implemented in subclass(es)."
158
+ raise NotImplementedError, "Method Section.#{__method__} must be implemented in subclass."
159
159
  end
160
160
 
161
161
  end # class
@@ -2,9 +2,11 @@
2
2
  # File: macro-collection_spec.rb
3
3
 
4
4
  require_relative '../spec_helper'
5
- require_relative '../../lib/macros4cuke/macro-collection' # Load the class under test
6
5
 
7
- module Macros4Cuke # Open this namespace to get rid of module qualifier prefixes
6
+ # Load the class under test
7
+ require_relative '../../lib/macros4cuke/macro-collection'
8
+
9
+ module Macros4Cuke # Open this namespace to avoid module qualifier prefixes
8
10
 
9
11
  describe MacroCollection do
10
12
 
@@ -32,12 +34,14 @@ SNIPPET
32
34
 
33
35
  it "should accept the addition of a new macro-step" do
34
36
  phrase = "[enter my credentials]"
35
- lambda { singleton.add_macro(phrase, sample_substeps, true)}.should_not raise_error
37
+ args = [phrase, sample_substeps, true]
38
+ ->() { singleton.add_macro(*args)}.should_not raise_error
36
39
  singleton.should have(1).macro_steps
37
40
 
38
41
  # Error case: inserting another macro with same phrase.
39
- error_message = "A macro-step with phrase '[enter my credentials]' already exist."
40
- lambda { singleton.add_macro(phrase, sample_substeps, true) }.should raise_error(Macros4Cuke::DuplicateMacroError, error_message)
42
+ msg = "A macro-step with phrase '[enter my credentials]' already exist."
43
+ ->(){ singleton.add_macro(*args) }.should
44
+ raise_error(Macros4Cuke::DuplicateMacroError, msg)
41
45
  end
42
46
  end
43
47
 
@@ -1,7 +1,10 @@
1
+ # encoding: utf-8
1
2
  # File: macro-step_spec.rb
2
3
 
3
4
  require_relative '../spec_helper'
4
- require_relative '../../lib/macros4cuke/macro-step-support' # The class under test
5
+
6
+ # The class under test
7
+ require_relative '../../lib/macros4cuke/macro-step-support'
5
8
 
6
9
 
7
10
  module Macros4Cuke # Open the module to avoid lengthy qualified names
@@ -41,29 +44,33 @@ SNIPPET
41
44
 
42
45
  context "Defining macro(s):" do
43
46
  it "should add valid new macro" do
44
- lambda { world.add_macro(m1_phrase, m1_substeps, true) }.should_not raise_error
47
+ ->(){ world.add_macro(m1_phrase, m1_substeps, true) }.should_not raise_error
45
48
  end
46
49
 
47
50
  it "should complain when entering the same macro again" do
48
51
  # Error case: trying to register another macro with same key/phrase.
49
- error_message = "A macro-step with phrase 'enter the credentials' already exist."
50
- lambda { world.add_macro(m1_phrase, m1_substeps, true) }.should raise_error(Macros4Cuke::DuplicateMacroError, error_message)
52
+ msg = "A macro-step with phrase 'enter the credentials' already exist."
53
+ -> { world.add_macro(m1_phrase, m1_substeps, true) }.should
54
+ raise_error(Macros4Cuke::DuplicateMacroError, msg)
51
55
  end
52
56
 
53
57
  it "should complain macro uses no table and phrase is parameterless" do
54
- # Error case: substeps have arguments, but the macro has no mechanism to pass the needed data.
55
- error_message = "The sub-step argument 'userid' does not appear in the phrase."
56
- lambda { world.add_macro("fill in the credentials", m1_substeps, false) }.should raise_error(Macros4Cuke::UnreachableSubstepArgument, error_message)
58
+ # Error case: substeps have arguments,
59
+ # but the macro has no mechanism to pass the needed data.
60
+ phrase = "fill in the credentials"
61
+ msg = "The sub-step argument 'userid' does not appear in the phrase."
62
+ ->(){ world.add_macro(phrase, m1_substeps, false) }.should
63
+ raise_error(Macros4Cuke::UnreachableSubstepArgument, msg)
57
64
  end
58
65
  end # context
59
66
 
60
67
  context "Invoking macro(s):" do
61
68
 
62
69
  it "should complain when invoking an unknown macro-step" do
63
- phrase_unknown = "dream of a perfect world"
64
-
65
- error_message = "Unknown macro-step with phrase: 'dream of a perfect world'."
66
- lambda { world.invoke_macro(phrase_unknown) }.should raise_error( Macros4Cuke::UnknownMacroError, error_message)
70
+ phrase_unknown = "dream of a perfect world"
71
+ msg = "Unknown macro-step with phrase: 'dream of a perfect world'."
72
+ ->(){ world.invoke_macro(phrase_unknown) }.should
73
+ raise_error(Macros4Cuke::UnknownMacroError, msg)
67
74
  end
68
75
 
69
76
  end # context
@@ -71,10 +78,10 @@ SNIPPET
71
78
  context "Clearing macro(s):" do
72
79
 
73
80
  it "should clear all macros" do
74
- lambda { world.clear_macros() }.should_not raise_error
81
+ ->(){ world.clear_macros() }.should_not raise_error
75
82
 
76
83
  # Control the post-condition
77
- MacroCollection::instance.macro_steps.should be_empty
84
+ MacroCollection.instance.macro_steps.should be_empty
78
85
  end
79
86
 
80
87
  end # context
@@ -1,3 +1,4 @@
1
+ # encoding: utf-8
1
2
  # File: macro-step_spec.rb
2
3
 
3
4
 
@@ -29,20 +30,22 @@ end
29
30
 
30
31
  context "Creation & initialization" do
31
32
  it "should be created with a phrase, substeps and a table use indicator" do
32
- lambda { MacroStep.new(sample_phrase, sample_template, true) }.should_not raise_error
33
+ ->(){ MacroStep.new(sample_phrase, sample_template, true) }.should_not raise_error
33
34
  end
34
35
 
35
36
 
36
37
  it "should complain when a sub-step argument can never be assigned a value via the phrase" do
37
- error_message = "The sub-step argument 'password' does not appear in the phrase."
38
- lambda { MacroStep.new(sample_phrase, sample_template, false) }.should raise_error(Macros4Cuke::UnreachableSubstepArgument, error_message)
38
+ msg = "The sub-step argument 'password' does not appear in the phrase."
39
+ ->(){ MacroStep.new(sample_phrase, sample_template, false) }.should
40
+ raise_error(Macros4Cuke::UnreachableSubstepArgument, msg)
39
41
  end
40
42
 
41
43
 
42
- it "should complain when an argument from the phrase never occurs in a substep" do
43
- a_phrase = "enter my credentials as <foobar>"
44
- error_message = "The phrase argument 'foobar' does not appear in a sub-step."
45
- lambda { MacroStep.new(a_phrase, sample_template, true) }.should raise_error(Macros4Cuke::UselessPhraseArgument, error_message)
44
+ it "should complain when an argument in phrase never occurs in substeps" do
45
+ phrase = "enter my credentials as <foobar>"
46
+ msg = "The phrase argument 'foobar' does not appear in a sub-step."
47
+ ->(){ MacroStep.new(phrase, sample_template, true) }.should
48
+ raise_error(Macros4Cuke::UselessPhraseArgument, msg)
46
49
  end
47
50
 
48
51
 
@@ -63,10 +66,10 @@ end
63
66
 
64
67
  context "Provided services" do
65
68
 
66
- let(:phrase_instance) {%Q|enter my credentials as "nobody"|}
69
+ let(:phrase_instance) { %Q|enter my credentials as "nobody"| }
67
70
 
68
71
  it "should render the substeps" do
69
- text = subject.expand(phrase_instance, [ ['password', 'no-secret'] ])
72
+ text = subject.expand(phrase_instance, [ %w(password no-secret) ])
70
73
  expectation = <<-SNIPPET
71
74
  Given I landed in the homepage
72
75
  When I click "Sign in"
@@ -94,7 +97,7 @@ SNIPPET
94
97
 
95
98
  it "should un-escape the double-quotes for phrase arguments" do
96
99
  specific_phrase = %q|enter my credentials as "quotable\""|
97
- text = subject.expand(specific_phrase, [ ['password', 'no-secret'] ])
100
+ text = subject.expand(specific_phrase, [ %w(password no-secret) ])
98
101
  expectation = <<-SNIPPET
99
102
  Given I landed in the homepage
100
103
  When I click "Sign in"
@@ -110,12 +113,13 @@ SNIPPET
110
113
  it "should complain when an unknown variable is used" do
111
114
  # Error case: there is no macro argument called <unknown>
112
115
  error_message = "Unknown macro-step argument 'unknown'."
113
- lambda { subject.expand(phrase_instance, [ ['unknown', 'anything'] ]) }.should raise_error(UnknownArgumentError, error_message)
116
+ args = [ %w(unknown anything) ]
117
+ ->(){ subject.expand(phrase_instance, args) }.should
118
+ raise_error(UnknownArgumentError, error_message)
114
119
  end
115
120
 
116
121
  end # context
117
122
 
118
-
119
123
  end # describe
120
124
 
121
125
  end # module
@@ -2,7 +2,9 @@
2
2
  # File: engine_spec.rb
3
3
 
4
4
  require_relative '../../spec_helper'
5
- require_relative '../../../lib/macros4cuke/templating/engine' # Load the class under test
5
+
6
+ # Load the class under test
7
+ require_relative '../../../lib/macros4cuke/templating/engine'
6
8
 
7
9
 
8
10
  module Macros4Cuke
@@ -20,6 +22,8 @@ describe Engine do
20
22
  And I fill in "Password" with "<password>"
21
23
  And I click "Sign in"
22
24
  SNIPPET
25
+
26
+ source
23
27
  end
24
28
 
25
29
  # Template containing two conditional sections
@@ -34,6 +38,8 @@ SNIPPET
34
38
  <?dummy></dummy>
35
39
  And I click "Register"
36
40
  SNIPPET
41
+
42
+ source
37
43
  end
38
44
 
39
45
 
@@ -51,32 +57,35 @@ SNIPPET
51
57
 
52
58
  it "should parse an empty text line" do
53
59
  # Expectation: result should be an empty array.
54
- Engine::parse('').should be_empty
60
+ Engine.parse('').should be_empty
55
61
  end
56
62
 
57
63
  it "should parse a text line without tag" do
58
64
  sample_text = 'Mary has a little lamb'
59
- result = Engine::parse(sample_text)
65
+ result = Engine.parse(sample_text)
60
66
 
61
- # Expectation: an array with one couple: [:static, the source text]
67
+ # Expectation: an array with one couple:
68
+ # [:static, the source text]
62
69
  result.should have(1).items
63
70
  result[0].should == [:static, sample_text]
64
71
  end
65
72
 
66
73
  it "should parse a text line that consists of just a tag" do
67
74
  sample_text = '<some_tag>'
68
- result = Engine::parse(sample_text)
75
+ result = Engine.parse(sample_text)
69
76
 
70
- # Expectation: an array with one couple: [:static, the source text]
77
+ # Expectation: an array with one couple:
78
+ # [:static, the source text]
71
79
  result.should have(1).items
72
80
  result[0].should == [:dynamic, strip_chevrons(sample_text)]
73
81
  end
74
82
 
75
83
  it "should parse a text line with a tag at the start" do
76
84
  sample_text = '<some_tag>some text'
77
- result = Engine::parse(sample_text)
85
+ result = Engine.parse(sample_text)
78
86
 
79
- # Expectation: an array with two couples: [dynamic, 'some_tag'][:static, some text]
87
+ # Expectation: an array with two couples:
88
+ # [dynamic, 'some_tag'][:static, some text]
80
89
  result.should have(2).items
81
90
  result[0].should == [:dynamic, 'some_tag']
82
91
  result[1].should == [:static, 'some text']
@@ -84,9 +93,10 @@ SNIPPET
84
93
 
85
94
  it "should parse a text line with a tag at the end" do
86
95
  sample_text = 'some text<some_tag>'
87
- result = Engine::parse(sample_text)
96
+ result = Engine.parse(sample_text)
88
97
 
89
- # Expectation: an array with two couples: [:static, some text] [dynamic, 'some_tag']
98
+ # Expectation: an array with two couples:
99
+ # [:static, some text] [dynamic, 'some_tag']
90
100
  result.should have(2).items
91
101
  result[0].should == [:static, 'some text']
92
102
  result[1].should == [:dynamic, 'some_tag']
@@ -94,7 +104,7 @@ SNIPPET
94
104
 
95
105
  it "should parse a text line with a tag in the middle" do
96
106
  sample_text = 'begin <some_tag> end'
97
- result = Engine::parse(sample_text)
107
+ result = Engine.parse(sample_text)
98
108
 
99
109
  # Expectation: an array with three couples:
100
110
  result.should have(3).items
@@ -105,7 +115,7 @@ SNIPPET
105
115
 
106
116
  it "should parse a text line with two tags in the middle" do
107
117
  sample_text = 'begin <some_tag>middle<another_tag> end'
108
- result = Engine::parse(sample_text)
118
+ result = Engine.parse(sample_text)
109
119
 
110
120
  # Expectation: an array with items couples:
111
121
  result.should have(5).items
@@ -117,7 +127,7 @@ SNIPPET
117
127
 
118
128
  # Case: two consecutive tags
119
129
  sample_text = 'begin <some_tag><another_tag> end'
120
- result = Engine::parse(sample_text)
130
+ result = Engine.parse(sample_text)
121
131
 
122
132
  # Expectation: an array with four couples:
123
133
  result.should have(4).items
@@ -129,7 +139,7 @@ SNIPPET
129
139
 
130
140
  it "should parse a text line with escaped chevrons" do
131
141
  sample_text = 'Mary has a \<little\> lamb'
132
- result = Engine::parse(sample_text)
142
+ result = Engine.parse(sample_text)
133
143
 
134
144
  # Expectation: an array with one couple: [:static, the source text]
135
145
  result.should have(1).items
@@ -138,7 +148,7 @@ SNIPPET
138
148
 
139
149
  it "should parse a text line with escaped chevrons in a tag" do
140
150
  sample_text = 'begin <some_\<\\>weird\>_tag> end'
141
- result = Engine::parse(sample_text)
151
+ result = Engine.parse(sample_text)
142
152
 
143
153
  # Expectation: an array with three couples:
144
154
  result.should have(3).items
@@ -150,19 +160,22 @@ SNIPPET
150
160
  it "should complain if a tag misses an closing chevron" do
151
161
  sample_text = 'begin <some_tag\> end'
152
162
  error_message = "Missing closing chevron '>'."
153
- lambda { Engine::parse(sample_text) }.should raise_error(StandardError, error_message)
163
+ ->(){ Engine.parse(sample_text) }.should raise_error(
164
+ StandardError, error_message)
154
165
  end
155
166
 
156
167
  it "should complain if a text misses an opening chevron" do
157
168
  sample_text = 'begin <some_tag> > end'
158
169
  error_message = "Missing opening chevron '<'."
159
- lambda { Engine::parse(sample_text) }.should raise_error(StandardError, error_message)
170
+ ->(){ Engine.parse(sample_text) }.should raise_error(
171
+ StandardError, error_message)
160
172
  end
161
173
 
162
174
  it "should complain if a text has nested opening chevrons" do
163
175
  sample_text = 'begin <<some_tag> > end'
164
176
  error_message = "Nested opening chevron '<'."
165
- lambda { Engine::parse(sample_text) }.should raise_error(StandardError, error_message)
177
+ ->(){ Engine.parse(sample_text) }.should raise_error(
178
+ StandardError, error_message)
166
179
  end
167
180
 
168
181
  end # context
@@ -170,11 +183,11 @@ SNIPPET
170
183
  context "Creation and initialization" do
171
184
 
172
185
  it "should accept an empty template text" do
173
- lambda { Engine.new '' }.should_not raise_error
186
+ ->(){ Engine.new '' }.should_not raise_error
174
187
  end
175
188
 
176
189
  it "should be created with a template text" do
177
- lambda { Engine.new sample_template }.should_not raise_error
190
+ ->(){ Engine.new sample_template }.should_not raise_error
178
191
  end
179
192
 
180
193
  it "should know the source text" do
@@ -186,20 +199,26 @@ SNIPPET
186
199
  end
187
200
 
188
201
  it "should accept conditional section" do
189
- lambda { Engine.new sophisticated_template }.should_not raise_error
202
+ ->(){ Engine.new sophisticated_template }.should_not raise_error
190
203
  instance = Engine.new sophisticated_template
204
+ elements = instance.instance_variable_get(:@representation)
205
+ sections = elements.select { |e| e.is_a?(Section) }
206
+ names = sections.map { |e| e.to_s }
207
+ names.should == %w(<?address> <?birthdate> <?dummy>)
191
208
  end
192
209
 
193
210
  it "should complain when a placeholder is empty or blank" do
194
211
  text_w_empty_arg = sample_template.sub(/userid/, '')
195
- error_message = %Q|An empty or blank argument occurred in 'And I fill in "Username" with "<>"'.|
196
- lambda { Engine.new text_w_empty_arg }.should raise_error(Macros4Cuke::EmptyArgumentError, error_message)
212
+ msg = %q(An empty or blank argument occurred in 'And I fill in "Username" with "<>"'.)
213
+ ->(){ Engine.new text_w_empty_arg }.should
214
+ raise_error(Macros4Cuke::EmptyArgumentError, msg)
197
215
  end
198
216
 
199
217
  it "should complain when a placeholder contains an invalid character" do
200
218
  text_w_empty_arg = sample_template.sub(/userid/, 'user%id')
201
- error_message = "The invalid sign '%' occurs in the argument/tag 'user%id'."
202
- lambda { Engine.new text_w_empty_arg }.should raise_error(Macros4Cuke::InvalidCharError, error_message)
219
+ msg = "The invalid sign '%' occurs in the argument/tag 'user%id'."
220
+ ->(){ Engine.new text_w_empty_arg }.should
221
+ raise_error(Macros4Cuke::InvalidCharError, msg)
203
222
  end
204
223
 
205
224
  it "should complain when a section has no closing tag" do
@@ -207,22 +226,25 @@ SNIPPET
207
226
  text_w_open_section = sophisticated_template.sub(/<\/address>/, '')
208
227
 
209
228
  error_message = "Unterminated section <?address>."
210
- lambda { Engine.new text_w_open_section}.should raise_error(StandardError, error_message)
229
+ ->(){ Engine.new text_w_open_section}.should
230
+ raise_error(StandardError, error_message)
211
231
  end
212
232
 
213
- it "should complain when a closing tag does not correspond to currently open section" do
233
+ it "should complain when a closing tag has no corresponding opening tag" do
214
234
  # Replacing an end of section tag by another...
215
235
  text_w_wrong_end = sophisticated_template.sub(/<\/address>/, '</foobar>')
216
236
 
217
- error_message = "End of section</foobar> doesn't match current section 'address'."
218
- lambda { Engine.new text_w_wrong_end}.should raise_error(StandardError, error_message)
237
+ msg = "End of section</foobar> doesn't match current section 'address'."
238
+ ->(){ Engine.new text_w_wrong_end }.should
239
+ raise_error(StandardError, msg)
219
240
  end
220
241
 
221
- it "should complain when a closing tag is found while no section is open" do
242
+ it "should complain when a closing tag is found without opening tag" do
222
243
  # Replacing an end of section tag by another...
223
- text_w_wrong_end = sophisticated_template.sub(/<\?birthdate>/, '</foobar>')
224
- error_message = "End of section</foobar> found while no corresponding section is open."
225
- lambda { Engine.new text_w_wrong_end}.should raise_error(StandardError, error_message)
244
+ wrong_end = sophisticated_template.sub(/<\?birthdate>/, '</foobar>')
245
+ msg = "End of section</foobar> found while no corresponding section is open."
246
+ ->(){ Engine.new wrong_end }.should
247
+ raise_error(StandardError, msg)
226
248
  end
227
249
 
228
250
  end # context
@@ -243,12 +265,12 @@ SNIPPET
243
265
  substeps = " # Comment 1 <miscellaneous>\n" + sample_template
244
266
  substeps += " #\n Comment 2 <haphazard>"
245
267
  instance = Engine.new substeps
246
- subject.variables == [:userid, :password]
268
+ instance.variables == [:userid, :password]
247
269
  end
248
270
 
249
271
 
250
272
  it "should render the text given the actuals" do
251
- locals = {'userid' => "johndoe"}
273
+ locals = { 'userid' => "johndoe" }
252
274
 
253
275
  rendered_text = subject.render(Object.new, locals)
254
276
  expected = <<-SNIPPET
@@ -262,13 +284,13 @@ SNIPPET
262
284
  rendered_text.should == expected
263
285
 
264
286
  # Case of an actual that's not a String
265
- locals = {'userid' => "johndoe", "password" => 12345678 }
287
+ locals = { 'userid' => "johndoe", "password" => 12345 }
266
288
  rendered_text = subject.render(Object.new, locals)
267
289
  expected = <<-SNIPPET
268
290
  Given I landed in the homepage
269
291
  # The credentials are entered here
270
292
  And I fill in "Username" with "johndoe"
271
- And I fill in "Password" with "12345678"
293
+ And I fill in "Password" with "12345"
272
294
  And I click "Sign in"
273
295
  SNIPPET
274
296
 
@@ -278,7 +300,7 @@ SNIPPET
278
300
  # Place actual value in context object
279
301
  Context = Struct.new(:userid, :password)
280
302
  context = Context.new("sherlock", "holmes")
281
- rendered_text = subject.render(context, {'userid' => 'susan'})
303
+ rendered_text = subject.render(context, { 'userid' => 'susan' })
282
304
  expected = <<-SNIPPET
283
305
  Given I landed in the homepage
284
306
  # The credentials are entered here
@@ -299,7 +321,7 @@ SNIPPET
299
321
  it "should render conditional sections" do
300
322
  instance = Engine.new(sophisticated_template)
301
323
 
302
- locals = {'firstname' => "Anon",
324
+ locals = { 'firstname' => "Anon",
303
325
  "lastname" => "Eemoos" ,
304
326
  "birthdate" => "1976-04-21"
305
327
  }
@@ -330,7 +352,7 @@ SNIPPET
330
352
 
331
353
 
332
354
  it "should render multivalued actuals" do
333
- locals = {'userid' => ["johndoe", "yeti"] } # Silly case
355
+ locals = { 'userid' => %w(johndoe yeti) } # Silly case
334
356
 
335
357
  rendered_text = subject.render(Object.new, locals)
336
358
  expected = <<-SNIPPET
@@ -2,7 +2,9 @@
2
2
  # File: section_spec.rb
3
3
 
4
4
  require_relative '../../spec_helper'
5
- require_relative '../../../lib/macros4cuke/templating/engine' # Load the classes under test
5
+
6
+ # Load the classes under test
7
+ require_relative '../../../lib/macros4cuke/templating/engine'
6
8
 
7
9
  module Macros4Cuke
8
10
 
@@ -16,44 +18,48 @@ describe Placeholder do
16
18
  context "Creation and initialization:" do
17
19
 
18
20
  it "should be created with a variable name" do
19
- lambda { Placeholder.new('foobar') }.should_not raise_error
21
+ ->() { Placeholder.new('foobar') }.should_not raise_error
20
22
  end
21
-
22
- it "should know the name of its variable" do
23
+
24
+ it "should know the name of its variable" do
23
25
  subject.name.should == 'foobar'
24
- end
26
+ end
25
27
 
26
- end # context
28
+ end # context
27
29
 
28
- context "Provided services:" do
29
- it "should render an empty string when no actual value is bound to the placeholder" do
30
+ context "Provided services:" do
31
+ it "should render an empty string when no actual value is absent" do
30
32
  # Case: context has no value associated to 'foobar'
31
33
  rendered_text = subject.render(Object.new, {})
32
34
  rendered_text.should be_empty
33
-
35
+
34
36
  # Case: locals Hash has a nil value associated to 'foobar'
35
- rendered_text = subject.render(Object.new, {'foobar' => nil})
37
+ rendered_text = subject.render(Object.new, { 'foobar' => nil })
36
38
  rendered_text.should be_empty
37
39
 
38
40
  # Case: context object has a nil value associated to 'foobar'
39
41
  context = Object.new
40
- def context.foobar; nil; end # Add singleton method foobar that returns nil
42
+ def context.foobar # Add singleton method foobar that returns nil
43
+ nil
44
+ end
41
45
  rendered_text = subject.render(context, {})
42
- rendered_text.should be_empty
46
+ rendered_text.should be_empty
43
47
  end
44
-
48
+
45
49
  it "should render the actual value bound to the placeholder" do
46
50
  # Case: locals Hash has a value associated to 'foobar'
47
- rendered_text = subject.render(Object.new, {'foobar' => 'hello'})
51
+ rendered_text = subject.render(Object.new, { 'foobar' => 'hello' })
48
52
  rendered_text.should == 'hello'
49
53
 
50
54
  # Case: context object has a value associated to 'foobar'
51
55
  context = Object.new
52
- def context.foobar; 'world'; end # Add singleton method foobar that returns 'world'
56
+ def context.foobar # Add singleton method foobar that returns 'world'
57
+ 'world'
58
+ end
53
59
  rendered_text = subject.render(context, {})
54
- rendered_text.should == 'world'
60
+ rendered_text.should == 'world'
55
61
  end
56
-
62
+
57
63
  end # context
58
64
 
59
65
  end # describe
@@ -2,7 +2,9 @@
2
2
  # File: section_spec.rb
3
3
 
4
4
  require_relative '../../spec_helper'
5
- require_relative '../../../lib/macros4cuke/templating/engine' # Load the classes under test
5
+
6
+ # Load the classes under test
7
+ require_relative '../../../lib/macros4cuke/templating/engine'
6
8
 
7
9
  module Macros4Cuke
8
10
 
@@ -11,33 +13,33 @@ module Templating # Open this namespace to get rid of module qualifier prefixes
11
13
  # Spec for abstract class Section.
12
14
  describe Section do
13
15
  # Default instantiation rule
14
- subject { Section.new('foobar') }
15
-
16
+ subject { Section.new('foobar') }
17
+
16
18
  # Return a list of possible child elements
17
19
  let(:sample_children) do
18
20
  [ StaticText.new("Hello "),
19
21
  Placeholder.new("user"),
20
22
  EOLine.new
21
23
  ]
22
- end
24
+ end
23
25
 
24
26
  context "Creation and initialization" do
25
-
27
+
26
28
  it "should be created with a variable name" do
27
- lambda { Section.new('foobar') }.should_not raise_error
29
+ ->() { Section.new('foobar') }.should_not raise_error
28
30
  end
29
-
30
- it "should know the name of its variable" do
31
+
32
+ it "should know the name of its variable" do
31
33
  subject.name.should == 'foobar'
32
34
  end
33
35
 
34
36
  it "should have no child at start" do
35
37
  subject.should have(0).children
36
- end
37
-
38
+ end
39
+
38
40
  end # context
39
-
40
- context "Provided services:" do
41
+
42
+ context "Provided services:" do
41
43
  it "should add child element(s)" do
42
44
  sample_children.each do |a_child|
43
45
  subject.add_child(a_child)
@@ -46,31 +48,30 @@ describe Section do
46
48
  # Control that the addition work as expected
47
49
  subject.children.should == sample_children
48
50
  end
49
-
51
+
50
52
  it "should know the name all child placeholders" do
51
53
  # Case: simple flat list of children
52
54
  sample_children.each { |a_child| subject.add_child(a_child) }
53
55
  subject.variables.should == [ 'user' ]
54
-
55
- # Case: at least one child is a group
56
+
57
+ # Case: at least one child is a group
56
58
  parent = Section.new('son')
57
- [
58
- subject,
59
+ [ subject,
59
60
  StaticText.new("Bye "),
60
61
  Placeholder.new("firstname"),
61
62
  EOLine.new
62
- ].each { |a_child| parent.add_child(a_child) }
63
+ ].each { |a_child| parent.add_child(a_child) }
63
64
 
64
- parent.variables.should == [ 'user', 'firstname']
65
-
65
+ parent.variables.should == %w(user firstname)
66
66
  end
67
-
68
-
67
+
68
+
69
69
  it "should expect that its subclasses render the children" do
70
- error_message = "Method Section::render must be implemented in subclass(es)."
71
- lambda {subject.send(:render, Object.new, {}) }.should raise_error(NotImplementedError, error_message)
70
+ error_message = "Method Section.render must be implemented in subclass."
71
+ ->(){ subject.send(:render, Object.new, {}) }.should raise_error(
72
+ NotImplementedError, error_message)
72
73
  end
73
-
74
+
74
75
  end # context
75
76
 
76
77
  end # describe
@@ -83,11 +84,11 @@ describe ConditionalSection do
83
84
  context "Creation and initialization:" do
84
85
 
85
86
  it "should be created with a variable name and a boolean" do
86
- lambda { ConditionalSection.new('foobar', false) }.should_not raise_error
87
- lambda { ConditionalSection.new('foobar', true) }.should_not raise_error
87
+ ->(){ ConditionalSection.new('foobar', false) }.should_not raise_error
88
+ ->(){ ConditionalSection.new('foobar', true) }.should_not raise_error
88
89
  end
89
90
 
90
- it "should know whether the rendition on existence of actual value or not" do
91
+ it "should know whether the rendition on existence of actual value" do
91
92
  [false, true].each do |existence|
92
93
  instance = ConditionalSection.new('foobar', existence)
93
94
  instance.existence.should == existence
@@ -107,7 +108,7 @@ describe ConditionalSection do
107
108
 
108
109
  # Default instantiation rule
109
110
  subject { ConditionalSection.new('foobar', true) }
110
-
111
+
111
112
  it "should know its original source text" do
112
113
  subject.to_s.should == '<?foobar>'
113
114
  end
@@ -117,17 +118,18 @@ describe ConditionalSection do
117
118
  sample_children.each { |a_child| subject.add_child(a_child) }
118
119
 
119
120
  # Case of an existing actual
120
- locals = {'user' => "joe", "foobar" => 'exists' }
121
+ locals = { 'user' => "joe", "foobar" => 'exists' }
121
122
  rendered_text = subject.render(Object.new, locals)
122
123
  expected_text = "Hello joe\n"
123
124
  rendered_text.should == expected_text
124
125
 
125
- # Case of a conditional section that should be rendering when value is non-existing.
126
+ # Case of a conditional section that should be
127
+ # rendering when value is non-existing.
126
128
  instance = ConditionalSection.new('foobar', false)
127
129
  sample_children.each { |a_child| instance.add_child(a_child) }
128
130
 
129
131
  # Case of a non-existing actual
130
- locals = {'user' => "joe" }
132
+ locals = { 'user' => "joe" }
131
133
  rendered_text = instance.render(Object.new, locals)
132
134
  rendered_text.should == expected_text
133
135
  end
@@ -137,16 +139,17 @@ describe ConditionalSection do
137
139
  sample_children.each { |a_child| subject.add_child(a_child) }
138
140
 
139
141
  # Case of a non-existing actual
140
- locals = {'user' => "joe"}
142
+ locals = { 'user' => "joe" }
141
143
  rendered_text = subject.render(Object.new, locals)
142
144
  rendered_text.should == ""
143
145
 
144
- # Case of a conditional section that should be rendering when value is non-existing.
146
+ # Case of a conditional section that should be
147
+ # rendering when value is non-existing.
145
148
  instance = ConditionalSection.new('foobar', false)
146
149
  sample_children.each { |a_child| instance.add_child(a_child) }
147
150
 
148
151
  # Case of a non-existing actual
149
- locals = {'user' => "joe", "foobar" => 'exists' }
152
+ locals = { 'user' => "joe", "foobar" => 'exists' }
150
153
  rendered_text = instance.render(Object.new, locals)
151
154
  rendered_text.should == ""
152
155
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: macros4cuke
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.14
4
+ version: 0.3.15
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-05-18 00:00:00.000000000 Z
12
+ date: 2013-05-20 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: cucumber