macros4cuke 0.3.09 → 0.3.10

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/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ ## 0.3.10 / 2013-05-14
2
+ * [CHANGE] File `README.md`: Expanded section on conditional section.
3
+ * [CHANGE] Method `Templating::Engine::parse` slightly refactored in order to decrease its complexity.
4
+
1
5
  ## 0.3.09 / 2013-05-13
2
6
  * [CHANGE] File `.travis.yml`: Added jruby as a target Ruby
3
7
 
data/README.md CHANGED
@@ -338,7 +338,32 @@ When invoked like this:
338
338
  |country|Wonderland|
339
339
  ```
340
340
 
341
- the substep concerning the email address won't be executed since the email argument isn't used at invokation.
341
+ the following substep sequence is executed:
342
+ ```cucumber
343
+ When I fill in "first_name" with "Alice"
344
+ And I fill in "last_name" with "Inn"
345
+ And I fill in "street_address" with "11, No Street"
346
+ And I fill in "zip" with ""
347
+ And I fill in "city" with "Nowhere-City"
348
+ And I click "Save"
349
+ ```
350
+
351
+ A few remarks concerning the executed sequence:
352
+ 1. Every macro argument (say, firstname) that takes a value (say, "Alice"), is replaced
353
+ that by that value in the substeps.
354
+ 2. Every macro argument (say, zip) that doesn't have a corresponding row in the data table,
355
+ is replaced by an empty text (look at the substep for the zip code entry).
356
+ 3. The substep with the email entry doesn't appear at all. This can be explained by the conditional
357
+ section <?email>...</email> that prevents the enclosed substep(s) to be generated in absence of a value for
358
+ the email macro argument.
359
+
360
+
361
+ A typical use case for conditional sections is to prevent the execution of one or more steps in
362
+ absence of a given data item. This simulates, for instance, the behaviour of a user that skips
363
+ one or more widgets in a page/screen. From a user interface testing viewpoint, entering an empty
364
+ text in an entry field may be noticeably different than skipping that same entry field.
365
+ Think of specific UI-events that can trigger some special system response.
366
+
342
367
 
343
368
 
344
369
 
@@ -3,7 +3,7 @@
3
3
 
4
4
  module Macros4Cuke # Module used as a namespace
5
5
  # The version number of the gem.
6
- Version = '0.3.09'
6
+ Version = '0.3.10'
7
7
 
8
8
  # Brief description of the gem.
9
9
  Description = "Macros for Cucumber"
@@ -288,35 +288,40 @@ public
288
288
 
289
289
  # ... or scan plain text at current position
290
290
  text_literal = scanner.scan(/(?:[^\\<>]|\\.)+/)
291
- result << [:static, text_literal] unless text_literal.nil?
292
-
293
- if tag_literal.nil? && text_literal.nil?
294
- # Unsuccessful scanning: we have improperly balanced chevrons.
295
- # We will analyze the opening and closing chevrons...
296
- no_escaped = aTextLine.gsub(/\\[<>]/, "--") # First: replace escaped chevron(s)
297
- unbalance = 0 # = count of < - count of > (can only be 0 or -temporarily- 1)
298
-
299
- no_escaped.scan(/(.)/) do |match|
300
- case match[0]
301
- when '<'
302
- unbalance += 1
303
- when '>'
304
- unbalance -= 1
305
- end
306
-
307
- raise StandardError, "Nested opening chevron '<'." if unbalance > 1
308
- raise StandardError, "Missing opening chevron '<'." if unbalance < 0
309
- end
310
-
311
- raise StandardError, "Missing closing chevron '>'." if unbalance == 1
312
- raise StandardError, "Cannot parse:\n'#{aTextLine}'"
313
- end
291
+ result << [:static, text_literal] unless text_literal.nil?
292
+ identify_parse_error(aTextLine) if tag_literal.nil? && text_literal.nil?
314
293
  end
315
294
 
316
295
  return result
317
296
  end
318
297
 
319
298
  private
299
+ # Called when the given text line could not be parsed.
300
+ # Raises an exception with the syntax issue identified.
301
+ # @param aTextLine [String] A text line from the template.
302
+ def self.identify_parse_error(aTextLine)
303
+ # Unsuccessful scanning: we typically have improperly balanced chevrons.
304
+ # We will analyze the opening and closing chevrons...
305
+ no_escaped = aTextLine.gsub(/\\[<>]/, "--") # First: replace escaped chevron(s)
306
+ unbalance = 0 # This variable equals: count of < - count of > (can only be 0 or -temporarily- 1)
307
+
308
+ no_escaped.scan(/(.)/) do |match|
309
+ case match[0]
310
+ when '<'
311
+ unbalance += 1
312
+ when '>'
313
+ unbalance -= 1
314
+ end
315
+
316
+ raise StandardError, "Nested opening chevron '<'." if unbalance > 1
317
+ raise StandardError, "Missing opening chevron '<'." if unbalance < 0
318
+ end
319
+
320
+ raise StandardError, "Missing closing chevron '>'." if unbalance == 1
321
+ raise StandardError, "Cannot parse:\n'#{aTextLine}'"
322
+ end
323
+
324
+
320
325
  # Create the internal representation of the given template.
321
326
  def compile(aSourceTemplate)
322
327
  # Split the input text into lines.
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.09
4
+ version: 0.3.10
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-14 00:00:00.000000000 Z
12
+ date: 2013-05-15 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: cucumber
@@ -75,7 +75,7 @@ dependencies:
75
75
  - - ! '>='
76
76
  - !ruby/object:Gem::Version
77
77
  version: 0.5.0
78
- description: Create your own macros in your Cucumber scenarios.
78
+ description: Create your own macro-steps directly in Cucumber scenarios.
79
79
  email:
80
80
  executables: []
81
81
  extensions: []