macros4cuke 0.3.14 → 0.3.15

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.
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